テスト界の第一人者、高橋寿一氏執筆の
「開発者テスト」実践における必携書、アジャイル開発に完全対応!
本書では、アプリ・システム開発において、バグを減らすために
開発者が行うべきテスト(開発者テスト)についてわかりやすく解説します。
開発者テストを実施するために知っておくべき概念・手法や、
○単体テスト
○リファクタリング
○アジャイル開発での品質担保
○テストの自動化
などについて、実例を出しながら解説していきます。
旧版で言及の少なかったアジャイルテストの方法論にページを割き、
アジャイルの現場でも活躍する内容にパワーアップしました。
品質コンサルタントとして長年培ってきた筆者の経験をもとにした、
現場で必須の手法+学術的根拠のエッセンスを詰め込んだ一冊です。
□章構成
第1章 はじめに
第2章 上流品質向上のためのテスト
第3章 開発者テストの基本の基本
第4章 コードベースの単体テスト
第5章 単体テストの効率化――楽勝単体テスト
第6章 機能単位の単体テスト
第7章 リファクタリング
第8章 コードレビュー
第9章 統合テスト
第10章 システムテストの自動化
第11章 探索的テスト
第12章 まとめ――全体テストのデザイン
第13章 アジャイル・シフトレフトのメトリックス
第14章 アジャイルにおける要求仕様
第15章 開発者テストの実サンプル
この章では、上流品質とはなにか、ちまたで言われているShift Left(シフトレフト)というものがどういう効果をもたらすかを説明しています。
開発者はテスト手法について知ってるようで、実は知らなかったりします。テストのプロのような品質概念の知識はいりませんが、境界値テストといった基本的なテスト手法は知るべきであり、それが多くの開発中のテストに役立ちます。
単体テストは全員の開発者が知っていると言うかもしれませんが、ほとんどの開発者が本当はよく知らない、不思議な技術です。膨大なサンプルコードが載っている書籍もありますが、本質を言い当てている書籍は少ないと思います。本書で単体テストの本質を理解し実践力を培ってください。
プロジェクト後半でのバグを少なくするために単体テストでバグをなくしませんか? また、「出荷後にバグが出るのは、システムテストでつぶすことのできない種類のバグが存在するからですよ!」と言っても、どこの会社からも返ってくる言葉は「やりたいのですが、単体テストをやっている時間がありません」です。時間がないから単体テストをやるわけなのですが、単体テストの領域は日本のソフトウェア開発で一番理解が欠ける技術領域です。本書では効率的で、楽な単体テストの方法を説明します。
上流でテストをすれば、下流でのテストは減っていきます。ほとんどなくなると言っても過言ではありません。ただ日本の多くの組織で協力会社まかせの手動のマニュアルテストをやっていたりします。「下流工程の品質向上のための活動を労働集約的に行うよりは、労働集約なのだから手動ではなく自動でやりましょう」という考えは、上流テストへのまず一歩というふうにも考えられます。その中で正しいシステムテストの自動化は、実は大きな開発効率の改善にもなりえます。
品質というのを定量的に示すことは非常に重要です。品質は良すぎても(予算というものがある)、悪すぎてもいけません。アジャイル・シフトレフトのメトリックスもウォーターフォール時代のメトリックスが適用しにくくなっています。アジャイル・シフトレフトに特化したメトリックスを説明します。
ウォーターフォールでもアジャイルでも要求仕様は重要です、その要求仕様からどのように品質を上げるかを説明します。
第1章 はじめに
1.1 上流品質
1.2 アジャイルでの品質
1.2.1 アジャイルテストとは
第2章 上流品質向上のためのテスト
2.1 上流品質活動
2.2 さぼる・逆らう人のための上流テスト講座
2.2.1 上流品質と出荷後の品質
2.2.2 上流品質と残バグのリスク
2.3 まとめ
第3章 開発者テストの基本の基本
3.1 開発者がこれだけは知っておくべきテスト手法
3.1.1 境界値テスト
3.1.2 状態遷移テスト
第4章 コードベースの単体テスト
4.1 コードベースの単体テストとは
4.2 命令網羅(C0カバレッジ)
4.3 分岐網羅(C1カバレッジ)
4.4 よくある単体テストの間違い――コードベースの単体テスト
4.5 知っているようで知らないコードベースの単体テストの書き方
4.5.1 一般的なテスト方法(TDD)
4.6 網羅率――コードベースの単体テストの成否を計測する
第5章 単体テストの効率化――楽勝単体テスト
5.1 コードの複雑度
5.2 どこを単体テストすればよいか?――単体テストやってる暇ありませんという人のために
5.2.1 単体テストのやる箇所を絞る
5.2.2 筆者の独自手法――ファイルを2つにぶった切る
5.2.3 明確なメリット
第6章 機能単位の単体テスト
6.1 開発者がやるべき単機能のテスト
6.1.1 ソート機能の単体テスト
6.2 ブラックボックステスト・ホワイトボックステスト
第7章 リファクタリング
7.1 やはり複雑です、そのコード!書けません、単体テスト
7.2 ファイルのコードのリファクタリング
7.3 ビッグクラスのリファクタリング
7.3.1 CKメトリックス
7.4 複雑度を下げるリファクタリング
7.5 出口は1つ
7.6 MVC分離
第8章 コードレビュー
8.1 コードレビューとは
8.2 ペアプログラミング
第9章 統合テスト
9.1 統合テストのパターン
9.1.1 統合テスト重視の実例
9.2 APIテストとAPIバグ密度の考え方
9.3 カオスエンジニアリング
9.3.1 カオスエンジニアリングと品質&生産性
第10章 システムテストの自動化
10.1 最悪のシステムテスト
10.2 キーワード駆動型自動テスト
10.3 妄想な自動化
第11章 探索的テスト
第12章 まとめ――テスト全体のデザイン
12.1 単体テストなしで疲弊する組織
第13章 アジャイル・シフトレフトのメトリックス
13.1 ミューテーションテスト
13.1.1 ミューテーションテストの考え方
13.1.2 ミュータントの中身
13.1.3 ミューテーションテストの問題点
13.1.4 ミューテーション網羅率という考え方
13.2 ユーザーストーリと信頼性メトリックス
13.2.1 オペレーションプロファイル
13.3 信頼度成長曲線のメトリックス
第14章 アジャイルにおける要求仕様
14.1 ユーザーストーリの利点
第15章 開発者テストの実サンプル
15.1 単体テスト
15.1.1 Setup――簡単なアプリを作る
15.1.2 単体テストを作る
15.2 コード網羅測定
15.2.1 コード網羅ツールの準備
15.2.2 一番簡単な網羅(命令網羅)
15.2.3 分岐網羅