Наступательное программирование
Эта статья может быть слишком технической для понимания большинства читателей . ( декабрь 2016 г. ) |
Наступательное программирование — это название, используемое для отрасли защитного программирования , которая явно отходит от защитных принципов при работе с ошибками, возникающими в результате ошибок программного обеспечения . Хотя это название является реакцией на крайние интерпретации защитных программ, они не противоречат фундаментально. Скорее, наступательное программирование добавляет явный приоритет недопустимости ошибок в неправильных местах: точка, в которой оно отходит от крайних интерпретаций защитного программирования, заключается в предпочтении наличия ошибок внутри линии защиты программы явно очевидным гипотетическим преимуществам безопасности. терпеть их. [1] [2] Это предпочтение также оправдывает использование утверждений .
Отличительные ошибки
[ редактировать ]Предпосылкой наступательного программирования является различие между ожидаемыми ошибками, возникающими из-за пределов линии защиты программы, какими бы маловероятными они ни были, от предотвратимых внутренних ошибок, которые не должны произойти, если все ее программные компоненты ведут себя ожидаемым образом.
Контрастные примеры:
Ожидаемые ошибки | Предотвратимые ошибки |
---|---|
Неверный ввод пользователя | Неверные аргументы функции |
Истощение ресурсов ОС (таких как хранилище, память) | Значение вне определенного диапазона (например, enum ) |
Сбой оборудования (например, сети, хранилища) | Недокументированное возвращаемое значение или исключение |
Стратегии обнаружения ошибок
[ редактировать ]Наступательное программирование связано с неудачей, то есть с опровержением предположений программиста. Выдача сообщения об ошибке может быть второстепенной целью.
Стратегии:
- Никаких ненужных проверок: основным принципом является уверенность в том, что другие программные компоненты ведут себя так, как указано, чтобы не скрыть любую неизвестную проблему. В частности, некоторые ошибки уже могут гарантированно привести к сбою программы (в зависимости от языка программирования или среды выполнения), например, разыменование нулевого указателя . Таким образом, проверки нулевого указателя не нужны для остановки программы (но их можно использовать для вывода сообщений об ошибках).
- Утверждения — проверки, которые можно отключить — являются предпочтительным способом проверки вещей, в проверке которых нет необходимости, например, контрактов на проектирование между программными компонентами.
- Удалить резервный код ( limp mode ) и резервные данные ( значения по умолчанию ). Они могут скрыть дефекты в основной реализации или, с точки зрения пользователя, скрыть тот факт, что программное обеспечение работает неоптимально. Особое внимание к нереализованным частям может потребоваться в рамках заводских приемочных испытаний , поскольку еще нереализованный код не находится на какой-либо стадии разработки через тестирование, которую можно было бы обнаружить при неудачных модульных тестах .
- Удалите сокращенный код (см. шаблон стратегии ). Упрощенный путь к коду может скрыть ошибки в более общем пути к коду, если общий код почти никогда не запускается. Поскольку предполагается, что оба метода дают один и тот же результат, упрощенный вариант можно исключить.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Наступательное программирование» . Каннингем энд Каннингем, Инк . Проверено 4 сентября 2016 г.
- ^ Бродволл, Йоханнес (25 сентября 2013 г.). «Наступательное программирование» . Мышление внутри большей коробки . Проверено 4 сентября 2016 г.