验证文件以进行测试

时间:2008-08-07 12:54:51

标签: windows testing

我昨天做了一些正式的测试。在他们的程序中,他们正在验证测试机器上的所有文件都是从发布中提取的。他们验证这些文件的方式是相同的,通过检查Windows资源管理器中放置的大小和日期/时间戳窗口。这些碰巧是因为我能够找到原因的另一个原因而关闭的。

这是验证文件是否相同的有效方法吗?我不这么认为并且开始争论,但我在这里年轻,所以我认为我不应该把它推得太远。我想说他们应该对文件进行二进制比较,以验证其内容是否准确。根据我的经验,时间/日期标记和大小属性并不总是按预期运行。任何想法???

5 个答案:

答案 0 :(得分:3)

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

如果您可以忍受误报的风险(即两个文件不是100%相同但您的代码表明它们是相同的),那么摘要和校验和算法可用于减少工作,特别是如果文件存在于两个不同的机器上,带宽小于最佳,因此二进制比较是不可行的。

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

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

如果您只进行大小/时间戳比较,那么我很遗憾地说这很容易规避,并且实际上并不能确定文件是相同还是不同。

但是,如果您知道在您的世界中,时间戳保留,并且仅在修改文件时更改,那么您可以使用它,否则它不能保证。

答案 1 :(得分:3)

哈希非常好。但另一种略低技术的替代方案是运行像WinMerge或TextWrangler这样的差异工具,并比较每个文件的两个版本。无聊,还有人为错误的空间。

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

你应该对每个文件进行CRC校验......来自wiki:

Cyclic redundancy check,一种用于产生校验和的哈希函数,用于检测传输或存储中的错误。

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