# ソフトウェア信頼性
## 定義
ソフトウェア信頼性(software reliability)とは、ソフトウェアが意図された機能を果たし続ける性質を指すが、その成立過程はハードウェア信頼性と根本的に異なる。ソフトウェアには摩耗も個体差もなく、すべてのコピーは原本と同一である。ソフトウェアの故障は、仕様・設計・コードに埋め込まれた欠陥が特定の入力条件やプログラム経路の実行によって顕在化した結果であり、修理ではなく再設計(再プログラム)によってのみ解消できる。したがってソフトウェアの信頼性は稼働時間の関数ではなく、誤りの検出・修正による信頼性成長の関数として捉えられる(Source: [[@2012__Wiley__Practical Reliability Engineering - Chapter 10 Software Reliability]] ch.10 §10.1)。より定量的な定式化として、ANSI/IEEE STD-729-1991は「指定された環境において指定された期間、障害なく動作する確率」と定義しており、この定義は1996年のLyu(編)*Handbook of Software Reliability Engineering*第1章でソフトウェア信頼性工学(SRE)全体の出発点として引用されている(Source: [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 1 Introduction]] §1.2)。
## 横断的知見
- **「ソフトウェアは摩耗しない」という観察は、16年隔たった2つのソースで独立に確認できるが、そこから導く含意の重点が異なる**: 1996年のLyu(編)ハンドブック第1章は「ソフトウェアは摩耗せず、燃え尽きず、劣化しない。むしろテスト・運用を通じた欠陥の検知・除去によって信頼性が成長する」と述べ(§1.4 p.18)、この非定常性ゆえにハードウェアが前提とする定常過程の信頼性理論がソフトウェアには不適合になる点を強調する。2012年のPractical Reliability Engineering第10章は「摩耗も個体差もなく全コピーが原本と同一」と同じ事実を述べつつ(ch.10 §10.1)、その帰結としてハードウェア信頼性予測手法をソフトウェアへ単純流用できないこと、および欠陥の解消が修理ではなく再設計でしかできないことを強調する。両者は同一の物理的事実(摩耗の不在)から、前者は「時間依存モデリングの必要性」、後者は「ハードウェア手法の限界」という異なる帰結を導いており、SREという分野がハードウェア信頼性工学からの独立を必要とした二重の理由(モデルの形が違う/検証手段が違う)を浮かび上がらせる。(Source: [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 1 Introduction]], [[@2012__Wiley__Practical Reliability Engineering - Chapter 10 Software Reliability]])
- **fault/error/failureの区別は1996年のハンドブック第1章(§1.4)で詳細に定義されるが、Practical Reliability Engineering第10章はこの3層区別を明示的には踏襲せず「欠陥(defect)」相当の語で議論を進める**: 前者はfaultを「failureまたは内部errorの検出時に特定・仮説される原因」、errorを「computed valueと真値の乖離、またはfaultを埋め込む人間の行為」、failureを「ユーザーが知覚するサービス逸脱」と3層に分ける精緻な用語体系を持つ(Source: [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 1 Introduction]] §1.4)。ハードウェア信頼性工学を出発点とするPractical Reliability Engineering側にこの3層区別が明示的にないことは、ソフトウェア信頼性工学がハードウェア信頼性工学から独立した用語体系を発展させてきたことを示唆する。
## 未解決の問い
- ハードウェア信頼性予測(第6章)に対する著者の批判——過去データと将来予測を結ぶ物理的根拠の欠如——は、ソフトウェアにも「さらに深刻な形で」当てはまると本章は明言する(ch.10 §10.14.1)。この主張は第6章本文でどのように展開されているか。ch.6 の source ページが取り込まれ次第、両者の論理構造を突き合わせて検証する必要がある。
- ソフトウェア信頼性予測モデル(Poisson・Musa・Jelinski-Moranda・Littlewood)は「主に学術的関心」で「広く受容・標準化されていない」と本書(2012年執筆時点)は評価する。ソフトウェア信頼性成長モデルという独立した実務分野が並行して存在すること([[wiki/concepts/ソフトウェア信頼性成長モデル|ソフトウェア信頼性成長モデル]]を参照)と、この評価はどう整合するか。
- 本書は「同一プログラムの冗長化は無効、多様な実装(diversity)が必要」と明言するが、その有効性自体の実証的な支持・反証は本章には記述がない。多様性(diversity)の実証研究は他ソースでどう評価されているか([[wiki/concepts/ソフトウェア耐障害性|ソフトウェア耐障害性]]の横断的知見も参照)。
- 「古いコードは機能追加のたびに誤りが混入し故障率が増加し得る」という例外的記述(ch.10 §10.1 Table 10.1 注1)は、摩耗のないソフトウェアという原則に対する数少ない例外である。この現象は現代のソフトウェア変更管理・技術的負債の議論とどう接続するか。
## 関連
- [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 1 Introduction]] — ANSI/IEEE定義とfault/error/failureの用語体系の初出
- [[@2012__Wiley__Practical Reliability Engineering - Chapter 10 Software Reliability]] — 本概念の一次ソース
- [[wiki/concepts/ソフトウェア耐障害性|ソフトウェア耐障害性]] — フォールトトレランス・多様性による冗長化の詳細
- [[wiki/concepts/ソフトウェア信頼性成長モデル|ソフトウェア信頼性成長モデル]] — §10.14 の予測モデル群と対応する独立した実務分野
- [[信頼性工学]] — 上位概念
- [[structures/SRE - MOC]] — 運用信頼性の MOC への一方向参照
## 出典
- [[@1996__McGrawHill__Handbook of Software Reliability Engineering - Chapter 1 Introduction]](ch.1)
- [[@2012__Wiley__Practical Reliability Engineering - Chapter 10 Software Reliability]](ch.10)