Проверка файлов для тестирования

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

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

7.08.2008 12:54:51
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

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

3
7.08.2008 13:07:12

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

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

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

0
7.08.2008 12:57:07
CRC-32 имеет хорошие расстояния Хемминга только для довольно небольших файлов (<128 КБ), превышающих этот размер, при этом энтропии недостаточно для надежного использования для сравнения файлов.
Epsilon 1.10.2008 03:08:02

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

1
7.08.2008 12:59:49

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

1
7.08.2008 13:00:17

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

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

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

3
7.08.2008 13:17:45