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: Искусство писать глюки
От: Аноним  
Дата: 21.05.03 09:08
Оценка: 33 (4) :))) :)
Хочу написать про один баг который учась в институте сотворила моя жена:
простейшее задание ввести А, ввести В сложить их и результат отобразить на экране, язык программированеия фортран, машина ЕС
все написала, запускает, не работает, ругается матерно. Проверяем — все правильно, запускаем, не работает. Зовем лаборанта, эффект тот-же, он в полной панике зовет преподователя, эффект тот-же, постепенно собирается вся кафедра во главе с зав.кафедрой. У всех озабоченные лица.
Потом выяснилось что буквы были русскими, только выяснилось это часов через 6.
Re[5]: Искусство писать глюки
От: ArtDenis Россия  
Дата: 23.05.03 07:44
Оценка: 10 (5) :))
Здравствуйте, Awaken, Вы писали:

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


A>в любой большой системе есть некоторое количество багов, иногда получается так что некоторые из них "взаимоуничтожают" друг друга и все работает правильно.


Довольно распростронённое убеждение. Но не стоит забывать, что содержание системы не равно сумме содержаний компонентов. И учитывая это замечание, можно найти несколько типичных баговых ситуаций (и пути их решения):

1. Проявление_багов = баг1 - баг2 + баг3 - баг4 + ... -багn;

где n — чётное число.
Эта самая благоприятная ситуация для программиста. Особый случай ситуации — когда сумма положительных багов равна сумме отрицательных. В этом случае баги никиа не влияют на работу программы. Задача программиста в этом случае — стараться делать одинаковые по проявлению баги и следить, чтобы сумма багов была чётным числом.

2. Проявление_багов = баг1*баг2*баг3*баг4* ... *багn;

где n — любое целое число.
Это тоже очень распространённая ситуация. В этом случае — задача программиста — свести хотя-бы один баг к нулю или бесконечно малому значению.

2. Проявление_багов = баг1^баг2;

Это уже более серьёзная ситуация. Есть два решения такой проблемы.
1. Попытаться свести баг1 к нулю. Задача, как правило, невыполнимая, т.к. почти всегда баг1 не поддаётся локализации.
2. Прологарифмировать Проявление_багов. В этом случае пропадает экспоненциальная зависимость от 2-го бага.

Как правило, в реальности встречаются все три ситуации в перемешку. Задача программиста — свести Проявление_багов к минимуму, использую вышеприведённые примеры.

(с) Я.
... << RSDN@Home 1.0 beta 7a >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Искусство писать глюки
От: ch00k  
Дата: 03.06.03 16:01
Оценка: 71 (6)
Здравствуйте, sercher, Вы писали:


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


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



class Test 
{
   int x, y, char * s;

public:
   Test(int a_x, int a_y, const char * a_s) { x = a_a; y = a_y; s = a_s; }
   Test(const Test & t)                     { *this = t };
   Test & operator=(const Test t)           { x = t.x; y = t.y; s = strdup(t.s); return *this; }
};

int main()
{
   Test t1(0, 0, "test1");
   Test t2 = t1; 
   return 0;
}


Stack overflow
Это, кстати, еще и пример извращенности мышления...
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]: Искусство писать глюки
От: Кодт Россия  
Дата: 21.05.03 14:49
Оценка: :)))
Здравствуйте, Plague, Вы писали:

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

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

А dst, — в [censored/]
Перекуём баги на фичи!
Re[7]: Искусство писать глюки
От: ArtDenis Россия  
Дата: 01.06.03 05:23
Оценка: 5 (2)
Здравствуйте, Lonely Dog, Вы писали:

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


LD>---покусано----


LD>Предлагаю придумать новую науку: Баговедение. Во время изучения этой науки студенты будут обучаться исскуству планирования багов, и пр.


LD>PS: народ, предлагайте новые направления этой науки...


Только не Баговедение, а БагоЛогия.

Выписка из статьи газеты "Практическая БагоЛогия":

Российская Академия Багологии дистанционно присвоила звание Профессора багологических наук Биллу Калиткину...

... << RSDN@Home 1.0 beta 7a >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Искусство писать глюки
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.03 11:47
Оценка: -1 :)
Здравствуйте, scaramush, Вы писали:

