Надежность, прочность, устойчивость
При обсуждении свойств программной системы мы часто оперируем такими терминами, как надежность, прочность и устойчивость, не проводя четких различий между ними. Однако, при формулировании требований эти понятия следует рассматривать отдельно. Если вы думаете, что это не столь важно, то инженеры NASA, которые занимаются проектированием систем жизнеобеспечения, так не считают. Как мне кажется, данный опыт вполне применим и при проектировании программных систем.

-
Надежность (Reliability) - вероятность того, что система не выйдет из строя в течении определенного периода времени и при определенных условиях эксплуатации. Иначе говоря, в заданных условиях эксплуатации система стабильна и отвечает проектным требованиям.
-
Прочность (Robustness) - способность системы работать удовлетворительно или даже в соответствии с заявленными требованиями, несмотря на воздействия, выходящие за рамки предопределенных условий эксплуатации, но при этом являющимися возможными. Прочность рассматривается в контексте предвидимых проблем.
-
Устойчивость (Resilience) - способность системы быстро восстанавливаться или адаптироваться к непредвиденным происшествиям или изменениям, которые нарушают базовые проектные предположения. Устойчивость рассматривается в контексте непредвиденных или маловероятных проблем.
Таким образом, надежность, прочность и устойчивость определяют поведение системы на трех уровнях сложности условий эксплуатации. Сначала в заданной среде; затем в среде с вероятными проблемами; наконец, во враждебной, деструктивной среде.
Предполагается, что по мере развития системы уточняются условия её эксплуатации, модель оперативного окружения становится более точной и реалистичной. Мы сталкиваемся с непредвиденными проблемами, понимаем причины их возникновения, а затем решаем эти проблемы, переводя их в статус известных. Таким образом, совершенствование системы заключается в движении от уровня устойчивости к уровню надежности. Когда мы понимаем, что возникшая непредвиденная ситуация является нормой, которую мы не учли на ранних стадиях проектирования, мы уточняем требования к прочности или даже надежности.
Всегда ли необходимо заботиться об устойчивости? Зависит от рисков, которые несет бизнес при возникновении таких ситуаций. Последствия могут включать временны́е, репутационные, финансовые риски или даже создавать угрозу жизни людей. С одной стороны, совсем игнорировать уровень непредвиденных ошибок, упрощая модель системы, конечно, было бы глупо. С другой, попытка учесть всевозможные ситуации для большинства программных систем, является неоправданным усложнением.
К посту прикрепляю оригинал статьи “Going Beyond Reliability to Robustness and Resilience in Space Life Support Systems”, Harry W. Jones, 2021.
По итогу хочу всем пожелать в Новом 2025 году надежности, прочности и устойчивости! А если будут возникать непредвиденные ситуации, то пусть они будут только приятными.
Понравилась статья?
Посмею напомнить, что у меня есть Telegram-канал Архитектоника в ИТ, где я публикую материал на похожие темы примерно раз в неделю. Подписчики меня мотивируют, но ещё больше мотивируют живые дискуссии, ведь именно в них рождается истина. Поэтому подписывайтесь на канал и будем оставаться на связи! ;-)
Статьи из той же категории: