ソフトウェアテスト技法 ~自動化、品質保証、そしてバグの未然防止のために~

2010年11月16日  システム開発  前田

ソフトウェアテストついて、かなりレガシーな技法が書かれており、帯にも紹介されているようにソフトウェアテストの「バイブル」と呼ばれるような本です。
テストの"専門家"になろうと思うならば、一度は目を通すべきでしょうが、逆に、テストの技法からプログラムの技術を鍛えるという意味で、プログラマにも有用な本だと思います。

ただ、非常に分厚い内容で、ソフトウェアアーキテクトやプログラミングの知識もかなり必要としますし、数学的な記述も多くて、非常に難解だと思います。

一度はざっと目を通し、その他のもう少し実践的なノウハウが書かれた本を見ながら、関連するところを参照して、少しずつ理解を深めるというのがよいかと思います。

すぐに使えるテクニック本なんかとは違い、重みのある内容ですので、本質的な知識や能力の向上を目指して読むものと言えるでしょう。


【目次】
第2版への序文
第1版への序文
謝辞
日本語版に寄せて

第1章 はじめに

1. テストの目的
 1.1 テストでなにをするか
 1.2 ソフトウェアの生産性と品質
 1.3 テストの最終目標
 1.4 テスト担当者の精神性による区分
 1.5 テストの設計
 1.6 テストがすべてではない
 1.7 殺虫剤パラドックスと複雑さの障壁
2. 両極の比較
 2.1 テスト対デバッグ
 2.2 機能テスト対構造テスト
 2.3 プログラムの設計者対テスト担当者
 2.4 モジュール化対効率
 2.5 小規模対大規模
 2.6 開発部門対購買部門
3. テストのモデル
 3.1 プロジェクト
 3.2 概要
 3.3 開発環境
 3.4 プログラム
 3.5 バグ
 3.6 テスト
 3.7 テストとテストレベル
 3.8 モデルの役割
4. ビリヤードとオラクル
 4.1 ビリヤード
 4.2 オラクル
 4.3 オラクルの情報源
5. 完全なテストは可能か

第2章 バグの分類

1. 要点
2. バグの影響度
 2.1 バグの重要度
 2.2 バグはどのように影響を与えるか-影響度
 2.3 バグの重要度の相対値と絶対値
 2.4 悪夢のリストとテストの完了判断
3. バグの分類法
 3.1 概要
 3.2 要求仕様,機能概念,機能エラーのバグ
 3.3 構造バグ
 3.4 データバグ
 3.5 コーディングの不良
 3.6 インタフェース,統合,システムバグ
 3.7 テストとテスト設計のバグ
 3.8 テストとプログラムスタイル
4. バグの統計
5. まとめ

第3章 フローグラフとパステスト法

1. 要点
2. パステスト法の基礎
 2.1 動機と仮定
 2.2 制御フローグラフ
 2.3 パスの選択
 2.4 ループ
 2.5 複数出入口のルーチンのテスト(続編)
 2.6 パステスト法の効果
 2.7 変形
3. 述語,パス記述,可達パス
 3.1 概要
 3.2 述語
 3.3 述語式
 3.4 述語カバレージ
 3.5 テストの遮蔽
4. パスの造影
 4.1 可達と不可達パス
 4.2 実用的な見方
 4.3 パス造影の経験則的手法
 4.4 例
5. パス追跡機構
 5.1 問題
 5.2 一般的手法
 5.3 リンクマーカ
 5.4 リンクカウンタ
 5.5 その他の方法
 5.6 実現方法
6. 実現方法とパステスト法の応用
 6.1 モジュールの統合,カバレージ,下位モジュールのパス
 6.2 新規開発のプログラム
 6.3 保守
 6.4 移植
7. テスト可能性についてのヒント
8. まとめ

第4章 トランザクションフローテスト法

1. 要点
2. 概要
3. トランザクションフロー
 3.1 定義
 3.2 例
 3.3 使用法
 3.4 実現方法
 3.5 将来への展望
 3.6 複雑性
 3.7 トランザクションフローの構造
4. トランザクションフローテスト法
 4.1 トランザクションフローの作成
 4.2 インスペクション,レビュー,ウォークスルー
 4.3 パスの選択
 4.4 造影
 4.5 実現方法
 4.6 テストデータベース
 4.7 実行
