Искусство писать глюки
От: sercher Украина  
Дата: 20.05.03 11:46
Оценка: 1 (1)
Господа программисты.

А почему бы нам не сделать конкурс на самый глючный баг? Ведь чем сложнее и трудноуловимее баг, тем профессиональнее считается программист. Вот примеры:



main()
{
   char fio[10];
   cout<<"Input username:";
   cin>>fio;
   cout<<fio;
}


или в C++Builder:


void __fastcall TfrmMain::ServerSocketClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    if(IsSocketEqual(sock, Socket))
    {
        Socket->Close();
    }

}




01.06.03 10:15: Перенесено модератором из 'Коллеги, улыбнитесь' — _MM_
Re: Искусство писать глюки
От: _wqwa США  
Дата: 20.05.03 13:48
Оценка:
Здравствуйте, sercher, Вы писали:



S>Господа программисты.


S>А почему бы нам не сделать конкурс на самый глючный баг? Ведь чем сложнее и трудноуловимее баг, тем профессиональнее считается программист.

Твой первый пример -- очевиден, о втором судить не могу (с VCL не знаком)

Самые приятные баги и трудноуловимые баги неотделимы от контекста. Так что оценить их красоту можно только разобравшись в десятках килобайт кода. Мне кажется, большинство сочтет это удовольствие сомнительным...
Кто здесь?!
Re[2]: Искусство писать глюки
От: sercher Украина  
Дата: 20.05.03 14:02
Оценка:
_>Самые приятные баги и трудноуловимые баги неотделимы от контекста. Так что оценить их красоту можно только разобравшись в десятках килобайт кода. Мне кажется, большинство сочтет это удовольствие сомнительным...

Достаточно описать баг и как его ловили. А код — для сомневающихся.
Re[2]: Искусство писать глюки
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.05.03 14:25
Оценка: 31 (11)
Здравствуйте, _wqwa, Вы писали:
_>Самые приятные баги и трудноуловимые баги неотделимы от контекста. Так что оценить их красоту можно только разобравшись в десятках килобайт кода. Мне кажется, большинство сочтет это удовольствие сомнительным...
Вообще конечно да. В жизни хороший баг распределен как минимум по трем исходникам, достаточно далеко разнесенным по структуре проекта, и каждый в отдельности никаких подозрений не вызывает. Лучше всего, когда эти три (или более) "мест" находятся в разных уровнях: например, взаимодействие кода в SQL Stored Procedure с особенностями библиотеки доступа к данным, которая должна автоматически следить за транзакциями, и прикладным кодом, который слегка неожиданным образом к этой библиотеке обращается.
Воспроизводиться он должен только при большой нагрузке, так, чтобы на тестовом серваке его вообще никогда не бывало, а попытка оттрассировать его на рабочем серваке меняла баланс загрузки и баг исчезал.

Да, охота за таким багом — это честная борьба. Я выхожу с ним один на один! Вооруженный только банкой кофе Nescafe Classic, RAdmin, SQL Profiler, пачкой сигарет и WinAmp. На его стороне 54 сервиса на трех серверах, 80 клиентских мест и 150 веб-запросов в минуту. Я обкладываю его ловушками и навешиваю лог райтеры. Я перехожу от медитации над исходниками к пошаговой отладке и обратно. Я уже знаю, как расставить капканы, чтобы не спугнуть его. В самом начале я не знаю о нем ничего — лишь несколько следов да обрывочные свидетельства очевидцев ("я куда-то нажала, и оно сказало мне что-то не то. Вроде там было слово... слово... слово... А! Error 500!") Но постепенно моя интуиция подсказывает мне все больше и больше, флажки отсекают участки исправного кода, я уже почти отождествляю себя с ним, и — оп! Вот он, трепещет в моих руках!

