エラー・欠陥・故障の用語定義
エラー・欠陥・故障の用語定義をメモ。
【参考】
48号:エラー・欠陥・故障|Kouichi Akiyama|note
ソフトウェア開発におけるエラー、欠陥、バグ、故障、不具合の違いとは
【JSTQB】正しく使えてますか?「不具合」という言葉 | @QA
【0】普段、「バグ」「不具合」という言葉をよく使う。
しかし、現場では定義が曖昧。
JSTQB教科書から抜き出した。
故障(failure):コンポーネントやシステムが定義された範囲内で要求する機能を実行しないこと。
欠陥(defect):作業成果物に存在する、要件または仕様を満たさない不備または欠点。
エラー(error):間違った結果を生み出す人間の行為
自分もよく間違えるので記載しておく。
【1】「欠陥=故障」ではない。
故障はシステムを動かして正しくない結果が出ること。
欠陥は、システムを作る上で発生し、作業成果物に存在する。
「故障があるから欠陥がある」は成り立つが、「欠陥があるから故障がある」は成り立たない。
故障という結果には必ず発生させた原因(欠陥)がある。
一方、欠陥があるプログラムが実行されなければ故障は発生しない。
たとえば、システム開発フェーズでは発生せず、システム運用フェーズで見つかる運用バグが該当するだろう。
利用ユーザもそういうバグを考慮してシステムを運用する時も多いから、一概に欠陥を全て除去すれば良いとは限らない。
【2】欠陥の多くは人間のエラーによって生まれる。
欠陥の殆どは人の認識違い・理解漏れにより、仕様通りに作られないソースコードが生まれる。
注意点は、エラーは人の認識違い・理解漏れを指すのではなく、結果として出力したもの(仕様書、ソースコード等)に欠陥を埋め込む行為を指す。
JSTQBでは、エラーの基となった認識違い・理解漏れは「根本原因」を指す。
根本原因(root cause):欠陥の発生源のことで、根本原因が除去されると、欠陥が削減または除去される。
根本原因調査は、同類バグ、類似バグの調査でよく行われる。
1つの欠陥から多数の故障が発生することは経験的によくあるから。
根本原因調査には、なぜなぜ分析がよく使われる。
そこまで欠陥分析しなければ、欠陥を除去したとはいえないからだ。
なぜなぜ分析では最終的に、人の心にある「不注意」「おごり」「バイアス」まで深掘りする。
その理由は、人の行為(エラー)に原因があるという認識が、色んな品質技法を使っても同じような認識にたどり着くからだろう。
【3】JSTQBにある「不正(anomaly)」が理解しにくかったが、48号:エラー・欠陥・故障|Kouichi Akiyama|noteの説明が理解しやすかった。
(引用開始)
欠陥(defect)が原因で発生した現象が故障(failure)で、原因は分からないが「(期待値と異なっていて)何かが間違っていそうなもの・こと(=偽陽性(FALSE-fail result)を含む)」を不正(anomaly)と呼びます。
(引用修了)
「不正は偽陽性の故障である」と理解した。
つまり、出力結果は仕様から得られる期待値と異なっていて何かが間違っているが、出力結果は故障と確定できないし、欠陥もすぐには分からない状態を指すのだろう。
おそらく一般には、「不具合」と言われる事象に含まれているだろう。
たとえば、テストして怪しい現象は全てBTSに登録しておくが、詳細に調べてみると、テストデータを間違えていた、テスト実行操作を間違えたために、故障と誤検出されたことを指すのだろう。
不正を区別する必要がある理由は、バグ密度のようなメトリクスを算出するときに、明確に欠陥であるか否かを区別する必要があるからだ。
なお、開発対象のシステムに欠陥はなく、外部連携されたシステムのデータがおかしいとか、クライアントPCの設定が間違えていた、とか、案件側でコントロールできない原因から発生した事象を指すときも、バグ件数に含めない場合だ多いだろう。
JSTQBの考え方はもう一度見直しておく。
最近のコメント