"Валерий Аджиев "Мифы о безопасном ПО: уроки знаменитых катастроф" [V]" - читать интересную книгу автора

сравнению с теми традиционными (например, электро-механическими)
приборами, которые они заменяют.

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

В конце 80-х гг. такая влиятельная в оборонных кругах организация как
British Royal Signals and Radar Establishment сделала попытку оценки
распространенности дефектов в ПО, написанном для ряда очень ответственных
систем. Оказалось, что "до 10% программных модулей и отдельных функций не
соответствуют спецификациям в одном или нескольких режимах работы" [7].
Такого рода отклонения были обнаружены даже в ПО, прошедшем полный цикл
всестороннего тестирования. Хотя большинство обнаруженных ошибок были
признаны слишком незначительными, чтобы вызвать сколь-либо серьезные
последствия, все же 5% функций могли оказывать разного рода значимое
негативное воздействие на поведение всей системы. Примечательно, что среди
прочего авторы исследования особо упомянули выявленную в одном из модулей
неназванной системы потенциальную возможность переполнения в целой
арифметике, что могло привести к выдаче команды приводу повернуть некую
установку не направо (как следовало), а налево. Достаточно предположить,
что речь в ПО шла об управлении ориентацией пусковой ракетной установки,
чтобы представить возможные последствия.

Коварство программных ошибок и в том, что они могут проявиться далеко
не сразу, иногда после сотен тысяч часов нормальной эксплуатации как
реакция на вдруг возникшую специфическую комбинацию многочисленных
факторов. Так, установка Therac-25 вполне корректно работала в течение
нескольких лет до первого переоблучения; и последующие зафиксированные
инциденты происходили спорадически в течение 2.5 лет на общем "нормальном"
фоне. NASA инвестировала огромные средства и ресурсы в верификацию и
сопровождение программного обеспечения для космических кораблей Shuttle.
есмотря на это, за 10-летие с 1980 г. времени начала использования ПО
выявлено 16 ошибок "первой степени серьезности" (способных привести к
"потере корабля и/или экипажа"). Восемь из этих ошибок не были обнаружены
своевременно и присутствовали в коде во время полетов, хотя, к счастью,
без последствий.
Зато во время полетов были задокументированы проблемы, возникшие от
проявившихся 12 значимых ошибок, из которых три относились ко "второй
степени серьезности" ("препятствуют выполнению критически важных задач
полета"). А ведь NASA имеет, может быть, самую совершенную и дорогостоящую
комплексную систему процессов разработки и верификации ПО.