バグとは何か(テスト関連の用語について)

テストエンジニア 品質保証QA 障害管理

バグ、不具合、エラー、障害、等々……

プログラムが想定通りに動作しなかった場合によく使われる言葉ですが、残念ながら現状これらの言葉にきちんとした定義はありません。
JISなどの標準規格や業界標準とされるドキュメントはあるにはあるのですが、使用される用語もその定義も(似通ってはいるものの)まちまちな状況です。

「バグ」という言葉は広く一般に浸透しているようですが、なんでもかんでも「バグ」の一言で片付けてしまいがちな一般人と違い、我々ソフトウェア技術者は開発工程において技術者同士のコミュニケーションの際にきちんとした用語を使う必要があります。
少なくとも本サイトにおいては記事内容の理解に支障のないようここで用語の定義を統一しておきたいと思います。


参考: バグと不具合の違い


不具合【failure, failed, error occured】(類義語:エラー、故障)
指定された機能要件や性能要件を果たせない状態。
利用者の想定と異なる(あるいは不完全な)動作が発生した状態。
エラーや異常終了、無応答など。
障害が混入された結果・状態。

障害【bug, fault, defect】(類義語:バグ、欠陥)
ソフトウェアの構成要素(プログラム、データ定義等)や設計(設計書、仕様書等)の欠陥部分、故障箇所。
当該ソフトウェアを取り巻く外部の問題や環境不良。
不具合の原因、誤りの結果。

誤り【error, mistake】
ソフトウェアの開発工程で発生した主に開発者の犯した仕様書やプログラム上の間違いや失敗。
障害の原因・要因。

不具合」は「障害」が引き起こす結果であり、「障害」は「誤り」が引き起こす結果です。
誤り」は「障害」を混入してしまった原因であり、「障害」は「不具合」が起きる原因です。

不具合・障害・誤りの関係


まず、テスト工程や実際の本番運用において「不具合」が見つかります。
開発担当者は不具合の内容からプログラムを調査し、「障害」を取り除きます。
見つかった障害は管理台帳に記録し、進捗状況の確認や障害の分析に利用します。
障害の管理は、現在では主に BTS【Bug Tracking System】(バグトラッキングシステム)を利用して行われるのが一般的です。

用語の定義について

ソフトウェア開発において、プロジェクト内で使用する用語の定義・統一を図ることは非常に重要な業務です。
この際、定義する用語は日本語・英語の両方を同時に考えることを心がけましょう。
(日本語=英語のカタカナ表記となる場合もあります)
日本語と英語の両方を定義することで、その用語の使い勝手は格段に上がります。
日本語と英語ではそれぞれ長所・短所があり、例えば日本語だと幅広い意味を持ちすぎて曖昧になったり、英語だと1つの単語が長すぎて使いづらかったり馴染みのない単語だと意味が通じなかったりします。
口頭での説明では意味の通りやすい方を、ドキュメントの記述は併記した後に短い方を、ソースコード上は英語を選択するといった使い分けができるようになり、相手への伝わり方もかなり変わると思います。



品質分析(障害の分析)では、「誤り」や「障害」は種類ごとに分類され、統計をとることで障害の傾向を可視化し、組織や開発プロセスの弱点を見つけることに役立てます。

障害」の種類 → 障害区分(論理ミスやインタフェースミスなど)
誤り」の種類 → 障害原因(単純ミス、考慮漏れなど)

参考: 障害区分と障害原因(バグの分類)

コメント