「バグ」という言葉の曖昧さ

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

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

今日のSo-netの障害に関して,
1つ思い出したことがあったので,メモ程度に記述.
一言で言うと「バグ」の話.

ソフトウェア上で何か問題があったときに,
多くの人は「バグってる」なんて表現をするけど,
そもそもこの言葉,非常に曖昧というか,
状況に応じてその意味を変貌させており,
コミュニケーションギャップの原因になっていたりする.

SQuBOKの第2版によると,
「誤り」「障害」「故障」という3つの概念があり,
それらが全て「バグ」という言葉に込められているように思う.


それぞれ,SQuBOKから引用した定義は以下のとおり.

(1) 誤り(Error):
計算された値,観測値若しくは測定値または条件と,
真値,指定値若しくは理論的に正しい値または条件との間の相違.

(2) 障害(Fault):
ハードウェアのデバイスまたはコンポーネントのディフェクト.
コンピュータプログラムの間違ったステップ,プロセス,またはデータ定義.

(3) 故障(Failure):
システムやコンポーネントが,
指定された要求仕様通りに機能を実行することができない状態.


うん,よくわからん.
何故こういう書籍では,わざわざ理解から遠ざけるような記述を採用するんだろう.

ここでは例として,電卓というシステムを採用する.
俺の中では,以下のように理解した.

(1) 誤り:add(a, b)というメソッドが,例えばadd(1, 1) = 0と返す.
(2) 障害:add(a, b)が,例えば「return a - b」と実装されている.
(3) 故障:この電卓は「足し算」という機能を要求仕様通りに実行できない.

因果関係でいえば,
「障害⇒誤り⇒故障」
という関係.

開発者目線でコードが正しく書けていないという意味の「バグ」は障害だし,
ユーザ目線で期待通りに動かないという意味の「バグ」は故障.

誤りと故障の線引きが,個人的にかなり怪しいところだけれど,
ここは
「ユーザから見えるレベルの期待と実際のズレが故障」
「故障を論理的に整理して,無関係な要素を削ぎ落とした結果得られるのが誤り」
くらいで良いんじゃないかな.

例えば,何かしらのとんでもない障害のせいで,
この電卓は「0を1と認識する」という1つの「誤り」を抱えていたとする.
その場合,この電卓は
「足し算できない」「引き算できない」
「掛け算できない」「割り算できない」という
4つの「故障」を抱えることになる.
イメージとしては,こういう違い.

というか,誤りについては,ドキュメントによって
定義が揺らいでいるらしいので,下手に
「誤りとはこういうことである!」
と定義してしまう方が危険な気がする.


まあ,ここまで書いておいてこう言うのも何だが,
お互いの認識祖語さえ生まなければ「バグる」で統一でも別段良いとは思う.