Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];

Вниз

как часто и активно вы используете в программах Assert ы?   Найти похожие ветки 

 
Ketmar   (2003-02-22 13:51) [0]

а также: отключаете ли вы Range Checking в "релизных" версиях продуктов.
и: часто ли вы используете отладчик IDE?

Satanas Nobiscum! 22-Feb-XXXVIII A.S.


 
Anatoly Podgoretsky   (2003-02-22 13:55) [1]

нет
нет
да


 
Ketmar   (2003-02-22 14:15) [2]

хм. у меня ответы такие:
да
нет
нет

и никогда не отключаю assert"ы в release-версиях.

Satanas Nobiscum! 22-Feb-XXXVIII A.S.


 
MBo   (2003-02-22 14:21) [3]

иногда
нет
да


 
vuk   (2003-02-22 14:30) [4]

Assert использую иногда для проверок, а иногда для записи в лог.

То есть имеется функция:
function WriteLog( const Fmt : string; const Args : array of const ) : boolean;
Она всегда возвращает true. Запись в лог делается так:
Assert(WriteLog("%s", [...]));
Делается это затем, чтобы можно было отключить такую запись в лог во всем приложении сразу простановкой галочки Assertions в опциях проекта. Извращение, конечно, но иногда бывает полезно.

Range Checking используется всегда. Отладчик IDE - всегда.


 
Ihor Osov'yak   (2003-02-22 14:48) [5]

аналогично Anatoly Podgoretsky © (22.02.03 13:55)


 
Юрий Зотов   (2003-02-22 15:19) [6]

Assert"ы - иногда. Там интересная строка сообщения, откуда можно программно выудить полезную информацию (чего нет в других исключениях).

Range Checking - отключаю, если:
- требуется высокая скорость участка кода.
- этот участок тщательно закодирован и отлажен.

Отладчик IDE - практически всегда (даже в Design-time - запускаю вторую копию IDE из-под первой). Уж очень он удобен.


 
DiamondShark   (2003-02-22 18:03) [7]

Не верьте ему! Это он вот этого
http://www.inr.ac.ru/~info21/blackbox/disciplina/poshag_otlad.htm
начитался.


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


--------------------
* Программисты-самоучки по мнению автора сайта это те, кто не учился программированию лично у автора.


 
Ketmar   (2003-02-22 18:15) [8]

>Юрий Зотов © (22.02.03 15:19)
assert -- всегда при входе в процедуру/метод (на всякий случай).
Range Checking -- а что вы думаете по поводу компиляторов Вирта, которые просто не имеют опции отключения этого самого? я с Виртом согласен -- замедление настолько незаметно, что им можно пренебречь, а надёжность софта -- она на первом месте...
отладчик: опять же, дяденка Вирт говорит, что "не надо". я лично с ним согласен -- забыл уже, когда использовал этот отладчик в IDE. проще писать с DebugOut и Assert. причём последние помогают лучше. а отладчик (как и опимизатор, имхо) -- это совершенно ненужные и усложняющие жизнь вещи...

Satanas Nobiscum! 22-Feb-XXXVIII A.S.


 
vuk   (2003-02-22 18:24) [9]

По поводу отладчиков... Наблюдал я как-то лет 8 назад программиста, который не любил отладчики. Уж не знаю почему, но не любил. Математик он был хороший, но программы лучше бы ему писать не стоило. А писались программы у него исключительно методом, составными элементами которого были: строчный компилятор, вывод на экран отладочных данных и чесание репы. А программы отлаживать все равно приходилось. Выглядело так: сидит человек перед экраном глубоко задумавшись, правит пару строк, потом выполняет программу до нужного места, смотрит на данные и опять впадает в глубокую задумчивость.
Про стиль программирования у него лучше даже не рассказывать. Скажу только, что когда позже другим людям предложили деньги(не самые маленькие) за то, чтобы они разобрались в том, что он написал и довели до ума, они посмотрели исходники, волосы у них встали дыбом и они отказались что либо делать...



 
vuk   (2003-02-22 18:33) [10]

