コモディティ化するエンジニア

組み込み系のSI屋から、Railsを扱うWeb系のベンチャーに転職した筆者が、日々ミジンコなりに情報を綴るブログ。

Rubyで写経:テスト駆動開発 第4章「意図を語るテスト」

テスト駆動開発という本を題材に、dodosoft のメンバーでもくもく写経会をやっています。
各々が違う言語で取り組んでいるので、言語ならではの悩み、言語共通のコンテキストを共有できて、なかなか学びがあります。

テスト駆動開発

テスト駆動開発

会場は ラクスル株式会社 の会議室です。いつも弊社ありがとうございます!


第4章 意図を語るテスト

TODOリスト

  • $5 + CHF = $10
  • $5 * 2 = $10
  • amount を privateにする
  • Dollarの副作用どうする?
  • Moneyの丸め処理どうする?
  • equals()
  • hashCode()
  • null との等値性比較
  • 他のオブジェクトとの等価性比較

自分の気付き・感想

  • 粗く実装してから結合度を下げていくのはなるほどな! と思った
    • 最初から細かく可視性まで考慮してしまい、結果的に手が遅くなることがよくあったなと思った
    • そんなぐずぐず悩んでいる暇があるのなら、テストを先に書いてしまって(インタフェースを先に決定づける)後からリファクタリングすればいいと思った
  • カプセル化はMUSTなのか、WANTなのか?

みんなで話した気付き・感想

  • TDD的には、いきなり完璧なコードを目指すのではなく、要求を実現するための最小限のコードを少しずつ書く。小さなステップを踏んでいくのだ!
    • 普段は最初からカプセル化を意識してコードを書いていくので、アプローチが逆方向だなと新鮮だった
  • 3章までにテストをしっかり書いていないと(テストが正しいこと)、この章で大胆には変更できなかった

実装面でのひっかかり

  • Rubyインスタンス変数のカプセル化。。。
  • eq だと同値性ではなく、同一性(object_idレベルで)を比較してしまうので、 == を使わなければならなかった

以上です!
はじめにインタフェースを設計できている必要があるので、テスト駆動開発ってスキルが必要だなー(今の自分には力不足。。。)と思いました。
ガチャガチャ実装しているうちに、インタフェース結構変えちゃうんですよね、自分の場合。がんばらねば。。。

次回は第5章です。