2008-12-06 114 views
3

我们的QA团队希望根据EXE和DLL在构建之间实际发生的变化来进行测试。我们有一个很好的svn更改报告,但源代码和更改后的二进制文件之间的关系并不总是很明显。我们比较的版本始终是完全清理的版本,所以我们不能使用文件系统时间戳。我正在寻找工具来比较窗口(和Windows CE)的PE二进制文件,将忽略嵌入的时间戳和其他cruft。任何建议工具或其他方式来生成一个可靠的“什么二进制文件真的改变了”报告?谢谢。差异化窗口二进制文件的工具?

澄清:感谢迄今为止的答案,但我们无法直接逐字节比较或比较校验和来生成报告,因为所有文件在每次构建时都会显示不同,即使源文件因为编译器插入的时间戳而没有改变。问题是如何忽略误报。拆机&比较的想法是最接近于我们所需要的,我想......

回答! Bindiff就是我正在寻找的东西。非常感谢。

+0

有趣的技术问题,但是什么使'EXEs/dll改变'列表比'源文件改变'列表更相关? – orip 2008-12-06 08:53:54

+0

这里是场景:svn说ObscureLib.c自上次构建以来发生了变化。我应该重新运行foo.exe的测试套件吗? – 2008-12-07 01:26:30

回答

1

也许你可以拆卸的二进制文件,然后做一个diff上装配...

这听起来像是你的QA团队虽然采取了错误的方法......这不应该的问题给他们什么代码看起来像;只是它做它应该做的事情。

编辑: 哦!再次阅读后,我意识到我误解了你的问题。我认为他们想测试改变了方法...

在这种情况下,为什么不MD5哈希值,并比较这些?最小的变化将导致产生完全不同的散列。

+0

是的,但我认为QA团队只想花时间测试已更改的二进制文件,因此我们需要差异工具 – nickf 2008-12-06 03:16:16

0

当我在我公司进行安装验证的“本土”工具时,我们使用Beyond Compare作为后端进行比较。

它具有强大的文件/文件夹比较(二进制为好)和脚本功能,并可以输出XML报告。

0

Project dependency graph generatorDependency-Grapher for C++-Projects都使用GraphViz可视化依赖关系。我想你可以使用它们中的任何一个作为你的需求的基础,特别突出显示源文件或其他叶子已经改变的依赖关系图中的分支。

MD5散列或校验和(如上面所建议的),一个简单的diff忽略空格和滤除评论的变化,或从版本控制系统changlist信息可以用信号哪些文件已经改变。

1

不知道什么二进制文件的种类(只DLL文件?PE/WinCE的应用程序?其他?)是否有可能嵌入到二进制文件,例如版本信息使用源代码控制标签来更新提交时源代码中的版本。然后,在创建新构建时,二进制文件也会更新版本字符串。不必区分二进制文件,您可以使用版本字符串并检查更改。

+0

来考虑版本号。自动更新版本号仍需要将源更改映射到二进制文件(这很难)。手动更新版本号太容易出错。 (即我不信任开发人员可靠地做到这一点:-)) – 2008-12-07 01:31:09

2

我以前就遇到了这个问题。我的解决方案是编写一个工具,它将.EXE/.DLL中的所有时间戳设置为已知值。我会将其作为后期构建步骤运行。然后二进制差异将工作得很好。