S>Есть вообще высший пилотаж: кусок кода длинной ~20 строк, при взляде на который понимаешь, что он явно содержит ошибки... на самом деле ошибок не содержащий. Во как!

Да ну! Мне студенты постоянно такой код сдают.
... << RSDN@Home 1.0 beta 7a >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Искусство писать глюки
От: Аноним  
Дата: 16.06.03 06:36
Оценка: :))
Из подобных "багов" я частенько пишу
ша (...)
{
}

Правда сразу же исправляю...
Re: Искусство писать глюки
От: Тестер  
Дата: 21.05.03 10:07
Оценка: 3 (1)
Здравствуйте, sercher, Вы писали:



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


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


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

Чем сложнее и трудноуловимее баг, тем больше программеры списывают его на ошибку системы, виртуальной машины или ещё что-нибудь, но только это не их ошибка, пока явно не выловишь его
Искусство писать глюки
От: 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[2]: Искусство писать глюки
От: Awaken Украина  
Дата: 22.05.03 06:39
Оценка: 1 (1)
_>Самые приятные баги и трудноуловимые баги неотделимы от контекста. Так что оценить их красоту можно только >разобравшись в десятках килобайт кода. Мне кажется, большинство сочтет это удовольствие сомнительным...

действительно гениальный баг — это который если пофиксить, программа перестает работать как надо.
такие нельзя ни в коем случае фиксить, а надо сохранять для последующих поколений программистов
(как "мозги компьютерные 32 метра" )
Re[2]: Искусство писать глюки
От: avpavlov  
Дата: 22.05.03 14:33
Оценка: -1
Конечно, ключевое слово "register" не использовалось,
имя функции другое было, вроде registerValue или registerID,
за давностью лет такие детали не могу вспомнить
Re[2]: Искусство писать глюки
От: _wqwa США  
Дата: 26.05.03 19:59
Оценка: +1
Здравствуйте, Всеволод, Вы писали:

В>А еще очень долго можно искать вот такую простую ошибку:

В>
В>class A
В>{
В>...
В>   int val;
В>   void Calc(void);
В>...
В>}
В>

В>А потом где-нибудь в другом файле:
В>
В>void A:Calc()
В>{
В>...
В>   int val=123+456;
В>...
В>}
В>


Это лечится очень просто:
class A
{
...
   int m_val; //вариант 1
   int val_;  //вариант 2
   
   void Calc(void);
...
}

Короче, явно отмечать данные-члены префиксом или суффиксом.
Кто здесь?!
Re: Искусство писать глюки
От: _wqwa США  
Дата: 20.05.03 13:48
Оценка:
Здравствуйте, sercher, Вы писали:



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


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

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

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

