単体テストの考え方/使い方(読書感想・備忘録)
単体テストの考え方/使い方という、本を読み始めたので備忘録にする。
1章ずつ随時更新しようと思う。
読書のきっかけ
なんとなく実務でテストコードを書いてることに気づいて、テストをなぜ書くのか・テストの重要性を説明できないなと思い、理解を深めたいと思ったのがきっかけ。
1章 なぜ単体テストを行うのか
単体テストの目的は…
ソフトウェア開発プロジェクトの成長を持続可能なものにする。
単体テストに必要な考え方は…
テストにかける労力をできるだけ抑え、テストから最大限価値を引き出す。
プロダクトコードは複雑になってく
単体テストは、プロダクトコードの退行を防ぐ役割がある。
プロダクトコードはプロジェクトが進むにつれて、機能追加やリファクタリングが行われる。
その際にテストがないと、開発者がコードを退行していることに気づけない可能性がある。
これを防ぐために単体テストは必要である。
"良い"単体テストを作成することが重要
テストをただ書けばいいというわけではない。
テストコードも、メンテナンスの対象であり、肥大化すると保守コストを負うことになる。
なのでアプリケーションの核となる、ドメイン・モデルに対して時間を費やすことを意識するべき。
ドメイン・モデルのテストに集中するために、関心の分離をする
ドメインモデルをテストしやすくするために、「ドメインモデルではないコード」と「ドメインモデル」を分離しておかないと、単体テストの労力をドメインモデルに集中させることが難しくなる。
(必ずしもドメインモデル以外のコードをテストしてはいけないという事ではない。)
優れたテストコードの特徴
- テストすることが開発サイクルの一部になっていること。
- テスト対象が重要なロジックに絞られていること。
- 保守コストが最小限であり、最大限の価値を生み出せるようになっていること。
価値のあるテストケースを認識できること
価値のあるテストケースを認識するためには、テストケースの価値を評価するための基準となる枠組を知っておかなければならない。
価値のあるテストコードを作成するために
価値のあるテストコードを作成するには、設計テクニックについて理解する必要がある。
そもそもテスト対象のプロダクトコードが、熟考された設計となっていなければ、価値のあるテストケースを作成できない。
なぜ単体テストを行うのか
「プロジェクトの成長を持続可能にする」これが単体テストの目的。
そのうえで持続可能とはどういう状態かというと、良い単体テストを作成し、開発者が機能追加・リファクタリングをする際に「退行させることはないと」安心して作業できる状態だと思う。
Discussion