エラー、欠陥、故障の違いと関係性
JSTQB FLのシラバスによると、ソフトウェアテストにおいて、「エラー」「欠陥」「故障」は混同されやすい言葉ですが、それぞれ明確な違いがあります。英語表記(同義語)も交えて、その違いと関係性をわかりやすく解説します。
1. エラー(Error / 誤り)
人間が間違った結果を生み出してしまう「人間の行動や判断(ミス)」のことです。時間的なプレッシャー、システムや相互作用の複雑さ、疲労、十分なトレーニングを受けていないことなど、さまざまな理由によって人間が起こしてしまいます。
- 具体例: 開発者が計算に関する要件のアルゴリズムを誤って解釈してしまう。
2. 欠陥(Defect / Fault / Bug / フォールト / バグ)
人間のエラーによって、要件仕様書、ソースコード、テストスクリプトといった「作業成果物」の中に生み出された問題箇所のことです。初期の工程で作成された成果物の欠陥が検出されないまま進むと、後の工程の成果物にも欠陥として引き継がれてしまうことがよくあります。
- 具体例: 間違った入力変数を使用する計算アルゴリズムをソースコードに記述してしまう、または間違ったバージョンのソースコードをビルドしてしまう。
3. 故障(Failure)
ソースコード内の欠陥が実際に実行された結果として、システムが「すべきことをしない」、あるいは「すべきでないことをしてしまう」といった、ソフトウェアが期待通りに動かない事象のことです。 すべての欠陥が常に故障につながるわけではなく、特定の状況下で実行された場合にのみ故障になるものや、まったく故障にならないものもあります。また、故障の原因は人間のエラーや欠陥だけではなく、放射線や電磁波などの環境条件によって発生することもあります。
- 具体例: ユーザーがダイアログボックスのオプションを選択した時に、製品が異常終了してしまう。
【3つの関係性のまとめ】
これらの繋がりを整理すると、「人間が『エラー(Error)』を起こし、それがソフトウェアや仕様書の中に『欠陥(Defect)』として埋め込まれ、その欠陥を含んだコードが実行されることで、システムが『故障(Failure)』を引き起こす」 という関係になっています。
図:故障はどのように発生するのか?(因果関係チェーン)
