3

ずっと前に、Postscript ファイル イメージを生成するプログラムをテストする必要がありました。プログラムが正しい、期待される出力を生成しているかどうかを確認する簡単な方法の 1 つは、結果の md5 を実行して、事前にチェックした「既知の良好な」出力の md5 と比較することでした。

残念ながら、Postscript にはファイル内に現在の時刻が含まれています。もちろん、この時間はテストがいつ実行されるかによって異なるため、期待どおりの出力が得られたとしても、結果の md5 が変化します。修正として、sed で日付を削除しました。

これは素晴らしくシンプルなシナリオです。私たちはいつもそう幸運であるとは限りません。たとえば、私はライター プログラムをプログラミングしています。このプログラムは、多数の匿名ノードと uuid を含む大きなファット RDF ファイルを作成します。単純な md5 でプログラム全体の機能をチェックすることは基本的に不可能です。唯一の方法は、リーダーでファイルを読み取り、このリーダーを介して出力を検証することです。お気づきかもしれませんが、これはワームの新しい缶を開きます: 第一に、リーダーを作成する必要があります (これには時間がかかる場合があります)。第二に、リーダーが機能的に正しく、同時にライターと同期していると仮定します。リーダーとライターの両方が同期していても、想定が間違っている場合、リーダーは「問題ありません」と言うでしょうが、ファイル形式は実際には間違っています。

これは、ファイル形式の機能テストを実行する必要がある場合の一般的な問題であり、提供した入力によってファイル形式を完全に再現することはできません。この場合どう対処しますか?

4

2 に答える 2

1

ランダム性は常に同じ場所にありますか?つまり、ファイルの大部分は修正されていますが、常に変更される部分がいくつかありますか?その場合、いくつかの出力を取得し、プログラムによる差分を使用して非決定論的な部分を判別できる可能性があります。それらがわかったら、その情報を使用してマスクを導き出し、比較を行うことができます(md5または単純な比較)。ファイルを前処理して、非決定論的である部分を削除(または決定論的データで上書き)することを検討してください。

ファイル全体が非決定的である場合は、別の解決策を考え出す必要があります。非決定論的であるMPEG-2デコーダーのテストを行いました。その場合、PSNRを実行し、しきい値を超えると失敗する可能性があります。データによっては機能する場合と機能しない場合がありますが、同様のことが可能である可能性があります。

于 2009-12-12T09:33:04.247 に答える
1

過去に、サードパーティのアプリケーションを使用してそのような出力を検証しました (できれば、機械的に検証できる他の形式に変換することをお勧めします)。第三者を利用することで、厳密に正しくないとしても、私の仮定が少なくとも他の人に共有されることが保証されます。少なくとも、このアプローチは構文の検証に使用できます。セマンティックな正確さには、テスト データのコンシューマーの作成が必要になる可能性があります。これは、あなたが言及した「誤った仮定」の落とし穴を常に起こしやすい可能性があります。

于 2009-12-09T18:03:48.970 に答える