我最近偶然发现了这篇(陈旧的)文章:
http://imranontech.com/2007/01/04/unit-testing-the-final-frontier-legacy-code/
据称作者在其中编写了一个 perl 脚本来自动生成测试用例。 他的策略是这样的(引用):
- 读入我给它的头文件。
- 提取了函数原型(prototype)。
- 给我它找到的函数列表,让我选择 我想为哪些创建单元测试。
然后它创建了一个 dbx (Solaris 调试器)每次都会断点的脚本 调用了选定的函数,保存传递给的变量 它然后继续,直到函数返回,此时它 将保存返回值。
运行dbx下的可执行文件 脚本,哪一点我继续使用该应用程序作为 正常的,只是运行了很多我认为会的用例 仔细检查有问题的代码,尤其是我认为的情况 它会在我想创建单元测试的函数中遇到边缘情况 为了。
然后 perl 脚本执行所有示例运行,去除 复制,然后自动生成一个包含单元测试的 C 文件 对于每个示例(即传入输入数据并验证 返回值与示例运行中的相同)编译/链接/运行 单元测试并丢弃失败的单元(即摆脱 导致函数行为不确定的输入)
我有很多 Python 和 Fortran 语言的各种遗留代码。这篇文章来自 2007 年。在当前的单元测试框架中是否实现了类似的东西?
我将如何编写这样的脚本?
最佳答案
非常像 C。另外,我认为取决于操作系统(Solaris 调试器)?我会说你应该看看“记录/捕获和回放”工具,但不知何故我认为“生成”部分从未真正起飞。
Python's testing tools taxonomy将是一个很好的起点。我会说你要么使用 Selenium 或 Dogtail 记录你通过应用程序的方式.该链接会将您带到 Web 测试工具部分,但也请检查其他部分:模糊测试是一种类似于 Golden Master 的技术。 ,这有时可能有助于遗留应用程序,并且是一种“记录/回放”技术。 Feathers 将此类测试称为“表征”测试,因为它们表征了遗留系统的行为。
您引用的文章中的观点非常好:
Have a look at your own source code repository and see which functions/classes have had the most bugfix checkins applied, 80% of bugfixes tend to be made to about 20% of the code. There’s sound logic behind this – often that 20% of the code is poorly written with dozens or hundreds of “special case” hacks.
这才是我真正要开始的地方。这些零件你认出来了吗?分类法中的简单 Git/SVB 日志使用脚本和覆盖工具部分会派上用场。
不幸的是,我帮不了你 - 我的 Python 经验有限,而 Fortran - 不存在。
关于python - 有没有开源工具可以自动为遗留代码生成测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14770797/