🤖

テスト駆動開発を読んだ & 動画を観た

2024/12/26に公開

はじめに

「テスト駆動開発」を読んだので、感想をまとめる。

https://www.amazon.co.jp/テスト駆動開発-Kent-Beck/dp/4274217884

動機

現職でここ半年間ほどテストコードを書くということについて考える機会が多かった。
具体的には、テストコードが0 & 当時の開発者が退職済みのプロダクトをふとしたきっかけで掘り起こし & 改修することになり、以下の点に悩まされた。

  • テストコードがないため、デグレが発生していないかをアプリケーションレベルのE2Eテストで確認しないといけない
  • そもそもテストコードを書くことが想定されていないコードになっており(e.g. オブジェクトの責任が曖昧、密結合...etc)、リファクタリングをしないとテストコードが書けないが、リファクタリングのためにはデグレしていないことを確かめるために上記のE2Eテストを高頻度で実施しなければならない...という負のループに陥る

この過程で「やはりテストコードとプロダクトコードは同時に実装する必要がある」、「じゃあその順序は?」ということを疑問に思い、色々調べた所、このテスト駆動開発(以下、"TDD"と呼ぶ)について興味がわいた。

構成

本書籍は以下のような構成になっている。

第1部・第2部

  • 第1部はJava、第2部はPythonでそれぞれ異なるテーマを題材にTDDを行う

第3部

  • TDDの様々なパターンについて記載されている
    • TDDを実践していく過程で遭遇するであろう問題へのアイデア(e.g. PJの途中からTDDを導入するには?)やデザインパターンなどについて記載されている

著者・訳者あとがき

  • TDDの歴史やこの書籍の原著が出版された当時、ソフトウェア開発コミュニティがどういう反応したかなどが記載されている

読み方

自分は以下のように読み進めた。

  1. 第3部と著者・訳者あとがきを読む
  2. 第1部・第2部を写経
    • 第1部はJavaは未経験だったのでGoで写経した
    • 第2部はPythonで写経した
  3. 第3部と著者・訳者あとがきを読む

先頭から読まなかった理由としては、まずは手を動かす前にTDDの全容をある程度知っておきたかったため。実際にTDDを写経して体験した後で再度第3部と著者・訳者あとがきを読むと、一読目とはまた違った視点で考察したり、新たな気づきが得られた。

感想

以下のポイントが強く印象に残った。

  • TDDのゴールは「動作するきれいなコード」であること
  • TDDは「テストを最初に書き、その後にプロダクトコードを書くことでソフトウェア品質を向上させるテクニック」ではなく、「テストを設計の治具として使うテクニック」であること
  • TDD自体が提唱された時代から現代に至るまで、そのコンセプトや利点を誤解されることが多かったこと(そしてその解決のために様々な人々が努力されたこと)
  • TDDは個人スキルであること

おわりに

以下の様な方にオススメ。

  • テスト駆動開発(TDD)に興味のある方
    • オブジェクト指向開発の基本的な所は抑えた上で本書に取り組むのが良さそう
  • 開発手法について学びたい方

自分もこれからTDDを実践し、実際の開発の中でどのようなメリット・デメリットがあるのか、身を持って体験してみたいと思う。

また、以下の動画で本書の訳者の和田卓人(t_wada)さんがライブコーディングでTDDについて解説してくださっており、こちらもTDDの実際の進め方・考え方の参考になった。
https://www.youtube.com/watch?v=Q-FJ3XmFlT8

Discussion