この記事は筆者の学習のアウトプットです。
はじめに
テストをより適切に実施するために、書籍でテストを学ぶことにしました。
今回は「はじめて学ぶ ソフトウェアのテスト技法(日経BP社)」を読みすすめて行きたいと思います。
テストとは何か
IEEE 標準規格では、テストは以下のように定義されているそうです。
ある特定の条件下でシステムまたはコンポーネントを操作するプロセスであり、その結果を観察まはた記録して、システムまたはコンポーネントのある側面を評価すること
テストの成熟度
テストはその成熟度によって5つのレベルに分類されるそうです。
レベル0
テストとデバッグには何の差もない。デバッグ以外にはテストには特別な目的はない。
バグを検出するための努力はない、という状態
レベル1
テストの目的は、ソフトウェアが動くことを示すことである。
動くことを示すためのテストなので、失敗するであろうテストケースは作成しない。
レベル2
テストの目的は、ソフトウェアが動かないということを示すことである。
レベル1とは反対の姿勢。積極的に欠陥を探す。
担当者は重箱の角をつつくような厳しいテストケースを作成する。
レベル3
テストの目的は、何かを証明することではなく、プログラムが動かないことによって発生する危険性をある許容範囲まで減らすことである。
システムが完璧であることの証明はほぼ不可能であることを認識した上で、テストを実施することでどれだけシステムが不完全であるかを提供し、それによる損害を測定する。
レベル4
テストは行動ではない。大げさなテストをすることなく品質の高いソフトウェアを作るための精神的な規律である。
このレベルでは、テスト容易性の高いソフトウェア開発に重点が置かれる。テスト担当者が検出しなくとも、自らエラーレポートを行うようなコードを書くことまで意味する。
すべてをテストすることはできない
C言語で一つのint型の整数を引数に受け取るシンプルな関数を作成したとして、intが4バイトの場合、引数の取りうる値は-2147483648 ~ 2147483647
となってしまう。
上記のシンプルな関数だけでも、すべて試すには大きなコストがかかってしまうので、テストは少ないコストで最大限エラーの検出率を高められるような設計をしなくてはならない。
まとめ
この本を読むまでは、テストはエラーを見つけるためのものだと思っていたので、私のテスト成熟度はレベル2だったようです。
しかし、先人の方々の教えで、まずもってのテストの考え方を修正することが出来ました。
今後は更にテスト技法に親しんで、効果的かつ効率的なテストを実施できるようにしていきたいです。
参考書籍