Единственное, в чем я завидую обычным охотникам — это череп над камином. Увы, 6 килограммов распечаток — это не то. Рассказ об охоте быстро утомляет даже коллег, кроме того они зачастую поднимают охотника на смех (что, там был DeadLock? Во первых, в описываемой конфигурации он возникнуть в принципе не может — читайте доку, батенька. Во-вторых, его причина сразу была очевидна — NullPointerException с таким стеком, использование одной и той же таблички слева и справа от UNION и предупреждения в Application Log сразу должны были навести вас на мысль об этом! Я бы отловил его в первые 15 минут, даже не заглядывая в проектную документацию. Ну, и в третьих есть патч к тому JDBC драйверу, который исправляет ошибку с управлением уровнями изоляции).


Но, с другой стороны, написать кусок кода длиной в ~20 строк, содержащий заведомый баг, и при этом неочевидный — это тоже своего рода искусство. Упрощенные примеры можно почерпнуть в любом сертификационном экзамене по девелопменту. Боюсь, что сам я не смогу так ловко придумать хотя бы один нетривиальный пример.
... << RSDN@Home 1.0 beta 7a >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Искусство писать глюки
От: _wqwa США  
Дата: 20.05.03 18:02
Оценка:
Здравствуйте, sercher, Вы писали:

_>>Самые приятные баги и трудноуловимые баги неотделимы от контекста. Так что оценить их красоту можно только разобравшись в десятках килобайт кода. Мне кажется, большинство сочтет это удовольствие сомнительным...


S>Достаточно описать баг и как его ловили. А код — для сомневающихся.


Цитирую Синклера:
S>

S>Единственное, в чем я завидую обычным охотникам — это череп над камином. Увы, 6 килограммов распечаток — это не то. Рассказ об охоте быстро утомляет даже коллег, кроме того они зачастую поднимают на охотника смех (что, там был DeadLock? Во первых, в описываемой конфигурации он возникнуть в принципе не может — читайте доку, батенька. Во-вторых, его причина сразу была очевидна — NullPointerException с таким стеком, использование одной и той же таблички слева и справа от UNION и предупреждения в Application Log сразу должны были навести вас на мысль об этом! Я бы отловил его в первые 15 минут, даже не заглядывая в проектную документацию. Ну, и в третьих есть патч к тому JDBC лрайверу, который исправляет ошибку с управлением уровнями изоляции).

... к сожалению... А то я и сам бы с три короба наплел
Кто здесь?!
Re: Искусство писать глюки
От: FireWorm Беларусь  
Дата: 21.05.03 08:07
Оценка:
Здравствуйте, sercher, Вы писали:



S>Господа программисты.


S>А почему бы нам не сделать конкурс на самый глючный баг? Ведь чем сложнее и трудноуловимее баг, тем профессиональнее считается программист. Вот примеры:



S>

S>main()
S>{
S>   char fio[10];
S>   cout<<"Input username:";
   cin>>>fio;
S>   cout<<fio;
S>}
S>


а если написать

   char fio[10];
   cout<<"Input username:";
try
{
   cin>>fio;
}
catch(...)
{
    cout<<"Error";
    return 0;
}
   cout<<fio<< endl;
   return 0;


то ничего не вываливается, если ввести строку более 10 символов, она вводится корректно, а затем не менее корректно оторбражается

вот... (компилятор — MS Visual C++ 6.0)
Re[2]: Искусство писать глюки
От: IPv6 Казахстан  
Дата: 21.05.03 08:40
Оценка:
Здравствуйте, FireWorm, Вы писали:

FW>Здравствуйте, sercher, Вы писали:




S>>Господа программисты.


S>>А почему бы нам не сделать конкурс на самый глючный баг? Ведь чем сложнее и трудноуловимее баг, тем профессиональнее считается программист. Вот примеры:



S>>

S>>main()
S>>{
S>>   char fio[10];
S>>   cout<<"Input username:";
   cin>>>>fio;
S>>   cout<<fio;
S>>}
S>>


FW>а если написать


FW>
FW>   char fio[10];
FW>   cout<<"Input username:";
FW>try
FW>{
   cin>>>fio;
FW>}
FW>catch(...)
FW>{
FW>    cout<<"Error";
FW>    return 0;
FW>}
FW>   cout<<fio<< endl;
FW>   return 0;

FW>


