?

Log in

No account? Create an account
Принудительная диагностика - Valse oubliée [entries|archive|friends|userinfo]
aruslan

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]
[ delicious | aruslan's delicious ]

Links
[Links:| Tags Profile Friends FG1 PP gamedev XNA FF Entries Comments Memories ]

Принудительная диагностика [Dec. 20th, 2007|08:06 pm]
aruslan
[Tags|, , ]
[Current Mood |angryangry]

Иногда возникает брутальное желание запретить коммит кода, если в нём нет или мало ассертов.
С одной стороны - учить пользоваться вилкой глупо если код как пюре.
Но ведь становятся же люди веселее, когда берут образ веселого человека?..

Poll #1109174 Принудительная диагностика

Сколько ассертов принудительно требовать при коммите?

В любой функции - минимум один ассерт (кроме inline в h)
9(12.5%)
В любой функции с параметрами - минимум один ассерт на аргумент
13(18.1%)
На каждые 7 строк - один ассерт
10(13.9%)
На каждые 5 строк - один ассерт
1(1.4%)
Не требовать обязательного ассерта - не будут писать всё равно
7(9.7%)
Не требовать обязательного ассерта - всё равно не поможет
32(44.4%)
LinkReply

Comments:
Page 1 of 2
<<[1] [2] >>
From: shadone.blogspot.com
2007-12-20 05:19 pm (UTC)
не поможет. ассерты ведь тоже надо применять с умом (типа не на данные вводимые пользователем).
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-20 06:07 pm (UTC)
что не поможет я как раз боюсь, конечно :)
но исхожу из того, что конкретно
1) в консольной игре трудно ввести не то, и
2) на данные после тулзов типа сборщика ассетов вполне нужно ставить ассерты.
(Reply) (Parent) (Thread)
[User Picture]From: ddima
2007-12-20 05:33 pm (UTC)
Поставил ассерт на 7 строк, хотя если бы была возможность, выбрал бы следующий пункт голосования:
- assert на входе в функцию на проверку допустимого состояния экземпляра класса (если применимо)
- assert на входе в функцию на проверку аргументов (за исключением time critical самого низкого уровня)
- assert на выходе на адекватность результата и его соответствие новому состоянию моделя
- assert в процессе выполнения функции в узловых точках.
В среднем и получается порядка одного на 7 строк (это при условии того, что из этих 7 строк еще 2 - на комментарии).

P.S. assert на _возможный_ код возврата из функций (например, assert(file_stream != NULL) - недопустим, ессно.
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-20 06:08 pm (UTC)
вот я рад что 7 строк примерно получается!
с комментариями или без - неважно :)
(Reply) (Parent) (Thread)
[User Picture]From: rageous
2007-12-20 05:38 pm (UTC)
прикинул, сколько у меня - поставил один на семь, но _кода_, а не комментариев/пустых строк/строк с одной скобкой "{" или "}"
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-20 06:09 pm (UTC)
так и быть, пустые строки и {} не будем как строчки засчитывать.
а вот комментарии - будем.

если человек двадцать строк комментариев написал - пусть хоть три ассерта-то напишет к ним!
(Reply) (Parent) (Thread)
[User Picture]From: subdmitry
2007-12-20 05:53 pm (UTC)
На мой взгляд, достаточно первого пункта. Потом народ втянется и сам начнет писать ассерты там, где они нужны. Более жесткие правила же легко могут довести до маразма.

Вообще лично у меня получается так, что ассерты - это тоже часть программы и, в частности, требует времени на отладку (т.е. может содержать ошибки). :)
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-20 06:10 pm (UTC)
Ошибки в ассертах - это да.
Самое ужасное - это когда assert (который исчезает в релизе) пишут вместо verify (который не проверяется но работает в релизе).

В этом смысле хорош тот ассерт, который рандомно и по нескольку раз вычисляет выражение, я считаю! :))
(Reply) (Parent) (Thread)
From: shodan_ru
2007-12-20 06:31 pm (UTC)
Пидор все равно напишет пидорский ассерт.
Поэтому надо не ассерты требовать, а изживать пидарастию.

