単体テストの考え方/使い方(タンタイテストノカンガエカタ ツカイカタ)
プロジェクトの持続可能な成長を実現するための戦略
プログラミング- 著者:
- Vladimir Khorikov/須田智之(ウラジーミル コリコフ/スダ トモユキ)
- 出版社:
- マイナビ出版
- 出版日:
- 2022年12月28日
- ISBN:
- 9784839981723
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
単体 (unit) テストの原則・実践とそのパターン - プロジェクトの持続可能な成長を実現するための戦略について解説。
優れたテストを実践すれば、ソフトウェアの品質改善とプロジェクトの成長に役立ちます。逆に間違ったテストを行えば、コードを壊し、バグを増やし、時間とコストだけが増えていきます。生産性とソフトウェアの品質を高めるため、優れた"単体テスト"の方法を学ぶことは、多くの開発者とソフトウェア・プロジェクトのために必須といえるでしょう。
本書“単体テストの考え方/使い方”では、単体テストと統合テストの定義を明確にします。そして、どのようなテストに価値があるのかを学び、どのテストをリファクタリング、もしくは削除するのか、ということについて考え、そのことがプロジェクトの成長にどう繋がるのかを見ていきます。
C#のコード例で解説しますが、どの言語にも適用できる内容です。
Manning Publishing: Unit Testing Principles, Practices, and Patterns の翻訳書。
目次
第 1 部: 単体 (unit) テストとは?
第 1 章: なぜ、単体テストを行うのか?
第 2 章: 単体テストとは何か?
第 3 章: 単体テストの構造的解析
第 2 部: 単体テストとその価値
第 4 章: 良い単体テストを構成する 4 本の柱
第 5 章: モックの利用とテストの壊れやすさ
第 6 章: 単体テストの 3 つの手法
第 7 章: 単体テストの価値を高めるリファクタリング
第 3 部: 統合 (integration) テスト
第 8 章: なぜ、統合 (integration) テストを行うのか?
第 9 章: モックのベスト・プラクティス
第 10 章: データベースに対するテスト
第 4 部: 単体テストのアンチ・パターン
第 11 章: 単体テストのアンチ・パターン
技書の森解説
『単体テストの考え方/使い方』は、「良い単体テストとは何か」を判断基準のレベルから示す テスト設計 の解説書です。著者は Vladimir Khorikov 氏、訳者は須田智之氏で、 2022 年 12 月にマイナビ出版から刊行されました。原著は "Unit Testing: Principles, Practices, and Patterns"。コード例は C# ですが、版元自身が「どの言語にも適用できる内容」と紹介しているとおり、 Java や TypeScript など他の言語で開発している読者にもそのまま通用します。
本書が解決するテストの悩み
テストを書く文化が根付いたチームほど、「テストの量は増えたのに開発が楽にならない」という壁に突き当たります。コードカバレッジを目標にした結果、実装の詳細に密着した壊れやすいテストが増え、リファクタリングのたびに大量のテスト修正が発生する。モックを多用した結果、テストは通るのに本番で壊れる。本書はこうした症状の根本原因を「テストの質を測る物差しを持っていないこと」に置き、単体テストをプロジェクトの持続可能な成長への投資として捉え直すところから話を始めます。
全 11 章の構成と 4 本の柱の読みどころ
全 11 章の構成で、前半では単体テストの定義そのものを確立します。モックを積極的に使うロンドン学派と、実際のオブジェクトを組み合わせる古典学派という 2 つの立場を比較し、著者は古典学派側に立って理由を明快に述べます。核心は第 4 章「良い単体テストを構成する 4 本の柱」で、退行に対する保護、リファクタリングへの耐性、迅速なフィードバック、保守のしやすさという 4 つの性質でテストの価値を評価する枠組みを示します。 4 本の柱は同時にすべてを最大化できないトレードオフの関係にあり、だからこそ「何を優先するか」という設計判断が必要になる、という組み立てです。後半はモックとテストの壊れやすさの関係、単体テストの価値を高めるリファクタリング、統合テストとの棲み分け、データベースに対するテスト、そしてアンチ・パターンへと実務の順に進みます。
対象読者と先に読んでおきたい本
対象は、単体テストを書いた経験がある中級者以上です。テストフレームワークの使い方やテストコードの文法から学びたい段階の入門書ではないので、その場合は 言語別の入門書 や Kent Beck 『テスト駆動開発』 (オーム社、 2017 年) で TDD のリズムを先に体験するほうが得るものが大きいはずです。逆に、「どのテストを残し、どれを書き直し、どれを消すべきか」をレビューの場で説明する語彙が欲しいと感じている開発者やテックリードには、まさにその判断基準を与えてくれる本です。
読み終えて得られるもの
読み終えると、「このテストは 4 本の柱のどれを満たし、何を犠牲にしているか」という共通言語でテストの取捨選択を語れるようになります。テストスイートの保守コストに悩んでいるチームなら、モックの線引きと削除の判断基準が手に入るだけでも読む価値は十分にあります。チームのテスト戦略を言語化したい人が、長く手元に置いて参照することになる一冊です。
言及 Qiita 記事 (79 件)
たった2つのステップを意識するだけで書けない単体テストがほぼなくなる
♡ 386Java, テスト, JUnit, 読書感想文, レガシーコードテストを書く方針と原則の備忘録
♡ 241テスト, テスト自動化, ユニットテスト, テストコード『単体テストの考え方/使い方』が良すぎた
♡ 169単体テスト, 単体テストの考え方使い方「単体テストの考え方/使い方」を読んでテストの本質を学ぶ(第1部)
♡ 160Ruby, Rails, テスト, 単体テストE2Eテストが大量にあるのは危険かも?膨大化したE2Eテストが及ぼす悪影響
♡ 35アジャイル, 単体テスト, e2e, 自動テスト, 品質レガシーコードにおける単体テストのハードルを乗り越える思考フロー(初心者向け)
♡ 31Java, JUnit, 初心者, unittest, レガシーコードその単体テストは 振る舞い を検証できていますか?
♡ 26Java, テスト, JUnit, unittest, 単体テスト「アジャイルテストの4象限」の使い方
♡ 25アジャイル, テスト自動化, ソフトウェアテスト, テスト計画, アジャイルテスティング機械学習のためのソフトウェアテスト入門
♡ 23Python, テスト, 機械学習, pytest, Kaggle自動テストって何?必要あるの?
♡ 21テスト, 自動テスト, テスト駆動開発
言及 Zenn 記事 (24 件)
フロントエンドにおける「単体テストの考え方/使い方」
♡ 661test, jest「単体テストの考え方/使い方」が主張するたった一つのこと
♡ 115test, unittest単体テストの考え方/使い方 まとめ
♡ 83まとめ, 単体テスト, テスト壊れやすいテストとは? 「単体テストの考え方/使い方」(古典学派)と「実践テスト駆動開発」(ロンドン学派)を読んで考える
♡ 76test, mock, tdd, モック, noaiJest × Testing Libraryを用いた単体テストの考え方/使い方
♡ 41react, test, jest, testinglibrary多層アーキテクチャにおけるテスト戦略 〜 『単体テストの考え方/使い方』を踏まえて 〜
♡ 8単体テスト, 自動テスト, ソフトウェアテスト, テスト設計, テスト戦略チームで「単体テストの考え方/使い方」読書会をしたよ
♡ 6単体テスト, 読書会『単体テストの考え方/使い方』を読んで、ログ出力のテストを「出力値ベースのテスト」にした話
♡ 5python, ユニットテスト, ドメインイベント, テスト設計技術書読書ログ「単体テストの考え方/使い方」
♡ 5技術書, テスト「単体テストの考え方/使い方」勉強会03 〜単体テストの3つの手法〜
♡ 4test
この本に興味がある方におすすめ
この本に関連
関連記事
テスト本ガイド - テスト設計を学べる技術書の選び方
テストの書き方からテスト戦略まで学べる技術書の選び方を紹介。テストピラミッド、TDD の正しい読み方、テストの ROI の考え方を解説します。
「動くコード」と「良いコード」の間にある本
コードが動くようになった後、次に何を学べばよいのか。「動くコード」を「良いコード」に変えるために必要な知識と、それを効率的に学べる本の選び方を解説します。
バグを生むのは知識不足ではなく想像力不足である
バグの多くは、コードを書いた時点で「こういうケースもありうる」と想像できなかったことが原因です。想像力を鍛える読書法と、エッジケースへの感度を高める方法を解説します。