テストの効果的なやり方

今のプロジェクトに関わるようになって、

どうすればテストでバグの発見率を高めることができるのかを考えるようになりました。

難易度の高い機能の開発で、

くまなくテストしたはずなのに試験でバグを発見することができず、

くやしい思いをしてことがきっかけです。

 

■テスト仕様書の問題点

もともと、テスト仕様書のひな型は準備されていたのですが、言葉で「~を確認する」と書いてある概要と、それを検証するために単純なマトリクスを作成するという感じでした。

 

これでは複合ケースをうまく検証できていませんでした。

 

発見できなかったバグは複合ケーステストをうまく検証しないと発見できないものがほとんどだったので、どうすれば改善できるのか考え、調べました。

 

■考えた改善策

結果的に行き着いたのは「デシジョンテーブル」を使用することです。

 

f:id:kojiroukun:20160702090824p:plain

簡単な感じでデシジョンテーブルを書いてみました。

 

条件で性別を「男」、「女」と定義してその右側は、「Yes」、「No」と記載するのが一般的だと思いますが、私は見にくかったので上のような形で検証しています。

 

デシジョンテーブルを使用してテスト仕様書のパターン表を作成し、検証することで圧倒的に結合試験工程以降のバグを減らすことに成功しました。

 

■他の対策

単体テストDJUnitで自動テストをしているのですが、

あらかじめ、準備した想定結果のファイルと実行結果を自動に比較して検証をするということをもともとはしていました。

これが当たり前のテストの仕方だと思うのですが、

 

実行結果と想定結果が不一致だった場合に想定結果を実行結果にあまりなにも考えずに合わせにいってテストを通そうとする人が後をたちませんでした。

 

これではテストの意味がありません。

 

なので想定結果はあらかじめ準備をしておかないで、実行結果をエクセルに貼り付けて、パターン表で求めている結果ができているのかを目で検証してもらうように変更しました。

 

もちろん担当者のレベルによって正しく検証できていないケースもあるので、エビデンスレビューを必ずするようにしました。

 

これらの対策によってもバグを減らすことができました。

 

あまりにもアナログなやり方ですが、

現状、私がやっているのはこんなやり方です。

もっと良いやり方があると思いますので、絶えず学びたいと思っています。