かとじゅんの技術日誌

技術の話をするところ

Error, Defect, Fault, Failureの定義と解釈

ソフトウェア設計を行う場合、必ずエラーや障害などの用語が飛び交うことがあるが認識がずれていることが多いので、以下に簡単にまとめてみた。

ソフトウェアの非正常を表す概念

ソフトウェアのエラーや障害などの非正常を表す概念の定義をいくつかピックアップしてみた。

JIS X 0014:1999の定義

出典: ソフトウェア品質知識体系ガイド(第2版) - SQuBOK Guide V2-(ソフトウェア品質知識体系ガイド(第2版) - SQuBOK Guide V2-)

  1. 誤差・誤り(error)
    計算,観測もしくは測定された値または状態と,真の,指定されたもしくは理論的に正しい値または状態との間の相違。
  2. 障害(fault)
    要求された機能を遂行する機能単位の能力の,縮退または喪失を引き起こす,異常な状態。
  3. 故障(failure)
    要求された機能を遂行する,機能単位の能力がなくなること。

JIS X 0014では、意図しない結果を引き起こす人間の行為は、「間違い、人的過誤(mistake, human error)」として別に定義しており,「誤差・誤り(error)」の中に含めていない。

JIS Z 8115:2000の定義

  1. エラー・誤り(error)
    計算,観察,または測定値若しくは条件と,特定されまたは推論的に正しい若しくは条件との間の不一致。
  2. フォールト(fault)
    ある要求された機能を遂行不可能なアイテムの状態,また,その状態にあるアイテムの部分。アイテムの要求機能遂行能力を失わせたり,要求機能遂行能力に支障を起こさせる原因(設計の状態)。
  3. 故障(failure)
    アイテムが要求機能達成能力を失うこと。

JIS X 8115:2000では、人的な間違いをおかす行為(ヒューマンエラー)を「エラー・誤り(error)」に含める場合があるとしている。

JSTQB ソフトウェアテスト標準用語集の定義

  • 出典

  • エラー(error)
    間違った結果を生み出す人間の行為。

  • 誤り(mistake)
    エラー(error)と同義
  • 欠陥(defect)
    コンポーネント又はシステムに要求された機能が実現できない原因となる、コンポーネント又はシステムに含まれる不備。たとえば、不正なステートメント又はデータ定義。実行中に欠陥に遭遇した場合、コンポーネント又はシステムの故障を引き起こす。
  • バグ(bug)
    欠陥(defect)と同義
  • フォールト(fault)
    欠陥(defect)と同義
  • 故障(failure)
    コンポーネントやシステムが、期待した機能、サービス、結果から逸脱すること。

ソフトウェアの災いを表す用語

出典: オブジェクト指向入門 原則・コンセプト P449

Bertrand Meyerさんの考え方:

  1. エラー(error)とは、ソフトウェアシステムの開発中になされた誤った決定である。
  2. 欠陥(defect)とは、意図した振る舞いからシステムが逸れてしまう原因となるソフトウェアシステムの特性である。
  3. フォルト(fault)とは、何らかの実行中に意図した振る舞いから逸れてしまうソフトウェアシステムのイベントである。

  4. エラーが設計時の視点にみえる

JIS Q 9000:2006の定義

「品質マネジメントシステム-基本及び用語」なのでソフトウェアに限った定義ではないですが、欠陥の定義は以下です。

  1. 欠陥(defect)
    意図された用途または規定された用途に関連する要求事項を満たしていないこと

ざっくり比較

ざっくりの比較表。 人為的な過誤を除いて、システムで扱う非正常は大きく分けて、エラー(Error)、欠陥(Defect)、障害(Fault)、故障(Failure)がある。1

種別 エラー(Error) 欠陥(Defect) 障害(Fault) 故障(Failure)
JIS X 0014:1999 値または状態の不一致(人的過誤を含まない)。 - 機能単位の能力の,縮退または喪失を引き起こす,異常な状態。 要求された機能を遂行する,機能単位の能力がなくなること。
JIS Z 8115:2000 値または条件の不一致(人的過誤を含む)。 - 機能を遂行不可能なアイテムの状態 アイテムが要求機能達成能力を失うこと。
JSTQB 間違った結果を生み出す人間の行為。 機能が実現できない原因となる不備(Bugを含む) 欠陥(defect)と同義 コンポーネントやシステムが、期待した機能、サービス、結果から逸脱すること。
ソフトウェアの災いを表す用語(Bertrand Meyer) ソフトウェアシステムの開発中になされた誤った決定である 意図した振る舞いからシステムが逸れてしまう原因となるソフトウェアシステムの特性である(バグの概念を含む) 何らかの実行中に意図した振る舞いから逸れてしまうソフトウェアシステムのイベントである -
JIS Q 9000:2006 - 意図された用途または規定された用途に関連する要求事項を満たしていないこと - -

まとめ

ざっくりまとめると以下のような解釈ができる。

  • エラー(Error)は、入力値と期待値に相違が生じている状態。典型的にはバリエーションエラー。おそらくリカバリする想定内のエラー(テストエディタなどで開くファイルが存在しないなど)も含まれる
  • 欠陥(Defect)は、呼び出し元が要求事項を満たしていない状態(バグを含む)。契約を満たしていない状態ともいえる。本来発生してはいけないもの。基本的には表明(アサーション)することになる
  • 障害(Fault)は、機能が遂行できない異常な状態。呼び出し先のバグもしくは責任所在不明でリカバリ不能。AkkaやErlangの軽量プロセスはError KernelLet it crashという考え方で障害にある程度の耐性を持つことができる 2
  • 故障(Failure)は、機能を達成する能力を失った状態

  1. これ以外にいろいろ定義はあるけどまぁ実用的にはこの程度で十分かな

  2. JISの障害には欠陥が踏まれているようにみえる。FaultはDefectより広い概念