テスト管理手法

このページでは、バグ管理図と信頼度成長曲線の読み方と、バグ埋込み法・2段階エディット法で残りのバグ数を推測する計算方法がわかります。

  • 一言で言うと:
    • テストで見つかったバグを数字で管理し、「品質は十分か」「バグはあといくつ残っているか」を判断する話
    • グラフの形で状況を読むバグ管理図と、残りのバグ数を見積もる計算(バグ埋込み法、2段階エディット法)が出てくる

グラフの形で読む(バグ管理図)→ 数を見積もる(バグ数の推測方法)

覚え方の軸

  • 順調なテストでは、バグの累積数は「S字」になる
    • 最初は少しずつ、途中でぐっと増え、最後は頭打ち(傾きが0に近づく)
    • 頭打ちになったら、「バグが収束した」「一定の品質に達した」と判断する
  • S字から外れたら、どちらにずれたかで原因を読む
    • 早く上がりすぎ(α)は、プログラムの質が悪い(設計までさかのぼる)
    • なかなか上がらない(β)は、テストの質が悪い、またはプログラムの質がとても良い
  • バグ数の推測は「割合が同じ」と仮定した比例の式
    • バグ埋込み法は、「埋めたバグが見つかった割合」=「本物のバグが見つかった割合」
    • 2段階エディット法は、2つのグループの見つけ方を独立と考え、確率の掛け算を使う

バグ管理図:グラフの形で、品質と進み具合を読む(★)

  • テスト管理の考え方:
    • テスト工程では、見つかったバグ(エラー)などを定量的に管理する
    • テストの量や時間、達成度を分析して、テストの品質を評価する

① ソフトウェアの信頼度成長モデル

  • バグの見つかり方:
    • 順調にテストが進んでいる場合、見つかるバグの数は、最初は少なく、時間とともに徐々に増え、その後収束していく
    • 横軸にテストの時間(またはテスト項目消化件数)、縦軸にバグ累積数をとると、S字形の曲線になることが経験的に知られている
  • 信頼度成長モデル:
    • このS字形の曲線を、数理的にモデル化したもの
    • 一番の特徴は、テストの後半でグラフの接線の傾きが0に近づき、バグ累積数が一定の数に収束すること
    • そのため、「バグが収束した」「一定の品質に達した」と判断する根拠の1つとして使う
  • 信頼度成長曲線(バグ曲線ともいう):
    • 信頼度成長モデルのS字形の曲線
    • 代表的なものに、ゴンペルツ曲線とロジスティック曲線がある
  • ゴンペルツ曲線とロジスティック曲線の違い:
    • どちらも似たS字形
    • ゴンペルツ曲線は、変曲点で非対称。ロジスティック曲線は、対称
    • 一般に、テストの開始時期と終了時期ではゴンペルツ曲線、テストの中盤ではロジスティック曲線を使う
    • 試験では、このような数学的な知識は問われない
  • 信頼度成長曲線の例え:
    • 部屋の大掃除。最初は勝手がわからずゴミがあまり出ないが、慣れるとどんどん出て、最後はほとんど出なくなる。出なくなったら「きれいになった」と判断する

② バグ管理

  • バグ管理図:
    • 実際のテストの実績(バグ累積数)をグラフに書き込んだもの
    • 信頼度成長曲線の形と比べて、プログラムの品質状況やテストの進捗状況を判断する
    • 一般的には信頼度成長曲線の形になるはず。ならない場合は、バグが多い、テストの質が悪いなど、何か原因があると判断できる
  • 試験での出方(試験):
    • グラフの形から、テスト状況を判断できるようにしておく
形 グラフの様子 判断 どうするか
α 信頼度成長曲線より左上。テストの初期段階でバグが多発する テスト消化項目数が少ないうちに不良が多い → 「プログラムの質が悪い」。設計段階のミスが原因の可能性もある 設計段階にさかのぼって見直す
β 信頼度成長曲線より右下。テストの中盤になってもバグの検出が進まない 「テストの質が悪い」「テストケースの欠落」「解決困難なバグに直面した」、逆に「プログラムの品質がきわめて良い」とも考えられる いろいろな観点から、テスト状況を分析する
  • 一般的な形でも安心しない:
    • プロットした点が一般的な形でも、適切なテストケースでテストが行われているかの確認は必要
  • α・βの例え:
    • αは、掃除を始めてすぐゴミが山ほど出る。そもそも部屋の使い方(設計)が悪いかもしれない
    • βは、いつまでたってもゴミが出ない。掃除のやり方が悪いのか、本当にきれいなのか、調べる必要がある

もう1つのバグ管理図

  • グラフの中身:
    • 縦軸にテスト項目数・バグ数、横軸に時間をとり、バグ検出数(累積)、未消化テスト項目数、未解決バグ数の3本を描く
  • 出題されるパターン:
    • バグ検出数が途中から伸びなくなり、未消化テスト項目数が0まで減らずに横ばいになり、未解決バグ数も0にならずに残っている
  • 判断:
    • 解決困難なバグに直面し、その後のテストが進んでいない可能性がある
    • 例えば、通行止めの道があって、その先に進めない状態

バグ数の推測方法:残りのバグはいくつか(★計算がよく出る)

