Часто можно услышать, что код на языке с проверкой корректности операций во время исполнения является более надёжным по сравнению с кодом без проверок. Но это утверждение страдает неточностью, которое косвенно может приводить даже к уменьшению надёжности.
Автоматическая проверка корректности операций обычно подразумевает прерывание обычного потока выполнения в случае обнаружения ошибки. Это полезная особенность, но важно то, что это не приводит к предотвращению поломок, в то время как надёжность подразумевает их отсутствие.
На самом деле автоматический контроль за ошибками операций увеличивает предсказуемость от реакции на ошибку, но не надёжность. Предсказуемость вероятностным образом влияет на безопасность, что часто означает её увеличение, но не всегда, потому что непредсказуемость может вылиться и в более удачное выполнение, чем гарантированное аварийное завершение [0].
Помимо случайностей автоматический контроль за корректностью операций может приводить к уменьшению безопасности и системно в результате неправильной трактовки безопасности.
- Из-за излишнего полагательства на "безопасность" языка разработчики могут менее ответственно относиться к написанию кода.
- Злоупотребление возможностью языка останавливать некорректное выполнение вместо предусмотрения аккуратных обработок неправильных вводимых данных.
Улучшения же надёжности при помощи автоматической диагностики можно добиться если использовать её
- как дополнительную возможность для обнаружения ошибок в тестовой системе
- в системе с подстраховкой из дублирующих вычислений, созданными независимо друг от друга
Но перечисленные действия не появляются сами только от того, что в языке применяется автоматическая проверка ряда свойств.
Примечания
[0] Похожая ситуация произошла при аварии Arian 5, где переполнение диапазона в уже неактуальных вычислениях привело к возникновению исключения, которое в конечном счёте привело к неадекватному поведению ракеты. Это результат стечения целого ряда просчётов, тем не менее, просто неправильное вычисление в данном случае не привело бы к дорогостоящей аварии.
Комментариев нет:
Отправить комментарий