見出し画像

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

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

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

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

記事の前編(こちら)では、ワークショップ前半の様子や、ワークショップ開催にあたっての工夫等をレポートしました。

本記事・後編では、ワークショップ後半の様子と、ワークショップ開催による社内意識の変化についてレポートいたします!


ワークショップ後半(モブプロ・ペアプロ)

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

代表して水野さんに、ワークショップ後半の様子についてお聞きしました!

モブプロ・ペアプロの様子

―― ワークショップ前半では、ライブコーディングを実施しました。後半のモブプログラミング・ペアプログラミング(以下、モブプロ・ペアプロ)の様子について、教えてください!

水野さん:後半は、午前のライブコーディングで実装した自動テストの続きを書くという内容です。2~3人組のチームに分かれて、7分間隔でドライバーとナビゲーターを交替するモブプロ形式で行いました。モブプロ中は、t-wadaさんや作問チームメンバーが、会場を回って参加者の質問に回答しました。

水野さん:中間発表と最終発表では、各チームが実装したテストコードや、リファクタリングしたプロダクションコードを見せながら、工夫した点と苦労した点の発表となります。テスト対象は同じでしたが、実装方法はチームによって異なり様々なものがありました。

例えば、前半のライブコーディングの実装から更にテストコードを見やすくするためのリファクタリングや工夫を入れたもの、製品コードのリファクタリングまで手を付けたもの等です。t-wadaさんが、全ての発表に対してポジティブなコメントを下さり、参加者からも質問や良い点を褒める言葉が多く出て、予定時間を超えて盛り上がりました。

中間発表の様子

水野さん:全体として約5時間の長丁場にもかかわらず、全員が最終発表ギリギリまで画面を見ながらどう実装するか悩んだり、テスト結果に一喜一憂したりと、終始賑やかなワークショップとなりました。

―― 当日はとても盛り上がっている様子が、伝わってきました。運営の水野さん、稲垣さん、金子さん、ありがとうございました!

ワークショップ開催による社内意識の変化

続いて、ワークショップ開催がメンバーにどう影響を与えたのか、5名の方にインタビューを実施いたしました!

―― 楠田さんにお伺いいたします。今回のワークショップ以前に、楠田さんは修正・リファクタリングで動作が変わる経験をされたと伺いました。ワークショップを受けて、実業務でテストを書く際の自信につながったり、よりテストを書いていこうと感じる機会は増えましたか?

楠田さん:ワークショップを受ける前は、できる限り影響のないようコードを修正したつもりでも、意図しない動作が起きることがあり、複雑なコードを修正するのは常に不安でした。

ワークショップを受けたことで、テストコードのより良い書き方を学ぶことができ、実業務でテストコードを追加するイメージが湧きました。
修正は少ないが読みづらいコードではなく、テストコードを書いたうえで、修正やリファクタリングを進める努力をしています。

―― 続いて、平田さんと中村さんにお伺いいたします。平田さんは新卒入社で約1年、中村さんは中途入社で約1年半と、経験が浅く、既存コードを読むのに苦戦したり、今回の講義で初めて聞くことばかりだったと思います。
ワークショップでの経験が、実業務でテストを書く際の自信につながったり、よりテストを書いていこうと感じる機会は増えたりしましたか?

中村さん:テストコードを書くイメージが湧き、今後はテストコードを書いてみようと思えました。これまで、自身が担当する機能は法改正に伴った対応が頻繁に発生するため、その対応に追われてテストコードに着手する余裕がありませんでした。

今回のワークショップで、前後の処理に全くテストが無い状態からテストコードを書いていく過程を見ることができ、有用なアノテーションや、ときにはアクセス修飾子を広げてテストを書く手法も知ることができました。

平田さん:ワークショップ直後から、リファクタリング専用のチケットを作成し、モブプロ形式で自動テストの作成に取り組んでいます!一気に変えようとして進まなくてくじけそうになりましたが、少しずつ段階を踏んで進めることが大事だと学びました。

また、レガシーコードに立ち向かう際には、正解が一つではなく、いろんなやり方があることを理解しました。人に頼りながら一緒に作業することも大事だと感じ、新人で不安になることもありますが、自分のできることを増やすために頑張ります。

