# ソフトウェア信頼性工学 ## 定義 ソフトウェア信頼性工学(Software Reliability Engineering、SRE)とは、信頼性を定量的に評価できるソフトウェアシステムを開発・維持するための工学技法の総体である。中核となる属性は**ソフトウェア信頼性**であり、「指定された環境において指定された期間、障害なく動作する確率」と定義される(ANSI/IEEE STD-729-1991、[[@2007__FOSE__Software Reliability Engineering - A Roadmap]])。より実践的には、ソフトウェア信頼性工学とは「信頼性に関するユーザー要件に照らして、ソフトウェアベースシステムの運用動作を定量的に研究すること」である(Source: [[@2007__FOSE__Software Reliability Engineering - A Roadmap]])。 AT&T・Lucent・IBM・NASA・Microsoft を含む 50 以上の組織が標準またはベストプラクティスとして採用した実績を持つが、これは世界のソフトウェア生産者全体からみると依然少数に留まる。 ### 障害ライフサイクル 4 技法 信頼性の高いソフトウェアを実現する技法群は、障害のライフサイクルに基づいて 4 段階に体系化される。 1. **障害予防(fault prevention)**: 構造によって障害の発生を回避する。形式手法・要求精緻化・ソフトウェア再利用・規律ある設計手法が含まれる 2. **障害除去(fault removal)**: 検証と妥当性確認で障害を検知・排除する。ソフトウェアテストとインスペクションが主要手段 3. **障害耐性(fault tolerance)**: 冗長性によって障害があってもサービスを継続する。シングルバージョン技法(チェックポイント・例外処理・プロセスペアなど)とマルチバージョン技法(N-version programming・リカバリブロック)の 2 群が存在する 4. **障害・故障予測(fault/failure forecasting)**: 評価によって障害の存在と故障発生・影響を推定する。[[ソフトウェア信頼性成長モデル]](SRGM)がこの主要技術 ### SRE プロセスの 4 構成要素 現行の SRE プロセスは 4 要素で構成される(Source: [[@2007__FOSE__Software Reliability Engineering - A Roadmap]], 図1)。 1. **信頼性目標**: 顧客視点での定量的な信頼性目標。「障害に対する許容閾値」を信頼性指標で表現する 2. **操作プロファイル(operational profile)**: システムの実際の使われ方を確率分布で定量化したもの。テストケース選択を実際の使用頻度に合わせることで、フィールドでの信頼性推定精度を高める 3. **信頼性モデリングと測定**: 障害データから信頼性モデルを適用し、現在の信頼性・追加テスト時間・信頼性成長率・フィールド予測の 4 情報を提供する 4. **信頼性検証**: 予測値と実測値を比較し、フィードバックによって SRE プロセスを改善する ### SRGM の 3 モデリングアプローチ ソフトウェア信頼性モデリングには 3 つの主要アプローチがある。 - **誤り植え付け(error seeding)アプローチ**: 意図的にエラーを植え込んで検知率から未知の障害数を推定する - **データ領域(data domain)アプローチ**: 入力空間を分割して各領域での障害確率を推定する - **時間領域(time domain)アプローチ**: 時間ベースの障害データをモデル関数でカーブフィッティングする。最も広く使われ、[[ソフトウェア信頼性成長モデル]](SRGM)がこのカテゴリに属する ## 横断的知見 - **Lyu 2007 のソフトウェア信頼性工学と坪内 2024 の SRE の工学化は、信頼性の定量化という目標を共有しながら入力と時間軸が異なる**: Lyu 2007 の SRE は開発フェーズの障害データ(テスト中の故障間隔・故障回数)を入力とし、ソフトウェアリリース前の品質保証が主眼である。坪内 2024 の SRE の工学化([[SREの工学化]]参照)はサービス運用フェーズの SLI/SLO を入力とし、本番サービスの信頼性制御が主眼である。前者は「どこまでテストすれば信頼性目標を達成できるか」を問い、後者は「いかにシステムを観測・制御してユーザー体験の信頼性を保つか」を問う。両者は 1990 年代に同じ言葉「SRE」の下に収束しなかったが、ソフトウェアの信頼性を計測可能な変量に帰着させるという核心的な志向は共通する。(Source: [[@2007__FOSE__Software Reliability Engineering - A Roadmap]], [[@2024__SRE NEXT 2024__工学としてのSRE再訪]]) - **Lyu 2007 は SRE を障害ライフサイクル 4 技法と SRE プロセス 4 構成要素に体系化する同時代のスナップショットであるのに対し、Cusick 2019 は 1968 年の NATO 会議から 2018 年のアジャイル/DevOps までを通時的に辿る**: 両者を並べると、SRE の理論(1967–1983: Hudson→Jelinski-Moranda→Shooman→Musa)→実践の体系化(1987 Musa 著書、1996 Lyu ハンドブック)→新領域への展開(2000 年代 Web サービス、2010 年代モバイル/アジャイル/DevOps)という 3 段階の発展が明確になる。Lyu は 2007 年時点で SOA・Web サービスを「新興アプリケーション」として位置づけたが、Cusick が 2019 年に追加した知見では CI/CD・フィーチャーフラグ・アジャイル SRGM など、Lyu が予見しなかったパラダイムへの適応が進んでいた。(Source: [[@2007__FOSE__Software Reliability Engineering - A Roadmap]], [[@2019__arXiv__The First 50 Years of Software Reliability Engineering - A History of SRE with First Person Accounts]]) ## 未解決の問い - Lyu 2007 が「将来課題」として挙げた SOA/Web サービス信頼性は、今日のクラウドネイティブ・マイクロサービス・サーバーレスアーキテクチャにどのような形で継承され、あるいは別の解法が生まれたか。 - 操作プロファイルに基づく信頼性測定は、ユーザー行動が多様かつ急速に変化するクラウドサービスにどう適用できるか。SLO による運用フェーズの信頼性制御は操作プロファイルの後継概念か。 - Lyu 2007 が指摘した「産業採用の障壁(コスト効果の不透明さ)」は現代でも解消されていないか。エラーバジェットや SLO ベースの意思決定が証拠の蓄積に貢献したか。 - SRGM の 100 以上のモデルという現状は 2007 年から変わっているか。機械学習ベースの信頼性予測は SRGM の後継として台頭したか。 ## 関連 - [[ソフトウェア信頼性成長モデル]] — 障害予測技法の主要手段。Jelinski-Moranda (1972) 以来の SRGM の系譜 - [[ソフトウェア耐障害性]] — 障害耐性技法の詳細。N-version programming・リカバリブロックの理論と実践 - [[Design for Reliability]] — 信頼性のある設計の 5 段階プロセス(Identify→Design→Analyse→Verify→Control) - [[SREの工学化]] — 坪内 2024 の「技芸から工学へ」の議論との接続。運用フェーズの SRE との比較 - [[Michael R. Lyu]] — 本論文の著者。ISSRE 創設者 - [[structures/SRE - MOC]] — 運用信頼性の MOC への一方向参照 ## 出典 - [[@2007__FOSE__Software Reliability Engineering - A Roadmap]] - [[@2019__arXiv__The First 50 Years of Software Reliability Engineering - A History of SRE with First Person Accounts]]