こんにちは。エンジニアの原です。 先日、「テスト駆動開発」の翻訳者として知られるt_wadaさんこと和田卓人さんをお招きして、テスト駆動開発ワークショップの第1回目をオンラインで開催しました。 今回はその様子をお届けします。
本日は Classi 株式会社様にお招きいただき、1日コースの TDD ワークショップをオンラインで行いました。参加される皆様のレベルが高めなので反転学習の要素を取り入れた研修を設計しましたが、予想以上に効果があったと手応えを感じています。ご参加くださいました皆様、ありがとうございました!
— Takuto Wada (@t_wada) December 15, 2020
きっかけ
Classiでは毎年外部講師をお招きして勉強会を行っています。 新卒研修を行う中で、「テストコードを実装する際の勘所」をどう伝えようかという話があり、第一人者のt_wadaさんをお呼びして研修を行っていただくことになりました。 そこで新卒以外にも参加希望者が多かったため、プロダクト開発部の誰でも参加できる全体の勉強会として開催することになりました。
事前準備
研修の定員が10名のところ、30人近い参加希望者がいたため、3チームに振り分けを行い、3回に分けて実施することにしました。 事前にt_wadaさんから参加者の自動テスト経験の有無と、自動テストで課題に感じていることについてアンケートを行って頂き、その結果をもとに研修内容のすり合わせを行いました。 参加者全員が自動テストの実装経験があるということで、TDDの前提知識はTDD Boot Camp 2020 Online #1 基調講演/ライブコーディング を事前に視聴してくる前提で、当日は質疑応答とライブコーディングを行うという反転学習形式で進めることになりました。
ClassiのSlackワークスペースにシングルチャンネルゲストとしてt_wadaさんをお招きして、事前に簡単なコミュニケーションが取れたため、当日スムーズにワークショップに入ることができました。
当日の内容
午前中は質疑応答、午後は演習を行いました。
午前の部
質疑応答では、事前アンケートで出た質問や、TDD Boot Campの基調講演に関する質問にお答えいただきました。
Classiの参加メンバーからは、
- どのくらいテストを書くかの指標に code coverage を使うことが多いが他にどういう指標があるか?
- 目標とすべきテストカバレッジはいくつか? といった質問が出ました。
それに対して
- カバレッジに関して、テストがないプロジェクトではまずは65%を目指して、テストがあるプロジェクトでは85%を目指すといい
- カバレッジ以外のプロジェクトの健全性を示す指標として静的解析ツールで複雑度を検証したり、Lintでフォーマットを統一したりすることができる
といった答えを頂き、目指すべきプロジェクトの姿を言語化することができました。 古くからあるプロジェクトにテストコードが無かったり少なかったりという状況を打開する指針になったと思います。 また個人的に印象に残っているのが、「TDDは実装コストは2割増えるが、不具合発生率は8割減らすことができる」という言葉で、TDDのメリットを伝えるのに最適な言葉だと感じました。
午後の部
午後の演習は、簡易的なECサイトの機能を実現するプログラムを以下のTDDのサイクルで書いていくという内容でした。
お題の詳しい内容は以下のリンク先で書かれています(t_wadaさんに許可を頂いて掲載しています)。 https://gist.github.com/twada/856c37103ebd3d1fb973ba2c2654f9d6
まずは与えられた仕様からTODOリストを作らないといけないのですが、仕様の整理の前にコードを書き始めてしまったり、いつもの癖が抜けずにいました。しかし、サイクルを繰り返すことでTDDの手順がしっくり来るようになり、予め目標を考え、その目標を示すテストを書いてからコードを書くことで、テスト容易性を考えられたシンプルなコードが最初から書けるようになったという実感がありました。
途中t_wadaさんとの1on1が複数回あり、TDDの実践方法に関するアドバイスやコードレビューをしていただいたのも貴重な経験でした。
終わりに
定員が10名という少人数での開催だったため質問しやすく、1on1の機会もあり参加者全員がt_wadaさんとコミュニケーションを取ることができました。 t_wadaさんの圧倒的な知識の深さに常に圧倒される一日でした。
個人的な感想は以下のツイートの通りで、TDDは少しのコストで何倍ものメリットを享受できることを実感できたので、今後はTDDやっていくぞ!という気持ちで溢れています。
t_wadaさん研修、密度がすごかった。。実際にコード書いてレビューしてもらえたのも最高だったのと、TDDのサイクルでコード書いても、実装 -> テストのパターンと掛かる時間そんなに変わらないことが分かったのでこれからどんどんTDDやっていきたいと思いました!
— ‘はら' (@hxrxchang) December 15, 2020