ソフトウェアテストに関する知識をもう少し言語化したいなと思い、「はじめて学ぶソフトウェアのテスト技法」を読んだ。
この本では主に良いテストケースの作成手法について学べた。良いテストケースとは「最小の時間と労力でほとんどのエラーを検出する可能性がもっとも高くなるようなテストケース」のこと。これにできる限り近づけられるようにテストケースを工夫する。
良いテストケースを作るためにどういう技法があるかをこの本はいくつも教えてくれる。自分がこれまでテストを書いていると「こういうテストの方がなんとなくベターだよな...?」みたいに感覚的に考えていたところを、言葉として定義してくれることで構造化できるのはありがたかった。たとえば
- 同値クラステスト
- 同じグループのテストが、以下を満たせば同値クラスを形成する
- 同じ機能をテスト
- 1つのテストで障害が見つかれば、残りのテストでも見つかると予想できる
- 1つのテストで障害が見つからなければ、残りのテストでも見つからないと予想できる
- 同値クラスに含まれるケースはただ一つで良い
- 無効な入力には1回に1つの無効値のテストをすれば良い
- 同じグループのテストが、以下を満たせば同値クラスを形成する
- 境界値テスト
- 境界で、何をテストすることで良いテストケースに近づけられるか
- 状態遷移テスト
- 状態遷移図は、テストすべき状態、イベント、アクション、遷移を明確にしてくれるので、テスト作業の指針として使われる
- 理想的には状態遷移を作って、すべての遷移を少なくとも1回はテストするようなテストケースを作成するのが推奨
他にも「ほとんどの欠陥はシングルモード欠陥(ある機能が単に動かない)、ダブルモード欠陥(あるペアで動かない)のどちらか」という話は面白かった。組み合わせをテストするときに完璧に網羅しようとすると全組み合わせを作る必要があるがテストケースが多くなりすぎる、ダブルモード欠陥までがほとんどの欠陥なのでペアを網羅できれば十分みたいな話だった。なるほどなーという感じ。
こんな感じで面白かった一方で、テストをずっと書いてて感覚は身についているけどもっと言語化したいという欲求は満たせるが、テスト入門書としてはちょい微妙かなと思った。そういう本を選びたいときは別の本が良さそう。別で単体テストの考え方/使い方を読んだけど、そちらの方が分かりやすかったかも。
読書ノート
- この本が扱うのは、以前より少ないリソースで、ずっと多くの欠陥を検出できるテストケースを選択・作成できるようにすること 23 - 最小の時間と労力でほとんどのエラーを検出する可能性が最も高くなるようにテストケースを設計する 33 🌟 - 同値クラステスト 44 - 同じグループのテストが、以下を満たせば同値クラスを形成する 47 - 同じ機能をテスト - 1つのテストで障害が見つかれば、残りのテストでも見つかると予想できる - 1つのテストで障害が見つからなければ、残りのテストでも見つからないと予想できる - 同値クラスに含まれるケースはただ一つで良い - 無効な入力には1回に1つの無効値のテストをすれば良い 58 - デシジョンテーブル - システムが実装しなければならない複雑なビジネスルールを記録するために用いられる 88 - テストケースへの変換ができる 83 - ペア構成テスト 132 - 変数値の全てのペアをテストする - ほとんどの欠陥はシングルモード欠陥(ある機能が単に動かない)、ダブルモード欠陥(あるペアで動かない)のどちらかなので、全てのペアだけで十分検出できる - 状態遷移テスト 136 - 状態遷移図は、テストすべき状態、イベント、アクション、遷移を明確にしてくれるので、テスト作業の指針として使われる156 - 理想的には状態遷移を作って、すべての遷移を少なくとも1回はテストするようなテストケースを作成するのが推奨 149