見出し画像

レガシーコード改善 t-wadaさんワークショップ レポート大公開!前編

こんにちは。Developer Relations (技術広報)担当の波多野です。

弊社では、約1,200法人グループへの導入実績を持ち、月間400万人以上の給与計算を回している大手法人および公共・公益法人向け統合人事システム「COMPANY」を開発しています。

2023年6月27日、日本のテスト駆動開発の第一人者である和田卓人さんをお招きし、実際のCOMPANY製品ソースコードを利用したレガシーコード改善ワークショップを開催いただきました!

前編と後編にわたり、ワークショップの様子や、ワークショップ開催による社内意識の変化等をレポートいたします!


レガシーコード改善ワークショップの概要

ワークショップ開催の背景

一般的に、長期に渡ってサービスを提供しているシステムの開発は、技術的負債とどのように向き合うのかがとても大切です。
20年以上サービスを提供してきた我々のCOMPANYという製品も、法改正対応や機能追加によって進化してきました。その一方で、肥大化・複雑化したソースコードといった技術的負債に向き合う必要があります。

COMPANYのサポート対象ソースコードは、数千万行以上あります。また、長い年月における技術的な変遷によって、複雑化したソースコードもあります。そのため、開発の影響範囲の把握が難しく、開発のスピードと品質を維持することが困難になっていくという課題が見えています。

これらの課題への取り組みとして、開発文化を少しずつ丁寧に変革する「開発力向上プロジェクト」を立ち上げました。
この中に、自動テスト拡充と、開発者育成があります。この取り組みの一環として、和田卓人さん(以下、t-wadaさん)にご協力いただき、開発者向けの講演やワークショップを開催しました。

t-wadaさんのご紹介

既にご存じの方も多いと思いますが、今回ワークショップを実施してくださったt-wadaさんについて、ご紹介させていただきます。

t-wadaさんは、テスト駆動開発の第一人者として活躍されており、執筆活動や講演、ハンズオンイベントなどを通じてテスト駆動開発を広めるためにご活躍されています。

運営の皆さんのご紹介
今回のワークショップは、こちらのお三方を中心に運営いただきました!

代表して金子さんに、ワークショップ当日の様子や開催にあたって工夫したことをお聞きしました!

ワークショップ前半(ライブコーディング)

ライブコーディングの様子

―― まずは、ワークショップ前半、ライブコーディングの様子について教えてください!

金子さん:t-wadaさんの講義と、作問チームのペアプログラミング(以下、ペアプロ)での仕様化テスト実装をオンラインで配信。参加者は配信視聴者として、ペアプロの様子を見ながら、Slackの実況チャンネルでコメントを投稿するライブコーディング形式で進行しました。

配信側の様子
ライブコーディング視聴の様子


金子さん:
ペアプロの題材は、サンプルで用意したコードではなく実際に利用されているプロダクションコード内の、あるメソッドを対象にした仕様化テスト(現在既にあるコードを仕様として書いていくテスト)を実装しました。

手順としては、こちらのステップです。

  1. テスト対象のメソッドをテストクラスから参照可能となるように、lombok等を活用してビルドエラーを修正

  2. テストケースを実行して実行時エラーを修正

  3. ようやくテストが通過したらParameterized Test等を活用しながら現状の仕様を追認するテストを実装

また、対象がプロダクションコードとなるため、最低限の変更を許容しながら少しずつ仕様化テストの実装範囲を広げていく手法をとりました。

同時視聴者数は300人を超え、Slackの実況チャンネルでは、「そんな効率的な実装方法があるのか!」や「徐々に実装範囲を広げていく手法について、担当領域で用いたい」といった様々な声が飛び交っていました!

Slackの実況チャンネル

ワークショップ開催で悩んだこと・工夫したこと

―― 今回ワークショップを開催するにあたって、悩んだこと・工夫したことについて教えてください。

金子さん:悩んだ点は、ワークショップで取り扱う範囲を決める部分です。今回は、実際に利用されているプロダクションコードを用いる、という前提があったため、適切な対象範囲を決めるのに難航しました。

金子さん:そこで工夫した点として、ライブコーディングでは時間内に収まるよう、モックを使用せずに中規模なメソッドのある一分岐に仕様化テストを実装することにフォーカスしました。さらに、ワークショップではそれを横展開して仕様化テストを広げる形となるように作問しました。

また、作問チームにはJUnit未経験者もいたため、t-wadaさんも含めたライブコーディングのリハーサルを行いました。リアルタイムでフィードバックをいただきながら、仕様化テストの正しい実装方法を学ぶことで、当日のスムーズな配信につなげることができました。

レガシーコード改善ワークショップの満足度

2022年の12月にも、t-wadaさんをお招きし、こちらの内容をベースに、弊社向けにアレンジした「組織に自動テストを書く文化を根付かせる戦略と戦術」の講演を実施いただきました。

この講演のアンケートの結果としては、「自動テストを書く必要性についての納得度(Why)」は高かったですが、「自動テストを、どの部分からどう実装するか(How)」について「あまりイメージが出来ていない」との声が寄せられていました。

▼前回講演でのアンケートに寄せられたコメント

実際の自動テストに落とし込むイメージまでは湧いていないので、手を動かしてみる必要があると感じました。

大規模なコードかつ、レガシーなコードは、テストをどう入れるかがイメージしにくい。実際のコードを使ってやってみるとイメージが掴めるかも。

現在の実務に直結はしないのでイメージしづらいと感じる節はありました。

この課題を解消すべく、今回 t-wadaさんに再度お力添えをいただき、実際のCOMPANYの製品コードを利用したレガシーコード改善ワークショップを実施しました。

結論、満足度の高い結果となりました!

▼自動テストを書く必要性についての納得度

約97%以上の方に、「自動テストを書く必要性を納得できた」と回答いただきました!

昨年12月の講演から、「自動化テストの実装のイメージができた」と回答した方の割合が14.4%UPしました!

課題であった「自動テストを、どの部分からどう実装するか(How)」の部分について、理解度が深まった結果となりました!

—----------------------

記事の前編は以上となります!記事の後編(こちらからご覧いただけます
!)では、ワークショップ後半の様子や、ワークショップ開催による社内意識の変化についてお届けいたします。お楽しみに!

\エンジニア積極採用中です!WHIの採用情報はこちら



この記事が気に入ったらサポートをしてみませんか?