我有一个系统(“引擎”,这是一段代码),它接受几个参数,返回一些输出。输入参数是几个不同的约束集。我可以枚举所有这些输出(目前为1064组输入),并在引擎中运行它们以产生相同数量的输出。
引擎代码将被一个新的系统所取代,该系统的编码来自不同的部门。测试的目的是记录和存储输入到输出的原始映射,一旦引擎被替换,用新的引擎重新运行测试。
我搞不懂怎么处理这件事。这是“单元测试”吗?是否应将其视为单元测试?(我想这就是我想把它说成但有麻烦的地方)。它应该是代码的一个单独的“模块”吗?应该是我运行的一次性脚本吗?
由于有许多输入->输出映射,我可能必须为测试创建一个数据库表,并将结果存储在表中。
我正在寻找一种测试框架或这种“测试”的方法,它将首先帮助我存储“预期的内容”,然后,在一个非常不同的时间,测试新系统是否符合预期。
或者,我也可以同时运行两个系统,并以这种方式比较结果,在这种情况下,我可能不需要临时存储结果。然而,在我的例子中,新的引擎还没有准备好,所以我不能同时引用这两者,因为只有旧的引擎是可用的。
发布于 2017-12-20 17:17:45
您正在准备一个回归测试,以确保新的实现显示出现有的行为。
作为一种测试方法,组件的端到端测试似乎就是您要做的事情。可以将所有测试用例存储在数据库中。在我的经验中,使用纯文本文件更好,因为它们可以很容易地共享、电子邮件和版本控制。这些文件描述输入并记录输出,例如作为JSON、YAML或XML文档。
然后,您将有一个测试驱动程序,它是一个小型程序,用于读取测试用例文件,运行引擎和输入,并比较输出。您以后可以为新引擎重新实现相同的测试驱动程序,或者使测试驱动程序可配置。
一旦你有了这两个引擎,你应该同时运行两个引擎一段时间。两者都得到了所有现实世界的生产投入。如果存在差异,则记录输入和两个输出,并手动检查。这个阶段倾向于发现旧实现中的许多错误,因此新的实现很可能产生“更正确”的输出。最初,您将更愿意继续使用旧引擎的输出。过一段时间,你将有足够的信心切换到新的引擎。
您的输入空间可能太大,无法全面测试(假设它们是1064个自变量,而不仅仅是1064个输入值)。因此,您需要生成示例。一个很好的策略是记录来自生产的输入,对它们进行消毒/匿名化,并将它们用作测试用例。然而,这将错过有趣的边缘案例。基于记录的示例、任何现有规范或测试用例,并根据领域专家的输入,手动为日志记录期间未观察到的重要场景构建测试用例。
https://softwareengineering.stackexchange.com/questions/362754
复制相似问题