FineArt News

ソフトウェアテストにおける自動化テストは、独立した他のソフトウェアを使用してテストを自動実行して、実際の結果と期待される結果を比較してテストを生成するプロセスを指します。テストプロセスが確定すれば、自動化テストは繰り返しが必要なテスト作業を自動的に実行するだけでなく、手動テストでは達成できないテストを実行することも可能です。継続的な更新とインテグレーション開発において自動化テストは不可欠な要素です。

上記の説明には、以下の3つのポイントがあります。

  1. 自動化テストツールとテスト対象のソフトウェアは異なるソフトウェア
  2. テストプロセスは先に確定する必要がある
  3. 自動化テストは繰り返し操作が必要な手動テストの代わりに実施できる

自動化テストシステムの選択方法

自動化テストツールは多数あり、すべての要件を満たすツールはほぼありません。一般的に、自動化テストシステムを選択する際には以下の事項を考慮します。

  1. テスト対象のプログラム形式:Webアプリ、Windowsアプリ、Androidアプリ
  2. テスト対象のプログラム対応プラットフォーム:Windows、Android、iOS、Linux、Azure
  3. 自動化テストの操作者:テスト担当者、プログラマー
  4. 自動化テストケースはどの条件で再作業が必要になるか:再作業が多いと効率が低くなるので自動化テストへの投資採算性を考慮する必要がある
  5. 1つの自動化テストケースを生成するのにどのくらい時間がかかるか(生産効率が悪くなりすぎないようにする)
  6. テスト対象のプログラムが多言語に対応しているかどうか。例:日本語、英語、中国語
  7. 製品バージョン管理と統合できるか。例:バージョン変更時、夜に自動でテストを実施する

自動化テストに適しているケース

自動化テストではテストマシンが十分にあれば大量の手動テストを置き換えることができるため、いくつかの状況に適しています。そのため多くの企業は、毎晩自動化テストを実施して翌日にはテスト結果を開発者に報告することが一般的です。開発者は前日のプログラム修正にデグレーションがないかを確認します。(デグレーション:以前のバージョンで正常な機能が新しいバージョンで不具合になること)

  1. 機能に対応するテストフローが確定している→ このフローを反復使用して機能が正しいかどうかを確認できます
  2. 複数人で同時に操作する必要がある負荷テスト→例えば1000人が同時にWebページにログインする必要がある場合

自動化テストに適していないケース

自動化テストに適していないケースもあります。最も一般的なのはテストフローが確定されていない場合です。例えば、新しい機能を開発した後、その機能をテストするフローがまだ完成していない場合、未完成のテストフローを自動化テストのケースに含めると、そのケースを何度も調整することがあります。自動化テストケースの再調整は不必要なリソース浪費になりやすいです。また、ランダムテスト(一般的にモンキーテストと呼ばれる)も、自動化テストに適していないことがあります。主な理由は、自動化テストシステムが人間のロジックを模倣できるほど賢くないため、テスト結果が不安定になる可能性があることです。

自動化テストの技術分類

異なる自動化テストツールでは異なる技術を使用する場合があり、それぞれに長所や短所があります。そして自動化テストツールにとって最も重要な技術は、どのようにテスト担当者を模擬して各操作ステップを正確に特定するかです。例えば、「エクスプローラーを使用して C:\ A.TXTをダブルクリックする」という単純な操作は、私たちにとってはマウスを使用して簡単に行えますが、自動化テストツールの場合はどのように実行するのでしょうか。

ステップ1:エクスプローラーのアイコンの位置を特定し、マウスをアイコンに移動してダブルクリックしてエクスプローラーを起動します。

ステップ2:エクスプローラーの左側の位置を特定し、例えば(Cドライブ)をクリックします。

ステップ3:エクスプローラーの右側のA.TXTの位置を特定し、ダブルクリックします。

上記の説明から、自動化テストで人間のマウスとキーボードの操作を模倣するにはまず位置を正確に特定する必要があると分かります。

  • 位置特定方法1: Microsoft UI Automation

Visual Studioで開発されたEXEプログラムであればMicrosoft UI Automationを使用できます。UI Automationは対応するオブジェクトモデルを提供しているので、UI Automation APIを介してEXEの全UIインターフェースにアクセスできます。例えばEXEに配置されたウィンドウ・リストボックス・コンボボックスなどの要素は設計時に処理していなくても、Visual Studioはこれらコンポーネントのメッセージを自動化テストシステムが認識できる形で保存して、UI Automation API経由で位置を特定できます。

  • 位置特定方法2: マウスとキーボードの記録と再生

この方法は最も簡単で、ユーザーのマウスやキーボードの操作を記録して再生するだけです。通常、自動化テストでは、この方法はできるだけ使用しないようにしています。OSの解像度やバージョンの変更、テスト対象のプログラム更新などがあるとUIの位置も変わることが多いので、その度にテストケースを再設計する必要があります。再設計の回数が多すぎると、手動テストよりコスト率が悪くなります。そうなると自動化テストを採用する動機がなくなります。

  • 位置特定方法3: OCRによる文字列の認識で位置を特定

この方法は、画面から文字列を認識してUIの文字列検索で位置を特定する方法です。(通常、UIデザインが変わっても文字列が変わることは少ないので、テストケースの再設計回数が減ります)OCRの精度が高ければ悪くない方法ですが、現在は英語以外はまだ認識精度に難がある状況です。

  • 位置特定方法4: 画像を使用した位置特定

一般的にはSikuli(SikuliX)を使用します。SikuliはGUIでの自動化操作とテストに使用できる可視化技術です。 Sikuliスクリプトは、このプロセスを実現するスクリプト言語の一種です。必要なグラフィカルユーザーインターフェース(GUI)コンポーネントを識別するためにスクリーンショットを使用し、Jythonを使用して操作アクションを実行して自動化操作(またはテスト)を実現します。簡単に言うと、Sikuliはスクリーンキャプチャを使用してPCを自動操作することができる便利なツールです。

自動化テストシステムを選択する際に考慮すべき条件と自動化テストの制限について説明しましたが、このように手動テストを自動テストに置き換えることができる場合とそうでない場合があります。また、自動化テストシステムで最も重要な技術はテスト対象PCのUI技術を定義して分析することです。これらの方法によって、ユーザの操作行動を模倣してテスト時間を短縮できます。