ROBOT PAYMENT TECH-BLOG

株式会社ROBOT PAYMENTのテックブログです

請求管理ロボにおけるテストコード記述文化定着までの取り組み

こんにちは。エンジニアリングマネージャーの白坂です。最近は健康を意識して体幹トレーニングにハマっているのですが、目下バランスボールの上でスクワットをするのを目標に鍛えています。 さて、本投稿ではテストコードのないコードベースにユニットテストを導入し、ユニットテストを書く文化が定着するまでに行った取り組みを紹介します。

「請求管理ロボ」の主たるコードベースはファーストコミットから5年以上の期間テストコードを書かずに開発をしておりました。しかしコードベースの規模や複雑性もあがってきたことから、目下の課題として実装に対してマニュアルテストの作業量の増大や影響範囲の既存のコードに手を入れる不安と向き合っていました。そこで解決策の一つとしてテストコードを書く文化が定着した開発組織とすることを目指しました。

本記事では主な取り組みである以下の3つを、段階を追って紹介します。

  1. テストコードをアウトソース
  2. ケーススタディの作成
  3. カバレッジの可視化

1. テストコードをアウトソース

テストコードを書く方針を決めたとき、ユニットテスト未経験のメンバーや過去のプロジェクトで失敗した経験を持つメンバーが多くを占めていました。そこで、テストコードによる恩恵を感じられる状態とすること、つまりテストが書かれていることで既存コードを安心して触れるようになることを目的に、まずはアウトソースをしてテストカバレッジを上げる取り組みを実施しました。 結果としてこの取組は大成功にはなりませんでした。継続してテストケースを増やすことを前提としたコードになっておらず、開発に伴うテストケースの追加コストが上がってしまいました。アウトソースではテストカバレッジを目標まで引き上げることをゴールとしており、その後のメンテナンス性について意識する必要がないプロジェクトであったことが原因だと考えています。 一例として、テストケースを追加すると後続のテストケースが失敗するといった事象がおきました。ご想像の通りsetUp()やtearDown()などのフィクスチャでDBの初期化/後始末を行っていなかったため、テストケースを追加すると後続のテストケースでは前提となるデータセットが変わるためテストが通らないということがおきていました。 このままでは、テストケースに手を加えない限りは信頼できるものの、テストケースを追加する難易度が高くその結果も信頼ができないということで、テストケースの追加コストを下げる仕組みづくりに取り組みました。

2. ケーススタディの作成

テストケースの追加コストを下げる取り組みとして、よくあるパターン毎に既存のテストケースに影響を与えないテストケースを書き、ケーススタディとしてREADMEから辿る導線を作成しました。また、このケーススタディを啓蒙することがきっかけになり徐々にではあるものの開発メンバーがテストケースを記述することに慣れていきました。また、現在では新メンバーのオンボーディング資料としても活躍しています。

3. カバレッジの可視化

最後に、テストコードを書くことを当たり前の文化として定着させるために、常にテストカバレッジが身近に感じられるよう当社でメトリクスのダッシュボードを作成しているRedashで日次のカバレッジレート推移が閲覧できる仕組みを作りました。

行カバレッジ
詳細は割愛しますが、以下のような仕組みで構築しています。
1. 日次でAWS Codebuildでコードカバレッジを計測し結果をjson形式でS3に保存
2. AWS Glueを使用してデータカタログを作成
3. RedashでデータソースAthenaを選択しデータカタログからカバレッジを可視化

最後に

上記の3つの施策がなければ定着はしていなかったとは思うものの、やはり重要だったのはテストケースを必ず書くことを根気強く啓蒙し続けたことのように思えます。今回はブログということで簡潔にまとめていますが実際は色々と紆余曲折を経ています。少しでも本取り組みや当社に興味をもっていただけましたら、カジュアル面談を行っていますのでぜひお問い合わせください!

We are hiring!!

ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!

speakerdeck.com
www.robotpayment.co.jp


We are hiring!!

ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!

speakerdeck.com
www.robotpayment.co.jp
🎉twitter採用担当アカウント開設!🎉どんどん情報発信していきます!!