OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 25 Апрель, 2024 15:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Понедельник, 29 Март, 2010 23:38 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Info21 писал(а):
Madzi писал(а):
В первом случае ASSERT необходим (даже в релизе)
...
И еще важная роль -- страховка на случай будущих модификаций программы, на случай разрушения инвариантов и т.п.
У меня такие ассерты и оформлены обычно как комментарии (серо-зеленый курсив, от которого глазу легко "отстроиться", но и прочесть легко).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 06:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Axcel писал(а):
разумеется есть еще просто "не штатные ситуации", но их обработка - другой вопрос и одно другого не заменяет. Нужно и то и другое.
А бодание с ломкой рогов происходит -- как обычно -- из-за отсутствия четкой границы в спектре между двумя концами:
-- форс-мажором, когда надо просто остановиться, и
-- штатной обработкой штатных ситуаций типа опечаток во входных данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 09:22 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Info21 писал(а):
Axcel писал(а):
разумеется есть еще просто "не штатные ситуации", но их обработка - другой вопрос и одно другого не заменяет. Нужно и то и другое.
А бодание с ломкой рогов происходит -- как обычно -- из-за отсутствия четкой границы в спектре между двумя концами:
-- форс-мажором, когда надо просто остановиться, и
-- штатной обработкой штатных ситуаций типа опечаток во входных данных.

Очевидно, что решение о том, что есть что, нужно принимать еще при проектировании. И потом жестко проводить это решение в разработке.
Но возможно, что при проектировании принято не совсем правильное решение. Просто в силу отсутствия некоторой информации на момент проектирования. Тогда - что?
Вопрос в том, что возможен ли ГИБКИЙ способ обработки ситуаций.
Как вы эту проблему решаете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 10:19 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Повторюсь.

1) Ситуации которые являются внешними по отношению к программе (программа не может повлиять на них). Например, ошибка записи на диск.
Такую ситуацию нужно обрабатывать по коду возврата из процедуры. ASSERT в этом случае не нужен.

2) Ситуация которая является внутренней. Например, введена строка, когда ожидалось число.
Такая ситуация должна отлавливаться ASSERTом. Пусть у нас форс-мажор и нам некогда писать корректную проверку типа введённой информации, тогда мы ставим ASSERT который будет гарантировать, что введено число, и предупреждаем пользователей, что вводить нужно только числа. В дальнейшем, когда у нас появится время, этот ASSERT будет нам напоминать, что необходимо дописать проверку на корректность введённых данных, после чего программа перестанет вываливаться, если только не будет иметь место ошибка в реализации проверки или хак со стороны пользователя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 10:38 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Madzi писал(а):
Повторюсь.

2) Ситуация которая является внутренней. Например, введена строка, когда ожидалось число.
Такая ситуация должна отлавливаться ASSERTом. Пусть у нас форс-мажор и нам некогда писать корректную проверку типа введённой информации, тогда мы ставим ASSERT который будет гарантировать, что введено число, и предупреждаем пользователей, что вводить нужно только числа. В дальнейшем, когда у нас появится время, этот ASSERT будет нам напоминать, что необходимо дописать проверку на корректность введённых данных, после чего программа перестанет вываливаться, если только не будет иметь место ошибка в реализации проверки или хак со стороны пользователя.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 10:48 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Валерий Лаптев писал(а):
Madzi писал(а):
Повторюсь.
... В дальнейшем, когда у нас появится время, этот ASSERT будет нам напоминать, что необходимо дописать проверку на корректность введённых данных, после чего программа перестанет вываливаться, если только не будет иметь место ошибка в реализации проверки или хак со стороны пользователя.

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

:) может быть. Так было бы, если бы ASSERTа не было, и программа просто падала, а так возможны 2 варианта:
1) пользователи доканают программиста и он таки напишет код;
2) пользователи доканают программиста и он уберёт ASSERT (более вероятно :) )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 14:15 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Давайте подумаем, в каких местах наиболее уместен ASSERT.
IMHO, это прежде всего проверка предусловий экспортируемых функций.
К (синтаксической) герметичности оберонов ASSERT добавляет (семантический) firewall, препятствующий ошибкам пересекать границы модулей.
"Отлов" большинства других ситуаций, во избежание уродования кода бессмысленными многочисленными проверками, можно поручить компилятору. Например, переполнение числовых типов. А вот предотвращать такие ошибки необходимо на этапе анализа и проектирования, а не кодирования. Вспоминается знаменитая история с падением Ариана-5 из-за переполнения 16-битного целого.
Если есть требование бесперебойной работы системы в режиме 365x24, то необходимы дополнительные меры: перехват исключений (Kernel.Try), да и WatchDog (для встроенных систем) не помешает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 14:28 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
И добавлю. Для обеспечения работы 52*7*24 нужно применять model checking - см. книгу Карпова с означенным названием на озоне.
model checking специально разработан для верификации систем реального времени.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 15:14 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 372
Валерий Лаптев писал(а):
И добавлю. Для обеспечения работы 52*7*24 нужно применять model checking - см. книгу Карпова с означенным названием на озоне.
model checking специально разработан для верификации систем реального времени

Однако, тут существуют действительно серьезные проблемы:
1. Кто поручится, что сформулированы для проверки действительно ВСЕ свойства, важные для бесперебойной работы системы?
2. В этом методе проверяется не ПО, а модель. Которая никто не гарантирует, что действительно адекватна (полностью соответствует) проверяемой системе. И, к сожалению, нет инструмента автоматической генерации модели по, скажем, тексту программы. А вот у кое-кого 8) некоторый инструмент подобного рода есть - точнее, программа синтезируется автоматически по модели, и эту же модель можно проверить на соответствие формально специфицированным свойствам. Поскольку это именно та модель, по которой генерируется программа, можно надеяться, что проверяются именно ее свойства.

И, кстати, model checking разработан не специально для систем реального времени, изначально как раз он не позволял проверять такие свойства.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 30 Март, 2010 16:34 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
TAU писал(а):
И, кстати, model checking разработан не специально для систем реального времени, изначально как раз он не позволял проверять такие свойства.

Я сужу по книжке Карпова. Там все примеры - системы реального времени... ВременнЫе логики разработаны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Когда применять ASSERT?
СообщениеДобавлено: Вторник, 13 Апрель, 2010 18:05 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Info21 писал(а):
У меня такие ассерты и оформлены обычно как комментарии (серо-зеленый курсив, от которого глазу легко "отстроиться", но и прочесть легко).


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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB