この記事は株式会社エス・エム・エス Advent Calendar 2023の13日目の記事です。
はじめに
介護事業者向け経営支援サービス「カイポケ」のQAを担当している中村です。2021年10月に入社して早2年、現在ではQA組織の運営や横断的に複数QAチームに関わりつつ、チームのサポートや改善活動の推進など様々なことを担当させてもらっています。
今回の記事では改善活動で実施した施策の一つである、『E2Eテスト自動化の導入』をテーマにどんなテストを自動化しているか?どんな運用をしているか?など、現状を整理する形でお話ししていきたいと思います。ここでお話しするのはあくまでQAエンジニアの取り組みの事例で、開発エンジニアが実施しているUT(ユニットテスト)などの自動テストは触れませんのでご了承ください。
テスト自動化のお話し
1. どんなツールを使っているのか?
弊社ではMagicPodというノーコードのテスト自動化ツールを使用しています。ツール選定の主な理由は以下の通りで、約2年ほど使い続けています。
- プログラミングスキルが不要で開発未経験でも導入が容易
- テストの実行回数に制限が無く費用を気にせず繰り返しのテストが可能
- ローカルPC上でテスト実行が出来るのでプロキシサーバーを介してWEBアクセスが可能
- SaaSサービスなので環境構築、保守の手間が不要
2. どんなテストを自動化しているのか?
担当している「カイポケ」では、主にWEBとネイティブアプリ(iPadOS)にサービスを展開しています。現状はWEBを対象にE2Eテストの自動化を進めていて、メンテナンスコストが掛からないように機能や画面に変更が入りにくい部分のリグレッションテスト(機能の追加や改修が入った際、既存機能に問題が起きていないかを確認するテスト)を対象としています。全機能を網羅するとテストケースが膨大になるのでハッピーパスなどの基本機能のテストに絞っていて、バグを見つけると言うよりはシステムが問題なく動作することの確認を目的としています。
3. どんな工夫をしたのか?
過去の経験から実装/メンテナンスコストの増加、属人化、テストの安定性といったところの課題を感じていたので、以下の取り組みをすることでよりスムーズに導入出来るように進めていきました。
テスト実装/メンテナンスコストの削減
MagicPodが提供している以下の機能を活用して実現しています。
共有ステップ(共通化)
- 複数のテストで使う処理は基本的に共通化
- 参考:共有ステップの活用
変数
- テストケースやテスト環境によって値が変わるデータやロケーターは変数を使用
- 参考:変数の活用
データ駆動テスト
- 計算結果を確認するようなテストでは、同じテストケースでデータパターン(入力値や期待値)を変えて繰り返し実行をしている
- 参考:データパターン(データ駆動テスト)の活用
属人化対策
実装者によってテストの書き方が大きく変わらないことや導入がスムーズに行えることを目的とした、実装方針や最低限のルールを記載した手順書を用意しました。以下は手順書の記載例となります。
- 共通化、変数の使いどころ
- テストの組み込み方法
- コメントの使い方
- 命名規則(テストケース、共有ステップ、ロケーター)
- ロケーターの指定方法
テスト実行の安定化
テストの独立性
基本的に他のテストの影響を受けてテストが失敗することを防止するために、テストケース同士の依存関係は無くして、各テストケースが独立して動くように作成しています。また、テストを再実行した際にクリーンな状態でテストが行えるように後処理(テスト中に登録したデータの削除など)を実施しています。
リトライ
不具合ではなくタイミングや不確定要素によるテストの失敗は自動テストのあるあるなのですが、都度テストを再実行するのではなくMagicPodが提供しているリトライ機能を使って自動で再実行する仕組みを取り入れています。途中でテストが失敗した場合に元の状態からテストが出来るように初期化(テスト中に登録したデータの削除など)も実施しています。
実行環境を仮想環境に移行
主にローカルPC上でテスト実行をしているのですが、ブラウザの操作をツールに奪われてしまうので作業が中断してしまう、リモートワーク主体の中でも安定したネットワーク接続が必要(瞬断でもテストが止まってしまう恐れあり)といった課題があり、それに対応するためにテスト実行環境を仮想環境に移行し安定して動作するようにしました。
4. どんな運用をしているのか?
現状はシステムに改修が入った場合やミドルウェアのバージョンアップが入った場合などに自動テストを実行するようになってきて、活用する機会がかなり増えています。簡易的な動作確認であっても、今までは時間をかけて手動で実施していた or 時間の都合により割愛せざるを得なかったのですが、素早く人の手を介さずに毎回テスト出来るようになったことで、より品質に自信を持って高速リリースが出来る状態となったのは大きな利点だと考えています。
5. 現状の課題は?
上述したとおり導入は進められているのですが、課題もまだ残っていて現在進行形で進めている点や今後実施予定としている点をいくつか紹介していきます。
他チームへの拡張
現状は特定のチームでのみ導入が進んでいる状況です。人的リソースやスキル的な課題もあって十分に導入が進められていないのですが、リグレッションテストの使用頻度はどのチームでも高いので少しずつ範囲を広げていきたいという思いがあります。
定期実行の導入
定期実行自体はMagicPodの機能として提供されているのですが、「クラウド」実行のみ使用が可能となっています。前述した通り、弊社は「ローカルPC」での実行をメインとしているので、定期実行を実現するには自前で仕組みを作る必要があるのですが、まだ手を掛けられていないという状況です。
テストの高速化
テストケースが増えたり長くなると、相対的にテストの実行時間が増えてくるといった課題が出てきています。テストケースの見直しや並列実行の仕組み化などやれることがありそうなのですが、こちらもまだ手を掛けられていません。
さいごに
前述の課題対策に加え、開発チームとの協業/分担なども考慮したテスト自動化の最適化も必要になりますし、並行して始まっているリニューアルプロジェクトへの本格導入とまだまだ先は長いです。テスト自動化に関わる人手も今以上に必要になってくることを想定していますので、一緒に働く仲間は絶賛募集中となっています!
最近QA組織の行動指針なるものを構築したのですが、テスト自動化もその中の取り組みの一つとなっています。そちらのブログも合わせて確認していただけると、QA組織の目指しているものがより見えてくるのではないかと思います。
少しでも興味を持たれた方がいたらカジュアル面談や選考へのご応募をよろしくお願いいたします。