aruslan: (Default)
[personal profile] aruslan
Иногда возникает брутальное желание запретить коммит кода, если в нём нет или мало ассертов.
С одной стороны - учить пользоваться вилкой глупо если код как пюре.
Но ведь становятся же люди веселее, когда берут образ веселого человека?..

[Poll #1109174]

Date: Dec. 20th, 2007 17:19 (UTC)
From: [identity profile] shadone.blogspot.com (from livejournal.com)
не поможет. ассерты ведь тоже надо применять с умом (типа не на данные вводимые пользователем).

Date: Dec. 20th, 2007 18:07 (UTC)
From: [identity profile] aruslan.livejournal.com
что не поможет я как раз боюсь, конечно :)
но исхожу из того, что конкретно
1) в консольной игре трудно ввести не то, и
2) на данные после тулзов типа сборщика ассетов вполне нужно ставить ассерты.

Date: Dec. 20th, 2007 17:33 (UTC)
From: [identity profile] ddima.livejournal.com
Поставил ассерт на 7 строк, хотя если бы была возможность, выбрал бы следующий пункт голосования:
- assert на входе в функцию на проверку допустимого состояния экземпляра класса (если применимо)
- assert на входе в функцию на проверку аргументов (за исключением time critical самого низкого уровня)
- assert на выходе на адекватность результата и его соответствие новому состоянию моделя
- assert в процессе выполнения функции в узловых точках.
В среднем и получается порядка одного на 7 строк (это при условии того, что из этих 7 строк еще 2 - на комментарии).

P.S. assert на _возможный_ код возврата из функций (например, assert(file_stream != NULL) - недопустим, ессно.

Date: Dec. 20th, 2007 18:08 (UTC)
From: [identity profile] aruslan.livejournal.com
вот я рад что 7 строк примерно получается!
с комментариями или без - неважно :)

Date: Dec. 20th, 2007 17:38 (UTC)
From: [identity profile] rageous.livejournal.com
прикинул, сколько у меня - поставил один на семь, но _кода_, а не комментариев/пустых строк/строк с одной скобкой "{" или "}"

Date: Dec. 20th, 2007 18:09 (UTC)
From: [identity profile] aruslan.livejournal.com
так и быть, пустые строки и {} не будем как строчки засчитывать.
а вот комментарии - будем.

если человек двадцать строк комментариев написал - пусть хоть три ассерта-то напишет к ним!

Date: Dec. 20th, 2007 17:53 (UTC)
From: [identity profile] subdmitry.livejournal.com
На мой взгляд, достаточно первого пункта. Потом народ втянется и сам начнет писать ассерты там, где они нужны. Более жесткие правила же легко могут довести до маразма.

Вообще лично у меня получается так, что ассерты - это тоже часть программы и, в частности, требует времени на отладку (т.е. может содержать ошибки). :)

Date: Dec. 20th, 2007 18:10 (UTC)
From: [identity profile] aruslan.livejournal.com
Ошибки в ассертах - это да.
Самое ужасное - это когда assert (который исчезает в релизе) пишут вместо verify (который не проверяется но работает в релизе).

В этом смысле хорош тот ассерт, который рандомно и по нескольку раз вычисляет выражение, я считаю! :))

Date: Dec. 20th, 2007 18:31 (UTC)
From: [identity profile] shodan-ru.livejournal.com
Пидор все равно напишет пидорский ассерт.
Поэтому надо не ассерты требовать, а изживать пидарастию.

Как ее изживать, я не знаю.
Бывает, полгода всего код не ревьюишь, а там заново начинается!!!

Date: Dec. 21st, 2007 00:54 (UTC)
From: [identity profile] aruslan.livejournal.com
Факт.
Но мышцы лица устали молчать!

(no subject)

From: [identity profile] doc-allegator.livejournal.com - Date: Dec. 21st, 2007 07:59 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 22nd, 2007 11:07 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 23rd, 2007 22:21 (UTC) - Expand

