2008-08-07 40 views
5

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

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

回答

3

找出两个文件是否相等的唯一100%方法是对二者进行二进制比较。如果你能承受误报的风险(即两个文件不是100%相同,但你的代码表明它们是),那么可以使用摘要和校验和算法来减轻工作量,特别是如果这些文件存在于两台不同的机器上,带宽不够理想,因此二进制比较是不可行的。

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

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

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

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

0

你应该做CRC校验每个文件......从维基:

Cyclic redundancy check,用于生产校验,以一种散列函数来检测传输或存储的错误。

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

+0

CRC-32对于相当小的文件(<128K)只有很好的海明距离,超过这个大小没有足够的熵可以可靠地用于文件比较。 – Epsilon 2008-10-01 03:08:02

1

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

1

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

3

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

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

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

相关问题