【社内勉強会】和田卓人氏によるレガシーコード改善ワークショップを開催しました


サーバーサイドエンジニアサブマネージャーの崔です。
少し前のことになりますが、テスト駆動開発(TDD)のエバンジェリストである和田卓人(@t-wada)さんを講師としてお招きし、1日かけてレガシーコード改善ワークショップを開催しました。

和田さんには以前にも、社内でテスト文化への理解を広めたいという意図もあり講演をお願いし、非常に好評だったため、今回はより実践的なワークショップを開催することにしました。

私たちが長期にわたって運用を続けるゲームタイトルは、機能追加や改善を繰り返し、システムが大規模かつ複雑になってしまいます。開発のスピードとプログラム品質の両立に影響するため、これらを改善する取り組みのひとつとして、テストを活用して開発効率を上げたいと考えました。

そして、今回はより実践的なワークショップにするために、Cygamesで実際に運用しているゲームタイトルのソースコードを利用しました。和田さんと打ち合わせを重ね、不具合が発生しやすくテスト導入が困難な箇所も選定し、前半は頭で理解し、後半は体で理解するという2部構成で実施しました。

当日の流れ

◾︎前半(頭で理解編)
  1.講義
  2.ゲームタイトルのソースコードにテストを書く(ライブコーディング)

◾︎後半(体で理解編)
  3.ゲームタイトルのソースコードにテストを書く(ペアプログラミング)
  4.発表会(コードレビュー)

1.講義

最初の講義では、「どこにテストを書いていくか」という狙い目を具体的に説明していただきました。 

講義の様子。みんな真剣に聞き入っていました

講義の様子。みんな真剣に聞き入っていました

2.ゲームタイトルのソースコードにテストを書く(ライブコーディング)

講義の後は、和田さんによるライブコーディング形式のデモです。プログラム内でもシステムの複雑化によって特にバグが出やすい機能を使ったデモなので、実際に起こり得るシチュエーションを元にテストコードの意義を確認できました。

3.ゲームタイトルのソースコードにテストを書く(ペアプログラミング)

続いて後半です。2人1組になり、和田さんが事前に用意くださった初級・中級・上級の課題をクリアしていきます。どのペアも会話をしながら楽しそうに課題に挑んでいるのが印象的でした。

ペアプログラミングでは、2名のエンジニアが相補的な関係となってテストを書きます

ペアプログラミングでは、2名のエンジニアが相補的な関係となってテストを書きます

4.発表会(コードレビュー)

最後は、課題に対して効果的なアプローチをしていた2組による発表です。「どういうことを考えてこのテストコードを書いたか」という意図を説明し、それに対して質疑応答をしたり、和田さんからは良い点や改善すべき点を指摘していただいたりしました。レビューはかなり盛り上がり、予定を30分以上オーバーしました。

最後はコードレビュー。書いたテストを客観的に振り返ることができます

最後はコードレビュー。書いたテストを客観的に振り返ることができます

まとめ

後日、参加者にアンケートを取って勉強会の感想を聞いたところ、「実際のゲームタイトルのソースコードに対するテストの戦略や考え方を得られたのは良かった」など、ポジティブな回答が多く得られました。

ゲームはその内容が年々複雑になる傾向にあり、システムも同様に複雑になってきています。
Cygamesでは、ユーザーに快適に遊んでいただけるように、不具合ゼロに向けて様々な取り組みを試してきました。その取り組みの一つとして、テスト駆動開発も採用してきましたが、これまで苦労することも多くありました。

今回は、実践的なワークショップを通して「テストとどう向き合うか」を再認識することができました。テストの導入に苦労をしていると、いつの間にか、テストを書くことが目的にすり替わりがちです。そんな時には、「テスト駆動にこだわるな」「ユニットテストにこだわるな」「最初から全部やろうとするな」という和田さんのお話を思い出そうと思います。

また、テストは闇雲に書くのではなく、「最も困ってるところから書く」「新機能開発から書く」「バグ修正のところから書く」という考えを参考にしながら、安心してシステムの品質向上に取り組める環境づくりを推進していくつもりです。

このようにして、Cygamesの「最高のコンテンツを作る会社」というビジョンを体現すべく、テストを最大限に活用してさらに開発効率を上げ、品質の高いゲームをユーザーに提供し続けていきたいと考えています。

最後に、とても有意義なワークショップにしてくださった和田さん、どうもありがとうございました!