① バグ埋込み法

  • バグ埋込み法(エラー埋込み法):
    • プログラムの潜在バグ数を推定する方法の1つ
    • あらかじめ既知のバグを埋め込んでおき、その存在を知らない検査グループがテストした結果から、潜在バグ数を推定する
    • 埋込みバグと潜在バグの発見率が同じと仮定する
  • バグ埋込み法の式:
    • 発見された埋込みバグ数 ÷ 埋込みバグ数 = 発見された潜在バグ数 ÷ 潜在バグ数
    • 「埋めたバグが見つかった割合」=「本物のバグが見つかった割合」
  • 潜在バグ数=
    • 発見された潜在バグ数 × 埋込みバグ数 ÷ 発見された埋込みバグ数
  • 残存バグ数=
    • 潜在バグ数 − 発見された潜在バグ数
  • 試験での出方(試験):
    • 潜在バグ数や残存バグ数だけでなく、公式そのものが問われることがある
  • 例:
    • 埋込みバグ数30個、発見された埋込みバグ数24個、発見された潜在バグ(真のバグ)数60個
    • 24 ÷ 30 = 60 ÷ a より、24 × a = 30 × 60 = 1,800、a = 75個
    • 残存バグ数は、75 − 60 = 15個
  • 例題(バグ埋込み法):
    • 埋込みバグ数20個、発見された埋込みバグ数15個、発見された潜在バグ数30個。潜在バグ数と残存バグ数は
  • 例題の答え:
    • 埋込みバグの発見率は、15 ÷ 20 = 0.75(75%)
    • 潜在バグも75%見つかったと考えるので、潜在バグ数 = 30 ÷ 0.75 = 40個
    • 残存バグ数 = 40 − 30 = 10個
    • 検算:15 ÷ 20 = 0.75、30 ÷ 40 = 0.75 で一致する
  • バグ埋込み法の例え:
    • 池に目印付きの魚を20匹放し、網ですくったら目印付きが15匹(75%)、ふつうの魚が30匹とれた。ふつうの魚も75%とれたと考えれば、池には40匹いた、と推定する

② 2段階エディット法

  • 2段階エディット法:
    • 完全に独立した2つのテストグループA、Bが、テストケースやテストデータをそれぞれ用意し、一定期間並行してテストする
    • Aが検出したエラー数をNA、Bが検出したエラー数をNB、そのうち共通するエラーをNABとして、システムの総エラー数Nを推定する
    • Basinが提案した方法。A、Bのバグを見つける能力と効率は等しいと仮定する
  • 2段階エディット法の総エラー数N=
    • NA × NB ÷ NAB
  • 式の導き方(独立事象の乗法定理):
    • 事象Bの起こる確率が、事象Aの起こり方に影響されないとき、P(A∩B)= P(A)× P(B)
    • ①グループAが見つける確率は、P(A)= NA ÷ N
    • ②グループBが見つける確率は、P(B)= NB ÷ N
    • ③A、Bの両方が見つける確率は、P(A∩B)= NAB ÷ N
    • 代入すると、NAB ÷ N =(NA ÷ N)×(NB ÷ N)
    • Nについて整理すると、N = NA × NB ÷ NAB
  • 試験での出方(試験):
    • 公式だけでなく、NABとNA、NBの関係式(NAB ÷ N = NA ÷ N × NB ÷ N)も問われることがある
  • 例:
    • グループAが25個、グループBが32個を検出し、そのうち20個が共通
    • N = 25 × 32 ÷ 20 = 800 ÷ 20 = 40個
  • 例題(2段階エディット法):
    • グループAが12個、グループBが15個を検出し、そのうち9個が共通。総エラー数と、まだどちらにも見つかっていないエラー数は
  • 例題の答え:
    • N = 12 × 15 ÷ 9 = 180 ÷ 9 = 20個
    • A、Bのどちらかが見つけたエラーは、12 + 15 − 9 = 18個(共通の9個を二重に数えないよう引く)
    • まだ見つかっていないエラーは、20 − 18 = 2個
    • 検算:Aの発見率 12 ÷ 20 = 0.6、Bの発見率 15 ÷ 20 = 0.75、両方の発見率 0.6 × 0.75 = 0.45、0.45 × 20 = 9個で、共通の数と一致する
  • 2段階エディット法の例え:
    • 2人が別々に間違い探しをする。2人とも見つけた間違いが多いほど、「見つけやすい間違いはほとんど出尽くした」と考えられ、総数は少なめに見積もられる

混同しやすいペア

  • 信頼度成長モデル / 信頼度成長曲線
    • 信頼度成長モデルは、バグ累積数のS字を数理的にモデル化したもの
    • 信頼度成長曲線(バグ曲線)は、そのS字形の曲線そのもの
  • ゴンペルツ曲線 / ロジスティック曲線
    • ゴンペルツ曲線は、変曲点で非対称。テストの開始時期と終了時期に使う
    • ロジスティック曲線は、変曲点で対称。テストの中盤に使う
  • αの形 / βの形
    • αは、初期にバグが多発する。プログラムの質が悪い → 設計段階にさかのぼって見直す
    • βは、中盤になっても検出が進まない。テストの質が悪い、テストケースの欠落、解決困難なバグ、または品質がきわめて良い → 分析する
  • 潜在バグ数 / 残存バグ数
    • 潜在バグ数は、もともとプログラムにある本物のバグの総数(推定)
    • 残存バグ数は、潜在バグ数から、見つかった潜在バグ数を引いたもの(まだ残っている数)
  • バグ埋込み法 / 2段階エディット法
    • バグ埋込み法は、わざとバグを埋め込み、その発見率から推定する(比例の式)
    • 2段階エディット法は、独立した2グループの結果から推定する(N = NA × NB ÷ NAB)

← 09 開発技術の目次に戻る

タイトルとURLをコピーしました