単体テスト、結合テスト、総合テストの違い
http://blog.goo.ne.jp/xmldtp/e/109e2e397ff8484af0b8ab1a5c1d040e
を書いた後に、各テストにおける自動生成について書こうと思ったんだけど、
その前に、自分にとっては当然だけど、社会にとっては、当然出ないことが
あると思うので、それについて、ちょっとまとめて書くことによって、
テスト自動化の概論みたいなことを書きたいと思います。
■テスト仕様書から、テストを自動化している「のではない」
例えば単体テストの仕様書から、自然言語処理などをして、JUnitのテスト項目を
「出しているわけではない」
自然言語処理すると、絶望的に難しくなる。
単体テスト、結合テスト、総合テストの自動化は、以下の手順で行う
(1)決定表など、自動化しやすい形で、Excelなどにつくっておく
(2)(1)から、テスト仕様書を自動生成する
(3)(1)から、テスト(JUnit等)を自動生成する
(4)必要なら、(1)からデータなどを自動生成する
(5)(3)を実行する
(6)(5)のエビデンスを取る
仕様変更が有る場合、(1)の決定表などを修正し、テスト仕様書と、テストを自動生成する
だから、仕様書とテストの内容が一致する。
それに対し、回帰テストは、上記単体テスト、結合テスト、総合テストで
自動化されてできたテストの中から抜き出して、テストを行う。
この決定表、自動化することをにらんで、あらかじめ自動化しやすい形で表をつくる。
■テスト項目は、固有要件 X テスト観点(共通要件)の組み合わせ=表になる。
その際、単体テスト、結合テスト、総合テストでは、機能もテスト観点も異なる。
単体テストの場合は、関数レベル(またはメソッドレベル)でテストする。
その場合、テストすべき関数・メソッド(以下、関数と記す)の固有要件とは、
関数らの入力と出力である。具体的には
関数の各引数
関数に入力するファイル
関数に入力するDB
関数に入力するメッセージ(通信)
関数が出力する返り値
関数が出力するファイル
関数が出力するDB
関数が出力するメッセージ(通信)
になる。これらのテスト観点として、同値・境界値があるが、それらの使い分け
とXのさせ方は、単体レベルのときに記述する。
結合テストの場合は、
サーバーなどのAPIテストの場合は、関数がAPIに変わるだけで、単体と同じ
画面の場合は、画面入力・出力項目のテストのほかに、イベント(ボタンクリック)など
が固有要素となる。このときのテスト観点は、入力項目は、その項目の型によってちがう
(例:チェックボックスの境界値??はないよね)
総合テストは、機能要件と非機能要件に分かれる。
機能要件は、要求仕様時にフォーカスした業務ができるかどうかになる。
非機能要件は、非機能要求グレードや品質特性などに基づいてテストすることになる。この場合、固有要件は大きなシステム、サブシステムレベルになる。
■テストフェーズによって、自動化するものが違う
単体テストの場合は、仕様書とxUnitのテスト内容(ドライバ)を自動生成する
呼び出すスタブ(ダミーモジュール)は自動生成することもある。
スタブには2つの目的というか、ケースがある
(1)リンクする為に呼び出される。固定値を返せばよい
(2)特殊なテスト(SQLエラーを確実に返す)ために呼び出される
何かの値、ファイルがあったら、Exceptionを返すなどという形で設定される
結合テストの場合は、仕様書とスクリプト(たとえば、seleniumを実行させる為のとか)
を生成する形かな・・
総合テストはスクリプトだけど、自動化というよりか、ごみプロを作成する
(1000回呼び出すために、1000回書くのは面倒なので。。。。)
回帰テストは、Jenkinsで構成管理が走ったときにテストするという意味での自動化
であり、Jenkinsで実行してもらうスクリプトを書く。
ということで、自動化のために、なにを作るのかが異なる。
このぐらい意識あわせをしておけば、各論に入って大丈夫かな・・・