Кстати. Цитата с http://www.inr.ac.ru/~info21/blackbox/disciplina/poshag_otlad.htm

---------------

С профессиональной точки зрения неадекватность подхода "начнем как попало, потом отладим" заключается в следующем:

в низкой производительности программиста, так как поиск решения — т.е. построение программы — осуществляется в значительной степени наугад (хорошо известно выражение "агония отладки" — "the agony of debugging");

в неприемлемо низком качестве получающихся "залатанных" программ (трудность сопровождения, низкая надежность; подробнее об этом см. ниже).

---------------

Вот именно все это у того мужика и получилось. И как раз именно без отладчика. :o)


 
Ketmar   (2003-02-22 18:35) [11]

2vuk:
что смешно: к этопу подходу (который вы описываете в последней цитате) я пришел независимо. давно уже...

Satanas Nobiscum! 22-Feb-XXXVIII A.S.


 
paul_shmakov   (2003-02-22 18:38) [12]

а я пользуюсь и отладчиком и assert-ами :)
в release сборке assert-ы отключаю


 
vuk   (2003-02-22 18:42) [13]

to Ketmar:
>что смешно
Смешно не это, а то, что отсутствие отладчика привело ровно к тому, к чему, якобы, приводит его присутствие. Так может быть отладчик ни при чем? :o)


 
Palladin   (2003-02-22 19:04) [14]

нет
нет
иногда


 
Ketmar   (2003-02-22 19:12) [15]

>vuk © (22.02.03 18:42)
скажу так: когда я перестал полагаться на отладчик, мои программы стали более надежны...

Satanas Nobiscum! 22-Feb-XXXVIII A.S.


 
vuk   (2003-02-22 19:21) [16]

>когда я перестал полагаться на отладчик, мои программы стали
>более надежны...
Полагаться надо всегда на голову, вне зависимости от наличия отладчика. :o)


 
Ketmar   (2003-02-22 19:46) [17]

>vuk © (22.02.03 19:21)
ну дык дежукер помогает "не думать", имхо. "а фиг ли думать, коли потом в дежукере выловлю?!" когда такой способ писания выкинут -- тогда проще...

Satanas Nobiscum! 22-Feb-XXXVIII A.S.


 
vuk   (2003-02-22 19:54) [18]

>ну дык дежукер помогает "не думать"
Это строго индивидуально. :o) Про себя такого сказать не могу - заставить себя "не думать" мне достаточно сложно.


 
Mihey   (2003-02-22 20:13) [19]

Юзайте только ShowMessage :)


 
sniknik   (2003-02-22 23:00) [20]

все что в работе помогает то и нужно использовать, и думать никакой инструмент не мешает.
по вопросу
1 не использую (после коментария от Юрий Зотов © (22.02.03 15:19) про интересную информацию, возможно буду, посмотрю как минимум)
2 не отключаю
3 достаточно часто

вобщем аналогично
Anatoly Podgoretsky © (22.02.03 13:55)
Ihor Osov"yak © (22.02.03 14:48)
... куча единомышлеников :-))


 
Alex Konshin   (2003-02-23 06:15) [21]

Никогда не использовал Assert.
Никогда на использую отладчик в IDE, да и само использую только для создания форм (редактирую потом dfm). Использую практически исключительно OutputDebugString.
Range checking отключен в реализации базовых классов, и то только там, где это целесообразно.


 
DiamondShark   (2003-02-23 09:29) [22]

Ничто не заставляет так аккуратно водить автомобиль, как отсутствие тормозов.

Ничто так не приучает к аккуратности, как отсутствие мыла и горячей воды.

Кетмар, честно, Вам самому не смешно?


 
Alex Konshin   (2003-02-23 09:57) [23]

Перефразируя известный афоризм:
дебагер не всегда полезен, но и вреден.

Принцип неопределенности срабатывает - дебагер для некоторых типов приложений слишком сильно изменяет сами условия работы программы.


 
Юрий Зотов   (2003-02-23 12:18) [24]

