Разница между надёжностью и безопасностью

Nov 06, 2016 11:20



https://ru.wikipedia.org/wiki/Therac-25
Therac-25 - аппарат лучевой терапии, созданный канадской государственной организацией «Atomic Energy of Canada Limited» и запущенный в серию в 1982 году. С июня 1985 года по январь 1987 года этот аппарат стал причиной как минимум шести передозировок радиации, некоторые пациенты получили дозы в десятки тысяч рад. Как минимум двое умерли непосредственно от передозировок.

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

...
Непонимание разницы между надёжностью и безопасностью.

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

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

...
Были проигнорированы некоторые базовые практики программирования в Therac-25, а именно:
  • Написание документации и спецификаций к программному обеспечению.
  • Строгая верификация программного обеспечения с применением стандартов.
  • Проектирование должно быть достаточно простым и необходимо избегать опасных практик программирования. В случае Therac-25 в программном коде было много «трюкачества».
  • Способы ведения журнала работы и способов их получения должны быть заданы с самого начала разработки.
  • Программное обеспечение должно быть подвергнуто детальному тестированию и использованием формального анализа, как на уровне модулей, так и на уровне всего комплекса в целом. Одного системного тестирования недостаточно. Необходимо проводить регрессионное тестирование на всех этапах.
  • Представление информации пользователю и сам интерфейс должны быть аккуратно спроектированы. В частности, как сообщения об ошибках, так и документация и руководство пользователя.
  • Всё программное обеспечение было написано на ассемблере, хотя в данном случае лучшим решением было бы использовать язык высокого уровня.

надежность

Previous post Next post
Up