FW>то ничего не вываливается, если ввести строку более 10 символов, она вводится корректно, а затем не менее корректно оторбражается


это называется ПОВЕЗЛО....

кстати. в новой матрице (сорри за оффтоп) говорят при взломе этой самой матрицы продемонстрировали как-бы реальный взлом какого-то Unix-сервака с использованием какой-то реальной ошибки связанной с переполнением буфера. Т.е кино конечно, но по крайней мере не большие трехмерные вирусы летающие по кислотному экрану с рамочками всех цветов радуги
Re: Искусство писать глюки
От: Аноним  
Дата: 21.05.03 09:08
Оценка: 33 (4) :))) :)
Хочу написать про один баг который учась в институте сотворила моя жена:
простейшее задание ввести А, ввести В сложить их и результат отобразить на экране, язык программированеия фортран, машина ЕС
все написала, запускает, не работает, ругается матерно. Проверяем — все правильно, запускаем, не работает. Зовем лаборанта, эффект тот-же, он в полной панике зовет преподователя, эффект тот-же, постепенно собирается вся кафедра во главе с зав.кафедрой. У всех озабоченные лица.
Потом выяснилось что буквы были русскими, только выяснилось это часов через 6.
Re[3]: Искусство писать глюки
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 21.05.03 09:16
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>кстати. в новой матрице (сорри за оффтоп) говорят при взломе этой самой матрицы продемонстрировали как-бы реальный взлом какого-то Unix-сервака с использованием какой-то реальной ошибки связанной с переполнением буфера. Т.е кино конечно, но по крайней мере не большие трехмерные вирусы летающие по кислотному экрану с рамочками всех цветов радуги


http://www.computerra.ru/focus/coment/26420/
<< RSDN@Home 1.0 beta 6a >>
Вселенная бесконечна как вширь, так и вглубь.
Re[2]: Искусство писать глюки
От: Кодт Россия  
Дата: 21.05.03 09:51
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Потом выяснилось что буквы были русскими, только выяснилось это часов через 6.


Поставь себе PuntoSwitcher или KeyboardNinja — будешь иметь такую же радость (если не настроишь).
О где же вы, Frostbitten'а деянья? ( -_-; ) ... << RSDN@Home 1.0 beta 7a >>
Перекуём баги на фичи!
Re[2]: Искусство писать глюки
От: jhfrek Россия  
Дата: 21.05.03 09:53
Оценка:
Здравствуйте, Аноним, Вы писали:
А> программированеия фортран, машина ЕС

ЕС это вообще крутая машина была. Знакомая девушка решила свою программу сортировки дат с ЕС-ки перенести на XT (давно это было). Благо Виртовский паскаль понимали оба компьютера. Набивает, компилирует, запускает — не работает. Сравниваем распечатки — идентичны. Идем по шагам — оказалось что для сравнения времени она, не долго думая написала
time := 3600 * hour + 60 * min + sec

Ну и кто мог подумать что на этом продвинутом загранично писюке integer в два раза короче чем у старой советской ЕСки
Re: Искусство писать глюки
От: Тестер  
Дата: 21.05.03 10:07
Оценка: 3 (1)
Здравствуйте, sercher, Вы писали:



S>Господа программисты.


S>А почему бы нам не сделать конкурс на самый глючный баг? Ведь чем сложнее и трудноуловимее баг, тем профессиональнее считается программист.


Жаль, что конкурс будет только среди программистов.
Вот у меня в базах багов около 500, а может даже и побольше.
И среди них есть очень специфичные, начиная от различного поведения на 9х\НТ системах, заканчивая размерами тайм-аутов при работе с факсами и почтой.

Чем сложнее и трудноуловимее баг, тем больше программеры списывают его на ошибку системы, виртуальной машины или ещё что-нибудь, но только это не их ошибка, пока явно не выловишь его
Re[3]: Искусство писать глюки
От: Plague Россия  
Дата: 21.05.03 12:56
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, <Аноним>, Вы писали:


А>>Потом выяснилось что буквы были русскими, только выяснилось это часов через 6.


К>Поставь себе PuntoSwitcher или KeyboardNinja — будешь иметь такую же радость (если не настроишь).


