昨天我正在与质量部门合作进行一些正式测试。在他们的程序中,他们正在验证测试机器上的所有文件是否已从版本中提取。他们验证这些文件是否相同的方法是检查 Windows 资源管理器中的大小和日期/时间戳窗口。这些碰巧由于另一个原因而关闭,我能够找出原因。

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

有帮助吗?

解决方案

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

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

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

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

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

但这取决于,如果您知道在您的世界中,时间戳被保留,并且仅在修改文件时更改,那么您可以使用它,否则它无法保证。

其他提示

散列非常好。但另一种技术含量较低的替代方案是运行 WinMerge 或 TextWrangler 等 diff 工具并比较每个文件的两个版本。无聊而且存在人为错误的空间。

最重要的是,使用版本控制来确保您正在测试的文件是您编辑的文件和您要启动的文件。我们从我们的存储库中签出文件夹作为临时站点和实时站点,因此一旦您从工作副本提交了更改,您就可以 100% 确定您测试、推送到临时站点然后实时运行的文件是相同的,因为您只需在每个框中运行“svn update”并检查修订号。

哦,如果您需要快速回滚(我们所有人有时都会遇到这种情况),您只需使用 -r 开关再次运行 svn update 并几乎立即返回到以前的版本。

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

正常的方法是计算 散列 两个文件并进行比较。MD5和SHA1是典型的哈希算法。md5sum 应该默认安装在大多数 UNIX 类型的机器上,并且 Wikipedia 的 md5和 文章有一些 Windows 实现的链接。

您应该对每个文件进行 CRC 检查...来自维基:

循环冗余校验, ,一种哈希函数,用于生成校验和,以检测传输或存储中的错误。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top