『ソフトウェアテスト徹底指南書』
目次
PartI ソフトウェアテストと品質マネジメント
第1章 ソフトウェアテストとは
1.1 ソフトウェアテストの目的
1.2 高スピードと高品質の両立を支えるソフトウェアテスト
1.3 ソフトウェアテストの課題
第2章 品質マネジメントとソフトウェアテスト
2.1 ソフトウェアテストの強みを活かし弱みを補う
2.2 品質マネジメント
2.3 品質マネジメントシステムの実現
2.4 品質マネジメントの視座でソフトウェアテストを活用する
2.5 ソフトウェア開発に求められる品質マネジメント
2.6 品質マネジメントを担う部門の陳腐化
2.7 品質とは
第3章 ソフトウェアテストの全体像
3.1 テストに関わる概念と用語
3.2 テストの構成要素
PartII テストの戦略とプロセス
第4章 テストの戦略立て
4.1 テスト戦略とは
4.2 テスト戦略の構築
第5章 定番のテスト戦略
5.1 シフトレフトテストの戦略
5.2 リグレッションテストの戦略
5.3 Wモデルの戦略
5.4 シフトライトテストの戦略
第6章 アジャイル開発でのテスト戦略
6.1 アジャイル開発の価値・原則を支えるテスト戦略
6.2 アジャイルテストの原則
6.4 アジャイル開発プロセスへの対応
6.5 顧客満足やビジネス価値よりアジャイルの形式を優先しない
6.6 リリーススプリントのリスクに対応する
6.7 ゾンビスクラムとその対策
第7章 継続的デリバリーでのテスト戦略
7.1 継続的デリバリーとは
7.2 デプロイメントパイプラインとは
7.3 継続的デリバリーを支えるテストアプローチ
7.4 継続的デリバリーで活用できるテストアプローチ
7.5 継続的デリバリーのテストを支える体制
第8章 DevOpsでのテスト戦略
8.1 DevOpsとは
8.2 継続的テストとは
8.3 ホリスティックテストとは
8.4 DORA Four Keysとテストでの対応
8.5 DevOpsを支えるテストの体制
8.6 DevOpsを支えるテストのアプローチ
第9章 ソフトウェアプロダクトライン開発でのテスト戦略
9.1 ソフトウェアプロダクトライン開発とは
9.2 ソフトウェアプロダクトライン開発のプロセス
9.3 ソフトウェアプロダクトライン開発を支えるテスト体制
9.4 ソフトウェアプロダクトライン開発を支えるテストアプローチ
第10章 テストを支えるプロセスの構築と運用
10.1 開発プロセスとは
10.2 テストを支える開発プロセス設計
10.3 テストプロセス設計
10.4 開発プロセス・テストプロセスの構築の流れ
10.5 関連プロセスの整備
10.6 テストプロセスの改善
PartIII テストの作成と実行
第11章 テストの分析・設計・実装の全体像
11.1 テストの作成で求められる工夫
11.2 テストを作成する全体の流れ
第12章 テスト基本分析
12.1 テスト基本分析とは
12.2 テスト要求・制約のステークホルダを特定する
12.3 必要なテストベースを特定する
12.4 テストの要求・制約を収集し分析する
12.5 テスト対象を整理し理解する
12.6 プロダクトリスクを分析する
12.7 必要なテスト環境を分析する
12.8 テストの責務を具体化する
第13章 テストアーキテクチャ設計
13.1 テストアーキテクチャとは
13.2 テストアーキテクチャ設計とは
13.3 テストアーキテクチャ設計の進め方
13.4 テストアーキテクチャの評価と改善
13.5 高スピードと高品質を両立させるテストアーキテクチャ設計
第14章 テストアーキテクチャ設計手法:VSTeP
14.1 VSTePとは
14.2 VSTePの基本概念
14.3 VSTePの進め方
14.4 まとめ
第15章 テスト詳細分析とテスト設計
15.1 テスト詳細分析・テスト設計とは
15.2 テスト詳細分析・テスト設計
15.3 テスト観点を識別・整理する
15.4 テスト設計のアンチパターン:CPM 法
15.5 テスト対象を項目分けする
15.6 テスト条件を分析する
15.7 テスト網羅基準を検討する
15.8 テストケースを設計する
15.9 テスト設計からフィードバックしてテストベースを改善する
15.10 テスト設計を保守・改善する
第16章 テスト設計技法の活用
16.1 テスト設計技法とは
16.2 テスト設計技法のタイプ
16.3 同値分割法
16.4 境界値分析
16.5 クラシフィケーションツリー法
16.6 デシジョンテーブルテスト
16.7 状態遷移テスト
16.8 nワイズテスト
16.9 エラー推測
16.10 制御フローテスト
16.11 テスト設計技法の使い分け
第17章 応用的なテスト設計のアプローチ
17.1 ユニットテストのテスト設計
17.2 性能テストのテスト設計アプローチ
17.3 組み合わせに対するテスト設計アプローチ
第18章 テスト実装
18.1 テスト実装とは
18.2 テスト手順の作成
18.3 テストの選択・絞り込み
18.4 予測的テスト選択(Predictive Test Selection)
18.5 テストの優先付け・順序設定
第19章 テスト環境の構築
19.1 テスト環境構築の重要性
19.2 テスト環境構築のプロセス
19.3 テスト環境構築からテストへの逆提案
19.4 テスト環境の品質を作りこむ
19.5 テスト環境のテスト
第20章 テストの実行と結果判定
20.1 テスト実行を準備する
20.2 テストを実行する
20.3 テスト実行の学習効果を活かす
20.5 バグを報告する
20.6 テスト結果を評価しリリース判定する
第21章 リスクベースドテスト
21.1 リスクベースドテストとは
21.2 リスクとリスクマネジメント
21.3 リスクマネジメントの活動
21.4 リスクベースドテストの概要
21.5 リスク事象に基づいてテストする
21.6 機能や特性ごとのリスクレベルに基づいてテストする
21.7 構成要素ごとのリスクレベルに基づいてテストする
21.8 リスクベースドテストの恩恵
第22章 探索的テスト
22.1 探索的テストとは
22.2 探索的テストのスタイル
22.3 探索的テストの効果を引き出す
第23章 ユーザーストーリーテスト
23.1 ユーザーストーリーテストとは
23.2 ユーザーストーリーの記述
23.3 ユーザーストーリーテストの進め方
第24章 静的テスト
24.1 静的テストとは
24.2 レビュー
24.3 静的解析
24.4 静的テストで支えるコーディング規約
24.5 デプロイメントパイプラインへの静的テストの統合
24.6 静的テストで動的テストを削減する
PartIV 自動テストの活用
第25章 自動テストの活用
25.1 自動テストとは
25.2 自動テストの効果
25.3 自動テストの注意点
25.4 自動テストの成功とは
25.5 テストレベルに応じた自動テストの構築
25.6 自動テストの構築・運用の流れと要点
25.7 自動テストの成功を支えるチームと仕組み
第26章 自動テストの品質の作りこみ
26.1 自動テストの保守性の確保
26.2 レガシーテスト / テストの技術的負債への対応
26.3 脆いテスト(フラジャイルテスト)への対応
26.4 自動テストの信頼性の確保
26.5 フレーキーテストへの対応
第27章 自動テストの評価
27.1 自動テストの目的達成と費用対効果を評価する
27.2 自動テストの評価
27.3 フォールトインジェクションの必要性
27.4 ミューテーションテストによる評価
第28章 自動テストの設計・実装の原則
28.1 プロダクトコードと同じように設計・実装を工夫する
28.2 FIRSTの原則
28.3 「 DRYではなくDAMP」の原則
28.4 xUTPの原則
第29章 自動テストコードのパターンやイディオム
29.1 パラメータ化テスト / データ駆動テスト
29.2 ドメイン特化テスト言語 / Robotパターン / Page Objectパターン
29.3 プロパティベーステスト / メタモルフィックテスト
29.4 テスト設計自動化におけるテストオラクル問題への対応
29.5 テストダブルのパターン
第30章 開発者テスト
30.1 開発者テストとは
30.2 保護して変更する(Cover & Modify)
30.3 リファクタリングのためのリグレッションテスト
30.4 仕様書としてのテスト(TaD)/ 仕様化テスト
30.5 「テストがないコードはレガシーコードだ」
30.6 デバッギングテスト
30.7 責任をもって自分のコードに対する自動テストを書く
31.1 テスト駆動開発の概要
31.2 テスト駆動開発の進め方
31.3 テスト駆動開発の実際の例
31.4 テスト駆動開発のメリット
31.5 テスト駆動開発の適用先と前提条件
31.6 テスト駆動開発を持続可能にするための活動
31.7 テスト駆動開発を導入しやすくするための留意点
31.8 テスト駆動開発のプラクティス
PartV テストの計画とマネジメント
第32章 テスト計画
32.1 テスト計画とは
32.2 アンチパターン:テンプレート穴埋め計画
32.3 テスト計画のタイミングや順序
32.4 テスト計画の作業
32.5 テスト計画の不確実性をマネジメントする
32.6 技術やツールの実現性と持続可能性をマネジメントする
32.7 テスト計画のためにチームの能力をマネジメントする
32.8 シフトレフトによる平準化でテスト計画をサポートする
32.9 テストの見積もりアプローチ
32.10 アジャイル開発でのテスト計画
第33章 テストのモニタリングとコントロール
33.1 テストのモニタリング
33.2 事前のモニタリング設計
33.3 テストのモニタリングの要点
33.4 テスト活動のモニタリング対象
33.5 不適切なモニタリング指標
33.6 テストコントロール
33.7 テストのモニタリングとコントロールの仕組みの構築
33.8 クライシスマネジメントとしてのテストコントロール
33.9 クライシスにテストエンジニアとしてどう対応するか
33.10 プロダクト品質のモニタリング手法:健診テスト
第34章 プロジェクトリスクのマネジメント
34.1 テストコントロールとして実施するリスクマネジメント
34.2 ネガティブなプロジェクトリスクはチャンス
34.3 リスクマネジメントの活動
34.4 プロジェクトリスクのマネジメントの要点
第35章 テストで求められる能力
35.1 テストで求められる能力
35.2 テストを支えるソフトスキル
35.3 テストを支えるロール
35.4 テストに関わるスキルモデル / ロールモデル
35.5 個の力と組織の力の両方が求められるテスト活動
第36章 テストを担う組織の構築
36.1 人材の採用
36.2 ロール横断による人材獲得
36.3 テストの適切なコミュニケーションを支える三本柱と心理的安全性
36.4 テストに関わるチーム文化の形成
36.5 テストを担う組織作りの方針
36.6 チーム全体アプローチ
PartVI テストを支える技術
第37章 CI/CDの構築
37.1 テストを支えるCI/CDの価値
37.2 CI/CDとは
37.3 CI/CDを支える開発インフラ
37.4 CI/CDの導入
37.5 CI/CDによるフェーズテスト方式の進化
第38章 バグ管理とバグチケット設計
38.1 バグ管理とバグ管理システム
38.2 バグチケットの運用やフロー,フィールドの設計
38.3 バグの分析
38.4 ODC 分析
第39章 テスト容易性の確保
39.1 テスト容易性とは
39.2 テスト容易性の重要性
39.3 テスト容易性の確保
39.4 テスト容易性を拡張可能にする実装例
39.5 テスト容易性をいつ確保するか
第40章 テスト設計を支えるモデリング
40.1 モデリングとは
40.2 モデリングの立脚点となる観点分析
40.3 テスト設計を支えるモデリング
40.4 テスト設計におけるモデリングの活用例
41.1 契約による設計 / 責務設計とテスト
41.2 契約による設計とは
41.3 契約による設計で支えるテスト設計
41.4 表明による契約遵守の確認
第42章 ソースコードのブランチ管理とテストの連携
42.1 自動テストに影響するブランチ管理
42.2 CI/CD方針,テスト方針と連動させたブランチ管理方針
42.3 3分類ブランチの運用
42.4 既存のブランチ戦略と3分類ブランチの関係性
42.5 テスト活動をサポートするブランチ管理のプラクティス
第43章 システムエンジニアリングで支えるテスト
43.1 システムとは
43.2 ソフトウェアからシステムに視野を広げる
43.3 システムエンジニアリングのプロセス
43.4 システムエンジニアリングとして実施すべきテスト活動
43.5 テストを支えるシステムエンジニアリング活動