5. 実現方法へのコメント
 5.1 トランザクションベースのシステム
 5.2 内部言語
6. テスト可能性のヒント
7. まとめ

第5章 データフローテスト

1. 要点
2. データフローテストの基本
 2.1 動機と前提
 2.2 データフローグラフ
 2.3 データフローモデル
3. データフローテスト法
 3.1 概要
 3.2 用語
 3.3 テスト方法
 3.4 分割,選択,データフロー,効果
4. アプリケーション,ツール,効果
5. テスト設計上のメモ
6. まとめ

第6章 ドメインテスト

1. 要点
2. ドメインパス
 2.1 モデル
 2.2 ドメインと集合
 2.3 ドメイン,パス,判定述語
 2.4 閉ドメインと開ドメイン
 2.5 ドメインの次元
 2.6 バグの前提条件
 2.7 制限事項
3. 簡潔なドメインと複雑なドメイン
 3.1 ドメインの誕生
 3.2 定義上のドメインと実際のドメイン
 3.3 簡潔なドメイン
 3.4 煩雑なドメインとその対処法
4. ドメインテスト
 4.1 概要
 4.2 ドメインのバグとテスト方法
 4.3 処理手順
 4.4 バリエーション,ツール,効率
5. ドメインとインタフェーステスト
 5.1 概要
 5.2 ドメインと値域
 5.3 閉包関係の一貫性
 5.4 ドメイン長の一貫性
 5.5 インタフェースの値域/ドメインの互換性のテスト
 5.6 テストポイントの選定
6. ドメインとテスト可能性
 6.1 概要
 6.2 線形化処理
 6.3 座標の変換
 6.4 標準プログラム形式
 6.5 直感
7. まとめ

第7章 メトリックスと複雑性

1. 要点
2. メトリックスとは何か
 2.1 基本概念
 2.2 メトリックスの歴史
 2.3 目的
3. 語句的メトリックス
 3.1 概要
 3.2 プログラム行数,ステートメント数と関連メトリックス
 3.3 Halsteadのメトリックス
 3.4 トークン数
4. 構造的複雑性
 4.1 概要
 4.2 サイクロマチック数(McCabeのメトリックス)
 4.3 その他の構造ベースのメトリックス
5. ハイブリッドメトリックス
6. メトリックスの実現方法
 6.1 メトリックス適用パターン
 6.2 メトリックス適用を成功させるための条件
7. テストとメトリックス
8. まとめ

第8章 パス,パス積,正規表現

1. 要点
2. 方針
3. パス積とパス式
 3.1 概要
 3.2 基本概念
 3.3 パス積
 3.4 パス和
 3.5 分配則
 3.6 吸収則
 3.7 ループ
 3.8 等価元
4. パスの簡略化
 4.1 概要
 4.2 交差項処理(第4ステップ)
 4.3 並列項(第6ステップ)
 4.4 ループ項(第7ステップ)
 4.5 恒等式とノード削除順序
5. 応用
 5.1 概要
 5.2 プログラムのパス数
 5.3 最小パス数の計算
 5.4 パスの実行確率
 5.5 ルーチンの平均処理時間
 5.6 Push/Pop,Get/Return
 5.7 制限とその解放
6. 正規表現とフロー変則の摘出
 6.1 問題
 6.2 解法
 6.3 データフローテストの例
 6.4 一般化と限界
7. まとめ

第9章 構文テスト

1. 要点
2. なぜ,何をどうするか
 2.1 ごみ
 2.2 未経験者と悪質ユーザ
 2.3 オペレータ
 2.4 内なる世界
 2.5 対策
 2.6 構文テストの応用と内部言語
 2.7 グラフの網羅
 2.8 概要
3. 文法
 3.1 目的
 3.2 BNF記法
4. テスト項目生成
 4.1 生成,識別,方式
 4.2 テスト項目の設計
 4.3 構文テストの情報源
 4.4 曖昧さと矛盾
 4.5 で,正常ケースは?
5. 構文テストの実行と応用
 5.1 テストの自動化
 5.2 設計の自動化
 5.3 生産性,練習,効率
 5.4 アドリブテスト
6. テスト可能性のヒント
 6.1 ヒント
 6.2 コンパイラの概要
 6.3 典型的なソフトウェア
 6.4 フェーズの分割
 6.5 前提条件
