ソフトウェアの開発現場で頻繁に用いられる用語の中に、「バグ」という言葉があります。
しかし、「バグ」で表されるソフトウェアの不具合は、その特徴や性質に応じて「エラー」「欠陥」「フォールト」「故障」という4つに大別できるとされています。
今回は、これらの用語の定義をご紹介し、意味の違いを理解する必要性についてもご説明します。
- もくじ
1.ソフトウェア開発で用いられる「バグ」とは
ソフトウェア開発の現場で用いられる「バグ」とは、プログラムの不具合を示す言葉です。
英語で書くと「bug」で直訳すると「虫」となります。これは、1947年に「Harvard Mark Ⅱ」というコンピューターが故障し、その原因がコンピューター内に入り込んだ「虫」だったことが由来だとされています。
ただ「バグ」のようにプログラムの不具合を表す言葉はいくつかあります。次章からその言葉とそれぞれの意味や違いについて解説します。
2.「バグ」と類似する4つの言葉とそれぞれの意味
「バグ」と類似する言葉としては「エラー」「欠陥」「フォールト」「故障」などがあります。
それぞれの意味・バグとの違いについて解説します。(※JSTQB、IEEEにて定義されているものをもとにご紹介します。)
用語 | JSTQB・IEEEの定義 |
---|---|
バグ(bug) | コンポーネントまたはシステムに要求された機能が実現できない原因となる、コンポーネントまたはシステムに含まれる不備 |
エラー(Error) | 間違った結果を生み出す人間の行為 |
欠陥(Defect) |
=「バグ(bug)」 コンポーネントまたはシステムに要求された機能が実現できない原因となる、コンポーネントまたはシステムに含まれる不備 |
フォールト(Fault) | ソースコードのなかで生じる、人為的エラーのコード化(IEEE) |
故障(Failure) | コンポーネントやシステムが、期待した機能、サービス、結果から逸脱すること |
エラー(Error)
JSTQBの定義によると、バグの中でもエラーは「間違った結果を生み出す人間の行為」と定義されています。つまり、エラーという概念が指すのは、システムの性質というよりも開発者や設計者の行った判断やシステム仕様の誤解である、と表現できます。
具体的には、開発者が一部の例外処理を考慮し忘れてしまったなど、開発を行う人間自身の判断が誤っているという事実がエラーに相当します。
欠陥(Defect)とは
開発現場ではもっともよく使われる「バグ」という言葉は、「欠陥」という言葉とほぼ同義で用いられています。
JSTQBでの定義によると、欠陥は「コンポーネントまたはシステムに要求された機能が実現できない原因となる、コンポーネントまたはシステムに含まれる不備」と定義されています。
先述したエラーが判断ミスなどの行為を表すのに対し、欠陥とは仕様やコードの不備の存在自体を示しているといえます。
フォールト(Fault)とは
フォールト(Fault)はバグや欠陥と同じニュアンスで用いられることが多いようです。JSTQBの定義によると、フォールト・バグ・欠陥は同義であると述べられています。
しかし、IEEE(Institute of Electrical and Electronics Engineers)の定義によると「フォールト」は「ソースコードのなかで生じる、人為的エラーのコード化」と定義されています。つまり、JSTQBおよびIEEEの定義をもとに厳密に区別して表現するなら、「欠陥」が環境や設定、データなども含むシステム全体の不備であり、「フォールト」はその中でもソースコードの不備を指しているといえるでしょう。
故障(Failure)とは
JSTQBにおいて、 「故障」は「コンポーネントやシステムが、期待した機能、サービス、結果から逸脱すること」と定義されています。IEEEもほぼ同義です。
フォールトによって不具合が顕在化し、意図したシステムの仕様通りに動作せず、機能を発揮できない場合、「故障」に相当することになります。
例えば、あるプログラムにおいて、設計ミスが原因で、本来登録されるべきデータの一部が登録されなかったとします。このプログラムには「欠陥」があるといえますが、登録されなかったデータを業務上利用しない間は、欠陥の存在に気づくことができません。
一方、該当のデータを利用する必要が生じて登録漏れが発覚した場合、この事象は「故障」として認識されることになります。
これは、システムに含まれる不具合が必ずしも故障に直結するとはいえない、ということを示しています。しかし、開発現場では欠陥/フォールト/故障は「バグ」という用語でひとくくりにされているケースが少なくありません。
3.意味の違いを理解する必要性
ソフトウェア品質を測る尺度として、「欠陥密度」「フォールト密度」「故障密度」といった概念があり、これらを利用することでソフトウェアの品質を客観的に分析・評価できるようになります。
上記のような指標を開発現場に導入する場合、欠陥や故障を「バグ」とひとくくりにするのではなく別の事象として扱う必要があります。なぜなら、JSTQBやIEEEでは、それぞれ定義が変わってくるからです。
IEEEの定義では「欠陥密度」と「フォールト密度」は区別されますが、JSTQBの定義では同義とされ、「コンポーネントまたはシステムの中で特定された欠陥の数をコード行数などで割った値」という意味になります。
「故障密度」はJSTQBとIEEEのどちらにおいても「欠陥密度」「フォールト密度」と区別され、「使用単位時間またはテスト単位時間当たりの故障」と定義されています。
実際はテスト工程で発見された不具合を具体的に分析する時間がない場合が多く、不具合を防ぐ取り組みは感覚的なものになりがちかもしれません。しかし、各用語の意味の違いを理解し、品質指標を取り入れることによって、不具合の原因や傾向を可視化することができるようになります。
まとめ
今回の記事では、システムの不具合に関わる5つの用語についてご紹介しました。
それぞれの用語の定義は以下の通りです。
用語 | JSTQB・IEEEの定義 |
---|---|
バグ(bug) | コンポーネントまたはシステムに要求された機能が実現できない原因となる、コンポーネントまたはシステムに含まれる不備 |
エラー(Error) | 間違った結果を生み出す人間の行為 |
欠陥(Defect) |
=「バグ(bug)」 コンポーネントまたはシステムに要求された機能が実現できない原因となる、コンポーネントまたはシステムに含まれる不備 |
フォールト(Fault) | ソースコードのなかで生じる、人為的エラーのコード化(IEEE) |
故障(Failure) | コンポーネントやシステムが、期待した機能、サービス、結果から逸脱すること |
バグ、エラー、欠陥、フォールト、故障がどのような意味を持つのか理解することは、不具合発生の原因解明、開発工程やテスト工程の改善にもつながりますし、ソフトウェアの品質指標を導入する場合にも必要です。
ソフトウェアの品質改善のためにも、ぜひ今回の知識を役立ててみてください。