验证文件以进行测试

昨天我正在进行一些正式的测试。在他们的程序中,他们正在验证测试机器上的所有文件是从发布版本中提取的。他们验证这些文件的方式与在Windows资源管理器中查看大小和日期/时间戳窗口相同。这些碰巧是因为我能够找出原因的另一个原因。

这是验证文件的有效方法是一样的吗?我不这么认为,并开始争论,但我在这里更年轻,所以认为我不应该把它推得太远。我想争辩说他们应该对文件进行二进制比较来验证其内容是否正确。根据我的经验,时间/日期戳和尺寸属性并不总是按预期行事。有什么想法吗???

0

5 答案

散列非常好。但另一个稍微低一点的技术替代方法是运行像WinMerge或TextWrangler这样的diff工具,并比较每个文件的两个版本。无聊,有人的错误的空间。

最重要的是,使用版本控制来确保您正在测试的文件是您编辑的文件以及您要启动的文件。我们的回购文件夹中有checkout文件夹作为登台和现场网站,因此,一旦您提交了工作副本中的更改,您可以100%确定所测试的文件,推送到现场,然后生活是相同的,因为您只需在每个框上运行“svn update”并检查版本号。

哦,如果你需要急匆匆地回滚(它发生在我们所有的某个时间或另一个时间),你只需再次使用-r开关运行svn update,并立即返回到以前的版本。

0
额外

您应该对wiki上的每个文件进行CRC校验:

Cyclic redundancy check, a type of hash function used to produce a checksum, in order to detect errors in transmission or storage.

它根据文件的内容产生一个几乎唯一的值。

0
额外
对于相当小的文件(<128K),CRC-32仅具有良好的汉明距离,而在这个尺寸上,没有足够的熵可以可靠地用于文件比较。
额外 作者 Epsilon,

我会对这些文件执行类似md5sum哈希的操作,并将其与发行版中已知的哈希进行比较。它们将比日期/时间比较更准确,并且应该能够更加自动化。

0
额外

通常的方法是计算两个文件的散列值并进行比较。 MD5和SHA1是典型的哈希算法。默认情况下,md5sum应该安装在大多数unix类型的机器上,而维基百科的 md5sum 文章有链接到某些windows实现。

0
额外

找出两个文件是否相等的唯一的100%方法是对二者进行二进制比较。

如果您可以承受误报的风险(即,两个文件不是100%相同但您的代码表明它们是),那么可以使用摘要和校验和算法来减轻工作量,特别是如果文件存在两台不同的机器的带宽不够理想,所以二进制比较是不可行的。

摘要和校验和算法都有误报的机会,但确切的机会因算法而异。一般规则是,密码越多,输出的位越多,误报的可能性就越小。

即使是CRC-32算法也相当不错,应该很容易在互联网上找到实现它的代码示例。

如果你只做一个大小/时间戳比较,那么我很抱歉地说这很容易规避,并且实际上不会让你确信这些文件是相同的还是不同的。

这取决于,如果你知道在你的世界里,时间戳是保留的,只有当文件被修改时才会改变,那么你可以使用它,否则它不能保证。

0
额外