はじめに
自動テストがほとんど整備されていないRailsプロジェクト、かつテスト文化がなかったチームに、約1年ほどかけてテスト文化を根付かせたことについてお話したいと思います。
経緯
当プロジェクトは、当初はCIは整備されているものの、テストはわずかに書いてあるのみでメンテナンスされないまま放置されており、CI上でもテストが失敗していることを無視してリリースされてされていました。
ある時、大きめの不具合を起こしてしまい、再発防止を考える上でせっかくCIでテストが回るようになっているのであればということで、本格的にテストを書いていくことをチームで合意しました。
当初の方針
とはいえ、「テスト文化」自体がチームにほぼ根付いていない状態だったので、最初からカバレッジを「~~%にする」等の目標は立てませんでした。
また、テストが書かれていないコードにテストを追加していくことはとても骨が折れる作業です。工数もかかり短期間でカバレッジを上げていくのはあまり現実的ではありませんでした。
なのでカバレッジなど数字にこだわるよりも、とりあえずテストを書いてみようということを意識して、最低限のルールをゆるく立てて実行していく方針にしました。
ゆるーいルール
テストを書いてからコードを書いていく、いわゆるテスト駆動開発をルールにはしませんでした。
最初期に絶対守るべきルールとして定めたのは
『不具合が見つかった箇所については絶対に書く』ということのみです。
また、新規機能・改修した箇所については、合議制でチーム内で書くべきだよねってところを確認し実装していました。
テストを書き出してから
このように小さな一歩から初めたテストですが、徐々にプロジェクトにテストが実装されていき、おざなりにされていたCIも回るようになりました。
そんな中、いわゆるデグレをテストで防げたという出来事がありました。「
これがいわば成功体験となり、士気が上がりました。
このあたりで具体的に目標カバレッジを80%と定め、動いていくことに。
ルールの追加
ある程度テストを書くことに慣れてきたこともあり、ここでルールを1つ追加しました。
『Model,Controller,Service,Helperを触った際は、必ずテストを書く』というルールです。
もちろん既存のコードにはほとんどテストが書かれていない状態だったので、初期は開発工数が増大しましたが、各所に合意をとってやっていくことにしました。
カバレッジの向上
このルールはチームに定着し、1年ほどするとカバレッジが50%以上向上しました。
テストが充実していくにつれて、デグレ・不具合の事前検知ができるようになり、開発時の「安心感」も増していきました。
この頃になると「テストを書くことは当たり前」という意識がメンバーに定着しており、チーム内でテスト文化が形成できた状態になりました。
成功した要因
問題意識の共有
「より安定したシステムにしたい」という問題意識がチーム内で共有されていたことが成功した一つの要因だと思います。
チームメンバーも他のテストがない大規模PJの経験があったので、その同じ轍を踏みたくないという意識もあったかと。
出だしはゆるく
上述のように、最初期は「とりあえず書いてみよう」とゆるく始めたのがよかったのかなと思います。
ガチガチにルール化して始めようとするとどうしてもエネルギーが必要になってくると思います。
そうではなく、はじめの一歩は小さく始めたことが良かったのかと考えています。
新規プロジェクトだった
このプロジェクトは開始から1年程度だったので、テストを追加していくことは割と容易だったのかなと思います。
やはりコード規模が大きくなってくると、テストを実装していくのは厳しい道のりになっていくので、、
意識づけ
意識づけはかなり徹底しました。テストを書く作業に慣れてないうちはやはり億劫なものです。
コードレビューの際などに常に呼びかけることで意識づけを行い、徐々に文化を形成していけたかなと思います。
最後に
このような感じでチームにテスト文化を根付かせて参りました。
少しでも「うちでもテストを書いていきたい」と思っておられる方の参考になれば幸いです。