Модуль III·Статья III·~5 мин чтения
Надёжность программного обеспечения и системная безопасность
Теория надёжности систем
Превратить статью в подкаст
Выберите голоса, формат и длину — AI запишет аудио
Надёжность программного обеспечения и системная безопасность
ПО становится критическим компонентом современных систем — самолёты Boeing 787 имеют ~10 млн строк кода, Tesla Model S — ~100 млн, F-35 — ~25 млн. Надёжность ПО принципиально отличается от аппаратной: ошибки детерминированы (одни и те же входы дают одну и ту же ошибку), не случайны, и ПО не «изнашивается» физически. Системная безопасность (safety) фокусируется на предотвращении катастрофических последствий вне зависимости от типа отказа. Стандарты IEC 61508 (общий), DO-178C (авиация), ISO 26262 (авто), IEC 62304 (медицина) определяют процессы разработки safety-critical ПО.
Особенности надёжности ПО
Принципиальные отличия от железа:
- Отказы детерминированы: одни входные данные → одна и та же ошибка. «Случайность» отказов ПО — это случайность входных данных и состояний.
- Нет физического износа: ПО не стареет в аппаратном смысле.
- Нет «кривой ванны»: после введения в эксплуатацию число дефектов снижается со временем (за счёт исправлений).
- Дефекты вносятся при разработке: bugs — в код, design flaws — в архитектуру.
Mean Time To Failure (MTTF) для ПО имеет смысл только при стабильном профиле использования. Если паттерны входов меняются — MTTF меняется.
Модели надёжности ПО
NHPP-модели (Non-Homogeneous Poisson Process). Кумулятивное число обнаруженных дефектов N(t) — NHPP с переменной интенсивностью λ(t). При обнаружении и исправлении дефектов λ(t) убывает.
1. Jelinski-Moranda (1972). Изначально N_0 дефектов. Интенсивность отказа в момент t: λ(t) = φ·(N_0 − n(t)), где n(t) — число обнаруженных к t. Каждый исправленный bug снижает λ на φ. Классическая модель, но переоценивает оставшиеся дефекты.
2. Goel-Okumoto (1979). N(t) ~ Poisson(a·(1 − e^{−b·t})). Параметры: a — общее число дефектов, b — скорость обнаружения. Пример: a = 200, b = 0.05 → за первые 50 дней находим ~84% дефектов.
3. Musa-Okumoto (1984). μ(t) = (1/θ)·ln(λ_0·θ·t + 1). Логарифмическая модель — медленное снижение интенсивности.
4. S-shaped Yamada (1984). μ(t) = a·(1 − (1 + b·t)·e^{−b·t}). S-образная кривая обнаружения дефектов: сначала медленный старт (тестировщики осваиваются), затем быстро, затем плато.
Калибровка моделей: методом максимального правдоподобия по данным тестирования (число дефектов в каждом интервале).
Численный пример
Команда тестировала ПО в течение 100 дней; обнаружено 80 дефектов. По данным подобрана Goel-Okumoto: a = 95, b = 0.04. Это означает: всего ~95 дефектов, на 100-й день обнаружено 95·(1 − e^{−4}) = 95·0.9817 = 93.3 (немного завышено относительно фактических 80, нужна доработка модели).
Прогноз на следующие 30 дней: μ(130) − μ(100) = 95·(e^{−4} − e^{−5.2}) = 95·(0.0183 − 0.0055) = 1.22 — ожидаем найти ещё ~1 дефект.
Решение о выпуске: если интенсивность дефектов λ(t) ≤ 0.01/день — релиз. Текущая λ(100) = a·b·e^{−b·100} = 95·0.04·e^{−4} ≈ 0.07/день — рано релизить.
Функциональная безопасность (IEC 61508)
Стандарт безопасности для электронных систем. Определяет 4 уровня SIL (Safety Integrity Level):
| SIL | PFD (low demand) | PFH (high demand) | Требуемое снижение риска |
|---|---|---|---|
| 1 | 10⁻² – 10⁻¹ | 10⁻⁶ – 10⁻⁵ | 10–100× |
| 2 | 10⁻³ – 10⁻² | 10⁻⁷ – 10⁻⁶ | 100–1000× |
| 3 | 10⁻⁴ – 10⁻³ | 10⁻⁸ – 10⁻⁷ | 1000–10000× |
| 4 | 10⁻⁵ – 10⁻⁴ | 10⁻⁹ – 10⁻⁸ | 10000–100000× |
PFD = Probability of Failure on Demand (для редко срабатывающих защит). PFH = Probability of dangerous Failure per Hour (для непрерывно работающих).
Архитектуры с резервированием
Обозначения KooN: «K из N должны работать».
1oo1. Один канал. PFD ≈ λ_DU·T_test/2 (DU = dangerous undetected, T_test — интервал proof-test).
1oo2. Два канала, защита срабатывает, если хоть один. Снижает risk failure to act, но повышает spurious trips. PFD ≈ (λ_DU·T_test)²/3.
2oo2. Два канала, защита срабатывает, только если оба. Снижает spurious trips, но повышает PFD. Hardly used safety-critical.
2oo3 (TMR — Triple Modular Redundancy). Три канала, защита срабатывает по большинству. Балансирует. Используется в Boeing 777 fly-by-wire, NASA Space Shuttle.
Common Cause Failure (CCF). Все каналы могут отказать одновременно (одна ошибка ПО, общий энергопровод, температура). Учитывается β-фактором: PFD_total = (1 − β)²·PFD_independent + β·PFD_single. β обычно 1–10%.
HAZOP (Hazard and Operability Study)
Систематический качественный анализ отклонений от проектных параметров. «Guide words» (БОЛЕЕ, МЕНЕЕ, НИКАКОГО, ОБРАТНО, ВМЕСТО) применяются к параметрам (поток, температура, давление, концентрация). Для каждой комбинации:
- Возможна ли причина?
- Каковы последствия?
- Существует ли защита?
- Что рекомендуется?
Стандарт нефтехимии, фармацевтики, ядерной отрасли.
Численный пример: SIL для защитной системы
Защита реактора от перегрева: 2 датчика температуры + логика 1oo2 (срабатывание при сигнале хотя бы одного). λ_DU каждого датчика = 0.01/год = 1.14·10⁻⁶/час. Интервал proof-test T = 1 год = 8760 часов.
PFD одного канала = λ_DU·T/2 = 1.14·10⁻⁶·8760/2 = 5·10⁻³. 1oo2 (без CCF): PFD = PFD_A · PFD_B = (5·10⁻³)² = 2.5·10⁻⁵ → SIL3. С CCF (β = 0.1): PFD = (1 − 0.1)²·2.5·10⁻⁵ + 0.1·5·10⁻³ = 2.0·10⁻⁵ + 5·10⁻⁴ = 5.2·10⁻⁴ → только SIL2.
Урок: CCF доминирует. Снижение β (через diversity, разные производители) критично.
Для требуемого SIL3 в условиях CCF — нужна архитектура 2oo3 с разнотипными датчиками.
Реальные применения
- Boeing 737 MAX MCAS катастрофы (2018-2019). Архитектура 1oo1 (один датчик угла атаки) для критичной функции — нарушение принципов IEC 61508. После переработки — 2oo2 с принципом отделения (раз. источник питания, ПО).
- Tesla Autopilot. ASIL D компоненты (тормоза, рулевое) — TMR. Camera + radar + ultrasonic — sensor fusion для снижения CCF.
- АЭС (ВВЭР, EPR). 4-х канальные защиты ректора. Diversity: разные принципы (механические + электронные).
- Therac-25 (1985-1987). Линейный ускоритель медицинской облучательной терапии. Race condition в ПО → передозировка облучения, 6 смертей. Урок: software-only safety без hardware interlock — недопустимо.
- Ariane 5 Flight 501 (1996). Переполнение 16-битного целого в навигации → потеря ракеты $370M. Reuse кода Ariane 4 без re-validation.
Задание. Защитная система реактора: два независимых датчика температуры + логика 1oo2. PFD каждого датчика 0.01 (с учётом proof-test). (а) Вычислите PFD системы без учёта CCF. К какому SIL это соответствует? (б) С учётом β = 0.1 (CCF) — пересчитайте PFD. Изменился ли SIL? (в) Какую архитектуру (1oo2, 2oo3) использовать для гарантированного SIL3 при β = 0.1? (г) Если стоимость одного датчика €5000, а CCF снижается до β = 0.05 при использовании датчиков двух разных производителей — стоит ли инвестировать в diversity?
§ Акт · что дальше