Date: Dec. 20th, 2007 18:53 (UTC)
From: [identity profile] justy-tylor.livejournal.com
ассерты делятся на три вида:
1) я знаю, что в моём коде вероятна херня.
2) я знаю, что в коде пользователя моего апи вероятна херня.
3) я знаю, что в коде сторонней библиотечки вероятна херня.
первого следует не допускать, а второе и третье воспитываются культурой кодинга. принудительно - никак.

Date: Dec. 20th, 2007 21:08 (UTC)
From: [identity profile] neteraser.livejournal.com
не культурой, а педерастией с т.з. геймдева. что для MS - культура, то для геймдева не всегда.

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: Dec. 20th, 2007 21:15 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:50 (UTC) - Expand

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: Dec. 21st, 2007 21:28 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:52 (UTC) - Expand

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: Dec. 21st, 2007 21:42 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 22nd, 2007 11:04 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 23rd, 2007 22:22 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 24th, 2007 06:18 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:52 (UTC) - Expand

Date: Dec. 21st, 2007 00:57 (UTC)
From: [identity profile] aruslan.livejournal.com
Принудительно конечно никак.
Но ведь можно и помочь!

Про "не допускать" - верю.
Но практика показывает, что те, кто пишут ассерты, на них как раз не наступают.
А те, что не пишут - обычно падают сразу как только в сборщике ресурсов что-то изменилось "нечаянно" (ц).
Ну или там камера в QNaN скакнула :)

Date: Dec. 20th, 2007 19:34 (UTC)
From: [identity profile] glebedev.livejournal.com
IMHO надо взвешенно подходить к вопросу - не в каждой функции нужен ассерт (например в пустой не нужен :) ), но и слишком много не нужно. Нужно там, где что-то может быть не так. Поэтому за что голосовать даже и не знаю.

Date: Dec. 21st, 2007 00:59 (UTC)
From: [identity profile] aruslan.livejournal.com
Как раз в пустой - нужен обязательно!
Например, assert(("WTF?!", 0)).

Вопрос не в культуре - вопрос в принудительном воспитании!

(no subject)

From: [identity profile] glebedev.livejournal.com - Date: Dec. 21st, 2007 04:29 (UTC) - Expand

