# 故障の木解析
## 定義
故障の木解析(fault tree analysis, FTA)とは、システムの故障影響(トップ事象、top event)から出発し、それを引き起こしうる下位の個別・複合事象を、標準化された記号(基本事象・スイッチ・AND/OR/INHIBITゲート・転送事象)を使った論理ゲートで遡って構築する信頼性・安全解析技法である。トップ事象は解析の目的によって変わり、同じシステムでも異なるトップ事象を定義すれば異なるFTAが必要になる。例えば航空機エンジンの「始動失敗」をトップ事象とすれば2つの点火系はANDゲート(両方故障して初めて事象が成立)で結ばれるが、「飛行に安全でない」をトップ事象とすればORゲート(いずれかの故障で成立)に変わる(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.10)。
FTAはカット集合・タイ集合の手法を用いてトップ事象の発生確率を定量化できる点で、信頼性ブロック図(RBD)解析と同じ数学的道具立てを共有する。大規模システムのFTAは手作業では非現実的になるため、カット集合解析とグラフ生成を行う計算機プログラムが使われる(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.10)。
## 他技法との使い分け
信頼性解析には少なくとも4つの並列的な技法があり、それぞれ扱える範囲と限界が異なる。
- **信頼性ブロック図(RBD、[[システム信頼性モデル]]参照)**: システムの成功論理(どのブロックが機能すればシステムが機能するか)を直列・並列構造として表す。ブロック図分解、あるいはカット集合・タイ集合による近似(式6.13-6.14)で信頼性を定量化する。RBDは「システムが機能する条件」を積み上げる**成功指向(success-oriented)**の視点を取る(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.9)。
- **FTA**: RBDとは逆に、定義済みのトップ事象(システムの故障影響)から出発し、それを引き起こしうる下位事象へ**故障指向(failure-oriented)**にトップダウンで遡る。単一故障だけでなく、AND/OR/INHIBITゲートで複数事象の組み合わせ(共通原因故障や、故障と特定条件の組み合わせで初めて成立する事象等)を明示的に表現できるため、安全解析の中心技法になっている(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.10)。RBDとFTAはいずれも静的な論理構造(ブロック/事象が「故障」か「非故障」かの2値)を前提とし、カット集合・タイ集合という同じ数学的手法で定量化できる、実質的に双対の関係にある技法である。
- **マルコフ解析**: RBD・FTAが静的な論理構造を前提とするのに対し、マルコフ解析は状態間の遷移確率・遷移率を扱い、修理可能系のように時間とともに状態を行き来する系の可用性解析に有効である。ただし遷移率が一定(斉次性)・将来状態が直前状態のみに依存する(記憶なし性)という強い制約を要し、複雑な系では行列演算が急速に発散する(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.11)。
- **ペトリネット**: FTAとペトリネットは相互変換可能であり(ANDゲート・ORゲートそれぞれに対応するペトリネット表現が存在する)、故障の木の最小カット集合はペトリネットの行列法でも求められる。しかし決定的な違いは、ペトリネットの状態(マーキング)が時間とともに動的に変化しうる点にある。エアバッグコントローラの例のように、検知系の故障が修理遷移を無効化するといった**状態依存の動的挙動**は、静的な論理構造であるFTAでは表現できず、ペトリネットが必要になる(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.12.1, §6.12.3)。
まとめると、RBD/FTAは静的な成功・故障論理を扱う双対技法、マルコフ解析は状態遷移を扱うが一定遷移率という制約を持つ技法、ペトリネットはマルコフ解析の制約を緩和しつつFTAが扱えない動的挙動まで表現できる技法、という位置づけになる(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.9-§6.12)。
## ソフトウェアを含むシステムへの適用
[[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]]は、FTAをハードウェアだけでなくソフトウェアを含むシステムへ適用する方法を扱う。ハードウェア部品の故障率と異なり、ソフトウェアの基本事象は物理的な部品故障に対応しないため、著者は基本事象を「誤った出力を生成するソフトウェアモジュール」「不正な入力の受理」「初期化パラメータの誤設定」「バッファオーバーフロー」といった形で定義し直す(Source: [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.3)。
安全検証の場面では、FTAは文単位(statement-by-statement)の細粒度まで踏み込む。代入文・If-Then-Else文などのプログラム構造ごとの失敗テンプレートを適用して故障の木を自動生成し、公理的検証(axiomatic verification)のグラフィカルな双対として機能する――事後条件の代わりに危険条件(hazardous condition)を弱前提条件として遡り、矛盾に到達すればそのハザードは起こりえないと証明される(Source: [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.4)。
システムレベルでは、ソフトウェア耐障害アーキテクチャ(分散リカバリブロック・Nバージョンプログラミング・N自己点検プログラミング)の基本事象として、無関係故障(`V#`)・関連故障(`RV##`、2バージョン間/`RALL`、全バージョン)・decider故障(`D`)・ハードウェア故障(`H#`)という記法を導入し、これらをAND/ORゲートで組み合わせて各アーキテクチャの故障の木を構築する(Source: [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.5)。
## 横断的知見
- **FTAの「状態依存の動的挙動を表現できない」という限界に対し、O'Connor & Kleynerはペトリネットを、Duganはマルコフ連鎖との組み合わせ(および将来課題としての動的故障木)を、それぞれ独立に対処技法として提示する**: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.12は、FTAが静的な論理構造を前提とするためエアバッグコントローラの例のような状態依存の動的挙動(検知系の故障が修理遷移を無効化する等)を表現できないと指摘し、ペトリネットへの拡張で対処する。[[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.7.4は同じ限界(「故障の**発生順序**を表現できない組合せ論的モデル」)を独立に指摘したうえで、単一タスクの故障の木とマルコフ連鎖(恒久ハードウェア故障による長期的なシステム再構成)を組み合わせる方式を実際に構築し、将来課題としてマルコフ連鎖を用いる動的故障木([Duga92])に一文で言及する。異なる書籍・異なる著者が同じFTAの弱点(静的・状態非依存)を独立に指摘し、ペトリネット/マルコフ連鎖という異なるが同系統(状態遷移モデル)の技法で橋渡ししようとしている点が確認できる。ただし本章はペトリネットには一切触れておらず、両者の技術的な優劣・使い分けは本vault内の突き合わせでは未解明である。(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.12.1, §6.12.3, [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.7, §15.7.4)
- **Dugan(1996)の $Q(t)=\sum_i q_i P_i(t)$ という合成式は、O'Connor & Kleynerが技法として並列に並べるだけだったFTAとマルコフ解析の関係を、実際に組み合わせ可能な形で示す**: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.9-§6.11はFTA・RBD・マルコフ解析を「少なくとも4つの並列的な技法」として並べ、それぞれ独立した手法として紹介する(本ページ「他技法との使い分け」参照)。これに対し[[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.7は、マルコフ連鎖の各状態 $i$ ごとに(状態固有の構成を反映した)故障の木を解いて単一タスクの誤り確率 $q_i$ を求め、マルコフ連鎖から状態確率 $P_i(t)$ を求めて $Q(t)=\sum_i q_i P_i(t)$ で合成するという具体的な統合手順を示す。これは「FTAは静的、マルコフは動的」という対比を保ったまま、短期的な計算誤り過程(FTA)と長期的なシステム構造の変化(マルコフ連鎖)を分業させる設計であり、両者が排他的な選択肢ではなく補完関係にありうることを実例で示している。(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.9-§6.11, [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.7)
- **`RALL`(全バージョンとdeciderに影響する関連故障)は、共通原因故障を中間事象やINHIBITゲートに頼らず単一の基本事象として表現する具体例になっている**: 本ページの旧「未解決の問い」は、共通原因故障をFTAで体系的に表現する方法論が[[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]]では扱われていない点を指摘していた。[[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.5は、不完全な仕様に起因して全バージョンとdeciderに同時に影響する故障を`RALL`という単一の基本事象として定義し、DRB/NVP/NSCPいずれの故障の木でも単一故障点(singleton cutset)として明示的に扱う。これは中間事象・INHIBITゲートを介さない、より直接的な共通原因故障の表現方法の一事例だが、あくまでアドホックな命名規則であり、HAZOP等に相当する体系的な識別手法を伴うものではない。(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] §6.9.2, [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]] §15.5.1-§15.5.3)
## 未解決の問い
- FTAの「トップ事象の定義によって木の構造(ANDかORか)が変わる」という性質は、ソフトウェアシステムの障害分析(根本原因分析、インシデントのポストモーテム)における「障害の定義」の恣意性とどう関係するか。
- FTAとペトリネットの相互変換は本章で小規模な例(事象A〜Eの5事象)にとどまる。大規模なFTA(数百のゲート)をペトリネットへ変換する際の実務上のスケーラビリティはどの程度か。
- Duganが言及する動的故障木([Duga92])は、ペトリネットとどのような技術的関係にあるか(表現力の優劣、解法の計算量、モデル化のしやすさ)。両者はともに「FTAの静的性という限界」への対処だが、本vaultではまだ突き合わせできていない。
- $Q(t)=\sum_i q_i P_i(t)$ という合成式(マルコフ状態ごとのFTA解と状態確率の積和)は、[[システム信頼性モデル]]が扱う定常可用性 $A=\mathrm{MTBF}/(\mathrm{MTBF}+\mathrm{MTTR})$ とどう関係するか。前者は時間 $t$ の関数、後者は定常値であり、$t\to\infty$ で両者がどう接続するかは両ソースいずれにも明示されていない。
## 関連
- 概念: [[システム信頼性モデル]] / [[信頼性予測]]
- 実体: [[Patrick D. T. O'Connor]] / [[Andre Kleyner]] / [[Joanne Bechta Dugan]]
- ソース: [[@2012__Wiley__Practical Reliability Engineering - Chapter 6 Reliability Prediction and Modelling]] / [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 15 Software System Analysis Using Fault Trees]]
- 書籍: [[wiki/entities/Practical Reliability Engineering|Practical Reliability Engineering]] / [[wiki/entities/Handbook of Software Reliability Engineering|Handbook of Software Reliability Engineering]]
## 出典
- P. D. T. O'Connor and A. Kleyner, *Practical Reliability Engineering*, 5th ed., Wiley, 2012, Chapter 6 §6.9-§6.12.
- Joanne Bechta Dugan, "Software System Analysis Using Fault Trees", in *Handbook of Software Reliability Engineering*, IEEE CS Press / McGraw-Hill, 1996, Chapter 15.