Достаточно описать баг и как его ловили. А код — для сомневающихся.
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[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[3]: Искусство писать глюки
От: Plague Россия  
Дата: 21.05.03 12:56
Оценка:
Здравствуйте, Кодт, Вы писали:

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


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


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


у меня стоит Ninja — рулез необыкновенный, настроил под VC6...
правда бывают приколы, например: до настройки "this" переводил в "ершы", а затем в "ерши"...
... << RSDN@Home 1.0 beta 7a >>
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: Искусство писать глюки
От: Аноним  
Дата: 22.05.03 16:13
Оценка:
Буквально вчера меня осенило, где в строке
HRESULT_FROM_WIN32(::RegCreateKey(...))

BoundChecker нашёл leak. Стоило только пристальнее взглянуть на макрос...
Re[4]: Искусство писать глюки
От: Awaken Украина  
Дата: 23.05.03 07:15
Оценка:
KS>Это да... вот у нас в конторе есть один специфический тип отчета по неким данным... Спустя пару лет после его >написания, выяснилось, что неправильно был реализован математический алгоритм, считающий ряд стандартных статистик. >Но все заказчики давно привыкли к тем цифрам, и правильный вариант их категорически не устроил... Так и продаем до

в любой большой системе есть некоторое количество багов, иногда получается так что некоторые из них "взаимоуничтожают" друг друга и все работает правильно.
Re: Искусство писать глюки
От: Всеволод Россия  
Дата: 26.05.03 11:58
Оценка:
Здравствуйте, sercher, Вы писали:



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


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


А еще очень долго можно искать вот такую простую ошибку:
class A
{
...
   int val;
   void Calc(void);
...
}

А потом где-нибудь в другом файле:
void A:Calc()
{
...
   int val=123+456;
...
}
Re[3]: Искусство писать глюки
От: scaramush  
Дата: 27.05.03 07:31
Оценка:
S>Но, с другой стороны, написать кусок кода длиной в ~20 строк, содержащий заведомый баг, и при этом неочевидный — это тоже своего рода искусство.

Есть вообще высший пилотаж: кусок кода длинной ~20 строк, при взляде на который понимаешь, что он явно содержит ошибки... на самом деле ошибок не содержащий. Во как!
Re[3]: Искусство писать глюки
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.05.03 15:51
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Вообще конечно да. В жизни хороший баг распределен как минимум по трем исходникам, достаточно далеко разнесенным по структуре проекта, и каждый в отдельности никаких подозрений не вызывает.

Однажды на ежемесячном собрании я получил премию от компании за нахождение фатальной ошибки перезаписи памяти, которая была ошибкой "седьмого уровня", а именно, указатель, превращенный в мусор перезаписью поверх него другого валидного (но неверного) указателя, приводил к разрушению другого указателя, что приводило к неверному вычислению индекса, что приводило ... — и так разрушения до седьмого уровня, что в конце-концов вызывало фатальную ошибку доступа. Т.к. для данной системы не было возможности сгенерировать финальную версию с отладочной информацией, я провел чистых 17 часов, пошагово исполняя инструкции, отслеживая обратные связи, и последовательно сужая зону поиска. У меня было 2 терминала — на одном исполнялась отладочная, а на другом финальная версии программы. После того, как я нашел ошибку, по отладочной версии было очевидно, что происходило не так, но в неоптимизированном коде описанное выше явление скрывало истинную ошибку.

Как пережить release-версию
Автор(ы): Dr. Joseph M. Newcomer
Дата: 18.06.2001
Статья посвящена проблемам перехода с Debug-версии на Release-версию. Рассматриваются
типичные ошибки, которые могут не проявляться в отладочной версии, но проявляются в финальной.
Обсуждается вопрос "ошибок компилятора" и вопросы необходимости оптимизации и ее побочные эффекты.
В последней редакции добавлен раздел посвященный проблеме совместимости динамических библиотек.
, Dr. Joseph M. Newcomer
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Искусство писать глюки
От: Lonely Dog Россия  
Дата: 31.05.03 16:14
Оценка:
Здравствуйте, ArtDenis, Вы писали:

---покусано----

Предлагаю придумать новую науку: Баговедение. Во время изучения этой науки студенты будут обучаться исскуству планирования багов, и пр.

PS: народ, предлагайте новые направления этой науки...
Re: Искусство писать глюки
От: Eugene Kilachkoff Россия  
Дата: 01.06.03 11:48
Оценка:
Здравствуйте, sercher, Вы писали:



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


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

Вот вы говорите, баги... А у нас в институте народ, натурально, сдает вот такое:

TSPRab = class(TFRSP)
  public
    function MXTheor: TReal; virtual; abstract;
    function DXTheor: TReal; virtual; abstract;         // теор. DX
    // к-т асимметрии
    function Assym: TReal; virtual; abstract;
    // к-т эксцесса
    function Excess: TReal; virtual; abstract;
    procedure Model(ALength: Integer; A, B: TReal); reintroduce;
  end;
{-----------}
implementation

var
  Y,X: TArrayX;
  a, b, mu, mu3, mu4, gamma, alpha, betta, sigma: Real;
  i:word; //счетчик

function SPRab.MXTheor;
begin
MXTheor:=(a+b)/2;
end;

function SPRab.Assym;
begin
KATheor:=0;
end;
{-----------}
Function SPSimp.Model;
begin
For i:=1 to N do
     if Random=0 then FArrayX[i]:=a else
 if (Random>0) and (Random<0.5) then FArrayX[i]:=(b-a)*sqrt(X[i]/2)+a else
    if (Random>=0,5) and (Random<1) then
              FArrayX[i]:=b*sqrt((1-X[i])/2)*(b-a) else
                    if Random=1 then FArrayX[i]:=b;
end;
{-----------}
function SPVeyb.Assym;
begin
mu3=(Г(1+3/alpha)- 3*Г(1+1/alpha)* (Г(1+2/alpha)+2*Г{в кубе}(1+1/alpha))
*betta{в степени -2/alpha??}) *betta{в степени -3/alpha??};
KATheor:=mu3/DXTheor{в степени 3/2};
end;
Re[7]: Искусство писать глюки
От: scaramush  
Дата: 02.06.03 08:46
Оценка:
LD>Предлагаю придумать новую науку: Баговедение. Во время изучения этой науки студенты будут обучаться исскуству планирования багов, и пр.

Ага. А в качестве отца-основателя забрать у Шендеровича врача мозговеда Бильжо.
Re: Искусство писать глюки
От: the_moon  
Дата: 02.06.03 15:25
Оценка:
Здравствуйте, sercher, Вы писали:


Самый смешной баг была "ленивая" программистка. Был как то баг, в качестве параметра передавалась единичка в место нуля. Так вот эта программистка с этим не стала разбираться, а решила, что проблема эта из за отсутствия нужной функции. Она ее написала, а неправильный вызов с еденичкой выкинула. Ну и началась потом свистопляска, она этот баг пофиксила, а на его месте появился другой. Она его тоже зафиксила и так это длилось полтора месяца и пока она не написала копию той функции вызов которой она закоментировала в самом начале. Потом она ушла, а посадили меня и я неделю удалял, то что она там накОдила, что бы потом в итоге поменять 1 на 0 в уже существующей функции.
KOPOTbILLIKA KPbIC
Re[2]: Искусство писать глюки
От: Кодт Россия  
Дата: 03.06.03 17:02
Оценка:
Здравствуйте, ch00k, Вы писали:

C>   Test & operator=(const  Test  t)           { x = t.x; y = t.y; s = strdup(t.s); return *this; }

C>Stack overflow
Долго хлопал глазами, потом как дошло, аж больно стало!!!

C>Это, кстати, еще и пример извращенности мышления...

Необязательно: copy-ctor и operator= могут, к примеру, вызывать функцию assign(), которая объявлена именно с такой плюшкой.
Перекуём баги на фичи!
Re: Искусство писать глюки
От: FWP Россия  
Дата: 04.06.03 11:16
Оценка:
Здравствуйте, sercher, Вы писали:



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


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

У меня на C++ самый популярный баг
{
  ...
  retrun;
}

Никак не могу его победить
Re[2]: Искусство писать глюки
От: Nose Россия  
Дата: 04.06.03 11:34
Оценка:
Здравствуйте, FWP, Вы писали:

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


FWP>
FWP>{
FWP>  ...
FWP>  retrun;
FWP>}
FWP>

FWP>Никак не могу его победить

угу, у меня то же самое... Только это не баг. Это так, фигня... сразу ведь находится.
... << RSDN@Home 1.0 beta 7a >>
Re[2]: Искусство писать глюки
От: joker6413  
Дата: 16.06.03 05:59
Оценка:
Здравствуйте, ch00k, Вы писали:

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



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


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



C>
C>class Test 
C>{
C>   int x, y, char * s;

C>public:
C>   Test(int a_x, int a_y, const char * a_s) { x = a_a; y = a_y; s = a_s; }
C>   Test(const Test & t)                     { *this = t };
C>   Test & operator=(const Test t)           { x = t.x; y = t.y; s = strdup(t.s); return *this; }
C>};

C>int main()
C>{
C>   Test t1(0, 0, "test1");
C>   Test t2 = t1; 
C>   return 0;
C>}

C>


C>Stack overflow

C>Это, кстати, еще и пример извращенности мышления...

Почему извращенного? Почти классический пример из книжки... Правда я только со второго раза понял что к чему , но с передачей объектов по значению в свое время намучился так что рефлекс остался... Но на собеседовании я бы наверное не сообразил .

Игорь
Re[3]: Искусство писать глюки
От: Apostate  
Дата: 16.06.03 09:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Из подобных "багов" я частенько пишу

А>
А>ша (...)
А>{
А>}
А>

А>Правда сразу же исправляю...

тоже самое, условия часто сопровождаются предварительными комментариями, а они на русском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.