社内で TDD のワークショップを開催しました!
こんにちは!
株式会社 ROXX の back check 事業部でスクラムマスターをやっている山口です。
今回はROXXの事業部横断でテスト駆動開発のワークショップを開催したのでイベントレポートとしてまとめます。
イベント概要
私山口と、@niisantokyo さん、 @12kohei3i さんのお二方にご協力いただき、社内のエンジニア向けにテスト駆動開発(Test Driven Development)のワークショップを開催いたしました!
TDDの浸透および、ペアプロ文化の促進、事業部間のエンジニアの交流を目的とした会として実施し、ご都合の悪かった方を除きCTO含め20人程度の方にご参加いただきました。
イベントの内容を時系列順に並べると、以下の進行で実施しました。
チェックイン
プレゼンテーション
@niisantokyo さんによる「テスト駆動開発をやってみよう」
ワークショップの実践
公開レビュー
ふりかえり
チェックイン
ROXX では MTG 等のはじめにチェックインを行うことが多いです。(最近定着してきた気がします)
今回は miro で「最近うれしかったこと」をそれぞれ書き出して共有を行う形で実施しました。
~ テスト駆動開発をやってみよう ~ プレゼンテーション
次に @niisantokyo さんによる「テスト駆動開発をやってみよう」という内容で20分のプレゼンテーションを行っていただきました。
以下のトピックをはじめ、なぜテストが大切なのか?リファクタリングに対する考え方、テスト駆動開発の利点、ペアプロとの相乗効果などについて解説いただきました。
テストってなに?
テスト駆動開発ってなに?
テスト駆動開発をやってみよう!
個人的には「過去のコードでもTDDサイクルの中でリファクタリングすることで、常に改善を進めていける」というところに共感を感じたセッションでした。
また、FizzBuzzによるテスト駆動開発の例として@niisantokyo さんが実際にTDDで実装したサンプルコードを解説いただいたことで、最小限のコードによる仮実装を意識してその後のワークショップに取り組むことができたように思います。
※ @niisantokyo さんによる「テスト駆動開発をやってみよう」のスライドは後ほど公開予定です。
ワークショップ
ワークショップ部分は例題についてTDDの手順に沿って各チームペアプロで実装する形式で実施しました。
今回は事業部交流の意図から、それぞれ別の事業部の方と得意な言語ごとに二人一組のペアを作り作業しました。
また、大前提として手を動かす時間は1時間のタイムボックスの中で行ったので、以下の目的を定義しました。
例題を解くにあたっての目的:
問題を解ききることは重要ではない。(たぶん終わらない)
TDDを体験することが目的。
さて、肝心の課題ですが Coding Dojo が掲載している Bowling の問題をアレンジしたものを用意して実施しました。
こちらが今回用意したボーリングのスコア計算の課題になりますので、よければみなさんもTDDの手順で実装してみてください。
ワークショップ中の参加者の方達は、I/O 周りの型のリファクタリングで悩んでいるペアがいたり、 Rust など普段の開発ではあまり触らない言語で挑戦してみたりと各々のペアがうまくコミュニケーションをとりながら進めていました。
また、ペアプロの方法としてアジャイルコーチング で紹介されていたピンポンプログラミングで取り組んでもらったことでペアの両方の方がTODOリストの作成から始まりレッド、グリーン、リファクタリングのプロセスを体験いただけたのもよかったなと感じました。
公開レビュー
ワークショップで参加者が実装してくれたコードを、それぞれ PR として公開し、リファクタリングでこだわったポイントや、TDDサイクルの過程で考えたことなどをインタビュー形式で共有してもらいました。
ボーリングの仕様のスペアやストライクの実装など1時間の枠の中ではやや難易度も高かったと思いますが、簡単なTODOから順にTODOの用意ができたペアはスムーズに進むことができたようでした。
また、もう少し時間があったら再帰関数をつかったり、ガード節を使用してネストを減らすことを考えたかった!など、1時間ではやりきれなかった部分についても意見が飛び交い盛り上がりを見せていました。
ふりかえり
最後に時間をとってふりかえりをしましょう!と計画していたのですが、、、みんなが盛り上がってくれたこともあり時間が足りずふりかえり用に固定の時間はとれませんでした(涙)。
※ 当日は夕方からの開催だったこともあり、遅くなってしまったため最後まで残れるメンバーでふりかえりをしました。
後日チームのレトロスペクティブの場でも楽しかった!とかよかった!という声もいただけました!
まとめ
社内で事業部横断のワークショップをする機会は今回がはじめてだったのですが、企画者の観点でもまずまず有意義な会が実施できたかなと感じています。
開催にあたりご協力いただいた@niisantokyo さん、 @12kohei3i さん、そして事前のお試し会にお付き合いいただいた方々含め参加者のみなさんありがとうございました!
最後に、もしまたこのワークショップをやるなら作業時間は90~120分くらいとると TDD サイクルで機能のコアな仕様も比較的スムーズに実装できる点などをより実感してもらえるかなと感じました。この記事を参考にTDDのワークショップを企画検討する方がいらしましたら参考にしてみてください。
また、再掲となりますが個人で試してみたいという方はこちらの問題をお使いください。
今後も事業部横断で ROXX Dev が盛り上がれる施策を随時企画していきたいと思います。
もし、弊社にご興味を持っていただけましたら、弊社 ROXX 採用サイトよりお気軽にカジュアル面談のお申し込みください!