(2023/02/07追記)
Qiita Advent Calendar 2022 プレゼントカレンダー 結果発表!にて記事投稿ありがとう 参加賞
に当たりました。
バルテス株式会社様本当にありがとうございます!
自動テスト導入の経緯
これは前社で開発に携わっていたプロジェクトに自動テストを導入し、広げることができなかった経緯をまとめたものです。
このプロジェクトではRailsで作られた動画配信プラットフォームを開発、運営していました。動画を見た視聴者数やPRページといった機能を持っており複雑なシステムが出来上がっていました。機能開発、バグ修正を隔週でリリースしておりとても忙しいプロジェクトでした。
複雑なシステムゆえにバグを含むコードが増えており、バグ修正の修正を緊急リリースするといった危ない橋を渡る時もありました。
ある時期から手動テスト
を徹底的にしようとPLから号令がかかったので、更新が少なくなり開発が停滞していきました。これを打破するために自動テストを導入することになりました。
私は自動テストを別プロジェクトで自動テストを導入した経験を買われこのプロジェクトでも導入することになりました。
自動テストの導入
RubyのテストフレームワークといえばRSpecとminitestがあります。テスト結果の見やすさ、テストの階層化が容易な点からRSpecを選択しました。
x.to eq y
という直感的に理解しやすいアサーションの書き方も好きな点です。
導入自体はGemからライブラリを追加し、テスト用DBとの接続、Fixtures、Specファイルを記述するだけだったのでスムーズでした。
この時プロジェクト内にいる開発者で自動テストの経験者は私だけだったのでサンプルで作成したSpecファイルに丁寧にコメントを書きファイルを見れば書けるようにし、導入準備は万全でした。
それからどうなった?
テスト導入後PRを確認するとテストコードが追加されてないリクエストが出ていました。当然ですが、作業者にコード追加の依頼を出しました。が、PLから重要な修正なのでリリースを急ぐためテストコードは省略となりそのままマージされてしまいました…
そのような状態が続き、アプリのコード量は増えるがテストコードは増えない状況が常態化してしまいました。
私自身は細々とテストを書いていましたが、残念ながらプロジェクトを離脱することになり自動テストを普及させるミッションは失敗してしまいました。
何が悪かったのか
プロジェクト離脱直前のミーティングでメンバーにテストを書かない理由を聞いてみると下記の点が上がりました。
- 時間がない
- 書き方がわからない
- 書く理由がわからない
時間がない
コロナの流行で動画配信プラットフォームの需要が増加し、開発が忙しくなったため、新しい知識を習得する時間がなったことが原因でした。
CEO、営業からの催促が凄かったのでしょうがない部分ではありました。
書き方がわからない
これは時間がないため知識習得期間が取れなかったためです。また、モノリシック構造になっていたため、ViewでModelを直接呼び出していたりと複雑な処理になっていたことも原因かなと思います。
Cookieに保存した値を頻繁に呼び出す構造になっていたため、事前処理の設定も手間がかかり大変だった思い出があります。
このプロジェクトのテストを初心者に書かすことはハードルが高ったように思いました。週1時間程度でいいので勉強会を開けばよかったと今更ながら思いました。
書く理由がわからない
これは単純にテストコードを書くことはソフトウェアの品質を上げることになり、結果的に開発期間が短くなる
ことを伝えきれなかったことが原因です。私のエバンジェリスト力不足が原因です。
まとめ
- テストコードは未来の自分のために積極的に書こう!
- できればプロジェクト立ち上げと当時に書くと導入コストが下がる
- TDDはイイゾ
拙文最後までお読みいただきありがとうございます。
気軽にいいね!、Twitterフォローをお願いします。