Вопрос

Вчера я работал над качеством, проводя формальное тестирование.В ходе своей процедуры они проверяли, что все файлы на тестовой машине были извлечены из версии.Они проверяли эти файлы одним и тем же способом: проверяли размер и установленные на них окна с отметками даты и времени в проводнике Windows.Они оказались выключены по другой причине, которую я смог выяснить.

Это действительный способ проверить, что файл тот же?Я так не думал и начал спорить, но я здесь моложе, поэтому подумал, что не стоит заходить слишком далеко.Я хотел доказать, что им следует выполнить двоичное сравнение файла, чтобы убедиться в точности его содержимого.По моему опыту, отметки времени/даты и атрибуты размера не всегда работают должным образом.Есть идеи???

Это было полезно?

Решение

Единственный 100% способ определить, равны ли два файла, — это выполнить их двоичное сравнение.

Если вы можете жить с риском ложных срабатываний (т.два файла, которые не идентичны на 100%, но ваш код говорит, что они есть), то алгоритмы дайджеста и контрольной суммы могут использоваться для уменьшения работы, особенно если файлы находятся на двух разных машинах с пропускной способностью ниже оптимальной, поэтому двоичное сравнение неосуществимо.

Алгоритмы дайджеста и контрольной суммы имеют вероятность ложного срабатывания, но точная вероятность зависит от алгоритма.Общее правило заключается в том, что чем больше он создан в криптографии и чем больше битов он выводит, тем меньше вероятность ложного срабатывания.

Даже алгоритм CRC-32 довольно удобен в использовании, и в Интернете легко найти примеры кода, реализующие его.

Если вы выполняете только сравнение размера и временной метки, то, к сожалению, это легко обойти, и на самом деле это не даст вам большей уверенности в том, что файлы одинаковы или различны.

Однако это зависит от того, знаете ли вы, что в вашем мире временные метки сохраняются и изменяются только при изменении файла, тогда вы можете использовать их, в противном случае это не дает никаких гарантий.

Другие советы

Хеширование очень хорошее.Но другая, немного менее технологичная альтернатива — запустить инструмент сравнения, такой как WinMerge или TextWrangler, и сравнить две версии каждого файла.Скучно и есть место человеческой ошибке.

Лучше всего использовать контроль версий, чтобы убедиться, что тестируемые вами файлы — это те файлы, которые вы редактировали и которые собираетесь запустить.У нас есть папки оформления заказа из нашего репозитория в качестве промежуточных и действующих сайтов, поэтому после того, как вы зафиксируете изменения из своей рабочей копии, вы можете быть на 100% уверены, что файлы, которые вы тестируете, отправляете на промежуточную версию и затем запускаете, одинаковы, потому что вы просто запускаете «svn update» в каждом ящике и проверяете номер версии.

Да, и если вам нужно срочно откатиться (это случается со всеми нами когда-нибудь), вы просто запускаете svn update еще раз с ключом -r и практически мгновенно возвращаетесь к предыдущей версии.

Я бы сделал что-то вроде хеша md5sum для файлов и сравнил его с известными хешами из выпуска.Они будут более точными, чем просто сравнения даты и времени, и их можно будет больше автоматизировать.

Обычный способ — вычислить хэш из двух файлов и сравните это.MD5 и SHA1 — типичные алгоритмы хеширования.md5sum должен быть установлен по умолчанию на большинстве компьютеров типа unix, а в Википедии md5сумма статья содержит ссылки на некоторые реализации Windows.

Вам следует выполнить проверку CRC для каждого файла...из вики:

Циклическая проверка избыточности, тип хэш-функции, используемый для создания контрольной суммы для обнаружения ошибок при передаче или хранении.

Он создает почти уникальное значение, основанное на содержимом файла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top