こちらの記事はUnderstanding Different Image Comparison Algorithmsの抄訳です。
GUIテストケースをSquishを使用して作成するとき、アプリケーションの中の図や画像が正しく表示されているかどうかを検証することが必要なことがあります。Squishのスクリーンショット検証機能では、実際の画像が期待通りに表示されているかどうかを判断するために、異なる比較アルゴリズムを使用することが可能です。この記事では、各アルゴリズムの長所と短所を見ていきながら、画像の特定の部分に焦点を当てた比較を行う方法として、画像マスクの使用について説明します。
このアルゴリズムは、テスト中に撮影されたスクリーンショットを期待値のものと比較し、それらが同じ寸法であると仮定し、2つの画像をピクセルごとに比較します。このモードは多くの要因(オペレーティングシステム、GPUとドライバ、...)に敏感で、テストが全く同じマシンで全く同じ構成で行われた場合に最も効果的に機能します。
メリット:
デメリット:
ファジーピクセル比較は、スクリーンショットの一定の割合が異なっていてもそれを許容する点で厳密比較のアルゴリズムとは異なりますが、期待値と実測値のスクリーンショットが同じ寸法であることを仮定していることは同じです。これは、変更が生じやすいマシン上でテストが行われる場合(例えば、グラフィックカードのドライバーやオペレーティングシステムの更新など)を考慮したものです。
メリット:
デメリット:
ヒストグラム比較は、カラープロファイルを比較することを目的としており、ある程度の差異も許容されます。期待値と実測値の両方が、その寸法に対して同じ色のピクセル数を持っているかどうかがチェックされます。つまり、このモードは、例えば異なる解像度でテストを行う場合のように、異なる寸法の2つの画像間の比較を可能にします。
メリット:
デメリット:
この比較アルゴリズムは、期待値と実測値のスクリーンショットにどの程度の相関性があるかを検証します。このため、クロスプラットフォーム テストに適しています。異なるプラットフォームでは、色値や解像度などの多くの関連プロパティが異なっている場合があり、そういったケースでも画像比較が成功すると考えられるほど十分に類似していれば、パスとすることができるためです。
メリット:
デメリット:
スクリーンショットの検証では、比較の際に画像の特定の領域を含む(または除外する)画像マスクを適用することで、さらに細かい設定を行うことができます。
画像マスクを使用する一般的な理由は、例を使って説明するのが一番わかりやすいでしょう。3Dシーンを表示するGUIコントロールのスクリーンショット検証を考えてみましょう。シーンにはシンプルな青いボールが表示され、GUIコントロールの隅にはボールの位置に関するいくつかの情報(例えば、X、Y、Z座標)と、カメラがボールを見る角度が表示されています。シーンが正しく表示されていることを確認する場合、ボールのレンダリングだけを確認し、表示されているテキストを除外することが望ましい場合があります。これにより、例えばシステムフォントのわずかな変更によって画像検証が失敗するのを防ぐことができます。
これを解決するために、画像に「マスク」を定義することができます。マスクは、画像のどの部分を比較するか、あるいは無視するかを定義します。この機能を使用すれば、検証の対象を画像の特定の部分にのみ絞り込むことができます。
以下は、ポジティブマスクを使用して、アドレス帳アプリケーションのテーブルコントロールだけをテストした例です。赤い部分は、スクリーンショットの検証に含まれない領域を示しています。
以下は、アドレス帳ウィンドウの下部にあるステータスバーコントロールを除外するためにネガティブマスクを使用した例です(青い部分)。
詳しくは、Squishのマニュアル、特にスクリーンショットの検証用マスクの設定についてのセクションをご覧ください。
Squishを使用して堅牢なスクリーンショット検証を作成および構成する方法の詳細については、Squishマニュアルの「スクリーンショット検証を行う方法」の章をご参照ください。
以上が、記事の内容となります。
SquishをはじめとするQtのQA(品質保証)ツールにご興味のおありの方は、Qt JapanのEメールアドレス:japan@qt.ioまでお気軽にご連絡ください。
概要のご説明から詳細な技術的相談、また無料のツールトライアルのご案内もいたしております。