ソフトウェアの品質を学びまくる2.0

旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

「誤り」と「障害」と「故障」 ─ その1

 いわゆる「バグ」と、その周りの言葉は、定義が曖昧だったり使う人によったりして、誤解を招きやすいですよね。ちょっと整理してみました。

SQuBOKの定義

 JIS X 0014:1999、SQuBOKでの定義は以下の通りです。

誤差・誤り(error)

計算、観測もしくは測定された値または状態と、真の、指定されたもしくは理論的に正しい値または状態との間の相違。

 ソフトウェア設計書の記述として、「または」「もしくは」を連発したこんな書きっぷりが蔓延していたら、0.01秒で差し戻しますが。。。

障害(fault)

要求された機能を遂行する機能単位の能力の、縮退または喪失を引き起こす、異常な状態。

 「状態」という言葉に違和感がありますが、これは「間違っている」という現実を指すものと理解しています。

障害(fault)

要求された機能を遂行する、機能単位の能力がなくなること。

 その間違いがもたらす結果が、failureというわけです。ちょっとわかりづらいですね。

JSTQBの定義

 一方、JSTQBの用語集では、もう少しヒトに優しい言葉で記されています。

エラー(error、誤り)

間違った結果を生み出す人間の行為

 「10以上」は10を含まないと小学生時代から信じたままコードを書いたとか、そういう「バグを作るキッカケ」と思えばよいでしょうか。
 SQuBOKとはまったく立ち位置が違うので、要注意ですね。JSTQBでは「行為」、SQuBOKではその行為によって生じてしまった、あるべき姿との「差異」

欠陥(defect、バグ、失敗)

要求された機能をコンポーネントまたはシステムに果たせなくする、コンポーネントまたはシステムの中の不備。(中略)実行中に欠陥に遭遇した場合、コンポーネントまたはシステムの故障を引き起こす。

 「10以上」は10を含まないという頑なな思いから、また指の激しい滑りから、「if i > 19 then」とコーディングしてしまった・・・。
 その結果が、欠陥ですね。JSTQBの「欠陥」は、「中の不備」とあるので、ドキュメント段階での問題点は含まないようにも見えます。

 ちなみにわたし(の周りで)は、「バグ」をプログラム内部の問題点、「不良」を、システム/ソフトウェア構築に伴う生産物に含まれる問題点(バグを含む)といった意味で使っております。

故障(failure)

コンポーネントやシステムが、期待した機能、サービス、結果を提供できないこと。

 指滑りコードがテストされる日がついにやってきた。境界値テストとして「i=9」と「i=10」を試してみる。この2つは結果が違うはずだが・・・。いや、何故か同じだ!
 というように、欠陥がある現象として白日の元にさらされた状態。これが「故障」ですね。SQuBOKの「error」は、どちらかといえば、JSTQBの「故障」に近いように思います。

ついでに・・・

 ついでながら、JSTQBの認定試験で、「故障率」と「欠陥密度」の定義に関する問いが出題されていました。

故障率(faiulre rate)

測定単位に発生したあるカテゴリの故障数の率。例えば、単位時間あたりの故障数、トランザクション数あたりの故障数、コンピュータの運用回数あたりの故障数。

欠陥密度(defect density)

コンポーネントまたはシステムの中で特定された欠陥の数をコンポーネントまたはシステムの大きさで割った値。

 しっかり覚えていなかったので、故障率の方は間違えた気が。「欠陥」と「故障」の意味をちゃんと覚えていれば、間違いようもないですけどね。

 余談ですが、「人間の行為」と書こうとして、「人間の」まで打った時点でgoogle先生が「人間のクズ」と予測変換してくれるのを見て、ネットの病を感じざるを得ません。

 その2はコチラ。

kzsuzuki.hatenablog.com