ソフトウェア・テストに関する名著
1981年、J.Myersのテスト技法に関する日本語訳の書籍が発売されたことを知り読みました。
私は、テスト手法について勉強したことはなく、これまで我流でテストをしていました。M電器でリアルタイムシステムの開発を担当していたときで、テストについて悩んでいた時期でもありました。
- 『ソフトウェア・テスト技法』The Art of Software Testing
- Glenford J.Myers 著
- 近代科学社
- 昭和55年3月15日 初版発行
目次
第1章 自己診断テスト
第2章 プログラム・テストの心理学と経済学
第3章 プログラムの検査,ウォークスルー,検討
第4章 テスト・ケースの設計
第5章 モジュール・テスト
第6章 上級テスト
第7章 デバッグ
第8章 テスト道具とその他の技法
自己診断テスト
第1章は、簡単なプログラムのテストケースを書き出すものです。
このプログラムは、カードから3つの整数を読む。この3つの値は、それぞれ三角形の3辺の長さをあらわすものとする。
プログラムは、三角形が不当辺三角形・二等辺三角形・正三角形のうちのどれであるかをきめるメッセージを印字する。
書籍には、回答例として14項目のテストケースが示されています。
01. 有効な不当辺三角形をあらわすテスト (3,4,5 など)
02. 有効な正三角形をあらわすテスト (4,4,4 など)
03. 有効な二等辺三角形をあらわすテスト (3,3,4 など)
04. 有効な二等辺三角形で3辺の組み合わせのテスト (3,3,4、3,4,3、4,3,3 など)
05. 1つの辺がゼロ値をもつテスト (3,4,0 など)
06. 1つの辺が負の値をもつテスト (3,4,-1 など)
07. 3つの正の整数で、2辺の和がそれ以外の1辺と等しい (1,2,3 など)
08. 前項において、3辺の組み合わせのテスト (1,2,3、1,3,2、3,1,2 など)
09. 3つの正の整数で、2辺の和がそれ以外の1辺より小さい (1,2,4 など)
10. 前項において、3辺の組み合わせのテスト (1,2,4、1,4,2、4,1,2 など)
11. すべての辺が0であるテスト (0,0,0)
12. 整数でない値をもつテスト (3,4,5.1 など)
13. 入力数値の個数が不正なテスト (4,3 など)
14. それぞれのテストについて、期待値を示したか?
調査結果から、高度な経験をもつプログラマーの平均点数は、14点満点でたった7.8点である。
このような簡単なプログラムのテストでさえ容易な仕事ではないことを物語っている。
私も、ゼロ値や負の値を与えるテストケースなど抜けてしまいました。いきなり、テストケースの設計は難しいものなのだと思い知らされました。
プログラム・テストの心理学と経済学
■ テストの誤った定義
● テストとは、エラーがないことを示していく過程である。
● プログラムが意図された機能どおりに正しく動いてくれることを示すことである。
■ テストの適切な定義
● テストとは、プログラムのなかのエラー(存在すると仮定して)を見つけようとする破壊的な過程である。
テストの経済学
- ブラックボックステスト … 内部に関知せず仕様書に従う 「入出力依存テスト」
- ホワイトボックステスト … プログラムの内部構造に従う 「論理依存テスト」
ブラックボックステスト : 徹底的な入力テストによりすべての入力条件を試すことは不可能です。
ホワイトボックステスト : 徹底的な経路テストによりすべての経路を通過するテストは、非現実的です。
テストの原則
・テストケースの必須条件は、予想される出力または結果を定義しておくことである。
・プログラマーは自分自身のプログラムをテストしてはならない。
1. 心理的な問題 : 創造的なプログラミングから破壊的なテストへ気持ちの切り替えが難しいです。
2. 仕様の誤解 : プログラマーが仕様を誤解しているとテストも同様な誤りをおかします。
テストケースは、正しい予想できる入力条件ばかりでなく、誤った予想しないばあいも考えて書かなければならない。
意図されたように動くかどうかを見ただけでは、なかば成功したにすぎない。残りの半分は、意図されなかった動きをするかどうかをしらべることである。
<3つの重要なテストの原則>
1.テストとは、エラーを見つけようとしながら、プログラムを実行する過程である。
2. 良いテストケースとは、まだ発見されていないエラーを検出する確率が高いものである。
3. 成功したテストケースとは、まだ発見されていないエラーを検出したものである。
プログラムの検査,ウォークスルー,検討
「人間によるテスト」技法は、エラーを見つけるのに非常に効果的です。
- コード検査(インスペクション : Inspection)
- 徒歩検査(ウォークスルー : Walk through)
テストケースの設計
- ブラックボックス・テスト : プログラムの機能(What)でテストケースを設計
- ホワイトボックス・テスト : プログラムの実現方法(How)でテストケースを設計
同値分割
境界値分析
論理網羅テスト
- C0カバレッジ : 命令網羅
- C1カバレッジ : 分岐網羅
- C2カバレッジ : 条件網羅
デバッグ
デバッグの原則
最後に
私は、この本を読んでテスト手法に関する奥深いことを修得できました。
J.Myersの「The Art of Software Testing (ソフトウェア・テスト技法)」は、素晴らしい名著です。