Страницы

Автоконтроль над ошибками в коде не увеличит надёжность (автоматически)

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

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

На самом деле автоматический контроль за ошибками операций увеличивает предсказуемость от реакции на ошибку, но не надёжность. Предсказуемость вероятностным образом влияет на безопасность, что часто означает её увеличение, но не всегда, потому что непредсказуемость может вылиться и в более удачное выполнение, чем гарантированное аварийное завершение [0].

Помимо случайностей автоматический контроль за правильностью операций может приводить к уменьшению надёжности и системно в итоге неправильной трактовки надёжности.

  • Из-за излишнего полагательства на «безопасность» языка разработчики могут менее ответственно относиться к написанию кода.
  • Из-за злоупотребления возможностью языка останавливать неправильное выполнение вместо предусмотрения аккуратных обработок неправильных вводимых данных.

Улучшения же надёжности при помощи автоматических проверок можно добиться, если использовать их

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

Но перечисленные действия не появляются сами только от того, что в языке применяется автоматическая проверка ряда свойств.

Примечания

[0] Похожая ситуация произошла при аварии Arian 5, где переполнение отрезка значений в уже неактуальных вычислениях привело к возникновению исключения, которое в конечном счёте привело к неадекватному поведению ракеты. Это итог стечения целого ряда просчётов, тем не менее, просто неправильное вычисление в данном случае не привело бы к дорогостоящей аварии.

Комментариев нет:

Отправить комментарий