msksgm’s blog

msksgm’s blog

Webエンジニアです。日々の勉強記録、技術書感想、美術観賞感想を投稿します。

「テスト駆動開発」まとめ,感想

テスト駆動開発」(Kent Beck)を読了しました

個人的なメモと感想について記述していきます.

まとめ

TDD はテスト技法ではない,分析技法であり,設計技法であり,実際には開発のすべてのアクティビティを構造化する技法

テスト駆動開発の進め方

  1. レッドバーがでるテストを書く
  2. とりあえずグリーンバーがでるコードを書く
  3. リファクタリングする

テスト駆動開発のステップ

  • とりあえず,グリーンバーを出すときに小さなステップでもいいし,「明白な実装」ができるなら大きなステップでもいい
  • 自分の歩幅を小さくできることがポイント

実装の種類

  • 仮実装

    • ベタ書きの実装
    • 心理的な安定を得て」,「スコープを制御できる」
  • 三角測量

    • 不安なときに,二つの以上の例があるときに,一般化をおこなう
    • 本当にわからない時だけおこなう
  • 明白な実装

    • シンプルな操作を実装するには,そのまま実装する
    • 仮実装や三角測量が作る中間地点は,特別に重要というわけではない
      • 何を書くべきかわかっていて,すぐに書けそうなときには,そのまま書く
    • ただ,「きれいな動くコード」を最初から書くのは難しい

感想

以前,「知識ゼロから学ぶソフトウェアテスト」を読み終わったときにテスト駆動開発という考え方を知りました.
軽く調べてみたら,この本がバイブル的なポジションだったので購入.

テスト駆動開発はテスト手法だと思って読んだら,まったくそんなことはなく, 「TDD はテスト技法ではない,分析技法であり,設計技法であり,実際には開発のすべてのアクティビティを構造化する技法」
と最後に記述してある通り,個人のテクニックに分類されます.

実際にプログラミングで意識してみると,コーディング中に「不安」があることに気付きました.
テスト駆動開発は慣れないと,単純にコーディング量が倍になるのでスピードダウンがおきます.
しかし,それ以上に不安なく次のコーディングに移ることができることのメリットは大きいです.
加えて,ソースコードが長くなるほど最終的なリターン(保守性,コーディングスピード)は大きくなります.

本書の内容は,第一部でテスト駆動開発の方法,第二部では xUnit の実装,第三部では用語の説明になります.
第一部は Java で書かれ,第二部は Python で書かれています.
リーダブルコードや GoF 本なども Java で書かれているので,会社の研修などで学んだ Java はこういうとき便利ですね.
第二部の xUnit はテストツールの自作になります.少し難しい内容に感じましたが,本書に書いてある通り新しいプログラミング言語を学習したときにできるとメリットが大きそうです.
第三部で書かれている通り,テスト駆動開発はライブコーディングやペアプロで学んだ方がいいと思うので,翻訳者がいう通り,第一部を写経(あまりプログラミング学習で好まれないが)した方がいいと思います.
第三部にテスト駆動開発で重要なことをまとめて記述しているので,第三部 -> 第一部 -> 第二部の順番で読む方がいいかもしれません.

全体的に通して,内容は難しすぎないが実際に手を動かさないとわかりづらく身につきづらい部分が多いと思います.
テスト駆動開発についてを網羅的に解説されているので,この一冊で十分な内容です.