7. まとめ

第10章 論理テスト

1. 要点
2. 動機的概要
 2.1 プログラマと論理
 2.2 ハードウェアの論理テスト
 2.3 仕様書システムと言語
 2.4 知識ベースシステム
 2.5 概説
3. デシジョンテーブル
 3.1 定義と表記法
 3.2 デシジョンテーブルの処理機構
 3.3 テスト設計の基本としてのデシジョンテーブル
 3.4 Iエントリの拡張
 3.5 テスト項目の設計
 3.6 デシジョンテーブルと構造
4. パス式再考
 4.1 概要
 4.2 ブール代数
 4.3 ブール代数式
5. KV図
 5.1 問題
 5.2 単純な書式
 5.3 3変数
 5.4 4つ以上の変数
 5.5 別のテスト技法
6. 仕様
 6.1 概要
 6.2 論理の発見と変換
 6.3 曖昧さと矛盾
 6.4 無視できる項と不可能な項
7. テスト可能性のヒント
8. まとめ

第11章 状態,状態のグラフ表現,遷移テスト

1. 要点
2. 動機的概括
3. 状態グラフ
 3.1 状態
 3.2 入力と遷移
 3.3 出力
 3.4 状態テーブル
 3.5 時間と順序
 3.6 ソフトウェアの実現
4. よい状態グラフとわるい状態グラフ
 4.1 概要
 4.2 状態関連のバグ
 4.3 遷移のバグ
 4.4 出力エラー
 4.5 コード化のb具
5. 状態テスト
 5.1 バグの影響
 5.2 一般原則
 5.3 限界と拡張
 5.4 モデル化
 5.5 データの入手
 5.6 ツール
6. テスト可能性のヒント
 6.1 プログラマの立場
 6.2 大きさ
 6.3 スイッチ,フラグ,不可達パス
 6.4 必須あるいは必須でない有限状態のマシン
 6.5 設計指針

第12章 グラフ行列と応用

1. 要点
2. 技術的動機の概要
 2.1 図表的グラフの問題点
 2.2 ツールの作成
 2.3 テスト理論の実行と理解
 2.4 基本的なアルゴリズム
3. グラフの行列
 3.1 基本原理
 3.2 単純な重み
 3.3 表記法の拡張
4. 関係
 4.1 概要
 4.2 関係の特性
 4.3 同値関係
 4.4 半順序関係
5. 行列のべき乗
 5.1 原理
 5.2 行列のべき乗と積
 5.3 全パスの集合
 5.4 ループ
 5.5 分割のアルゴリズム
 5.6 ループの切り離しと応用
6. ノード削減法
 6.1 概要
 6.2 行列の特性
 6.3 ノード削減アルゴリズム
 6.4 応用
 6.5 行列操作のヒント
7. ツールの作成
 7.1 プログラムでの行列表現
 7.2 行列の操作
 7.3 ノード削減の最適化
8. まとめ

第13章 実現方法

1. 要点
2. 概要
 2.1 概説
 2.2 だれがどのテストをするか
 2.3 反対の役割
3. プログラマの戦略
 3.1 品質の責任
 3.2 プログラミングの展望
 3.3 自己インスペクション
 3.4 テスト項目の設計
 3.5 テストのタイプ別の優先順位
 3.6 テストの無力化
4. テスト担当者の戦略
 4.1 概要
 4.2 データのテスト
 4.3 コードや設計ドキュメントの参照
 4.4 要求仕様書
 4.5 テストと予告
5. 製品としてのテスト
 5.1 テストを捨てるのか?
 5.2 テスト,サブテスト,テストシナリオ,テストプログラム
 5.3 テストの構成管理
6. ツール
 6.1 概要
 6.2 基本ツール
 6.3 テスト実行の自動化
 6.4 テスト設計の自動化
 6.5 ツールの使用法と訓練

付録
参考文献
用語説明
索引
訳者あとがき

ソフトウェアテスト技法―自動化、品質保証、そしてバグの未然防止のために
ボーリス バイザー
日経BP出版センター
売り上げランキング: 100853
トラックバック(0)

このブログ記事に対するトラックバックURL: https://www.ilovex.co.jp/Scripts/intra/MTA5/mt-tb.cgi/1483

コメントする
ページのトップ