2

我最近偶然发现了这篇(旧的)文章:

http://imranontech.com/2007/01/04/unit-testing-the-final-frontier-legacy-code/

据称作者编写了一个 perl 脚本来自动生成测试用例。他的策略是这样的(引用):

  1. 读入我给它的头文件。
  2. 提取函数原型。
  3. 给我它找到的函数列表,让我选择我想要为其创建单元测试的函数。
  4. 然后它创建了一个 dbx(Solaris 调试器)脚本,每次调用所选函数时都会断点,保存传递给它的变量,然后继续执行,直到函数返回,此时它将保存返回值。

  5. 在 dbx 脚本下运行可执行文件,然后我开始正常使用该应用程序,并且只是运行了许多我认为会通过有问题的代码的用例,尤其是我认为它会遇到边缘情况的情况我要为其创建单元测试的功能。

  6. 然后 perl 脚本获取所有示例运行,删除重复项,然后自动生成包含每个示例的单元测试的 C 文件(即传入输入数据并验证返回值与示例运行中的相同)编译/链接/运行单元测试并丢弃失败的测试(即摆脱导致函数行为不确定的输入)

我有很多 Python 和 Fortran 语言的各种遗留代码。这篇文章来自 2007 年。在当前的单元测试框架中是否实现了类似的东西?

我将如何编写这样的脚本?

4

1 回答 1

0

很像C。另外,我认为(Solaris 调试器)依赖于操作系统?我想说你应该看看“记录/捕获和回放”工具,尽管不知何故我认为“生成”部分从未真正起飞。

Python 的测试工具分类法将是一个很好的起点。我会说你要么使用 Selenium 或Dogtail通过应用程序记录你的方式。该链接将您直接带到该部分,Web 测试工具,但也检查其他:模糊测试是一种类似于Golden Master的技术,有时可能有助于遗留应用程序,并且是一种“记录/回放”技术。Feathers 将此类测试称为“表征”测试,因为它们表征了遗留系统的行为。

您引用的文章非常好:

查看您自己的源代码存储库并查看哪些函数/类应用了最多的错误修复检查,80% 的错误修复往往针对大约 20% 的代码。这背后有合理的逻辑——通常 20% 的代码写得很糟糕,有几十个或几百个“特殊情况”黑客。

这是我真正开始的地方。你有没有识别出这些部分?分类中的简单 Git/SVB 日志使用脚本和覆盖工具部分会派上用场。

不幸的是,我不能帮助你——我的 Python 经验有限,而且 Fortran 不存在。

于 2013-02-09T14:50:44.227 回答