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 писал(а):
А зачем грузить тестами логически верифицированную программу?

Как зачем? Удовольствие получать.

Да, но это означает, что ещё есть какое-то недоверие к логической верификации программ. А раз так, то зачем вообще верифицировать программы? :lol:

Автор:  AVC [ Понедельник, 13 Октябрь, 2008 09:45 ]
Заголовок сообщения:  Re: О пошаговой отладке

Geniepro писал(а):
Да, но это означает, что ещё есть какое-то недоверие к логической верификации программ. А раз так, то зачем вообще верифицировать программы? :lol:
Характерно для абсолютизированной логики: либо все, либо ничего.
А ведь суть сказанного 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".

По-моему, такой момент удовольствия реально присутствует.
Кент Бек. Экстремальное программирование. (Глава 9. Обратно к истокам)
Цитата:
... если мы хотим работать сообразно с человеческой природой и при этом мы хотим обеспечить тестирование, мы должны найти для тестирования краткосрочную эгоистическую причину.
К счастью, такая краткосрочная причина существует. Программирование, в случае, если вы используете тесты, - это более приятный процесс, чем программирование без тестов. Вы кодируете со значительно большей уверенностью.
Там большой хороший отрывок о том, почему тесты и полезны, и приятны. Рекомендую.

Автор:  Иван Кузьмицкий [ Понедельник, 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. :wink:

Автор:  Info21 [ Вторник, 16 Октябрь, 2012 12:40 ]
Заголовок сообщения:  Re: О пошаговой отладке

Oleg N. Cher писал(а):
Вместо:
Илья Ермаков писал(а):
Код:
   IF k < dim THEN
      RETURN FALSE
   ELSE
      RETURN TRUE
   END
Код:
   RETURN k >= dim

Хотя, кажется, так слегка менее наглядно... Зато "правильно", по-Обероновски-07. :wink:
По-моему, как раз это более наглядно.

(А И.Е. позор за такой код.)

Страница 3 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/