2012-01-25 16 views
10

私はPythonでOpenGL 2Dライブラリを作成しています。すべてがうまくいっており、コードベースは着実に成長しています。グラフィックライブラリのテストを書くにはどうすればいいですか?

ここで単体テストを書いて、他の人を修正したり新機能を作ったりしている間に、誤って新しいバグを取り込むことはありません。しかし、私はそれらがどのようにグラフィックスライブラリで動作するか分かりません。

私が考えるいくつかの事:

  • 参照スクリーンショットを作成し、テスト
  • に自動生成されたスクリーンショットでそれらを比較し、ロギング・ステートメントとOpenGLの呼び出しを置き換えると、ログに

を比較しかし、両方がいるようです悪いアイデア。グラフィックライブラリをテストする一般的な方法は何ですか?

+0

あなたが提案した2つの事柄は、本当の結果があると確信している限り、私には分かりやすいものです。 – lhf

答えて

3

Iは、コンポーネントレベルのテストのために過去に使用したアプローチがある:

  • いくつかの異なる色で、均一に着色された背景を使用。
  • テストでは、色の付いた四角形をグラフィカルオブジェクトとして使用します(色は少し異なります)。
  • 画像内の投影位置を自分で計算できる既知の場所に四角形を配置します。
  • 各ピクセルの各チャネルの予想される強度(背景、前景または混合)を計算します。
  • テストシナリオで非円形の位置が得られる場合は、正確でない比較(相関など)を使用してください。
  • 期待される結果画像を作成するために計算を使用してください。
  • 出力画像と期待結果画像を比較します。
  • ぼかし効果がある場合は、離散強度の代わりに強度の合計を比較します。

グラハムは述べたように、内部ユニットはグラフィックス呼び出しがなくてもユニットテスト可能です。

+0

これは受け入れテストであり、重要ですが、Graham Reedsが別の答えで述べたように、ユニットテストも必要になります。 –

+0

これらは受け入れテストではなく、これらのテストは単一コンポーネントをテストし、テスト対象ユニットの定義に応じて統合テストか単体テストのいずれかです。グラフィックアルゴリズムがシェーダまたはOPENGL/DirectXコードで記述されている場合、コードはグラフィックスレンダリングプロセスとは別にテスト可能であるとは限りません。これが、これを「ユニット」テストする唯一の方法です。 –

+0

@RadomirDopieralski受け入れテストでは、**正確な位置**、**ホワイトボックス**フロー、**ピクセルフォーマットのすべてのタイプ**、フィルター効果の影響を考慮しないことを確認することになりますシステムテストには既にグラフィックスエンジンの上にアプリケーションが含まれています。 –

1

さらに分解してください。

グラフィックを作成する呼び出しは、アルゴリズムに依存します - アルゴリズムをテストします。

+0

実際、私の場合は半分しか真実ではありません。ほぼすべての基本的な機能を持っているにもかかわらず、私は1つのアルゴリズム(バッチ処理のためにスプライトをソートする)とシングルトンパターンのようなものを使用します。ほとんどの他のコードは、OpenGL呼び出しを簡単に行うことができます。 – orlp

+0

シングルトンは悪です!私は中古の約12ダースの契約をしました。悪夢をテストしました。 C++では、テストを可能にするために、擬似または実際のロガーなどを引き出すためのテンプレート関数をいくつか作成しました。あなたがPythonでそれを行うことができればDunno。 –

関連する問題