―― 同じくお2人にお伺いいたします。ワークショップを受けて、ご自身の課題感を仕様化テスト(現在既にあるコードを仕様として書いていくテスト)で解決できるな、と感じたものはありますか?

中村さん:具体的にどの処理で書けそうかは、まだ模索中です。ただ、今後テストを書くときに正しい仕様が分からない状況であっても、「一旦仕様化テストを書いて今の動作を正としよう」と前向きにテストコード作成に臨めるようになったと思います!

平田さん:一般的に、エンジニアはソースコードそのものを読んで仕様や振る舞いを理解していきます。しかし、エンジニア1年目の私にとっては既存コードへの向き合い方が難しく、何度もくじけそうになります。ソースコードも複雑で全く読めなくて、、、

これから仕様化テストをかけるようになれば、そのテストを通じて「こういう仕様だ!」ということを自信をもって開発することができる材料になったり、修正にもより積極的にチャレンジできるようになったりしそうだなと感じました!

また、仕様化テストを書くためには、その機能のことを深く知る必要があり大変だなと思うのですが、逆に言えば仕様化テスト作成を通してよりその機能のことを知る機会にもなると思うので、新人こそ積極的に仕様化テスト作成にチャレンジするのがいいと感じました!

―― 次はGrp. Managerでテスト作成の流れを加速させたいという想いをお持ちの、嶋さん、西久保さんにお伺いいたします。今回のワークショップを受けて、この課題は仕様化テストで解決できるな、と感じたことはありますか?

嶋さん:リファクタリングに取り組む上で共通の引き出しを1つ持てたと思います。また、仕様化テストを組織目標に取り入れ、各エンジニアのモチベーションに繋がっているのが大きな変化として感じています。
COMPANYは同じロジックを、複数Version/MW/HWで保証していく必要があり、テスト自動化が鍵となります。テストコードを書く技術や知見、またテスト資産が安定かつ高速なリリースに繋がると感じています。

西久保さん:これまで、各メンバーでユニットテストの価値観や書き方などにバラつきがありました。それらのコンテキストを全員で共有できたので、コミュニケーションやレビューが非常にスムーズになりました。
また膨大なE2Eテスト(打鍵テスト)の評価作業だったところが、ユニットテストでカバーするケースが徐々に増えました。その場での評価工数が低減するだけじゃなく、将来の自動テスト資産にもなるのが非常に魅力だと感じています。

―― 最後に、皆さんにお伺いします。仕様化テストがチーム内で話題にあがる機会は増えましたか?

楠田さん:ワークショップ前後でチームを異動したため、話題の頻度の比較はできないですが、ワークショップの際に、仕様を深く知らなくても、仕様化テストを追加できる経験をしたので、新しいチームでも積極的に仕様化テストを追加していきたいと考えています。

平田さん:確実に増えました!もともとワークショップ前から、自動テスト書いていこうぜ!リファクタリングやっていこうぜ!という動きはあったのですが、ワークショップを経て、チームの目標として「自動テスト作成と複雑度減少」が掲げられるようになり、MTGの場で自動テスト作成やリファクタリングに関する相談が増えました。

中村さん:増えました!以前は「仕様化テスト」という単語があまり認知されていなかったと思います。一般的なテストコード実装でも「テストコードまで期日に間に合うか分からない」等の懸念から断念することがありました。それが今回のワークショップを受けて、「仕様化テスト」の重要性についてチーム内での共通の理解がとれ、(メインの開発がJavaのため)JUnitや仕様化テストを書くことを目標の一つとして設定することにしました。

嶋さん:仕様化テストそのものだけでなく、テストコードの可読性や利用シーンへの共通認識ができました。それによって、テストをコーディングして活用していくことへ関心が高まったと感じています。

西久保さん:発生条件の要因が複数あり複雑度が高い、不具合修正の場面において、仕様化テストでカバーを検討するケースや、修正するロジックの実装よりも先に仕様化テストを作れるか検討するケースが増えています。

ー インタビューにご協力くださった皆さん、ありがとうございました!

最後に

今回は、和田卓人(t-wada)さんをお招きして、実際のCOMAPNY製品ソースコードを利用したレガシーコード改善ワークショップを実施いたしました!ワークショップの様子が伝わっていれば幸いです。

最後になりましたが、和田卓人さん、貴重な機会をいただき本当にありがとうございました。

ここまでお読みいただきありがとうございます。

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





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