如何为计算引擎开发回归测试

时间:2013-01-09 21:59:40

标签: testing integration-testing regression-testing

我正在开发一个财务信息网络应用程序的团队。我们还没有为它编写过许多自动化测试,所以我们决定将回归测试添加到我们程序的最关键部分。不过,我对自动化测试非常陌生,所以我并不完全确定如何编写测试。

这篇文章很长,所以这里是tl; dr问题:如何编写回归测试来检查某些计算是否有效?我不仅仅想测试计算 - 我还想知道计算所依赖的任何组件是否给它输入中断。我不需要知道哪个组件特别突破,只是某些东西不起作用。我应该使用什么方法?

这是我们的情况:我们使用分层架构开发了应用程序,如下所示:

Views
  |
  V
Logic Managers <--> Financial Calculation Engines
  |
  V
Data Accessors
  |
  V
Database

我们已经确定计算引擎是我们程序中最需要回归测试套件的部分。这些组件包含我们用于将原始财务数据处理为有用结果的计算和算法。他们相应的经理通过调用他们的公共方法来使用它们,这些方法接受原始财务数据作为参数当引擎方法返回时,它们会发回一个包含已处理财务结果的对象。同时,管理人员从数据访问者那里获取原始财务数据,然后从数据库中获取数据。

我们决定一旦进行财务计算就会知道&#34;打破&#34;因此,我们知道自从上次运行测试以来,该程序中的任何一个部分都已触及该错误。这将让我们使用连续测试来保护我们免受引擎产生错误结果并且不知道在哪里看。

当我们考虑这意味着什么时,我们意识到为每个引擎添加单元测试是不够的。例如,假设对数据访问器的错误更改意味着它们开始提取错误的数据。然后,这些数据将通过管理器发送到引擎,这将产生错误的结果。但是,引擎的算法本身仍然可以正常工作,因此单元测试仍然可以通过。这意味着当我们注意到生成错误的数字时,我们无法知道错误何时被引入,使得追踪和修复更加困难。

相反,我们希望能够在错误出现的任何地方进行回归测试,这会导致引擎输出的最终结果不正确,即使问题是错误的数据被发送到引擎而不是引擎本身有问题。当这些测试失败时,他们不会告诉我们问题出在哪里,但如果我们不断进行测试,我们会在签入错误后立即知道并对其进行少量更改。看看来解决它。

这就是我们想要做的事情。不幸的是,我们不知道如何创建这些测试。有哪些方法或模式可用于编写这些类型的回归测试?

1 个答案:

答案 0 :(得分:1)

只是提示:您应该使用每次输入相同的输入来检查财务计算引擎的每个部分,并且每次返回的对象应该相同。 分别测试数据访问器,使用相同的逻辑:相同的输入,相同的输出 为此,您需要mock系统的某些部分(例如,模拟数据访问器以始终返回相同的数据集)。

在每个部分之前进行单独的单元测试也可以更精确地定位错误。

进入这个想法的几个链接:
http://www.ibm.com/developerworks/library/j-mocktest/index.html
http://www.slideshare.net/joewilson123/unit-testing-and-mocking

有许多模拟框架可以帮助您编写测试代码,例如Java项目的Mockito