> Ketmar © (22.02.03 19:12)
> когда я перестал полагаться на отладчик, мои программы
> стали более надежны...

Вот об этом в статье и говорится. И правильно говорится. Потому что полагаться надо ВСЕГДА на голову, и ТОЛЬКО на голову, а не на какие-то там отладчики.

Собственно, я всегда так и делал. Ну это, наверное, привычка от старой школы, когда никаких интерактивных отладчиков и вовсе не было. А небрежное написание программы приводило к тому, что надо было много раз бегать на ВЦ, записываться на машинное время, а потом ждать своей очереди (либо ставить знакомым девчонкам-операторшам всякие там чай-конфеты). И все лишь для того, чтобы через 5 минут еще раз убедиться в том, что "сам дурак". И что программы надо писать как следует, а не как попало.

Собственно, это и сейчас актуально. Потому что давно подсчитано, что само кодирование - это всего лишь 20% времени, а 80% - это отладка. Так не лучше ли потратить лишнее время на эти 20%, чтобы потом сэкономить на 80-ти, да еще и получить более качественный софт?

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


 
DiamondShark   (2003-02-23 12:20) [25]

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

Если компилятор вот такой код

for i := Min to Max do
A[i] := B[i*2 + 1] + C[12345 - i]


переводит в такой

MOV EBX, Max-Min+1
MOV ESI, адрес B[Min*2+1]
MOV ECX, адрес C[12345-Min]
MOV EDI, адрес A[Min]
@@Loop:
MOV EAX, [ESI]
ADD EAX, [CX]
STOS
SUB ECX, размер элемента C
ADD ESI, удвоенный размер элемента B
DEC EBX
JNZ @@Loop


то это оптимизатор, и это есть плохо, и это усложняет жизнь?

А компилер, который разместит i на стеке и воткнёт в цикл вычисления i*2+1 и 12345-i жизнь не усложнит? Или это не оптимизатор? А что тогда есть оптимизатор?


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


Да, например, реал-тайм код бесполезно трассировать отладчиком. Но что из этого следует? Да ничего!


 
Anatoly Podgoretsky   (2003-02-23 12:24) [26]

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


 
y-soft   (2003-02-23 15:50) [27]

Совершенно согласен, что отладчик головы не заменяет, а в большинстве случаев является просто удобным инструментом. IMHO использовать или не использовать его - дело вкуса и пристрастий.

Assertions, запись в лог, ShowMessage etc применяю, когда отладчиком пользоваться неудобно или вообще невозможно и только в отладочных версиях. Вместо этого в конечных версиях ввожу расширенную обработку исключений (выстраданное решение!) с возможностью записи в файл - пользователям понятней, да и мне при разборе ошибок очень удобно.

Как бы аккуратно, предусмотрительно, правильно программист не писал, при работе сложных приложений под разными аппаратными конфигурациями и в разных версиях Windows сбоев избежать в принципе невозможно


 
iZEN   (2003-02-23 16:02) [28]

Люди ещё придумали фреймворк тестирования модулей: для Java он называется JUnit (очень маленький по объёму). Хотя NetBeans (одна из Java IDE) и позволяет одним нажатием кнопки мыши дополнить Java-класс встроенным механизмом самопроверки с записью в лог (встраивание тестов JUnit), но я часто поступаю по-старинке: отлаживаю код по шагам.
Думаю зря - надо полнее автоматизировать свою работу где только можно.

Кстати, фреймворк JUnit - продукт идеологии "Экстремального программирования".


 
anpsoft   (2003-02-23 20:04) [29]

вот что скажу про отладчик
я не считаю что он ненужен, хотя 10 раз сам подумаю прежде чем к нему на поклон :)

да и характер моей работы в последнее время заставляет многое делать исключительно без него, просто потому что иначе никак :)

как я могу запустить программу под отладчиком, если программа работает за океаном, а внешних устройств с которыми она работает у меня нет, да и интернета отличного для удаленной отладки тоже нет.
Вот и работаешь как с закрытыми глазами :)
Придумываешь кучу логов, заглушек, имитации работы процедур и тд.

