2008-08-07 18 views
5

Ich habe gestern mit Qualität gearbeitet und einige formale Tests durchgeführt. In ihrer Prozedur wurden alle Dateien auf der Testmaschine überprüft, die aus dem Release gezogen wurden. Die Art und Weise, wie diese Dateien überprüft wurden, war die gleiche, indem die Größe und die Datums-/Zeitstempel-Fenster im Windows-Explorer überprüft wurden. Diese waren zufällig aus einem anderen Grund, den ich herausfinden konnte, warum.Überprüfen von Dateien zum Testen

Ist dies ein gültiger Weg, um eine Datei zu überprüfen, ist das gleiche? Ich dachte nicht und fing an zu streiten, aber ich bin jünger hier, also dachte ich, ich sollte es nicht zu weit treiben. Ich wollte argumentieren, dass sie einen binären Vergleich in der Datei durchführen sollten, um zu verifizieren, dass ihr Inhalt genau ist. Nach meiner Erfahrung verhalten sich Zeit-/Datumsstempel und Größenattribute nicht immer wie erwartet. Irgendwelche Gedanken ???

Antwort

3

Der einzige 100% Weg, um herauszufinden, ob zwei Dateien gleich sind, besteht darin, einen binären Vergleich der beiden durchzuführen.

Wenn Sie mit dem Risiko von Fehlalarmen leben können (dh zwei Dateien, die nicht 100% identisch sind, aber Ihr Code sagt, dass sie sind), können die Digest- und Prüfsummenalgorithmen verwendet werden, insbesondere wenn Die Dateien befinden sich auf zwei verschiedenen Computern mit einer nicht optimalen Bandbreite, sodass ein binärer Vergleich nicht möglich ist.

Die Digest- und Prüfsummenalgorithmen haben alle die Chance, falsch positive Ergebnisse zu erhalten, aber die genaue Wahrscheinlichkeit variiert mit dem Algorithmus. Allgemeine Regel ist, dass je mehr crypto-made es ist, und je mehr Bits es ausgibt, desto geringer ist die Wahrscheinlichkeit eines falsch positiven.

Sogar der CRC-32-Algorithmus ist ziemlich gut zu benutzen und es sollte einfach sein, Codebeispiele im Internet zu finden, die ihn implementieren.

Wenn Sie nur einen Größen-/Zeitstempelvergleich durchführen, tut es mir leid zu sagen, dass dies leicht zu umgehen ist und Sie nicht wirklich sicher sein können, dass die Dateien gleich oder verschieden sind.

Es hängt aber davon ab, wenn Sie wissen, dass in Ihrer Welt Zeitstempel gespeichert werden, und nur geändert werden, wenn die Datei geändert wird, dann können Sie sie verwenden, andernfalls gibt es keine Garantie.

0

Sie sollten eine CRC-Prüfung für jede Datei tun ... aus dem Wiki:

Cyclic redundancy check, eine Art von Hash-Funktion verwendet, um eine Prüfsumme zu erzeugen, um Fehler in der Übertragung oder Speicherung zu erfassen.

Es erzeugt einen fast eindeutigen Wert basierend auf dem Inhalt der Datei.

+0

CRC-32 hat nur gute Hamming-Abstände für ziemlich kleine Dateien (<128K) über dieser Größe die nicht genug Entropie haben, um zuverlässig für den Dateivergleich verwendet zu werden. – Epsilon

1

Ich würde etwas wie eine MD5sum-Hash auf die Dateien tun und vergleichen Sie das mit den bekannten Hashes aus der Version. Sie sind genauer als nur Datum/Zeit-Vergleiche und sollten in der Lage sein, mehr automatisiert zu werden.

1

Der normale Weg besteht darin, eine hash der beiden Dateien zu berechnen und zu vergleichen. MD5 und SHA1 sind typische Hash-Algorithmen. md5sum sollte standardmäßig auf den meisten Unix-Rechnern installiert sein, und der Wikipedia-Artikel md5sum enthält Links zu einigen Windows-Implementierungen.

3

Hashing ist sehr gut. Aber die andere, etwas niedrigere Tech-Alternative besteht darin, ein Diff-Tool wie WinMerge oder TextWrangler auszuführen und die beiden Versionen jeder Datei zu vergleichen. Langweilig und es gibt Raum für menschliche Fehler.

Am besten verwenden Sie Versionskontrolle, um sicherzustellen, dass die Dateien, die Sie testen, die Dateien sind, die Sie bearbeitet haben und die, die Sie starten werden.Wir haben Checkout-Ordner aus unserem Repository als Staging- und Live-Sites. Sobald Sie die Änderungen Ihrer Arbeitskopie festgeschrieben haben, können Sie zu 100% sicher sein, dass die Dateien, die Sie testen, Push-to-Staging und Live-Anzeigen, identisch sind Sie müssen einfach "svn update" auf jedem Feld ausführen und die Revisionsnummer überprüfen.

Oh, und wenn Sie schnell zurückrollen müssen (es passiert uns allen irgendwann), führen Sie einfach svn update erneut mit der Option -r aus und gehen Sie praktisch sofort zur vorherigen Version zurück.