概要 -テストの必要性-
テストを効果的に実施することができればバグや手戻りが減り、開発作業をスムーズに進めることができる。また、開発工数が最適化されて費用対効果が上がることが期待できる。テストは計画→設計→実施の順で進められ、これらの工程を管理していく。通常テストは全工数の半分からそれ以上をかけて実施される。
ブラックボックステストとホワイトボックステスト
テストにはプログラムやシステムを動かさずテストする静的テストと、反対に動かしてテストする動的テストがある。動的テストは以下の3種類がある。
- ブラックボックステスト
- プログラム内部の構造に関係なく仕様に基づいて入力から出力の正しさをテストする方法。
- ホワイトボックステスト
- プログラム内部の構造を考慮しテストする方法。分岐の先の処理の全て確認したりする。
- グレーボックステスト
- ブラックボックステストとホワイトボックステストの両方取りで、プログラム内部の構造を把握したうえでテストする手法。入力と出力だけでなく必要なだけ内部の処理についても確認する。
ホワイトボックステストはカバレッジを目標値として実施されるが、必要性の高くない範囲までテストを実施してしまう。また、ソースコードに対する試験であり、仕様をテストしているためではないため非効率な部分がある。そのためブラックボックステストをメインとして、補助的にホワイトボックステストを用いることがおすすめされている。
テスト項目
ブラックボックステストにおいて仕様のパターンやバグになりやすいところを網羅するテスト項目を作成するために同値分割、境界値分析という技法がある。
- 同値分割
- 仕様から同じような複数の入力値をグルーピングし、その代表値を選択する
- 境界値分析
- 同値分割した各グループの境界値付近を入力値として選択する
- 一般的にバグは境界値付近にあることが多い
- 同値分割した各グループの境界値付近を入力値として選択する
カバレッジ
ソースコードがどれだけテストされたかを計測する方法としてカバレッジがある。カバレッジは以下の二つの種類があり、テスト専用のソフトウェアなどで計測できるものがある。
- ステートメントカバレッジ
- 命令網羅とも呼び、ソースコード中の命令を少なくとも一回実行された場合に100%になる
- ブランチカバレッジ
- 分岐網羅とも呼び、ソースコード中の分岐命令における分岐先のすべてのコードが実行されると100%となる。
ブランチカバレッジが100%ならばステートメントカバレッジも100%となる。一般的にブランチカバレッジが100%になるようにテストすべきだといわれている。
直交表
直交表はテストのための条件の組み合わせを作成する方法で、効率的にテスト項目を抽出することができる。ソフトウェアの機能をテストする場合、複数の機能の組み合わせを全て考えると指数関数的にテスト項目数が増加する。直交表を用いることで組み合わせの増加を抑制でき、効率的にテストを実施できる。一般に直交表で作成されるテスト項目数はソースコードの行数の1/10くらいとなる。
直交表を使ったテストの前条件として事前に単体テストを終わらせていることとする。また、前処理として各因子の水準数を同値分割などにより絞る必要がある。ここで因子とはパラメータ、水準はパラメータの値のこと。この各因子の水準数から適切なサイズの直交表の見積もる必要があるが、方法として2因子間網羅度を100%にする方法と、自由度と呼ばれる水準数からの計算結果より求める方法がある。
ディシジョンテーブル
直交表はあらかじめ表の形が決められており、テストケースが直交表にうまくはまる場合もあればそうでない場合もある。この直交表とは別に、柔軟性の高いテスト項目の作成法としてディシジョンテーブルがある。行(or列)に条件とその結果出力される値を書き、列(or行)にテスト番号を振る。
仕様書の読み方とテスト設計
テストケースを作成するときに仕様書に3色ボールペンで書き込みをすると情報への感動が上がることが期待される。例えば、客観的に最も重要な場所、客観的にまあ重要な場所、主観的に気になったところに線や丸、コメントを書き込むとよい。
テスト設計には、マインドマップを作成することでよりうまくいくかもしれない。