Проверка файлов для тестирования
Вопрос
Вчера я работал над качеством, проводя формальное тестирование.В ходе своей процедуры они проверяли, что все файлы на тестовой машине были извлечены из версии.Они проверяли эти файлы одним и тем же способом: проверяли размер и установленные на них окна с отметками даты и времени в проводнике Windows.Они оказались выключены по другой причине, которую я смог выяснить.
Это действительный способ проверить, что файл тот же?Я так не думал и начал спорить, но я здесь моложе, поэтому подумал, что не стоит заходить слишком далеко.Я хотел доказать, что им следует выполнить двоичное сравнение файла, чтобы убедиться в точности его содержимого.По моему опыту, отметки времени/даты и атрибуты размера не всегда работают должным образом.Есть идеи???
Решение
Единственный 100% способ определить, равны ли два файла, — это выполнить их двоичное сравнение.
Если вы можете жить с риском ложных срабатываний (т.два файла, которые не идентичны на 100%, но ваш код говорит, что они есть), то алгоритмы дайджеста и контрольной суммы могут использоваться для уменьшения работы, особенно если файлы находятся на двух разных машинах с пропускной способностью ниже оптимальной, поэтому двоичное сравнение неосуществимо.
Алгоритмы дайджеста и контрольной суммы имеют вероятность ложного срабатывания, но точная вероятность зависит от алгоритма.Общее правило заключается в том, что чем больше он создан в криптографии и чем больше битов он выводит, тем меньше вероятность ложного срабатывания.
Даже алгоритм CRC-32 довольно удобен в использовании, и в Интернете легко найти примеры кода, реализующие его.
Если вы выполняете только сравнение размера и временной метки, то, к сожалению, это легко обойти, и на самом деле это не даст вам большей уверенности в том, что файлы одинаковы или различны.
Однако это зависит от того, знаете ли вы, что в вашем мире временные метки сохраняются и изменяются только при изменении файла, тогда вы можете использовать их, в противном случае это не дает никаких гарантий.
Другие советы
Хеширование очень хорошее.Но другая, немного менее технологичная альтернатива — запустить инструмент сравнения, такой как WinMerge или TextWrangler, и сравнить две версии каждого файла.Скучно и есть место человеческой ошибке.
Лучше всего использовать контроль версий, чтобы убедиться, что тестируемые вами файлы — это те файлы, которые вы редактировали и которые собираетесь запустить.У нас есть папки оформления заказа из нашего репозитория в качестве промежуточных и действующих сайтов, поэтому после того, как вы зафиксируете изменения из своей рабочей копии, вы можете быть на 100% уверены, что файлы, которые вы тестируете, отправляете на промежуточную версию и затем запускаете, одинаковы, потому что вы просто запускаете «svn update» в каждом ящике и проверяете номер версии.
Да, и если вам нужно срочно откатиться (это случается со всеми нами когда-нибудь), вы просто запускаете svn update еще раз с ключом -r и практически мгновенно возвращаетесь к предыдущей версии.
Я бы сделал что-то вроде хеша md5sum для файлов и сравнил его с известными хешами из выпуска.Они будут более точными, чем просто сравнения даты и времени, и их можно будет больше автоматизировать.
Вам следует выполнить проверку CRC для каждого файла...из вики:
Циклическая проверка избыточности, тип хэш-функции, используемый для создания контрольной суммы для обнаружения ошибок при передаче или хранении.
Он создает почти уникальное значение, основанное на содержимом файла.