2008-08-07 5 views
5

私は昨日正式なテストを行っていました。その手順では、テストマシン上のすべてのファイルがリリースから引き出されたことを確認していました。彼らがこれらのファイルを検証していた方法は、Windows Explorerでサイズと日付/時刻スタンプのウィンドウを確認することと同じでした。これらは、私がなぜそれを見つけることができたかの別の理由のためにオフになった。テスト用のファイルを確認しています

これは、ファイルが同じであることを確認する有効な方法ですか?私はそう考えていないと議論し始めましたが、私はここで若いので、あまりにも遠くに押してはいけないと思っていました。私は彼らの内容が正確であることを確認するためにファイルのバイナリ比較を行うべきだと主張したかったのです。私の経験では、タイムスタンプとサイズ属性は必ずしも期待どおりに動作するわけではありません。何かご意見は???

答えて

3

2つのファイルが等しいかどうかを判断する唯一の方法は、2つのファイルのバイナリ比較を行うことです。

偽陽性(つまり、100%同一ではないがコードには2つのファイルがある)のリスクで暮らすことができれば、ダイジェストとチェックサムアルゴリズムを使用して、バイナリ比較が実行不可能になるように、ファイルは最適な帯域幅よりも小さい2つの異なるマシン上に存在します。

ダイジェストアルゴリズムとチェックサムアルゴリズムはすべて誤検出の可能性がありますが、正確な機会はアルゴリズムによって異なります。一般的なルールは、それが暗号化されているほど多く、出力するビット数が多いほど偽陽性の可能性が低くなるということです。

でも、CRC-32アルゴリズムはかなり使いやすく、実装しているインターネット上でコード例を見つけるのは簡単です。

サイズとタイムスタンプの比較を行う場合には、これは簡単に回避でき、実際にはファイルが同じか異なるかどうかを確かに確認することはできません。

あなたの世界でタイムスタンプが保持され、ファイルが変更されたときにのみ変更されていることが分かっている場合は、それを使用することができます。

0

各ファイルにCRCチェックを行う必要があります...ウィキから:

Cyclic redundancy check

、順番に、チェックサムを生成するために使用されるハッシュ関数の種類は、伝送または保管中にエラーを検出します。

ファイルの内容に基づいて、ほぼ一意の値を生成します。

+0

CRC-32は、ファイルの比較に確実に使用するのに十分なエントロピーを持たないサイズよりもかなり小さいファイル(128K未満)に対して良好なハミング距離しかありません。 – Epsilon

1

私はファイル上でmd5sumハッシュのようなことを行い、それをリリースの既知のハッシュと比較します。日付/時刻の比較よりも正確で、より自動化できるはずです。

1

普通の方法は、2つのファイルのhashを計算して比較することです。 MD5およびSHA1は、典型的なハッシュアルゴリズムです。 md5sumはほとんどのUNIX系マシンにデフォルトでインストールされ、Wikipediaのmd5sum記事にはいくつかのウィンドウ実装へのリンクがあります。

3

ハッシングが非常に良好です。しかし、もう少し技術的に若干低いのは、WinMergeやTextWranglerのような差分ツールを実行し、各ファイルの2つのバージョンを比較することです。退屈で人為的ミスの余地があります。

ベストは、バージョンコントロールを使用して、テストしているファイルが編集したファイルと、起動するファイルであることを確認してください。私たちはレポからステージングサイトとライブサイトとしてチェックアウトフォルダを持っていますので、作業コピーから変更をコミットしたら、テストするファイルとステージングしてライブするのが同じであることを100%確信できます。各ボックスで "svn update"を実行し、リビジョン番号を確認してください。

お急ぎでロールバックする必要がある場合は、srnスイッチを-rスイッチでもう一度実行し、直前のリビジョンに戻ることができます。