Feedforce Developer Blog

フィードフォース開発者ブログ

第二回社内読書感想会(テスト駆動開発)に翻訳者の t-wada さんをお招きいたしました!

f:id:kasei_san:20180224115428j:plain

ドーモ、社内 ニンジャスレイヤー 推進おじさんの id:kasei_san です。

先日、社内にてテスト駆動開発をお題に読書感想会を実施したところ、翻訳者の id:t-wada さんの目に留まり、なんと、id:t-wada さんをお招きして、第二回読書感想会を実施することになりました!!

読書感想会とは?

技術書などチームが読んだ本について、知見や疑問を共有する会です。

詳しい解説と前回の様子は、こちらの記事をご覧ください。

developer.feedforce.jp

どんなことを話したの?

テスト駆動開発の疑問や感想について id:t-wada さんに解説頂いたり、訳者解説で紹介しきれなかったことを紹介していただきました。

こちらは、その際のホワイトボードです。とても1Hとは思えないような、濃く知見溢れるお話を伺うことができました...!

f:id:kasei_san:20180224125233j:plain

その中でも、特に印象深かったトピックスを4つほど紹介いたします。

  • リファクタリングとデザインパターンについて
  • ゴールのイメージがなくてもTDDはできるのか?
  • テストのメタデータについて
  • ViewのテストはTDDできるのか?

リファクタリングとデザインパターンについて

デザインパターンを知識として理解しているつもりだが、実践できていない。どうしたらよいか? という質問を解説いただきました。

デザインパターンはリファクタリングの途中で出てくるものなので、リファクタリングの勉強をした方が身につく というお話は目から鱗でした...!

詳細

  • パターンはリファクタリングの途中で出てくるもの
    • 「コードの匂い」があった時の解決策がデザインパターン
    • 例: 同じif文がコードの中に複数ある...! → stateパターン
  • デザインパターンを沢山覚えるのは辛いので、まずはTDD本にあるパターンから覚えると良い
  • パターン指向リファクタリング入門という本がオススメ
  • 既存のコードが実装のテストをしてしまっており、リファクタリングがつらい。どうしたらよいか?
    • 今あるものを分析してリファクタリングする必要がある
      • コストは高い。覚悟がいる
    • 不要なテストは消す
    • POODR本にあった 振る舞い、インターフェイスのテスト を意識する
      • 実装に近づけすぎない
      • 実装をたすけるテストを

パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法

パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法

  • 作者: ジョシュア・ケリーエブスキー,小黒直樹,村上歴,高橋一成,越智典子
  • 出版社/メーカー: 日経BP社
  • 発売日: 2005/08/04
  • メディア: 単行本
  • 購入: 11人 クリック: 313回
  • この商品を含むブログ (130件) を見る

ゴールのイメージがなくてもTDDはできるのか?

ゴールのイメージが見えなくてもできる。むしろそのゴールに向けて細かく方向転換をしながら進むものがTDD とのことでした。

id:t-wada さんが「TDD本で倒せなかった話題」とおっしゃっていたのが印象深かったです。

詳細

  • ゴールのイメージが見えなくても、TDDはできる
  • むしろ、段々見えてきて具体的になるまで手を止めない
    • メソッド名を書くだけでもよい
    • そのメソッド名も途中で名前が変わる
  • 実装して後からテストを書いてしまうと、方向転換ができない
  • TDDでは、最初にやると思っていたゴールと違う所につく
    • TDDは、ゴールのイメージがはっきりしていないところから、細かく方向を変えて、ゴールに最短で辿り着く手段
  • テストを書くのは具体例を知るための手段
    • 達人プログラマーの「曳光弾」

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

テストのメタデータについて

テストのmockとstubの話題から、外部APIとの接続や、DBへの接続はどこまでstubすべきか? という話題になりました。

google では、テストサイズというメタデータを使って、どこまで stub するか決めているらしいです。

詳細

  • 設定で本物/mockをテストできるようにすべき
  • googleでは、テストサイズというメタデータがある
    • スモール: mock, stub を使う
    • ミディアム: 社内ネットワーク, DBに接続する
    • ラージ: 外部APIを叩く

ViewのテストはTDDできるのか?

弊社フロントエンドエンジニアからの質問。

細かいviewのテストはTDDには向いていない とのことでした。

  • Viewは生きもの。TDDには向いていない
    • 何でも当てはめてはいけない。技術的には可能だがコスパが悪い
  • コードから見た目を想像できない
  • TDDはViewに絡まない所でやるべき
  • レグレッションテストに集中する
  • ゴールデンバージョンからおかしくなった時に気付くテストは有効
    • storybook などを使う
    • viewに影響があったか? のテストをする

その他のトピックス

その他のトピックスや、より細かい内容については、こちらにまとめました。ご興味がありましたら是非どうぞ!

最後に

いろいろな疑問やモヤモヤに対して、id:t-wada さんが経験豊かな解答をしてくださり、参加メンバーのテストやリファクタリングに対する意識が一段階上がったように感じました。

id:t-wada さん、今回は本当にありがとうございました!