Facebook x

ジャンル

テスト自動化は運用が9割 2024.08.26
x hatenabookmark

テスト自動化は運用が9割 ~テスト実行が不安定になる要因とそれを取り除く改善策~

執筆: 江村 禎昭

バルテス・ホールディングス株式会社 ソリューション事業推進部 首席研究員

テスト自動化は運用が9割 ~テスト実行が不安定になる要因とそれを取り除く改善策~

テスト自動化が運用フェーズに入ってある程度時間が経つと、テスト自動化の環境や結果が不安定になるという経験があるのではないでしょうか?

不安定になる事象として以下のようなことが挙げられます。

  • プロダクトのソースコードなどは変更を加えていない。しかし、なぜかテストの結果が成功と失敗を交互に繰り返す。
  • テストはずっと成功を続けている。しかし、なぜかテスト実行時間が徐々に長くなってきて、テスト全体の時間がかかるようになってきている。
  • テスト実行時に、作成したはずのテストデータがなくなっており、そのステップでテスト失敗してしまう。
  • パソコンやスマートフォンの不意なポップアップなどでテストが妨害されてしまう。

このような不安定な状態が恒常的に発生すると、運用する人にとっては、たまったものではありません。プロダクトの品質は問題が起きていないのに、運用者にとってつまらない調査工数ばかりが増えてしまいます。

そこで、第3回である今回は、テスト実行が不安定になる事例とそれを取り除く運用について解説します。

テスト自動化は運用が9割 の連載一覧
第3回:テスト実行が不安定になる要因とそれを取り除く改善策
第4回:テスト自動化の成果を関係者に可視化する運用に関する内容。(執筆中)
第5回:第1~4回を除いたテスト自動化全般的な運用に関する内容。(執筆中)

もくじ
  1. ソースコードを変更していないのにテスト結果が不安定(=Flaky Test)
    1. タイミング問題
    2. システム負荷・ネットワーク問題
    3. テストケースの依存関係
    4. 複数のテストケース実行の衝突
    5. ランダム性のある要素
  2. テストの実行時間が長くなる不安定
    1. プロダクト側のパフォーマンスの問題
    2. テスト自動化の問題
  3. テストデータ起因の不安定
  4. テスト環境起因の不安定
  5. まとめ

1.ソースコードを変更していないのにテスト結果が不安定(=Flaky Test)

プロダクトのソースコードを変更していません。テスト自動化を何回か実行すると、成功と失敗の結果を出すことがあります。

これをテスト結果が不安定といいます。(Flaky Test ※)

※ 出典:「Advances in Continuous Integration Testing at Google」JaSSTソフトウェアテストシンポジウム-JaSST'18 Tokyo-セッション概要

下図に3種類のテストケースを8回実行したものになります。

テストケース実行.png

テストケースAはすべて成功しています。問題ありません。

テストケースCは3回目以降すべて失敗しています。2回目と3回目の間に不具合が混入したのでしょう。プロダクトに問題はありますが、テスト自動化のスクリプトとしては安定しています。

テストケースBは成功と失敗が交互に発生しています。これはなんらかの不安定な状態で、正常にテストできないことが起きていると考えられます。これをFlaky Test(フレーキーテスト)といいます。

このFlaky Testは、テストを実行するたびに結果が変わるため、プロダクトに不具合があるのか判断できません。またこの原因特定するための調査工数もかかってしまいます。

そのため、このようなFlaky Testを減らすことが、テスト自動化の運用改善につながります。

Flaky Testのいくつかの原因と改善策を順番に解説します。

1-1 タイミング問題

まず考えられる原因として、タイミングの問題があります。例えば画面表示後、JavaScriptでAPIをCALLしてデータを取得し、一部のUIを非同期で作成したとします。

この非同期の時間が実行毎にまちまちで、場合によって数秒待たされることで、テスト自動化は要素がないと判断して失敗してしまう可能性があります。

数秒待たされる例として、検索結果のレイアウトは表示されているが、検索結果の詳細が読み込み中で表示されていない状態の場合です。

サイト読み込み.png

また、各種ボタンなどは表示されているが、Loadingのモーダルがoverlapされていて、どのボタンもクリックできないケースもあります。モーダルが消えるまで処理を進めることができません。

サイト読み込み_2.png

このような、タイミングの問題が、Flaky Testを引き起こします。

タイミングの問題に対して、簡単な改善方法はwaitをいれることです。

ただ、waitをどれだけ入れればいいのか不明確なまま、長くwaitをいれると、その分テスト自動化の実行時間が長くなってしまうため、望ましくありません。

上記の例では、Loadingの表示が消えるまで待つ処理を入れれば、改善します。このように、wait以外で改善する方法を探すのが良いですが、どうしても難しい場合はwaitも選択肢ではあります。

テスト自動化は運用が9割
x hatenabookmark

執筆: 江村 禎昭

バルテス・ホールディングス株式会社 ソリューション事業推進部 首席研究員

石川県金沢市生まれ。趣味は富士山登山、ほぼフルマラソン。20年以上インターネットサービス会社に勤め、アプリケーションエンジニア、プロダクトマネージャ、テストエンジニアと様々なロールを担当してきた。バルテス・ホールディングスに入社後、テスト自動化導入のコンサルティングや、テスト自動化ツールであるT-DASHの導入支援を担当する。Jasst Hokkaido, Tohoku, Tokyo 等で講演