書評「ソフトウェアテスト技法ドリル テスト設計の考え方と実際」

書評「ソフトウェアテスト技法ドリル テスト設計の考え方と実際」

秋山 浩一 (著) 日科技連出版社

カテゴリ:テスト

概要

テストの技法は単なる道具です。「何に対してどういったテストを行う必要があるか」これが一番大事なことでしょう。ここをしっかり理解しないでいるが故に、実践ではテスト技法をうまく活用できない、または誤用するといった失敗パターンは少なくありません。
本書では、テスト技法を紹介するだけに留まらず、そのテスト技法は何のためにあるのか、例を示しながら丁寧に解説しています。初学者からテスト技法を一通り学んだ中級者まで、本書から学べる点は非常に多いことでしょう。

本書の使い方

知識ゼロでも読むことは可能だが、開発とテストに関する一定の基礎知識(および経験)があることが望ましい(初級~中級のテスト技術者。「もっとテストが上手になりたい」と思っている人)。
第1章から第6章へと、順に読むことによって、徐々に複雑なテスト設計を行うためのテスト技法が解説される。初学者は一度、順に読むことをすすめる。
必要に応じて、特定の技法を単独の章で学ぶこともできる(下記「何が学べるか」参照)。

何を学べるか

第1章 点に注意を向ける
ソフトウェアテストの基本の概念は「網羅性」と「ピンポイント」である。本章では「点」すなわちピンポイントでバグを狙ってテストをする方法を解説する。
仕様書から怪しい箇所を認識する方法として「三色ボールペン」を使った読み方、データを「間、対称、類推、外側」の視点からデータを考える、いじわる条件の考え方、過去の経験の活用方法などを、例題を交えて解説する。

第2章 線を意識する
本章では「線」、すなわち連続して変化する数値や文字コードをテストする方法を解説する。
同値分割と境界値分析の基本と応用の考え方やテストケースの作り方を説明する。またループ境界や負荷テストにおける「線」の意識の仕方を説明する。

第3章 面で逃さない

ソフトウェアは、入力の組合せによる特別な動作、すなわちロジック(論理)の塊で構成されているため、入力が系統的にロジックを網羅し、正しく動作することをテストする方法が必要である。本章では、ソフトウェアの論理関係を「面(二次元)」ととらえて考察する。
関係性がある複数の変数を同時にテストする「ドメイン分析」、続いて、もっと込み入った論理関係を確認する「デシジョンテーブル」「原因結果グラフ」「CFD法」を解説する。
原因結果グラフをデシジョンテーブルに変換するフリーツール「CEGTest」の操作方法も詳しく紹介されている。

第4章 立体で捉える
ソフトウェア開発では派生開発が多いが、新規開発部分に応じた工数しか与えられず、十分なテストができないケースが多い。しかし、新規開発によってこれまで表に出てこなかった既存の母体部分からバグが発生する場合がある。テスト項目数を爆発させないためには、第3章の二次元の視点に加えて、そこに組み合わせる「要因を選ぶ目線」を追加して「立体(三次元)」の考え方が必要となる。
本章では、直交表を用いた組合せテスト技法である「HAYST法」の考え方を紹介する。またフリーツールである「PICT」および「PictMaster」を用いて「ペアワイズテスト」を説明する。

第5章 時間を網羅する
ソフトウェアでは、複数のプロセスが一つのリソースを共有しているため、競合状態、相互排他、同期などの様々問題が発生する。本章ではあるタイミングで発生するこうした問題を、「状態遷移の観点」と「並列処理の観点」からテストする方法、すなわち「時間」を意識したテスト設計について解説する。
状態遷移図から状態線表を作成し網羅的にテストする方法、イベントによって壊れた内部的な問題を顕在化させる「Nスイッチカバレッジ」の考え方、など解説する。

第6章 多次元の品質
改めて、「ソフトウェアテストとは何か」を考察する。複雑な構造を持つ存在である「人間へのテスト」と対比しながら、ソフトウェアテストを解説する。これまでの点・線・面・時間の網羅だけではなく、別の視点のテストとして、シナリオテスト、受入れテスト、品質保証のテストなどを紹介する。