「知識ゼロから学ぶ ソフトウェアテスト」を読んでみて思ったこと
前回の記事にて、今期の目標についてお話ししました。今期の目標のひとつに「ソフトウェアテストを極める」という目標があるのですが、今回はソフトウェアテスト テスターちゃんの次に通読した知識ゼロから学ぶ ソフトウェアテストについてまとめていこうと思っています。
プログラムの振る舞いをテストする
テスト手法の基本的かつ必須の手法である「制御パステスト」はカバレッジ率を取得するために利用されます。
ステートメントカバレッジ
コード内の命令文(ステートメント)を少なくとも1回は実行します。そのため、分岐処理において true & false のテストがまんべんなくできません。そのため、簡単ではありますが、非常に弱いテスト手法です。
ブランチカバレッジ
ステートメントカバレッジでは、分岐処理のすべてはカバーできません。そこで、「ブランチカバレッジ」を利用します。こちらは、分岐処理に対してそれぞれ true & false のテストがまんべんなく実行できます。しかし、テストケースの数がかなり増えてしまいます。
カバレッジ基準
カバレッジを取得する際、どの程度カバレッジが通っていれば良いとするのかは判断に迷ってしまいます。著書では、「一般商用ソフトウェアであれば60 ~ 90%程度で十分だ」と主張されています。
ブラックボックステスト
プログラマやシステムエンジニアのような職業の方であれば「ブラックボックステスト」という用語は耳にしたことがあるでしょう(私は基本情報技術者試験でも習いました!)。このテストには「同値分割法」「境界値分析法」の2つがあります。
同値分割法
入力領域を「同値クラス」という部分集合に分割し、その部分集合に入る入力値を等価とみなす作業です。たとえば下記のプログラムを考えてみましょう。
ex) 入力Aと入力Bを掛け算した結果を出力する(入力条件は下記を参照)。
入力条件
入力A:1 から 999まで入力可能
入力B:1 から 999まで入力可能
まずは入力値を2つの部分集合に分ける必要があります。1つは有効同値、1つは無効同値です。有効同値とはプログラムが期待する入力値であるのに反して、無効同値とはプログラムが期待しない入力値です。
つまり、下記のような場合分けを考えます。
~ 0:無効同値
1 ~ 999:有効同値
1000 ~:無効同値
上記集合のうち、一般的には中央値付近のもっともユーザが使いそうなデータを入力する場合が多いです。
しかし、無効同値のテストをすべて実施すると非常に時間がかかってしまいます。そのため、ある程度無効同値のテストを省略する必要があります。にもかかわらず、省略によってバグを検出できなかったという事態は避けなくてはいけません。
境界値分析法
同値分割法と一緒に利用し、無効同値と有効同値の間に着目したテストです。プログラム上では、この「無効同値と有効同値の間」に必ず条件分が必要になり、その分が正しく書けていないことがあり得ます。そのため、境界値分析法でテストします。
上記の例をもとに考えてみると、境界値分析法で必要なテストケースとしては、「0」「1」「999」「1000」です。
ディシジョンテーブル
すべての入力の組み合わせを表にし、その入力に対する動作もしくは出力を明記します。
上記の例をもとに考えると、入力の組み合わせとして下記があげられます。
- A, B共に入力が正しい場合(ルール1)
- Aの入力が正しくて、Bの入力が正しくない場合(ルール2)
- Aの入力が正しくなくて、Bの入力が正しい場合(ルール3)
- A, B共に入力が正しくない場合(ルール4)
上記の組み合わせを表にすると下記のようになります。
しかし、この方法には問題があり、表を使ったテストは非常に小さいソフトウェアか、大きなソフトウェアの一部分をテストするときにしか使うことができません。反して、項目が少なく複雑な動きをするソフトウェアには非常に有効です。
モンキーテスト(ランダムテスト)
何も考えず、行き当たりばったりに入力や操作を行う手法のことです。あらかじめ同値分割や境界値分析などを考える必要がないため、一見効率的であるようにも思えますが、あまり役に立ちません。
まとめ
テストを実施する手順としては、下記を参照してください。
- まずは境界値テストを実施
- 入力エリアが2つ以上ある場合はディシジョンテーブルテストを実施