自動テストの導入
はじめに
Webアプリケーションを自社で開発しBtoCでサービス展開しているお客様からのご依頼です。自動テストについての重要性は認識しつつ、機能改善の要望が非常に多く人手が足りないとう状況となっていました。そのためテストコードを書く余裕がなくリリース前は手動でテストを実施する都合、月に2回程度しかリリースできず利用者のご要望に応えるまでの時間がかかっているのが現状でした。
支援内容
弊社でテストコードを実装する支援をさせて頂きました。
テスト観点の洗い出し
最初に行ったのがテスト観点の洗い出しとなります。2つのアプローチで必要なテスト項目を洗い出していきました。
①ご依頼主のこれまでの経験(例えば、ある機能を実装したら想定していなかった箇所で不具合が出てしまった など)や要望(例えば、この機能は利用頻度が高いから重点的にテストを入れたい)を伺いつつテスト項目をピックアップ
②利用者マニュアル、コードを見て必要となるテスト項目をピックアップ
テストの実装方針検討
テスト項目の洗い出しが終わったら、次にテストコードの実装方針を検討していきました。
①単体テスト
網羅的にテストを行いたい(例えば、ユーザー登録画面で1つずつの入力項目に対して入力内容のチェックが正しくできているか?など)場合に関しては、主にJestとReact Testing Libraryを使ってテストを実施
②シナリオテスト
利用者目線でシステムが問題なく使えているかをチェックする(例えば、クリックをすると画面が遷移するか?問い合わせ画面でメール送信のボタンを押すとメールが送信されるか?など)場合に関しては、主にPlaywrightを使ってテストを実施(必要に応じてテスト用のバックエンド環境も準備)また、シナリオテストの大まかな傾向を見るためにレポーティングツールを導入しテストの成功率の推移を調べたり、問題のあるテストを抽出し何が原因かを表示させるなと使いやすさにも配慮しました。
実装優先順位決め
テストの観点とテストの実装方針がある程度まとまったところで実装の優先順位を決めていきます。
優先順位を決め終わったら実装に入っていきます。テストコード実装中は現場の方にレビューに入ってもらい、少しずつスキルトランスファーを行いながら進めていきます。最終ゴールとしては、ご依頼主様の方でテストコードのメンテナンスができるようになることなので弊社でできる限りのドキュメントも残しつつ支援を進めていきました。
運用フェーズ
自動テストが日々の業務の中で動くようになると仕様変更などでテストが失敗するケースが徐々に増えてきました。シナリオテストで動かすべきか、単体テストで動かすべきか、それぞれのテスト観点を考慮し実装の見直しを行い極力普段の開発業務に負担のかからない自動テストを運用の中で作り上げました。
ご依頼主のメリット
リリース頻度の向上
本番環境へのデプロイ回数が月2回からほぼ毎日に増加し機能改善のスピードが向上しました。
テスト実装の初期段階における工数削減
弊社にて実装させて頂くことで開発エンジニアの方は従来通り機能改善に注力できました。
テストを書く文化の醸成
テスト観点の策定や実装方針などこれまでになかったテストに関する方針をご依頼主様と一緒に取り決めることで、開発エンジニアの方が機能改善と一緒にテストを書く環境が整いました。
日々の開発で若干の工数の上乗せが発生しましたが、リリース前に多くの不具合を潰せるようになりこれまでよりシステムの品質が向上しました。
スケジュール・支援期間
最初の1ヶ月でシステム要件の理解、テスト観点の洗い出し、テストの実装方針の策定及びご依頼主様との調整。
その後、半年程度をかけて自動テストの実装を行いました。ある程度、自動テストが整った段階で日々の開発業務に自動テストを組み込みました。
今回のご依頼主様からは別プロジェクトでの開発依頼も頂いておりましたので、そちらを対応しつつ、自動テストの稼働状況の監視を半年程度行いました。
関連技術ブログ
自動テストに関する技術ブログをいくつか書いています。併せてご参考ください。
目次
お問い合わせ