不具合と欠陥

この3日間、不具合と欠陥の周辺の用語を体系的に定義できないかと思考していた。このテーマは、実はもう何年も曖昧なままに放置していたのだ。この辺りの用語は、組織の暗黙的なルールや慣習に従うしかない、SWEBOKでも明確には定義していない。参考情報程度なのだ。いろいろなネット情報、各社の開発標準などをもとに私の理解で整理してみた。※言葉だけでなく、モデルを入れてほしいとの要望があったので、今回は絵を描いてみた。

いろんな呼び方があるのだが、エラー(error)→不具合(failure)→欠陥(fault)→誤り(mistake)の流れが中心となる。この辺りはSWEBOKに提示されている。
f:id:tacohachi:20080707012851j:image


(1) 不具合や欠陥は、プロセス(タスク)の実行時に検出される。レビューやテスト、運用時に期待している値と実際の値が合致しない状態を発見する。これが「エラー(error)」である。期待値と実際値は、"一致しているか"より、私は"合致しているか"を推奨している。一致=equalだが、範囲指定もありえるので、一致より合致なのだ。ちょっと拘ってみた。エラーは不具合か。この時点ではまだ不具合ではない。エラーはその合致しない状況を評価・分析することで不具合と認定されたり、不具合ではないと判断される。テストスクリプトやテスト環境のミスでエラーになることもある。顧客からクレームが届いたといったも分析してみたら勘違いということもあるだろう。(※エラーは「問題」と呼ぶ場合もある。また期待値をToBeと呼び、実際値をAsIsと呼んでその差異を「ギャップ」という言い方もある。ニュアンスが微妙なので図では表記法を変えている。問題の表出したものの1つがエラーとしておいた。)

(2)エラーを評価・分析して「不具合(failure)」と判定できる。システム上の過誤を認めた状態である。「故障・失敗」などと呼ぶ場合もある。
(3) システム上のコードの記述間違いやデータや設定情報の間違いを識別したものが「欠陥(fault)」である。「defect・バグ」などとも呼ばれる。
(4) 欠陥は直接的には人の「行為の誤り」によって引き起こされる。「ミス・誤り・mistake」などと呼ばれる。行為の誤りは「知識の誤り」から誘発される場合もあるし、知識はあってもうっかりミスする場合もある。
(5) 知識の誤りや行為の誤りは、直接的な/表層的な原因である。もっと深堀りして「根源的原因(root-cause)」を見極めなければならない。それは、個人のミスではなく、プロセスや組織や適用している技術に存在しているはずである。
(6) 根源的原因は改善しなければならない、というシナリオになる。

今度は、逆に辿ってみる。

[1] プロセスや組織や適用している技術に潜在している病巣がきっとある。
[2] その病巣が、人の「行為の誤り」を誘発する。
[3] その行為が「欠陥・バグ」を仕込む。
[4] 欠陥は、あるタイミングで「不具合」として表出し始める。
[5] 期待している値と実際の値が異なるということから「問題」化してくる。
[6] 深刻な問題は、システム障害、作業の手戻り、関係者との揉め事などへと発展する。
以上。ここまで明快に図式化を行ったものはなかなかないはずだ。他の類似の情報を読む際のベースにしていただけたらと思う。用語の定義は様々だが、関係する概念は抽出できたと思う。