Оскорбительное программирование

Материал из wikixw
Перейти к навигации Перейти к поиску

Наступательное программирование - это название, используемое для ветви защитного программирования, которая явно отходит от принципов защиты при работе с ошибками, вызванными ошибками в программном обеспечении. Хотя название является реакцией на крайние интерпретации защитного программирования, они принципиально не противоречат друг другу. Скорее, оскорбительное программирование добавляет явный приоритет нетерпимость к ошибкам в неправильных местах: точка, в которой он отходит от крайних интерпретаций защитного программирования, заключается в том, что он предпочитает наличие ошибок внутри линии защиты программы быть совершенно очевидным, а не гипотетическую выгоду безопасности от их терпимости. Это предпочтение также оправдывает использование утверждений.

Различение ошибок[править]

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

Контрастные примеры:

Т
Ожидаемые ошибки Предотвратимые ошибки
Неверный пользовательский ввод Недопустимые аргументы функции
Истощение ресурсов операционной системы (таких как хранилище, память) Значение вне определенного диапазона (например, перечисление)
Сбой оборудования (например, сети, хранилища) Недокументированное возвращаемое значение или исключение

Стратегии обнаружения ошибок[править]

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

Стратегии:

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

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

Смотрите также[править]

Быстрый сбой

Пруф[править]

johannesbrodwall.com/2013/09/25/offensive-programming/