Swiftで書いて覚えるTDDを読んだ

TDDを社内で少しずつ学んでいく中で、もっとTDDについて学びたいと思い、「Swiftで書いて覚えるTDD」を読みました。
この本では実際にツーカードポーカーの実装をしていきます。

booth.pm

下記が本を読みながら書いた自分のコードです。

github.com

そもそもTDDって?

TDD(テスト駆動開発: test-driven development)は開発手法です。 機能が期待する結果を、プロダクトコードよりも先に失敗するコードを書き、実装のゴールを設定します。
(プロダクトコードよりも先にテストを書くことを テストファースト を呼ぶ)

テストしやすい = 良い設計 であることが多く、テストを先に書くことで良い設計を作ることができます。

詳しくは「Swiftで書いて覚えるTDD」にも書かれているので、気になる方は読んでみてください。

TDDのサイクル

TDDのサイクルは下記のよう行います。

  1. 設計
  2. テストコードを書く(レッド: テスト失敗)
  3. プロダクションコードを書く(グリーン: 成功)
  4. リファクタリング(グリーン: 成功)

このサイクルを レッド・グリーンリファクタリング と呼ぶみたいです。

本の構成

  1. TDDとは
  2. 書いて覚えるTDD
  3. 2018年現在のSwiftでのTDD開発
  4. 参考文献

実際に書くのが2です。

本のまとめ

ToDoリスト

実際に作っていく中で、設計時にToDoリストを作るのがいいなと思いました。 例えば、下記の要件があった場合、

・任意のカード 1 枚の文字列表記を取得してください。
・スート (suit) と ランク (rank) を与えて カード (card) を生成してください。 ・生成したカードから文字列表記 (notation) を取得してください。

下記のようにToDoに落とし込んでいました。

- [ ] Card を定義して、インスタンスを作成する
- [ ] Card のインスタンスから文字列表記 (notation) を取得する

こうすることで、やるべきことを忘れずに目の前のことに集中できることや、その仕事が終わったかどうかを確認することができます。
アジャイル開発におけるストーリを、もっと詳しくかつ技術よりにした感じかなという印象を受けました。

Mock

3章からTDDを実践していく中での課題点が書かれていました。
ここで紹介していたのがCuckooというモックライブラリです。(クークーと呼ぶみたいです)

github.com

CuckooはJavaのMockitoにインスパイヤされたライブラリで、メリットとして

  • モックをしなくてもよい
  • 使い方がなじみやすい

があるのですが、デメリットとして

  • モック化するファイルの指定が少しめんどくさい
  • ジェネリクス非対応

らしいです。
使い所としてRxSwiftを使っていないプロジェクトと書いてあり、理由としてRxSwiftでジェネリクスを使った開発には適していないからだそうです。
※ 現在もまだ対応していないようです。

Androidも開発している自分にとって、Mockitoとほぼ同じ形で実装できる嬉しい反面、RxSwiftでジェネリクスを時々使用しているので辛いという印象。
現在まだCuckoo使ってのRxSwiftのジェネリクス部分のテストは書けていない状況です・・・。

まとめ

Swiftで書いて覚えるTDDを読んでみて、実際に書けるのは身につきやすいのでいいなと思いました。
メソッドなどの小さい単位でレッド・グリーンリファクタリングをすることで、すごく心持ちがよく実装ができると思います。 TDDは知っているけど、実際にやったことがないという初心者の方におすすめの本だなと感じました。