“Flaky”な自動テストを発見して修正するための6つの方法

テストの自動化は、継続的なテスト、DevOps、CI/CDパイプラインに不可欠です。
開発チームは、テストを自動実行するように設定し、開発プロセスの初期段階で不具合を発見できるようにします。組織は、長期的に時間、コスト、労力を節約することを期待して、自動化に莫大な投資を行います。

最初は、開発チームはテストを自動化することを楽しみにしていますが、テストスイートが大きくなるにつれ、Flakyなテスト (テスト結果が安定しないテスト) についての問題に気付き始め、そのメンテナンスに多くの時間を費やさなければならなくなります。その結果、自動化は優先度の低い作業となり、テストは再び手動に戻ってしまうのです。

これがほとんどの企業の現実ですが変化は可能であり、このようになる必要はありません。
今回は、不安定なテストが負担になる前に、それを分離して修正するための6つのステップを紹介します。

1. 小さく始める

テスト自動化のベストプラクティスに従ってください。各テストは小さく、1つの特定の機能をテストするという単一の目的を持つべきです。お互いに依存したテストを作成しないようにします。これにより、テストが失敗した原因を、アプリケーションコードを調べることなく正確に知ることができます。

目的は、任意のテストグループを選択し、任意の順序で実行できることです。それができない場合は、テストを分割することを検討します。

2. 定期的なテストの実施

テストを作成したら、それを定期的に、できれば毎日、少なくとも毎週実行します。また、新しいコードがブランチにチェックインしたときに、テストが自動的に起動されるようにします。

同じテストを何度も実行すれば、そのテストに関する多くの情報を得ることができます。
テストの開始から終了までの平均時間、テストに合格した回数、実際にテストしている機能、テストがいつどのように起動されるかなど、有用な情報を得ることができます。

3. 不安定なテストを特定する

テストを実行した回数に基づいて、特定のテストが不安定であるかどうかを把握します。
テストは、ページロード時間、アサーション、不良データ、環境の問題、同期の問題など、複数の理由で失敗する可能性があります。

同じテストが断続的に通過したり失敗したりする理由を分析します。
いったい何が起こっているために、テストが特定の動作をしているのでしょうか?
どのようなタイプの失敗が繰り返し発生していますか?
パターンが見えてきましたか?

また、エラーログをチェックして、失敗を理解することもできます。

4. 不安定なテストを分離する

失敗したテストの分析が完了したら、安定したテストの中から不安定なテストを分離します。
特定のテストが断続的に失敗したからといって、 他の安定しているテストを実行してはいけないということではありませんし、一連のテストを実行するたびに失敗したテストレポートを受け取るという意味ではありません。

開発メンバーがその結果を真剣に受け止め、自動化が価値を高めていることを信頼するために、テストをできるだけ「グリーン」に保つことが重要です。そのためにも、断続的な失敗に気付き始めたら、すぐに不安定なテストを他のテストから分離してください。

5. 不安定なテストを1つずつ修正する

テスト担当者が陥りがちなミスは、効率化のために多くの不安定なテストを取り出し、それらを一度に修正して実行しようとすることです。これでは、不具合の根本的な原因を突き止め、恒久的な修正をおこなうことができないため、かえって時間がかかってしまいます。

不安定なテストには1つずつ取り組んでください。その際、そのテストが他のテストに依存していないかどうかをチェックします。コードにコメントを付けたり、必要に応じてprintやwait文を追加したり、ブレークポイントを追加したり、ログを常に監視したりして、問題の根本原因をデバッグします。

6. 安定したテストスイートにテストを戻す

不安定なテストを修正したら、それを何度も実行して合格していることを確認します。
安定して実行できることを確認したら、修正したテストを安定したテストスイートに戻します。
安定したテストスイートを何度も再実行し、予期せぬ結果が出ないことを確認します。

上記のアプローチに従うことで、安定性を確保しながら自動テスト・スイートを拡張することができます。

作者について:

Raj Subrameyerは、国際的な基調講演者、ライター、およびキャリアコーチであり、技術的なバックグラウンドを豊富に持っています。 彼のBlog(rajsubra.com/blog/)では、読者の生活に役立ち、インスピレーションを与えるニュース、リソースを投稿しています。

(この記事は、開発元 Ranorex 社 Blog 「6 Steps to Find and Fix Flaky Automated Tests」2021年5月5日の翻訳記事です。)