上流工程で効く,「テストの考え方」
第3回 「同値クラス」に注目してモレ抜けを無くそう
今回のテーマは,『同値クラスを上流工程で使う』です。上流工程で仕様を記述する際に,知っておくと役に立つアイデアを皆さんと一緒に考えていければと思います。
まず「同値クラス」,あるいは「同値分割」とは何でしょうか。さまざまな定義がありますが,JSTQBのソフトウェアテスト標準用語集(※)によれば,「同値分割:仕様上,コンポ-ネントやシステムの動作が同じと見なせる入力定義域や出力定義域の部分」とされています。
まさに私たちはこの「動作が同じと見なせる」という考え方にのっとって,より効率的なテストを実施することができるわけです。第2回の図を例にとれば,「有効入力値a: 10≦a<100 (但しaは整数とする)」をテストするのに,10から99までの全ての値を入れなくてもそのうちの幾つかの値を入力することで済みます。
このように便利な同値クラスですが,その一方で,テスト担当者が,同値クラステストで一番恐れるのは,設計仕様書に表れていない同値クラスの存在です。
仕様書を元にソフトウェアは実装されますが,実装の過程で,仕様書には無い境界値や同値クラスが作りこまれてしまうことは少なくありません。実装担当者しか知らないその同値クラスがテスト担当者に伝わらなければ,テスト自体が抜けてしまう恐れがあります。
前回,「設計」,「実装」,「テスト」の「3点の一致」が取れていることがソフトウェア開発では大切と申し上げました。
そこで,実装担当者の方にお勧めしたいのが,仕様書に無い同値クラスを実装した際には,後から見てわかるように,仕様書になんらかの反映を行う,ということです。
「そんなこと,時間が無くてやってられないよ!」というのであれば,手書きでもいいので,第2回の図のような数直線を仕様書に添付しておくとよいでしょう。それだけでも,テストのとき,あるいは仕様変更のときには大きな威力を発揮します。「仕様書に記載のない同値クラス」の周知,ぜひご検討ください。
さて,もうひとつ同値クラスの活用例を。要求定義を基本設計に落とし込む際などに,同値クラスの考え方を応用できます。今回お勧めしたいのは,「どうやってこの仕様をテストするか」を出来るだけ設計段階から考えて,そのテストの観点を一覧表にして仕様書に加えておく,というアプローチです。
よくあるサンプルとして,パスワード設定の文字入力の仕様を考えてみましょう。
「入力文字数は4桁とする。使える文字は半角英数とする。」
まず,この仕様において「有効」となる入力文字を考えてみます。仕様によれば4桁であることと,使える文字は半角英数のみ。これを「有効同値クラス」と呼びたいと思います。
では「無効同値クラス」となる入力は何でしょうか。まず,0桁。1~3桁。5桁以上。仕様では「4桁」としか書かれていませんから,これらはいずれの場合も「無効」とみなされることが要求されそうです。
次に,入力する文字の「種類」に注目すれば,「全角文字」「記号」「スペース」などは「無効」として処理されなければならない一群といえるでしょう。
仕様書には得てして「有効」な場合の条件は書かれますが,「無効」の場合の条件はこと細かに記載されないものです。
そのため,「無効」な条件の処理が実装されなかったり,テストされなかったりする可能性が生じます。もちろんそんなことはあってはならないのですが,「設計」「実装」「テスト」の3フェーズ間で担当者が異なるなどして,情報がうまく伝わらない可能性がある場合には,仕様抜け,実装抜け,テスト抜けで不具合が流出することも皆無とはいえません。
そんなとき,「無効」としたい条件や観点を実装前の設計仕様の段階で,あたかもテストパターンを考えるように一覧表にして関係者とレビューし,情報を共有するかどうかで,完成品の品質に大きな違いが生じます。「設計」「実装」「テスト」の3点間でのブレが少なくなります。(表1参照)
仕様書と実装とテストのモレ抜けを減らすヒントとして活用していただければ幸いです。
- ※『ソフトウェアテスト標準用語集 日本語版 Version2.0』(PDF)
- URL:http://jstqb.jp/dl/JSTQB-glossary.V2.0.J01.pdf
上流工程で効く,「テストの考え方」
- 第5回 仕様整理に「デシジョンテーブル」を使ってみよう
- 第4回 「状態遷移図」と「状態遷移表」で見えるもの
- 第3回 「同値クラス」に注目してモレ抜けを無くそう
- 第2回 境界値バグは上流で潰したい
- 第1回 上流工程で「テストの考え方」を使おう

