Top  PC情報Top


カバレッジ試験項目評価法
最初に触れておきますが、
この話はC0、C1を網羅しましょう。という話ではありません。
真逆の話です。

目次
カバレッジ試験項目評価法とは
具体的な実践方法
ツールの紹介及び使い方について
カバレッジ試験項目評価法とは
エンジニアなら一度は「C0、C1 100%の試験実施」をやったことがある人は多いと思います。
『実施自体はないけど、耳にしたことはある』という人を含めると、結構な数に上ると思います。
C0、C1 100%の試験を知らない人向けに簡単に説明すると、「全部のソースコードを動かしましょう」と言うものです。
(簡単に説明しているので、正確ではありません)
一見これをすると、バグを全て発見出来そうです。が、そんなことはありません。
全ての分岐を通したところで、分岐に全ての条件が記載されている保証がなく、
全ての組み合わせの試験をした訳ではないので、全てのバグを取り除くということは出来ません。
全てのバグを取り除くことは非常に難しいことです。現実的には不可能というレベルです。
全てのバグを取り除けないので、「C0、C1 100%の試験実施」は無駄という訳ではありません。
しかし、あまり効率の良い方法でもありません。
何故なら、「結果が分かり切っているにも関わらず試験を行う必要があるため」です。
下記の例では、①~⑤の関数でfalseになると、falseで抜けています。
「false」で抜けること以外に確認することはありません。
メモリの確保もしていないため、解放漏れの確認もありません。
それでも、C0、C1 100%の試験を実施する時は試験を行う必要があります。
この点が非効率と言えます。

そもそも、「C0、C1 100%の試験」というものは、「目的」と「手段」がずれていると管理人は思っています。
「不具合をなくす」ことを目的としている試験のはずが、
「試験項目を全て実施する」ことを目的としている試験になっていると思っています。

「生産性」の考え方にも関係のある話ですが、
「同じ成果物」が出来るのであれば、「途中の成果物」は少ない方が生産性は高いと考えています。
よって、不要な試験はない方が生産性は高い。そう管理人は考えています。


カバレッジ試験項目評価法とは、簡単に言うと、試験項目が十分か?を評価する方法のことです。
この方法は全てのバグを除去することを目的としていません。
・試験実施後に全てのソースコードが通ったことをチェックします
・通っていない部分の試験が実施の要否を判断します
・試験実施が必要な場合に、追加の試験項目を作成し、実施します
上記の考え方のため、C0、C1について100%までは実施しません。
上記のソースコードの場合、①~⑤までの1つだけ試験を実施すれば、残りの試験は同等の試験は実施済みと判断します。
この場合、C0、C1の網羅率は20%ですね。
こう言った試験方法のため、C0、C1、100%の試験実施と同等の成果物を作ることが出来、且つ試験項目が少なくなるため生産性が上がる。と言えます。

具体的な実践方法
考え方については、カバレッジ試験項目評価法とはでご理解いただけたと思います。
続いて、具体的な実践方法について、例を示しながら説明します。
下記のソースコードを実装し、下記の試験を実施する場合について説明します。

これは下記の仕様の関数です。
・value1,value2,value3,value4は1~10。範囲外の場合はfalseを返す。
・value1が5より大きい場合は下記の条件と結果の組み合わせになる
  ・value2が5以下の場合はtrueを返す
  ・value2 / (value1 - 5) が1より大きい場合はfalseを返す
  ・value2 / (value1 - 5) が1以下の場合はtrueを返す
・value2が5より大きい場合は下記の条件と結果の組み合わせになる
  ・value3が5以下の場合はtrueを返す
  ・value3 / (value2 - 5) が1より大きい場合はfalseを返す
  ・value3 / (value2 - 5) が1以下の場合はtrueを返す
・value3が5より大きい場合は下記の条件と結果の組み合わせになる
  ・value4が5以下の場合はtrueを返す
  ・value4 / (value3 - 5) が1より大きい場合はfalseを返す
  ・value4 / (value3 - 5) が1以下の場合はtrueを返す
・value4が5より大きい場合は下記の条件と結果の組み合わせになる
  ・value1が5以下の場合はtrueを返す
・上記のいずれも満たさない場合、trueを返す
・上記仕様は先に書かれているもの程、優先順位は高い

上記ソースコードの試験項目は下記の通り用意しました。
No 入力値 出力期待値
value1 value2 value3 value4
10666false
211666false
36066false
461166false
56600false
6661111false
76666false
86666false
96666false
1010566false
116666false
1210666false
1361066false
14101066false
153616false
1631056false
173666false
1831066false
1936106false
20310106false
213361false
2233105false
233366false
2433106false
2533610false
26331010false
271336false
2853310false

