ソフトウェア信頼性

提供: ORWiki
ナビゲーションに移動 検索に移動

【そふとうぇあしんらいせい (software reliability)】

概要

ソフトウェアが, 規定の環境の下で, 意図する期間中に, ソフトウェア故障を引き起こすことなく動作することができる性質や度合をいう. ソフトウェア故障 (software failure) とは, ソフトウェアが期待どおりに動作せずに正しく機能しないことであり, ソフトウェア内に潜在する欠陥や誤り (ソフトウェアフォールト (software fault) あるいはソフトウェアバグ (software bug) と呼ばれる) により引き起こされる.

詳説

 現在, ソフトウェア開発方式については様々な議論がなされているが, 要求仕様定義, 設計, コーディング, テストという一連の工程から成るウォーターフォール(water-fall)型の開発形態がよくとられている. この中でも, 最終段階のテスト工程では大量の開発資源が投入され, 人的作業により作り込まれたフォールトの発見と修正が行われ, ソフトウェアの品質/信頼性を確認する重要な工程となっている. このテスト結果に基づいて, 観測されたフォールトデータを使ってソフトウェアの品質/信頼性評価が行われる. また, より品質/信頼性の高いソフトウェアを実現するためには, できるだけテスト工程より前の上流工程でフォールトを検出することも重要である.

 ソフトウェア信頼性 (software reliability)は, ソフトウェア品質を考えるときに, 「当り前品質」として重要な品質特性である. また, ソフトウェア信頼性に関する問題を, 信頼性を実際に作り込むための{信頼性改善}と, 信頼性実現の効率化を図る{信頼性管理}とに大別して, これらの関連技術を示したのが図1である. ソフトウェア信頼性の計測・評価に関する問題は, 特にソフトウェア開発の最終段階であるテスト工程における出荷品質や, 実際の運用段階におけるソフトウェアの動作性能を確認・把握する際に生じる. そこで, テスト工程におけるフォールト発見事象や運用段階におけるソフトウェア障害発生現象を記述して, ソフトウェア信頼性を議論する上で必要な定義をまとめておく.


図1:ソフトウェアの信頼性技術

図1:ソフトウェアの信頼性技術


 まず, ソフトウェアとは 上記の開発プロセスを経て作成された製品としてのコンピュータプログラムを指すものとする. ソフトウェアの実行中に発見・修正される誤りや欠陥はフォールト (fault) と呼ばれ, それによりソフトウェアが期待通りに動作せず正しく機能しないときソフトウェア故障 (software failure) が発生したという. ソフトウェア信頼性を定量的に評価するには, フォールトが原因となって, 現象として生起するソフトウェア故障の発生頻度とその分布状態を知る必要がある. フォールトは, ソフトウェア開発の各段階で作り込まれる人的誤りや欠陥であり, いわゆるソフトウェアバグ (bug) と同義である. 具体的には, 要求仕様で述べられた機能に対応する処理パスの欠落, 処理パス内の判定条件の間違い, 処理パス内の演算の間違いなどである. なお, ソフトウェアエラー (error) はフォールトとは区別され, ソフトウェア内にフォールトを含む原因となった開発作業中に犯した開発者の誤りである. すなわち, ユーザ要求の欠落や誤解釈, あるいは設計仕様における要求仕様の欠落や誤解釈などである. したがって, ハードウェア信頼性と同様に, ソフトウェア信頼性を次のように定義できる.


「ソフトウェアが, 規定の環境の下で, 意図する期間中にソフトウェア故障が発生することなく動作することができる性質や度合」


このソフトウェア信頼性を確率で表現したのがソフトウェア信頼度である.

 これらの定義をもとに, ソフトウェア内に潜在する総期待フォールト数や平均ソフトウェア故障発生時間間隔などのような, ソフトウェア信頼性の計測・評価に関する定量的尺度(ソフトウェア信頼性メトリクスと呼ばれることもある)が設定できる. このような定量的尺度は, ソフトウェア信頼性を評価・管理し, ソフトウェア内の潜在フォールト数を予測する技術分野であるソフトウェア信頼性工学 (software reliability engineering) においては特に必要になる. この分野では, テストの実施結果や過去のプロジェクトの経験から, ソフトウェアの使用形態を定量的に特性化した運用プロファイル (operational profile) を規定することが重要であり, ユーザが望まないソフトウェアの運用特性, すなわちソフトウェア故障を回避することの重要性を強調して, ユーザの要求品質の充足性を高めることを目的としている.

 プロジェクトチームにより信頼性の高いソフトウェアを効率よく生産するためには, 品質, 納期, およびコストの観点からソフトウェア開発の各工程に対して検討を加える管理技術が重要である. そのうち, ソフトウェア信頼性は, 品質管理の問題として取り扱われることが多い. 特に, 近年のように複雑化・多様化するソフトウェアに対する開発の効率化を図るための品質管理技術の一つとして, ソフトウェア信頼性評価 (software reliability assessment) に関する技術は重要である. 近年, テスト工程や開発後の運用段階におけるフォールト発見事象を記述し, ソフトウェア信頼性を定量的に計測・評価するための数理モデルとしてソフトウェア信頼性モデル (software reliability model)が精力的に研究が行われている.


図2:ソフトウェア信頼性モデルの階層的分類

図2:ソフトウェア信頼性モデルの階層的分類


 ソフトウェア信頼性モデルは, 様々な信頼性の影響要因を考慮して多岐にわたっている(図2). 開発管理の立場からは, 潜在フォールト数をはじめとする出荷品質の把握, 出荷時期の見積り, 運用信頼性の評価, 保守コストの見積り, などのために, ソフトウェアの実行結果に基づく動的信頼性の推定・予測が必要となる. 一般に, テスト工程及び運用段階におけるフォールト発見事象やソフトウェア故障発生現象は確定的にとらえることはできないので, 確率・統計論に基づくソフトウェア信頼性モデルが有用である. 特に, ソフトウェア開発のテスト工程では, 工数などの大量のテスト資源を費やしてフォールトデバッギング (fault debugging) が行われるので, ソフトウェア内に残存するフォールト数はテスト時間の経過とともに減少していく. したがって, テスト時間の経過と共にソフトウェア故障の発生する確率は減少していき, ソフトウェアの信頼度が増加したり, ソフトウェア故障の発生時間間隔が長くなったりすることになる. このような事象や現象を記述し, ソフトウェアの実行環境における挙動を定式化する信頼性モデルは, ソフトウェア信頼度成長モデル (software reliability growth model)と呼ばれている.



参考文献

[1] M. R. Lyu (ed.), Handbook of Software Reliability Engineering, McGraw Hill, 1996.

[2] 山田茂, 『ソフトウェア信頼性モデル-基礎と応用-』, 日科技連出版社, 東京, 1994.

[3] 山田茂, 高橋宗雄, 『ソフトウェアマネジメントモデル入門-ソフトウェア品質の可視化と評価法』, 共立出版, 東京, 1993.