自動テストを健全に保つための２つの取り組み

この記事は ソフトウェアテストの小ネタ Advent Calendar 2023 22日目 の記事です。

https://qiita.com/advent-calendar/2023/software-testing-koneta?source=post_page-----970e921ef933--------------------------------

# はじめに
MagicPodに[プロジェクトのヘルススコアを表示してくれる機能](https://support.magic-pod.com/hc/ja/articles/24604617254937-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B31-0-0-2023-10-30-)がリリースされていたのはご存じでしょうか。ヘルススコアの数値は毎週更新され、テストが健全に保たれているかの指標を知ることができます。また、ヘルススコアが低い場合はMagicPodがどうするべきかも提示してくれます。

この機能がリリースされてから私たちのチームではスコアを毎週チェックしていますが、平均９０以上と比較的良い数値を継続できていました。

**ヘルススコア推移**
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961969/bddf2b80-f945-4af9-4a98-241c5b9e2af4.png">

健全なテストを保つには「基本設計を工夫する」「毎日実行する」「プロセスを整備する」など思いつきますが、先ずは継続的にテストの運用ができる基盤を整えることが大切だと思います。

そこで本記事では、安定したテスト運用に繋がったチームの取り組みを２つ挙げてみました。



## 前提：チームの自動テスト運用状況

自動テストを導入して２年が経過しました。テストは毎日実行しており、月の総テスト件数は１万を超えています。

隔週で行われるリリースの度に実施していた手動の回帰テストは、自動テスト導入により結果を確認するだけでよくなり、簡単なテストであれば修正確認も自動テストを回して結果を確認しています。

ただ、自動テストにはこのようにポジティブな面がある一方で、メンテナンスコストが掛かり続けてしまうという面もありました。

### 問題点
失敗したテストがあればアプリの不具合によるものなのか、一時的なものか、環境要因なのか、またはテストケースの問題なのかなどを切り分けてそれぞれ対処する必要があります。

大抵はアプリの不具合「以外」によるものが多かったので、エラーが続くとどうせ機能ではなく他の問題なんだろうと誤認し、定常作業に追われて結果を確認するのも後回しになってしまっていました。

せっかく作った**自動テストの結果を信頼していない**、この状況を改善しなければならないと思いました。

## 健全なテストに繋がった取り組み

状況を改善するために、先ずは日々の作業と並行して自動テストの運用を取り組める体制を整えなければいけないと考えました。そのため、自動化対応が可能なメンバーの確保や能力向上、そして継続してチームで自動テストに向き合う習慣をつくることにしました。

### １. 自動化対応が可能なメンバーの確保

対応可能な人が限られているとどうしても属人化が進んでしまい、その人が自動化の作業に入れない日が続いてしまうと自動テストの運用保守が完全に停止してしまいます。これは健全な運用状態とは言えません。

そこで前回書いたこちらの記事の取り組みを行い、自動化に対応できるメンバーを増やしていきました。

https://qiita.com/kinniku_88/items/baa335a95b0415c73436

自動化対応を可能なメンバーの増やしていくことにより、特定のメンバーが作業に入れなくても変わりの誰かが担当できる状態となり、作業が完全に止まってしまうことがなくなりました。


### ２. 自動テストに向き合う習慣をつくる

テストがエラーを吐いていても、今の作業が落ち着いたら〜、と優先度を下げて対応してしまうこということは割とよくある光景かと思います。そのため、意識的に優先度を上げてメンテナンス作業なども日々の定常業務の中に組み込むことにしました。

※ヘルススコア機能のリリース前と後で取り組み方に違いがあるので分けて記載します。

-----

**ヘルススコア機能リリース前**
- １日１時間は自動化対応に時間を割いて作業を実施する

毎日自動テストの結果は確認するようにして、連日失敗しているケースから優先してエラー原因の特定や修正対応をしていきました。
ただ、プロジェクトの都合上どうしても時間を割けないこともあり、対応頻度は上がり結果も出てはいるものの、習慣の定着というよりは惰性で作業していることも多かったです。


**ヘルススコア機能リリース後**
- ヘルススコアの集計期間に合わせて作業を行う

スコアは週毎の更新なので、私たちもこのサイクルに合わせて無理なく作業を行うようにしてみました。
現在、週の初めと終わりに30分の小さなミーティングを設定して、無理のない範囲で作業目標を立てる→対応→振り返りというサイクルを回しています。

- 月曜
    - スコアの確認
    - 改善ポイントの確認
    - 定常業務のボリュームを確認と自動化対応に割ける時間の見積もり
    - 自動化対応の目標を決める
    - テストケースのメンテナンスを行う場合、修正方針の認識を合わせる

　　※作業目標は自動化対応に割ける時間の見積もりによって内容を調整します

- 金曜
    - 対応内容共有
    - 振り返り

毎日対応できないことによる罪悪感が薄れて、それでいて地道にテストケースの見直しが出来ているので小さな達成感の積み重ねを味わうことができています。

-----

そして、ヘルススコアの機能がリリースされてからは、安定して成功していないテストケースを集計して一覧化してくれるようになりました！
これまで手動で失敗したテストを計測していましたが、自動で行なってくれるのでかなり手間が省けました。

大体上位５ケースを目安に対応しています。（失敗したケースがあったとしても一括実行の全体の成功率が高いとこのケース一覧は表示されなくなってしまうので、表示されていた時の結果を参考に修正を行うこともあります。）

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961969/06ab6b48-9b84-4d0b-7518-5aee755bb249.png">

こうした取り組みを継続していくうちに、だんだんとテストは安定した結果を得られるようになりました。

ただ、スコアはあくまでひとつの指標でしかないので、スコアが良いから何もしないでいいというわけではなく、健全性を保ちつつ今後も自動化対応を進めていこうと思います。

健全さが可視化されるだけでなく、自分たちの作業ルーティンにも変化のきっかけにもなったヘルススコア機能には感謝感激です！


# 最後に
継続した取り組みの結果が実際にヘルススコアとして可視化されたことは、私たちにとって自信にも繋がりましたし、今後も取り組みを続けていくモチベーションにもなりました。

安定したテストのために基本設計を工夫するなどそういった活動も勿論必要ありますが、結局はその対応のための時間を確保すること、そして**習慣を定着**させていくことがヘルシーな運用に繋がっていくと身をもって体験しました。

今後もMagicPodの機能をうまく活用しながら自動テストの運用を続けていきます！