OberonCore https://forum.oberoncore.ru/ |
|
О пошаговой отладке https://forum.oberoncore.ru/viewtopic.php?f=8&t=1183 |
Страница 3 из 4 |
Автор: | Geniepro [ Понедельник, 13 Октябрь, 2008 09:06 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Trurl писал(а): Geniepro писал(а): А зачем грузить тестами логически верифицированную программу? Как зачем? Удовольствие получать. Да, но это означает, что ещё есть какое-то недоверие к логической верификации программ. А раз так, то зачем вообще верифицировать программы? |
Автор: | AVC [ Понедельник, 13 Октябрь, 2008 09:45 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Geniepro писал(а): Да, но это означает, что ещё есть какое-то недоверие к логической верификации программ. А раз так, то зачем вообще верифицировать программы? Характерно для абсолютизированной логики: либо все, либо ничего.А ведь суть сказанного info21 проста: если вы правильно строите программу, ее и отлаживать легче, и тестировать приятнее. Необходимость в тестировании остается, т.к. человек несовершенен, ему свойственно ошибаться. Но найти потерянный винтик легче на чистом полу, чем в большой куче мусора. |
Автор: | Axcel [ Понедельник, 13 Октябрь, 2008 10:13 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Лично моя основная претензия к пошаговой отладке заключается в следующем: - это очень утомительное занятие. С другой стороны, соглашусь, что использование пошагового отладчика как анализатора чужого кода имеет смысл. В этой связи, есть-ли принципиальная возможность в ББ использовать "трап", вернее его отладочный дамп, без выхода из процедуры? Ну чтобы можно было после останова и получения дампа возобновить исполнение? |
Автор: | Trurl [ Понедельник, 13 Октябрь, 2008 10:16 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Geniepro писал(а): Да, но это означает, что ещё есть какое-то недоверие к логической верификации программ. Вообще говоря, не означает. Может я просто хочу насладиться списком сообщений "Test #1 - OK". |
Автор: | Александр Ильин [ Понедельник, 13 Октябрь, 2008 10:30 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Geniepro писал(а): Trurl писал(а): Как зачем? Удовольствие получать. Да, но это означает, что ещё есть какое-то недоверие к логической верификации программ. А раз так, то зачем вообще верифицировать программы? :lol: |
Автор: | AVC [ Понедельник, 13 Октябрь, 2008 10:46 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Axcel писал(а): Лично моя основная претензия к пошаговой отладке заключается в следующем: - это очень утомительное занятие. Согласен. IMHO, именно этот этап можно и нужно максимально автоматизировать ("пусть ошибка расскажет о себе сама").Впрочем, иногда задумчивое многочасовое щелкание мышкой в отладчике - хороший предлог для небольшой релаксации на работе ("Как что я делаю?! Не видишь разве - багу правлю!!"). Наденешь наушники, включишь плеер и - дрожите, ошибки! Сейчас я до вас доберусь, сейчас... сей-час... сей... хр-р... |
Автор: | Info21 [ Понедельник, 13 Октябрь, 2008 10:50 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Trurl писал(а): Может я просто хочу насладиться списком сообщений "Test #1 - OK". По-моему, такой момент удовольствия реально присутствует. <это для Geniepro, если кто не понял:> Создание батареи тестов есть часть разработки. Чтобы обеспечить будущее развития. Успешно прогнать батарею тестов на тщательно построенной программе -- значит, убедиться в правильности тестов (тесты = форма кодификации требований). |
Автор: | AVC [ Понедельник, 13 Октябрь, 2008 11:16 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Info21 писал(а): Trurl писал(а): Может я просто хочу насладиться списком сообщений "Test #1 - OK". По-моему, такой момент удовольствия реально присутствует. Цитата: ... если мы хотим работать сообразно с человеческой природой и при этом мы хотим обеспечить тестирование, мы должны найти для тестирования краткосрочную эгоистическую причину. Там большой хороший отрывок о том, почему тесты и полезны, и приятны. Рекомендую.
К счастью, такая краткосрочная причина существует. Программирование, в случае, если вы используете тесты, - это более приятный процесс, чем программирование без тестов. Вы кодируете со значительно большей уверенностью. |
Автор: | Иван Кузьмицкий [ Понедельник, 13 Октябрь, 2008 14:17 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Vlad писал(а): P.S. Эх... не в правильных циклах счастье... Это все кишки, которые никому не интересны. Может быть, если кишки изначально делать как-то модульно-компонентно-интерфейсно, то поиск багливых кусков будет проще? (это мысль вообще, а не про конкретную уже кем-то написанную систему, которую без отладчика отлаживать очень трудно) |
Автор: | Евгений Темиргалеев [ Понедельник, 13 Октябрь, 2008 14:29 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Vlad писал(а): P.S. Эх... не в правильных циклах счастье... Это все кишки, которые никому не интересны. Кишки не интересны, если они работают как положено. Чему сильно способствуют правильные циклы.
|
Автор: | Илья Ермаков [ Понедельник, 13 Октябрь, 2008 15:21 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Geniepro писал(а): А зачем грузить тестами логически верифицированную программу? От опечаток. Доп. проверка граничных ситуаций. И т.п. Верный расчёт любой инженерной конструкции не отменяет приёмо-сдаточных испытаний. |
Автор: | Vlad [ Понедельник, 13 Октябрь, 2008 15:37 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
AVC писал(а): А чтобы прояснить для себя подобные вопросы. Вот, к примеру, моя ситуация. Я делаю систему программирования для некоторых еще "неокученных" процессоров. При этом вынужден кроме компиляторов и ассемблеров делать также отладчик. Сам я отладчиком не пользуюсь, и меня беспокоит, что я недостаточно хорошо понимаю ожидания пользователей. Так что я заинтересован. Боюсь, что мои ожидания будут отличаться от ожиданий ваших пользователей, так как опускаться к железке мне приходится очень редко. Но если интересно, то вот основные сценарии, для которых я использую отладчик: 1) Точки останова с изучением того, как программа дошла до этих точек. 2) Останов программы по исключительной ситуации. В BB это уже есть в виде трапа по всяким ASSERT. 3) Выяснение какая зараза поганит стэйт. Этот сценарий, к счастью, появляется крайне редко - при ковырянии в чужих сишных либах. Тем не менее, что делать в таких случаях без дебагера я не знаю. |
Автор: | Vlad [ Понедельник, 13 Октябрь, 2008 15:54 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Евгений Темиргалеев писал(а): Кишки не интересны, если они работают как положено. Чему сильно способствуют правильные циклы. Наверное мне повезло Мне не приходилось ловить баги в неправильных циклах, поэтому мне непонятна вся эта шумиха вокруг правильных циклов. |
Автор: | Vlad [ Понедельник, 13 Октябрь, 2008 16:07 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Иван Кузьмицкий писал(а): Может быть, если кишки изначально делать как-то модульно-компонентно-интерфейсно, то поиск багливых кусков будет проще? (это мысль вообще, а не про конкретную уже кем-то написанную систему, которую без отладчика отлаживать очень трудно) Под "кишками" я как раз и понимаю то, что лежит за интерфейсом в модуле/компоненте. И что там лежит (какие именно циклы) с точки зрения временных затрат на отладку - несущественно (клинические случаи индусского кода не рассматриваем). Правильно определенные интерфейсы решают все - и сколько времени уйдет на поиск баги, и сколько времени уйдет на сам фикс. |
Автор: | Илья Ермаков [ Понедельник, 13 Октябрь, 2008 16:19 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Но где гарантия, что бага будет исправлена, если изначально нет уверенности, что алгоритмы строились правильно? |
Автор: | Vlad [ Понедельник, 13 Октябрь, 2008 16:31 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Илья Ермаков писал(а): Но где гарантия, что бага будет исправлена, если изначально нет уверенности, что алгоритмы строились правильно? Гарантию вам никто не даст, даже оберон Но вот максимальную уверенность, лично мне, дают тесты. И если будет код с кучей break'ов и покрытый тестами, и код с "правильными" циклами от самого Вирта, но без тестов - то мой выбор будет однозначно в пользу тестов P.S. Я уже говорил, 99% алгоритмов придуманы до нас, отлажены и положены в библиотеку. Можетет не верить, но я уже давно не писал циклов на C++. Потому что есть std::for_each (с успехом заменеят for), std::find_if (с успехом заменяет while) и еще сколько-то простых алгоритмов, к которым сводятся самые наворочные и непонятные циклы. |
Автор: | Илья Ермаков [ Понедельник, 13 Октябрь, 2008 17:19 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Я прекрасно Вас понимаю. Я сам работаю с программами, в которых подавляющее большинство циклов тривиально. Так же, как Вы используете итерирование foreach и поиск search, так и я - полный проход линйеный поиск. И "наворочные и непонятные" циклы в этом случае строит только тот, кто не видит этих паттернов ("для каждого" и "существует-найдём"). Поэтому применительно к данным задачам воспринимайте фразы о правильном построении как то, что человек не клепает "неповторимые велосипеды", а чётко различает и реализовывает эти паттерны. Но в задачах с нетривиальной алгоритмикой используются циклы, которые к этим схемам не сводятся. Без умения обосновать их никакой уверенности в их правильности быть не может. Касательно тестов - никто их не отменяет. Просто сами по себе они ничего не гарантируют. В программах даже нашего с Вами типа можно быть уверенным только в том случае, если они разработаны постепенным разбинием "сверху вниз", где суть каждого уровня очевидна. В частности, вышеназванный поиск и проход иногда раскручивается от сформулированного мат. предиката с кванторами E(xists) и A(ny). Типа, из одного алгоритма с матрицами (студенты у меня решали сегодня) - это одна из "листовых" процедур, до которых доразбили задачу: Код: PROCEDURE МаксВСтолбце (i, j: INTEGER): BOOLEAN;
(* Проверяет, что элемент m[i, j] является максимальным в своём столбце *) VAR k: INTEGER; BEGIN (* !E k: (k # i) & (m[k, j] >= m[i, j]) *) (* Коммент для форума: т.е. не существует такого элемента в столбце, который был бы больше m[i, j] Квантор E отображается тривиально в линейный поиск, показывающий либо опровергающий это утверждение: *) k := 0; WHILE (k < dim) & ~( (k # i) & (m[k, j] >= m[i, j]) ) DO INC(k) END; IF k < dim THEN RETURN FALSE ELSE RETURN TRUE END END МаксВСтолбце; |
Автор: | Сергей Оборотов [ Понедельник, 13 Октябрь, 2008 17:55 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
AVC писал(а): Для выдачи значений переменных, вероятно, можно использовать существующий отладчик ББ или его слегка модифицированную копию. Если кто-то вознамерится его делать просьба не ограничиваться выдачей значений переменных, но предусмотреть возможность остановки по выполнении условий, задаваемых в самом процессе отладки. Как раз для понимания пригодится.
После возврата из отладчика продолжить выполнение программы до следующей точки останова. |
Автор: | Oleg N. Cher [ Вторник, 16 Октябрь, 2012 11:24 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Вместо: Илья Ермаков писал(а): Код: IF k < dim THEN RETURN FALSE ELSE RETURN TRUE END Код: RETURN k >= dim Хотя, кажется, так слегка менее наглядно... Зато "правильно", по-Обероновски-07. |
Автор: | Info21 [ Вторник, 16 Октябрь, 2012 12:40 ] |
Заголовок сообщения: | Re: О пошаговой отладке |
Oleg N. Cher писал(а): Вместо: По-моему, как раз это более наглядно.Илья Ермаков писал(а): Код: IF k < dim THEN RETURN FALSE ELSE RETURN TRUE END Код: RETURN k >= dim Хотя, кажется, так слегка менее наглядно... Зато "правильно", по-Обероновски-07. (А И.Е. позор за такой код.) |
Страница 3 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |