【问题标题】:Regression testing when "test oracle" is an informal output comparison“测试预言机”是非正式输出比较时的回归测试
【发布时间】:2012-02-19 07:01:19
【问题描述】:

我维护了一个 Python 程序,可以就某些主题提供建议。它通过对输入数据应用复杂的算法来做到这一点。

程序代码定期更改,以解决新发现的错误,并修改底层算法。

我想使用回归测试。麻烦的是,除了运行程序(即使那样,只有在没有错误的情况下)之外,没有办法判断某个输入的“正确”输出是什么。

我在下面描述了我当前的测试过程。我的问题是是否有工具可以帮助自动化这个过程(当然,如果对我正在做的事情有任何其他反馈)。

当程序第一次似乎对我的所有输入案例都正确运行时,我将它们的输出保存在我为“已验证”输出指定的文件夹中。 “已验证”意味着,据我所知,输出对于我的程序的给定版本是正确的。

如果我发现一个错误,我会做出任何我认为可以修复它的更改。然后我在所有输入集上重新运行程序,并手动比较输出。每当输出发生变化时,我都会尽我所能非正式地审查这些变化并确定是否:

  1. 这些更改完全是由于错误修复,或者
  2. 这些更改至少部分是由于我引入的一个新错误

在情况 1 中,我增加内部版本计数器。我用等于版本计数器的后缀标记输出文件并将其移动到“已验证”文件夹。然后我将更改提交到 Mercurial 存储库。

如果将来当此版本不再是最新版本时,我决定将其分支出来,我将需要这些经过验证的输出作为此特定版本的“正确”输出。

在情况 2 中,我当然会尝试找到新引入的 bug,并修复它。这个过程一直持续到我相信与之前验证版本相比的唯一变化是由于预期的错误修复。

当我修改代码以改变算法时,我遵循类似的过程。

【问题讨论】:

    标签: python unit-testing testing regression-testing


    【解决方案1】:

    这是我可能会使用的方法。

    1. 让 Mercurial 管理代码、输入文件和回归测试输出。
    2. 从某个父版本开始。
    3. 进行并记录(最好尽可能少)修改。
    4. 运行回归测试。
    5. 查看与父修订回归测试输出的差异。
    6. 如果这些差异与预期不符,请尝试查看是否引入了新错误或预期是否不正确。要么修复新错误并转到 3,要么更新预期并转到 4。
    7. 将回归测试的输出复制到指定用于验证输出的文件夹中。
    8. 提交对 Mercurial 的更改(包括代码、输入文件和输出文件)。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 2016-10-24
      • 1970-01-01
      • 2019-03-20
      • 2018-02-28
      • 1970-01-01
      • 2021-11-21
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多