我维护了一个 Python 程序,它为某些主题提供建议。它通过对输入数据应用复杂的算法来做到这一点。
程序代码定期更改,以解决新发现的错误和修改底层算法。
我想使用回归测试。麻烦的是,除了运行程序(即使那样,只有在没有错误的情况下)之外,没有办法判断某个输入的“正确”输出是什么。
我在下面描述了我当前的测试过程。我的问题是是否有工具可以帮助自动化这个过程(当然,如果对我正在做的事情有任何其他反馈)。
当程序第一次似乎对我的所有输入案例都正确运行时,我将它们的输出保存在我为“已验证”输出指定的文件夹中。“已验证”意味着,据我所知,输出对于我的程序的给定版本是正确的。
如果我发现一个错误,我会做出任何我认为可以修复它的更改。然后我在所有输入集上重新运行程序,并手动比较输出。每当输出发生变化时,我都会尽我所能非正式地审查这些变化并确定是否:
- 更改完全是由于错误修复,或者
- 这些变化至少部分是由于我引入的一个新错误
在案例 1 中,我增加内部版本计数器。我用等于版本计数器的后缀标记输出文件并将其移动到“已验证”文件夹。然后我将更改提交到 Mercurial 存储库。
如果将来,当此版本不再是最新版本时,我决定将其分支出来,我将需要这些经过验证的输出作为此特定版本的“正确”输出。
在案例 2 中,我当然会尝试找到新引入的 bug,并修复它。这个过程一直持续到我相信与之前验证版本相比的唯一变化是由于预期的错误修复。
当我修改代码以更改算法时,我遵循类似的过程。