Date: Dec. 20th, 2007 19:57 (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
В репозитории где-то 178000 на строк *.cpp;*.hpp;*.h;*.c;*.py приходится 2131 образцов assert|DIE|LOG_ERROR|LOG_WARN|raise|throw.

Где вариант "В любой функции - минимум один ассерт (включая inline в h)"?

Date: Dec. 20th, 2007 20:02 (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Я кстати мысленно разделяю код на "модули", и проверяю то что на входе модуля, по всей цепочке вызовов не проверяю внутри модуля, за который ответсвеннен один мозг. Разве что в начале и в конце цепочки.

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 21st, 2007 00:59 (UTC) - Expand

Date: Dec. 20th, 2007 20:04 (UTC)
From: [identity profile] rdesperado.livejournal.com
аминь, друк

Date: Dec. 21st, 2007 01:00 (UTC)
From: [identity profile] aruslan.livejournal.com
именно так!

Date: Dec. 20th, 2007 21:06 (UTC)
From: [identity profile] neteraser.livejournal.com
#define assert (...) ... OS_Exit(0)

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

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

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

зачем тут принудительные ассерты неясно. либо просится, либо просим нахуй.

Date: Dec. 21st, 2007 01:00 (UTC)
From: [identity profile] aruslan.livejournal.com
педерастия - она наверху обычно.
т.е. камеру в QNaN отправляют - и voila!

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:13 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 21st, 2007 09:23 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:38 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 21st, 2007 09:42 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 14:17 (UTC) - Expand

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: Sep. 18th, 2008 06:29 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Sep. 18th, 2008 06:49 (UTC) - Expand

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: Sep. 18th, 2008 06:52 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:16 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 21st, 2007 09:18 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:20 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 21st, 2007 09:24 (UTC) - Expand

(no subject)

From: [identity profile] neteraser.livejournal.com - Date: Dec. 21st, 2007 09:42 (UTC) - Expand

(no subject)

From: [identity profile] aruslan.livejournal.com - Date: Dec. 21st, 2007 09:44 (UTC) - Expand

Date: Dec. 20th, 2007 23:58 (UTC)
From: [identity profile] acefsm.livejournal.com
у нас такие дела обычно решаются при помощи Code Review
например какая то команда сделала некий модуль
далее технический лидер дает указание (обычно в пятницу в конце дня) потратить час на code review всем остальным командам
в результате если код не удовлетворяет тому же Code Policy всю команду жестко имеют, в плоть до полного переписывания кода

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

Date: Dec. 21st, 2007 01:01 (UTC)
From: [identity profile] aruslan.livejournal.com
Отличная тулза, проникся!
Не уверен насчет 2200 USD, впрочем, но выглядит очень симпатично.

Вы долго её юзаете?
Как ощущения? В плане недостатков, естественно.

(no subject)

From: [identity profile] acefsm.livejournal.com - Date: Dec. 21st, 2007 11:43 (UTC) - Expand

Date: Dec. 21st, 2007 08:54 (UTC)
From: [identity profile] captain-tylor.livejournal.com
Ввести предмодерацию коммитов)

Date: Dec. 21st, 2007 09:14 (UTC)
From: [identity profile] aruslan.livejournal.com
Премодерация есть. Нет внутреннего посыла.

Date: Dec. 21st, 2007 11:29 (UTC)
From: [personal profile] alll
Остаётся только решить, что делать с кадрами, коммитящими код со срабатывающими ассёртами и поющими "ну в релизе же работает, а в дебаге мы как-инбудь опосля поправим".

Date: Dec. 21st, 2007 14:18 (UTC)
From: [identity profile] neteraser.livejournal.com
С кадрами ничо не сделаешь, делай правильный ассерт. exit(0).

Date: Dec. 21st, 2007 11:44 (UTC)
From: [identity profile] sleepy-drago.livejournal.com
рыдал. Легаси + пятница + релиз со смертельными багами.
На TerminateProcess начал смеяццо ( наверное помогло что-то понять в жизни ).
best regards

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

Date: Dec. 24th, 2007 09:56 (UTC)
From: [identity profile] loyso-b.livejournal.com
"Педерастия наверху" - это точно. Мышцы лица многие не так используют. :)

Обучать людей надо. И не только методами "пчелиных танцев" (через механическое подражание).

Date: Apr. 12th, 2008 23:57 (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
http://www.xxp-design.ru/index.asp?mode=490


— А это что у тебя такое?, — зевая, осведомился мастер.
— Ну как же! Вы же сами видите: вот тут я ..., а потом я ..., а потом я считаю среднее отклонение от получившегося.
— А где проверка на деление на ноль?
— Учитель, зачем она здесь? я не буду вызывать эту функцию для пустых множеств.

Физиономию мастера Гоу Ту перекосила ехидненькая гримаска. Фроу Кэтч отработанным движением выдернул свой блокнот: именно с такими добрыми-добрыми глазами его учитель изрекал наиболее омерзительные истины.

— Если не ставишь защиту от дурака, то сам и оказываешься тем дураком, от которого была необходима защита.

Учитель быстро вышел из комнаты ("чай пить небось пошёл", злобно подумал Фроу Кэтч), а его ученик засунул блокнотик в карман и набарабанил в начало функции:

//A kto vyzyvet eto s n==0, tot sam durak

Date: Feb. 14th, 2009 22:31 (UTC)
From: [identity profile] pigmeich.livejournal.com
Хы-хы, веселая статья

Profile

aruslan: (Default)
aruslan

January 2014

S M T W T F S
   1234
56789 1011
12131415161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 11th, 2026 04:53
Powered by Dreamwidth Studios