書評「ソフトウェアテスト実践ワークブック」

書評「ソフトウェアテスト実践ワークブック」

レックス・ブラック (著), 成田 光彰 (翻訳) , 日経BP社

カテゴリ:テスト

概要

効果的にして効率的なテストを行うためには?リスクを洗い出し、テストの目標を設定し、そこからテストの戦略(テスト計画)、テストの戦術(テスト設計)を導く、一貫的なアプローチを本書は提示する。読者は、各章の詳細な解説と、架空のプロジェクトを想定した実践的な演習を行うことにより、各テスト技法をどのような局面で使用すればよいかを、追体験しながら実践的にテストスキルを学ぶことができる。

本書の使い方

第1章~第2章:ソフトウェアテストの目的と対処すべきリスク、リスクに対してどのようなテスト技法が使えるか、をまとめている。本書の読者、とりわけ初心者は通読を勧める。
第3章~第6章:実際にリスクを分析し、テスト戦略、テスト戦術、テスト設計に落とし込むまでを、具体的に解説する。第6章はレビューと静的テストについて述べる。テスト計画、テスト設計に従事する担当者に適する。
第7章~第12章:代表的なブラックボックステスト技法を解説する。本書の技術的な中心をなす。一度通読の上、読者の業務上の関心に応じて、各章を再読、参照することを勧める。
第13章~第15章:代表的なホワイトボックステスト技法を解説する。主にプログラマ向けの内容だが、テスト担当者も一読を勧める。

何を学べるか

第1章 効果的で効率のよいソフトウェア・テストとは
効果的で効率が良いソフトウェアテストとはどのようなものか。ソフトウェアテストの概念を掘り下げてきた、先人の言葉を引用しつつ、効果的で効率の良いテストの目標、戦略と戦術を考察する。著者の問題意識を端的に紹介している。

演習1 三角形のテスト
三角形の分類に関する、有名なMyersのテスト問題を挙げる。著者による詳細な解答と解説が付される。

第2章 システム品質に対するリスクとは
システムの品質リスクにはどのようなものがあるか、そのカテゴリを挙げて、テスト担当者が対処しなければならないポイント、テストの際にどの技法を使えばよいかの勘どころを紹介する。本章は、以降の章で紹介するテスト技法をどのリスクに対応して使用すればよいかを示す、学習のガイドラインでもある。 「機能性」、「パフォーマンスと信頼性」、「ストレスとキャパシティとボリューム」、「状態」、「トランザクション」、「インストールとアンインストール」、「繰り返し実施の運用処理」、「メンテナンスとメンテナンス性」、「デグレード」、「使用性とユーザーインターフェース」、「データ品質」、「エラーおよび災害への対処と復旧」、「日付と時刻の取り扱い」、「ローカライゼーション」、「構成と互換性」、「ネットワーク化、インターネット化、分散化」、「規格および法令の遵守」、「セキュリティ」、「タイミングと調整」、「ドキュメンテーション」などを紹介する。

第3章 品質リスクとテストとの対応付け
「品質リスク分析」のテクニックを紹介する。第2章で挙げたリスクカテゴリごとにリスクを洗い出し、その発生確率と影響度に基づき、優先順位を付与する。これにより、テストの工数を効果的に配分することが可能になる。本章ではリスク分析の概要、およびそのプロセスを、具体例を挙げながら詳しく説明する。

演習2 品質リスク分析
第2章、第3章で学んだ品質リスク分析を、架空の「Omninetプロジェクト」で実践する演習を行う。 巻末付録のOmninetプロジェクトの「マーケティング要求ドキュメント」を読み各リスクカテゴリに従ってリスクを洗い出す。

第4章 プロジェクトとテストとの対応付け
テストがプロジェクト全体のどこに位置付き、どのように貢献しているのかを適切に把握し、プレゼンテーションできることは、テスト担当者にとって大切である。本章では、プロジェクトのライフサイクルの各フェーズにおいて、テストがどのように位置付いているのかを整理する。またライフサイクルモデルとして、「Vモデル」「インクリメンタルモデル」「スパイラルモデル」など様々な開発の形態を挙げ、それぞれの開発形態におけるテストの目的と位置づけを解説する。

第5章 テスト戦略、テスト戦術、テスト設計とは
テスト目標からテスト戦略を導き出し、テスト戦略からテスト戦術(テスト技法)を導く、一貫性をもったアプローチの必要性を解説する。本章ではとりわけテスト目標を、実際にテストのアプローチに結びつけるための様々な「テスト戦略」を中心に解説する。 新規開発プロジェクトに対しては「分析的なテスト戦略」「モデル・ベースのテスト戦略」「順序だったテスト戦略」「プロセス指向のテスト戦略」「動的なテスト戦略」「信念的なテスト戦略」が紹介される。 また既存システムに対するメンテナンス開発に対しては「デグレード防止戦略」を紹介する。 次に、テスト設計及び実装に際して使用するテスト戦術(テスト技法)を概説し、テスト戦略とテスト戦術を結ぶためのガイドラインを提示する。

第6章 レビューその他の静的なテスト
本章ではレビューに代表される静的テストを解説する。レビューは費用対効果が高いテストである。そしてレビューを実施することにより「検証と妥当性確認」、「プロセスとシステムを改善し、コストを下げる」、「コンセンサスと理解の形成」の、3つの目標を達成することが期待される。レビューのプロセス、参加者の役割と責任、成果物と基本ルールなどレビューの概要をまとめる。

