見出し画像

テスト駆動開発者を増やした社内勉強会

🎄この記事はNAVITIME JAPAN Advent Calendar 2023の4日目の記事です


こんにちは、ネコ派メタラーです。
ナビタイムジャパンでスポットデータ運用基盤の開発を担当しています。
開発業務を担当する一方で品質管理部門にも所属しており、開発プロセスの改善を通してプロダクト品質を改善する活動もしています。

開発プロセス改善の一環で、今年8月からテスト駆動開発 (Test Driven Development、以下「TDD」) を学ぶ社内勉強会を開催しています。この記事ではこの勉強会の運営、および得られた効果についてご紹介します。


きっかけ

当社の品質管理部門では、自動単体テストの実装を推進し、網羅率改善などの成果を挙げてきました。一方、親和性が高いテクニックとして TDD に言及する機会もありましたが、価値を認めつつも従来の開発手法からなかなか脱却できない実態がありました。

TDD は「Red → Green → Refactor」「テストファースト」というシンプルな基本原則はよく知られる一方で、基本原則だけ知っていれば理解したつもりになり、それ以上学習が進まないことがあると考えています。そのうえ、ノウハウを知らない人にとっては「問題が難しいから TDD できない」としか認識できず、なかなか次の段階に進みにくいものです。

新たな TDD 実践者を生み出すため、以下を主眼においた実践的な学習機会を用意することにしました。

  • 「TODO リスト」「仮実装」など、基本原則では語られない実践テクニックを知る。

  • リファクタリングの重要度を認識し、「設計の進化」という TDD の目的意識を再確認する。

勉強会の内容

写経会

1 つ目の勉強会は「テスト駆動開発」の写経会です。
原典といえる書籍を読むことで原理原則を学びながら、TDD 実践者の手の動きを再現することで、実践的なテクニックや感覚を身につけることを主眼に置いています。

週 1 時間集まり、もくもく会形式で各自コードを書き写しながら読み進めています。進行スピードも各々のペースに任せていますが、おおよそ完走まで 8〜10 時間くらいが目安になるかと思います。

本書は Java と Python でコーディングされていますが、参加者の中にはこれらの言語を業務で使わない人もおり、環境構築でつまづくことがあります。この写経会ではできるだけ本質的な学習に集中してもらえるよう、テンプレートプロジェクトの提供や、環境構築のモブオペなどのサポートを実施しています。このような共通の課題を一括で解決できることは個人学習にはない特徴だと思います。

開催中の Slack 投稿に目を通すと、TODO リストやリファクタリングについて言及が多く、TDD の実践に近づく学習ができていると感じました。印象に残った投稿を以下に抜粋します。

  • TODO リストを作成して思考を外に出しておくという方法はとても有用だと思った。パッと実装始めると色々と考えなきゃいけないところがあって、思考が鈍くなることがある。

  • リファクタに入るときにテストが実装されている安心感

  • え?いつリファクタしたの?と思ったが、ベタで書いた値を置き換えるのもリファクタと呼んでいた。リファクタのハードルってかなり低いのかなと思った

  • 自分の思っているより、3倍くらい小さい。普段から、もっと細く作業を切り分けてテスト実行していないとなぁと...

  • 新しいテストを書くとゲームで新しいフィールドが解放されたときと同じい感じがあってたのしい!

動画視聴会

2 つ目の勉強会はライブコーディング視聴会です。
TDD Boot Camp 2020 Online #1 基調講演/ライブコーディング」を視聴する会を開催しています。TDD 実践者の手の動きを見ることで、より実践的な知識を身につけることを目的としています。

このライブコーディングは FizzBuzz という簡易なテーマながら極めて実践的な進行です。写経会で用いている書籍をもう一段階実践に寄せた内容という印象を持っており、両方学ぶことで相乗効果があると感じています。
私個人としては「仮実装の意味」「仮実装・三角測量・明白な実装の使い分け」のは書籍を読み進めるだけでは理解しづらかったのですが、本動画でしっかり理解することができました。

今回は参加者からのコメントは必須とせず、ラジオ聴講のような参加を想定していたのですが、それでも Slack には多くの投稿が集まり、関心の大きさを感じることができました。
加えて、ライブコーディング動画視聴はコーディング工程を高い解像度で学ぶ機会となりました。「ラジオ的に聞くつもりだったけど面白かったから結局ちゃんと聞いてた」「一つ一つの所作すべてに学ぶべきところがあって片時も目が離せない時間泥棒動画だった」というコメントもありました。

当社ではこれ以前にも動画を用いた勉強会を開催したことがあり、これに倣って開催しました。これまでに 2 度開催しましたが、事前準備が不要で、何度でも開催しても負担にならない点を魅力に感じています。

開催後の反応

勉強会に参加したスマートフォンアプリ開発者から「現場で TDD を実践した」というフィードバックがありました。あるキャンペーンで位置情報を含むコアロジックを開発することになり、これに TDD を用いたとのことでした。フロントエンドに近いほどテスト可能性の見極めが難しい中、スマートフォンアプリ開発者による TDD 実践は重要な実績だと捉えています。「どのレイヤーでもコアロジックは存在して、TDD が活躍する場面は必ず存在する」という発言が印象的でした。

また、ある研究開発部門の開発者は、所属チームで同じ動画を視聴されたそうです。勉強会の手法自体も再利用され、勉強会参加者が TDD 仲間を増やすところまでお手伝いできました。
新規データコンバータ開発で TDD 実践されており、「テストなしだと気が付かなかったバグにはやめに気がつくことができた」「最初の仮実装がやはり重かったが、その後の本実装がすらすら進んで楽しい」というフィードバックがありました。

ふりかえりと今後

勉強会が参加者のスキルアップにつながり、実際に複数のチームで TDD 実践者を生み出すに至ったことは大変嬉しく思います。

今回ご紹介した 2 つの方法は、いずれも主催者の負担が小さいものです。引き続き新しい参加者を受け入れながら開催していきたいと思います。また、さらに力を入れた実践的な学習機会として、組織を横断したモブプログラミングを企画しているところです。

本稿が TDD をこれから学習したい方、TDD を実践する仲間を増やしたい方の参考になりましたら幸いです。