Как ее изживать, я не знаю.
Бывает, полгода всего код не ревьюишь, а там заново начинается!!!
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-21 12:54 am (UTC)
Факт.
Но мышцы лица устали молчать!
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: justy_tylor
2007-12-20 06:53 pm (UTC)
ассерты делятся на три вида:
1) я знаю, что в моём коде вероятна херня.
2) я знаю, что в коде пользователя моего апи вероятна херня.
3) я знаю, что в коде сторонней библиотечки вероятна херня.
первого следует не допускать, а второе и третье воспитываются культурой кодинга. принудительно - никак.
(Reply) (Thread)
From: neteraser
2007-12-20 09:08 pm (UTC)
не культурой, а педерастией с т.з. геймдева. что для MS - культура, то для геймдева не всегда.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: glebedev
2007-12-20 07:34 pm (UTC)
IMHO надо взвешенно подходить к вопросу - не в каждой функции нужен ассерт (например в пустой не нужен :) ), но и слишком много не нужно. Нужно там, где что-то может быть не так. Поэтому за что голосовать даже и не знаю.
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-21 12:59 am (UTC)
Как раз в пустой - нужен обязательно!
Например, assert(("WTF?!", 0)).

Вопрос не в культуре - вопрос в принудительном воспитании!
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: _winnie
2007-12-20 07:57 pm (UTC)
В репозитории где-то 178000 на строк *.cpp;*.hpp;*.h;*.c;*.py приходится 2131 образцов assert|DIE|LOG_ERROR|LOG_WARN|raise|throw.

Где вариант "В любой функции - минимум один ассерт (включая inline в h)"?
(Reply) (Thread)
[User Picture]From: _winnie
2007-12-20 08:02 pm (UTC)
Я кстати мысленно разделяю код на "модули", и проверяю то что на входе модуля, по всей цепочке вызовов не проверяю внутри модуля, за который ответсвеннен один мозг. Разве что в начале и в конце цепочки.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: rdesperado
2007-12-20 08:04 pm (UTC)
аминь, друк
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-21 01:00 am (UTC)
именно так!
(Reply) (Parent) (Thread)
From: neteraser
2007-12-20 09:06 pm (UTC)
#define assert (...) ... OS_Exit(0)

1. данные.
если отрубать педерастию на корню внизу, то наверху не надо ассертов ставить. бывает, что в самой игре не надо ставить. бывает что можно где-то.

2. простые глобальные концепты
если уже работают, то не бажат

3. сложные локальные алгоритмы
если сложно, то можно и ассерты, можно и на цифры.

зачем тут принудительные ассерты неясно. либо просится, либо просим нахуй.
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-21 01:00 am (UTC)
педерастия - она наверху обычно.
т.е. камеру в QNaN отправляют - и voila!
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
(Deleted comment)
From: acefsm
2007-12-20 11:58 pm (UTC)
у нас такие дела обычно решаются при помощи Code Review
например какая то команда сделала некий модуль
далее технический лидер дает указание (обычно в пятницу в конце дня) потратить час на code review всем остальным командам
в результате если код не удовлетворяет тому же Code Policy всю команду жестко имеют, в плоть до полного переписывания кода

в проекте 5 команд по 5-6 человек
тулза которой пользуемся http://www.atlassian.com/software/crucible/

(Reply) (Thread)
[User Picture]From: aruslan
2007-12-21 01:01 am (UTC)
Отличная тулза, проникся!
Не уверен насчет 2200 USD, впрочем, но выглядит очень симпатично.

Вы долго её юзаете?
Как ощущения? В плане недостатков, естественно.
(Reply) (Parent) (Thread) (Expand)
From: captain_tylor
2007-12-21 08:54 am (UTC)
Ввести предмодерацию коммитов)
(Reply) (Thread)
[User Picture]From: aruslan
2007-12-21 09:14 am (UTC)
Премодерация есть. Нет внутреннего посыла.
(Reply) (Parent) (Thread)
[User Picture]From: alll
2007-12-21 11:29 am (UTC)
Остаётся только решить, что делать с кадрами, коммитящими код со срабатывающими ассёртами и поющими "ну в релизе же работает, а в дебаге мы как-инбудь опосля поправим".
(Reply) (Thread)
From: neteraser
2007-12-21 02:18 pm (UTC)
С кадрами ничо не сделаешь, делай правильный ассерт. exit(0).
(Reply) (Parent) (Thread)
From: sleepy_drago
2007-12-21 11:44 am (UTC)
рыдал. Легаси + пятница + релиз со смертельными багами.
На TerminateProcess начал смеяццо ( наверное помогло что-то понять в жизни ).
best regards

ps Жгите! Вас давно не было слышно в жж.

(Reply) (Thread)
[User Picture]From: loyso_b
2007-12-24 09:56 am (UTC)
"Педерастия наверху" - это точно. Мышцы лица многие не так используют. :)

Обучать людей надо. И не только методами "пчелиных танцев" (через механическое подражание).
(Reply) (Thread)
Page 1 of 2
<<[1] [2] >>