演習3 レビューその他の静的なテスト
第6章で学んだ品質リスク分析を、架空の「Omninetプロジェクト」で実践する演習を行う。 巻末付録のOmninetプロジェクトの「マーケティング要求ドキュメント」を読みドキュメントに含まれる問題を洗い出す。

第7章 同値クラスと境界値
本章から後半に入り、各種テスト設計技法を紹介する。本章ではブラックボックステストの代表的なテスト技法である、同値クラス分割と境界値分析を取り上げる。具体的に、どこで、どのように使うことが効果的なのかに焦点を当て、「整数」、「実数」、「文字と文字列」、「日付」、「時刻」、「通貨」などのテストにおける使い方のポイントを紹介する。

演習4 同値クラスと境界値
第7章で学んだ同値クラス分割と境界値分析の技法を、架空の「Omninetプロジェクト」に適用する演習を行う。

第8章 ユースケース、ライブ・データ、デシジョン・テーブル
ブラックボックステストで使われる技法を紹介する。 「ユースケース/シナリオテスト」、「文法に基づくテスト」、「ライブ・データを用いた実際の機能テスト」、「デシジョンテープル」を説明する。いずれのテストも共通点として、システムにおける内部的な働きに注目してテストを行っている点が挙げられる。

演習5 デシジョン・テーブル
第8章で学んだデシジョンテーブルの技法を、架空の「Omninetプロジェクト」に適用する演習を行う。

第9章 状態遷移図
ブラックボックステストの強力な技法である、状態遷移図と状態遷移表を解説する。システムの中には、現在の振る舞いが、過去の状態やイベントに影響されるものがある。状態遷移図はそのようなシステムを表現する上で強力な技法である。状態遷移図を用いてシステムを表現し、テストを行うまでのプロセスを解説する。

演習6 状態遷移図
第9章で学んだ状態遷移図の技法を、架空の「Omninetプロジェクト」に適用して、状態遷移図を作成し、そこからテストケースを作成する演習を行う。

第10章 ドメイン・テスト
高度なブラックボックステスト技法であるドメイン・テストを解説する。処理する要素や変数が複数あり、それらが相互作用を持ち、複数の状況を生み出し、それぞれの状況で処理の仕方が違う、という状況をドメインと呼ぶ。本章では航空会社のマイレージなどの事例を挙げながら、さまざまなドメインをテストする方法を説明する。

演習7 ドメイン・テスト
第10章で学んだドメイン・テストの技法を、架空の「Omninetプロジェクト」に適用して演習を行う。

第11章 直交表と全ペア・テーブル
高度なブラックボックステスト技法である直交表と全ペア・テーブルを解説する。 第10章のドメイン・テストとは対照的に、直交表と全ペア・テーブルでは、要素同士が相互に作用しあうべきではないが、誤って相互に作用しあう可能性がある場合をテストする際に有効な技法である。また、要素同士の組合せ数が爆発的に増加する際に有効な技法である。直交表の使い方、適用方法を事例を挙げて解説する。

演習8 直交表
第11章で学んだ直交表の技法を、架空の「Omninetプロジェクト」に適用して演習を行う。

第12章 対処的なテスト
ブラックボックステストの最後の章として、テストの実行中に発生する事柄に柔軟に対処していく、特別なテストアプローチについて解説する。 エラー推測、攻撃、バグ分類、バグ狩り、探索的テスト、ISO9126品質特性を用いたチェックリスト、などを紹介する。あわせて、対処的なテストのメリットとデメリットを示す。

第13章 制御フロー・テスト
単体モジュール内の制御フローのホワイトボックステストに関する基本を解説する。制御フローは単体モジュール内のステートメントの実行順序を表したものである。本章ではコード・カバレッジの考え方、制御フローからMcCabeのサイクロマチック複雑度を導き出し、テストすべき基本パスを求める方法などを説明する。

演習9 制御フロー
第13章で学んだ制御フロー・テストの概念を、簡単なCプログラムに適用して演習を行う。

第14章 データフロー・テスト
データフローに基づくホワイトボックステストの技法を紹介する。データフロー・テストは、前章の制御フロー・テストでは発見できない、データの取り扱いに関するバグを発見できる技法である。 データフロー・テストは、プログラム文中における、変数の「設定・使用ペア」に注目してテストを実施する。本章ではサンプルプログラムを例に、制御フローテストでは検出できないバグを、データフローテストが検出できることを説明する。

演習10 データフロー
第14章で学んだデータフロー・テストの概念を、簡単なCプログラムに適用して演習を行う。

第15章 統合テスト
複数のモジュールを統合したビルドをテストする際のホワイトボックステスト技法を解説する。単体モジュールにおいて、制御フロー、データフローのテストに合格していても、2つ以上の単体を連携して動かすと不具合が発生することがある。本章では、単体間のインターフェースや相互作用における不具合を発見するための、統合テストの考え方を説明する。統合技法、統合に関するMcCabeの基本パスの求め方などを紹介する。

演習11 統合基本パス・テスト
第15章で学んだMcCabeの統合基本パスによるテスト技法を、「Omninetプロジェクト」に適用して演習を行う。