カバレッジ試験項目評価法では、
「実装箇所の全ての行について、1度は実行(試験)しているか?」を確認します。
その実現方法として、ブレークポイントを用います。
なお、管理人が使用している開発環境はVisual Studioです。
ブレークポイントは下図のように、分岐個所に設定します。
ブレークポイントには「ラベル」を設定してください。一つ一つ個別のラベルではなく、全部同じにして下さい。
(今回の例では、「test」という名前のラベルを設定しています)
試験の際にブレークポイントを設定したい場合も多々あると思います。その場合は、ラベルなしのブレークポイントを設定してください。
それによって差別化を図ることが可能です。
試験実行時、ブレークポイントで止まると、そのブレークポイントを『無効化』します。
削除ではなく、無効化です。
ブレークポイント設定箇所

ブレークポイントの無効化

試験を実施した後、ブレークポイントのウィンドウで全選択し、右クリック→「選択した内容をエクスポート」を実行します。
ブレークポイントのエクスポート

エクスポートしたXMLファイルを自作したツール(後述)を使用してCSVを生成します。
CSVをエクセルで開き、多少手を加えると下図の様になります。
ブレークポイントの解析準備

※管理人はLibre Officeを使用しているため、エクセルと見た目が合わない部分があるかも知れませんが、気にしないでください。

このエクセル表示の内容について、簡単に説明します。
A列:番号です。複数人で開発する際に、この番号を使って会話する際に便利になります
B列:ブレークポイントを設定していたコードの位置です
C列:ブレークポイントの有効/無効を表しています。1なら有効(実行されていない)です
D列:ブレークポイントに設定したラベルです
E列:備考欄です。解析し、不要な場合はその理由を書き込むために使用します
G・H列:ラベルと、ラベルごとのEnableが0である率を表しています。「全体」はラベルを問わず全体の率を表しています

続いて、分析を行います。
C列が1になっているものが分析対象です。未実施のものが未実施で適切なのか?適切な場合は何故適切なのか?
それを分析し、試験が必要な場合は、試験を追加します。
今回の分析結果は下図の通りになりました。
ブレークポイントの解析結果

分析した結果、No.3と12の試験が必要と言う結果になりました。
No.3の試験で未確認は管理人も完全に想定外でした。
No.12については、ソースコードがバグってることに気づくことができます。
このようにカバレッジ試験項目評価法は試験を実施するだけでは気づかない不具合を発見できる方法です。

カバレッジ試験項目評価法には問題点があります。
ブレークポイントはVisual Studioで制御しています。
よって、Visual Studio以外でソースコードの編集を行うと、ブレークポイントの行数が変化することがあります。
ソフトウェアは複数人で開発することがよくあります。また、試験フェーズでは不具合を出し、修正することが目的です。
よって、行数が変化することは頻繁に起こります。
この問題に管理人は手動でマージすることで解決しています。
手動でマージすることの手間と、不具合を発見できる効果を比較して、管理人たちは手動でマージする方が楽と判断したという訳です。

ブレークポイントを使用することだけが、カバレッジ試験項目評価法の唯一の冴えたやり方だとは思っていません。
要は、どの行を通ったか?もしくは、どの行を通っていないのか?という情報を入手するやり方があれば問題ありません。
管理人とは環境が異なることもあると思いますが、そこは創意工夫でカバレッジ試験項目評価法を実行する方法はあると思います。
是非挑戦して見て下さい。


ツールの紹介及び使い方について
Visual Studioから出力したブレークポイントを解析し、csv形式に変換するツールを紹介します。
こちらです。名前は「BreakPointXMLParser」です。
管理人が作成したフリーソフトです。あまり動作確認はしていないので、推奨環境等の情報は用意していませんが、
Visual Studioがインストールされている、Windowsなら動作すると思います。
Windows10、WindowsXPで動作していたことは確認済みです。

使い方について説明します。
と言っても大したことはないです。
BreakPointXMLParserのアイコンにドラッグアンドドロップしてもらえれば、解析後のファイル保存のダイアログが表示されます。
そちらに、任意の場所とファイル名を設定してください。
内容はCSV形式で出力されるため、拡張子はCSVが好ましいです。
出力したCSVファイルをエクセルで開くと、上記例でも表示しているような内容が表示されます。
罫線等を追加していただければ、分析資料の準備完了です。
なお、B列に表示される行数が1行ずれていると思われます。
これはブレークポイントのXMLに記載されているステップ数が0オリジンだからと思われます。
いつか、その内直すと思います。
本ツールについて、不具合や要望等あれば、掲示板に書き込んで下さい。書き込んでいただけると対応するかも知れません。