выручает только то что я еще успел писать в своё время под ЕС ЭВМ с перфокартами и распечатками, когда на полный цикл уходило 2-3 дня, от отдачи в перфораторную до получения распечаток :)







 
Ihor Osov'yak   (2003-02-23 20:45) [30]

> когда на полный цикл уходило 2-3 дня,

На один прогон... То бышь одно нажатие F9 по дельфийски.. :-).


 
anpsoft   (2003-02-23 21:54) [31]

во-во :)))



 
DiamondShark   (2003-02-24 11:21) [32]

Базар из серии "Вот были люди в наше время, не то что нынешнее племя".

Раньше люди были ближе к природе, слышали как растёт трава, на слух определяли двадцать семь неисправностей в тракторе, а любую несправность исправляли с помощью молтка, зубила и такой матери.


 
Юрий Зотов   (2003-02-24 11:31) [33]

> на слух определяли двадцать семь неисправностей в тракторе,
> а любую несправность исправляли с помощью молтка, зубила и
> такой матери.

Ну, положим, это все мы и сейчас умеем. Особенно последнее.


 
Ketmar   (2003-02-24 11:35) [34]

>DiamondShark © (23.02.03 09:29)
Дима, при всём моём к вам уважении... "нет, Шура, вы знаете, как я уважаю Бендера, но..." (ц) ЛЮБУЮ идею можно превратить в абсурд. а потом тыкать собеседника носом в собственночерепно сочинённый текст и спрашивать: "ну что, не смешно?". "фу" (ц)

Satanas Nobiscum! 24-Feb-XXXVIII A.S.


 
DiamondShark   (2003-02-24 13:07) [35]


> Ketmar © (24.02.03 11:35)
> ЛЮБУЮ идею можно превратить в абсурд.


Угу, согласен. Так, например, идею "надо думать головой" можно довести до "нам бояре не указ", а идею "полезно послушать авторитет" можно довести до "так сказал Хенк".
Мне показалось, что именно это и происходит. Я ошибся? Ну и замечательно!

Просто я думал, что у вас есть некий э.. мм.. скажем так... иммунитет против определённым образом сформулированных утверждений...


 
Ketmar   (2003-02-24 14:02) [36]

>DiamondShark © (24.02.03 13:07)
ну лично с моей стороны здесь были просто объяснения, что ДЛЯ МЕНЯ удобно так-то и так-то. более того, об этом же говорят и авторитеты (в принципе, пофигу, но самолюбие греет). не более.

Satanas Nobiscum! 24-Feb-XXXVIII A.S.


 
paul_shmakov   (2003-02-24 16:30) [37]

2 iZEN:
"Люди ещё придумали фреймворк тестирования модулей: для Java он называется JUnit"

