トレンド情報 / 記事を探すCOLUMN

全てバグ?ソフトウェアにおけるエラー、欠陥、フォールト、故障の意味と違い

更新日|2019.05.29

Qbook編集部

全てバグ?ソフトウェアにおけるエラー、欠陥、フォールト、故障の意味と違い

ソフトウェアの開発現場で頻繁に用いられる用語の中に、「バグ」という言葉があります。しかし、「バグ」で表されるソフトウェアの不具合は、その特徴や性質に応じて「エラー」「欠陥」「フォールト」「故障」という4つに大別できるとされています。

今回は、これらの用語の定義をご紹介し、意味の違いを理解する必要性についてもご説明します。
(※本記事では、JSTQB、IEEEにて定義されているものを説明いたします。)

エラー(Error)とは

JSTQBの定義によると、バグの中でもエラーは「間違った結果を生み出す人間の行為」と定義されています。つまり、エラーという概念が指すのは、システムの性質というよりも開発者や設計者の行った判断やシステム仕様の誤解である、と表現できます。

具体的には、開発者が一部の例外処理を考慮し忘れてしまったなど、開発を行う人間自身の判断が誤っているという事実がエラーに相当します。

欠陥(Defect)とは

software_bug_main1

開発現場ではもっともよく使われる「バグ」という言葉は、「欠陥」という言葉とほぼ同義で用いられています。

JSTQBでの定義によると、欠陥は「コンポーネントまたはシステムに要求された機能が実現できない原因となる、コンポーネントまたはシステムに含まれる不備」と定義されています。

先述したエラーが判断ミスなどの行為を表すのに対し、欠陥とは仕様やコードの不備の存在自体を示しているといえます。

フォールト(Fault)とは

フォールト(Fault)はバグや欠陥と同じニュアンスで用いられることが多いようです。JSTQBの定義によると、フォールト・バグ・欠陥は同義であると述べられています。

しかし、IEEE(Institute of Electrical and Electronics Engineers)の定義によると「フォールト」は「ソースコードのなかで生じる、人為的エラーのコード化」と定義されています。つまり、JSTQBおよびIEEEの定義をもとに厳密に区別して表現するなら、「欠陥」が環境や設定、データなども含むシステム全体の不備であり、「フォールト」はその中でもソースコードの不備を指しているといえるでしょう。

故障(Failure)とは

software_bug_main2

JSTQBにおいて、 「故障」は「コンポーネントやシステムが、期待した機能、サービス、結果から逸脱すること」と定義されています。IEEEもほぼ同義です。

フォールトによって不具合が顕在化し、意図したシステムの仕様通りに動作せず、機能を発揮できない場合、「故障」に相当することになります。

例えば、あるプログラムにおいて、設計ミスが原因で、本来登録されるべきデータの一部が登録されなかったとします。このプログラムには「欠陥」があるといえますが、登録されなかったデータを業務上利用しない間は、欠陥の存在に気づくことができません。

一方、該当のデータを利用する必要が生じて登録漏れが発覚した場合、この事象は「故障」として認識されることになります。

これは、システムに含まれる不具合が必ずしも故障に直結するとはいえない、ということを示しています。しかし、開発現場では欠陥/フォールト/故障は「バグ」という用語でひとくくりにされているケースが少なくありません。

意味の違いを理解する必要性

ソフトウェア品質を測る尺度として、「欠陥密度」「フォールト密度」「故障密度」といった概念があり、これらを利用することでソフトウェアの品質を客観的に分析・評価できるようになります。

IEEEの定義では「欠陥密度」と「フォールト密度」は区別されますが、JSTQBの定義では同義とされ、「コンポーネントまたはシステムの中で特定された欠陥の数をコード行数などで割った値」という意味になります。

「故障密度」はJSTQBとIEEEのどちらにおいても「欠陥密度」「フォールト密度」と区別され、「使用単位時間またはテスト単位時間当たりの故障」と定義されています。

上記のような指標を開発現場に導入する場合、欠陥や故障を「バグ」とひとくくりにするのではなく別の事象として扱う必要があることが、おわかりいただけるでしょう。

実際はテスト工程で発見された不具合を具体的に分析する時間がない場合が多く、不具合を防ぐ取り組みは感覚的なものになりがちかもしれません。しかし、各用語の意味の違いを理解し、品質指標を取り入れることによって、不具合の原因や傾向を可視化することができるようになります。

おわりに

今回の記事では、システムの不具合に関わる4つの用語についてご紹介しました。エラー、欠陥、フォールト、故障がどのような意味を持つのか理解することは、不具合発生の原因解明、開発工程やテスト工程の改善にもつながりますし、ソフトウェアの品質指標を導入する場合にも必要です。

ソフトウェアの品質改善のためにも、ぜひ今回の知識を役立ててみてください。

資料ダウンロード

ライター:Qbook編集部

ライター

バルテス株式会社 Qbook編集部。 ソフトウェアテストや品質向上に関する記事を執筆しています。