コラム

画像

テスト自動化

新しい機能、新しいサービスを高速で、かつ継続的に産み出す現在のソフトウェア開発においてテスト自動化は欠かせない要素となっています。 本コラムでは、実際のテスト自動化経験を踏まえてテスト自動化を成功につなげる要素を解説します。

導入分析

まず事前に作戦を立てることは何事においても重要です。
テスト自動化では次の2点の分析を行い、何をどう効率化したいのか(求める結果)を具体的にすることが重要となります。

  1. テストを自動化する目的と対象となるテスト項目
  2. テストを自動化した場合に想定される費用対効果

次節の「要求」にどの程度対応するかにも左右されますが、自動化の対象となるテスト項目(一般的にはリグレッションテスト)を選定し、自動化の必要工数を見積りした上で何回テストを回せば費用対効果が表れるかを想定します。

テスト対象の内容やテスト項目数にもよりますが、一般的にはリグレッションテストを4、5回実行すると効果が出るケースが多くみられます。

成果物への要求

組織、チームのテスト自動化に対する要求は様々であり、以下のような例が考えられます。

  1. リファレンスの画像比較などでテストの結果判定を自動化したい
  2. 画像比較だけでなく、ログなどのテキスト比較でも結果を自動判定したい
  3. 万が一、自動テストの再生を失敗しても後続のテスト項目を続けて自動実行したい
  4. 自動化した一部の項目だけを抽出して自動実行したい
  5. エビデンスファイルのファイル名や格納先のフォルダ構成を指定したい
  6. テスト結果をサマリで確認したい
  7. 他の製品にも作成したスクリプトを流用できるような資産としたい
  8. ツール上で手早くテスト内容を編集したい
  9. テスト項目の上流文書とのトレーサビリティを取りたい
  10. 検出した不具合を不具合管理ツールに登録したい

このような要求に対し、コストを含めた実現性を考慮した上で成果物の内容を予め合意することが重要です。

ツール選定

要求の実現性、実装後の運用方法や予算を踏まえた上で、テスト自動化に取り入れるツールを決定します。
ツールを選定する際には、以下のような技術的要素も考慮する必要があります。

  1. テスト対象とツールの相性(動作速度、オブジェクトの認識率など)
  2. 自動化できる操作や付加機能(マウス操作の認識可否、画像認識時のマスク設定など)

次節の「実装」にも関連しますが、無償ツールは開発スキルが必要であることが多く、問題に直面した際に解決するための工数が必要となります。 しかし、ツールに対する初期費用やランニングコストがかからないことが最大のメリットになります。

有償ツールは高価な場合が多いですが、専用のGUIが用意されていて開発スキルがなくても実装できることが多く、オブジェクト認識での実装や、バージョンアップによる機能向上など使い勝手もよいです。 また、ツール利用に対するサポートも受けられるため、問題の調査にかかる時間が少なくて済みます。
多くの有償ツールには「体験版」が用意されており、購入前にテスト対象との相性も確認できます。

どちらにせよ「有償だから」「無償だから」という理由で単純に導入するツールを決定するのではなく、メンバーのスキル、テスト対象の今後の更新内容などを総合的に考慮して選択することが必要です。

また、要求を実現するために複数のツールを組み合わせて使用することも考えられますが、ツール同士の相性や、組み合わせることによる複雑性に対応する工数なども考慮が必要な場合があります。

実装

ツールや環境を構築した後にテスト自動化に移行しますが、既存のテストケースの内容や記載粒度によっては操作手順や期待値を明確化する必要があります。 その場合、手順や期待値を明確にした上で実装にとりかかります。

自動化実装を進めると大なり小なり問題が発生します。よくある問題を以下に記載します。

  1. 自動化したテストの再生速度が遅い
  2. 連続で操作する場合、前の操作の処理が完了しない状態で次の操作をしてしまう
  3. 長時間再生するとテスト対象が落ちる、リブートする
  4. 特定のオブジェクトを認識しない
  5. 再生するたびに動作結果に微妙な誤差が出るため、リファレンスとの一致判定ができない
  6. 特定の操作(ボタンの長押下など)が自動化できない

無償ツールを使用する場合は、実装担当者が調査することでこれらの問題を解決することになります。
対して有償ツールの場合はサポートを受けられることが多く、問い合わせで解決することもできます。

まとめ

ここまでテスト自動化について書いてきましたが、重要な点は以下になります。

  1. 効率化したい内容や削減する費用など、目的を具体的に設定する
  2. 結果の自動判定など、自動化に対する要求を洗い出しておく
  3. ツールは各種要素を考慮して総合的に選定する(無償だから安くできるとは限らない)

テスト自動化には、効率化されたことによる工数で他のテストの強化をしたり、テストの属人化の解消を可能にしたりと品質向上につながるメリットが多くみられます。
効率が良く、品質の高い検証によってより良い製品が市場に供給され、私たちの生活がより豊かになることを願っています。