а для delphi он называется dunit ( http://dunit.sourceforge.net/)


 
uw   (2003-02-24 17:12) [38]

Все. Я вернулся из отпуска. Всем привет!

>Мнение Н.Вирта: "... Нет другого, более сильного стимула для аккуратного программирования, чем отсутствие отладчика.

Был у меня период, когда я писал для микропроцессора 8080 на ассемблере в перфоленточной системе с использованием строчного редактора. Уверяю вас – нет более сильного стимула для аккуратного программирования, чем отсутствие экранного редактора, языка высокого уровня и дисковых накопителей!

Я общался с разработчиком прибора, который утверждал: отладчик не нужен, просто нужно аккуратно программировать. При этом он использовал хороший анализатор сигналов за 5000$. Правда, когда я попытался извлечь из прибора информацию через модемный выход, выяснилось, что это не получается. Всего через пару месяцев его аккуратных исправлений я сумел прочитать то, что надо.

У меня есть сотрудник – начальник сектора разработки контроллеров. Когда на совещании говоришь, что не плохо бы разрабатывать железо с учетом наличия отладочных средств, он заявляет, что его люди умеют программировать безо всяких отладчиков. При этом его люди пользуются запоминающими осциллоскопами по 2-3 тыс. баксов, а в тихую – еще и приборами типа JTAG и ворованными IDE. Но это конечно политические дела.

Теперь мое имхо об Assert $ Debugger в Delphi. Assert очень хорошо подходит, когда ты думаешь, что ошибка может быть абсолютно в любом месте программы, т.к. дебугером тебе пользоваться за падло, и ты, хорошо все продумав, расставляешь его, где не попадя (на всякий случай). Но я думаю, Николас Вирт осудил бы и такой подход. Ведь он сетует не на использование отладчиков как таковых, а на тенденцию новичков писать алгоритм как-нибудь, а потом изучать поведение того, что получилось, с помощью отладчика и улучшать это.

Вообще-то, один цикл я уверенно могу написать без ошибок. В двухстах строках я наверняка сделаю ошибку. В нескольких десятках тысяч строк у меня ошибок много и иногда удивительных. Практически все легко устраняются отладчиком. Но остаются единицы очень сложных ошибок. Тут ничто не помогает – только размышления и изобретение методов типа метода кабанчика.

Вот его происхождение. Есть программа, получающая технологическую информацию от сотен контроллеров, разбросанных по Москве. Информация поступает периодически и спорадически, обрабатывается и укладывается в оракловую базу. Раз в 2-3 дня программа падает. Это очень неприятно, потому что падает и ночью, когда оператор спит. Понятно, что что-то происходит во время записи в БД. Сохраняю информацию, которая вроде бы привела к сбою, проверяю: в БД все записывается нормально. И вдруг удача – программа начинает падать каждые четверть часа. Все равно никакой закономерности не вижу. Потом бегу, останавливаю, программу на боевой машине и на своем компьютере начинаю исследовать стационарную ситуацию, когда новые данные не поступают, но идет пролонгация периодических данных. И тут понимаю, что одновременно из двух потоков обращаюсь к нереентерабельному коду. Победа!

Вася понаблюдал за моими телодвижениями и вспомнил историю из детства. Его дядька с приятелем решили забить кабанчика. Существует два способа: первый – перерезать горло, но при этом кабанчик визжит; второй – ножом под мышку в сердце, но он требует точности. И хотя парни уже приняли, все же выбрали второй способ. После этого стали решать, как опалить щетину. Тут опять два пути: первый – паяльная лампа, но после этого кабанчик будет вонять; вторая – с помощью соломы. Пошли искать солому. Пока ходили, кабанчик оправился от болевого шока и удрал. Долго ловили по всей деревне – поймали. Дядька опять ткнул его ножом, потом отрубил кабанчику ноги и сказал: «Теперь не убежит!»

Так и родился термин «метод кабанчика».



 
Ketmar   (2003-02-24 17:39) [39]

>uw © (24.02.03 17:12)
не утрируйте. чтобы не пользоваться отладчиком, надо, как минимум, иметь нормальный язык. бедным цистам, имхо, такое счастье светит с трудом.
опять же, из личного опыта: пол-дня блужданий в отладчике привели к тому, что я тупо забыл о нём, расставил в стратегических местах assert"ы и WriteLn"ы. после чего за 10 минут жук был локализован и уничтожен.
Assert же я обычно применяю для проверки входных параметров процедур или их (процедур) результатов.
а "метод кабанчика" -- рулез. "я плакалъ" (ц)

Satanas Nobiscum! 24-Feb-XXXVIII A.S.


 
uw   (2003-02-24 17:48) [40]

>Ketmar © (24.02.03 17:39)

Между прочим, если бы я и в самом деле расставил Assert"ы, то нашел бы ошибку сразу.



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.012 c
1-29798
Adolf
2003-02-27 17:53
2003.03.10
Граница


14-30108
Uncle Archi
2003-02-21 22:16
2003.03.10
DirectX


14-30130
Anatoly Podgoretsky
2003-02-23 16:25
2003.03.10
Именинник 22 февраля


1-29917
Ozone
2003-02-27 08:02
2003.03.10
Как получить текущую директорию запускаемого exe-файла.


14-30027
Pavel_S
2003-02-23 15:57
2003.03.10
Программа администрирования





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский