【问题标题】:Verifying files for testing验证文件以进行测试
【发布时间】:2008-08-07 12:54:51
【问题描述】:

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

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

【问题讨论】:

    标签: windows testing


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      散列非常好。但另一个技术稍低的替代方法是运行 WinMerge 或 TextWrangler 之类的差异工具,并比较每个文件的两个版本。很无聊,还有人为错误的余地。

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

      哦,如果您需要匆忙回滚(它总是会发生在我们身上),您只需使用 -r 开关再次运行 svn update 并几乎立即返回到以前的版本。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

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

            【讨论】:

            • CRC-32 仅对相当小的文件 (
            猜你喜欢
            • 2015-11-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-25
            • 2011-01-16
            • 2017-05-05
            • 2011-05-28
            相关资源
            最近更新 更多