у меня стоит Ninja — рулез необыкновенный, настроил под VC6...
правда бывают приколы, например: до настройки "this" переводил в "ершы", а затем в "ерши"...
... << RSDN@Home 1.0 beta 7a >>
Re[4]: Искусство писать глюки
От: Кодт Россия  
Дата: 21.05.03 14:49
Оценка: :)))
Здравствуйте, Plague, Вы писали:

P>у меня стоит Ninja — рулез необыкновенный, настроил под VC6...

P>правда бывают приколы, например: до настройки "this" переводил в "ершы", а затем в "ерши"...

А dst, — в [censored/]
Перекуём баги на фичи!
Re[2]: Искусство писать глюки
От: Awaken Украина  
Дата: 22.05.03 06:39
Оценка: 1 (1)
_>Самые приятные баги и трудноуловимые баги неотделимы от контекста. Так что оценить их красоту можно только >разобравшись в десятках килобайт кода. Мне кажется, большинство сочтет это удовольствие сомнительным...

действительно гениальный баг — это который если пофиксить, программа перестает работать как надо.
такие нельзя ни в коем случае фиксить, а надо сохранять для последующих поколений программистов
(как "мозги компьютерные 32 метра" )
Re[3]: Искусство писать глюки
От: Konstantin Sokolovskiy  
Дата: 22.05.03 08:18
Оценка: 5 (1) :))
>действительно гениальный баг — это который если пофиксить, программа перестает работать как надо.
>такие нельзя ни в коем случае фиксить, а надо сохранять для последующих поколений программистов
>(как "мозги компьютерные 32 метра" )


Это да... вот у нас в конторе есть один специфический тип отчета по неким данным... Спустя пару лет после его написания, выяснилось, что неправильно был реализован математический алгоритм, считающий ряд стандартных статистик. Но все заказчики давно привыкли к тем цифрам, и правильный вариант их категорически не устроил... Так и продаем до сих

А что касается моих личных багов, то, работая постоянно сейчас с С# и JavaScript, постоянно натыкаюсь на JavaScript-ошибку в следующей строке:
for( int i = 0; i < nSomeLength; i++ )


_Каждый_ раз тупо смотрю на эту строчку, обычно требуется секунд 30, чтобы сообразить в чем дело. Вот такая тормознутость.
Posted via RSDN NNTP Server 1.5
Re[4]: Искусство писать глюки
От: mrhru Россия  
Дата: 22.05.03 08:31
Оценка:
Здравствуйте, Konstantin Sokolovskiy, Вы писали:

KS>А что касается моих личных багов, то, работая постоянно сейчас с С# и JavaScript, постоянно натыкаюсь на JavaScript-ошибку в следующей строке:

KS>
KS>for( int i = 0; i < nSomeLength; i++ )
KS>


KS>_Каждый_ раз тупо смотрю на эту строчку, обычно требуется секунд 30, чтобы сообразить в чем дело. Вот такая тормознутость.


У меня с точностью до наоборот. Много работал на JavaScript, поэтому на Шарпе пишу
for( var i = 0; i < nSomeLength; i++ )
Re: Искусство писать глюки
От: avpavlov  
Дата: 22.05.03 14:30
Оценка:
Баг, поиск которого в чужом коде я запомнил на всю жизнь
(приведен не дословно, а без лишних деталей):


#define ASSIGN(V, X) register(X); V=X; 

...

if (id!=currentID) ASSIGN(currentID,id);
Re[2]: Искусство писать глюки
От: avpavlov  
Дата: 22.05.03 14:33
Оценка: -1
Конечно, ключевое слово "register" не использовалось,
имя функции другое было, вроде registerValue или registerID,
за давностью лет такие детали не могу вспомнить
Re: Искусство писать глюки
От: Аноним  
Дата: 22.05.03 16:13
Оценка:
Буквально вчера меня осенило, где в строке
HRESULT_FROM_WIN32(::RegCreateKey(...))

BoundChecker нашёл leak. Стоило только пристальнее взглянуть на макрос...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.