如何通过运行时分析获得单元测试的更多好处

为了实现单元测试的优势,可以在单元测试执行期间通过运行时分析来观察单元测试。单元测试执行过程中的运行时分析对于提高测试效率和效果至关重要。

为了实现单元测试的优势,可以在单元测试执行期间通过运行时分析来观察单元测试。单元测试执行过程中的运行时分析对于提高测试效率和效果至关重要。

如何通过运行时分析获得单元测试的更多好处

单元测试是测试软件单个单元/组件的最佳实践,但对于Java开发人员来说,它可能是乏味的,而且成本很高。用手动来测试每个单元的行为是否正确,用脱离来隔离每个方法,这是很费力的,而且单元测试本身也有可能出现错误和误解行为。为了改善这种情况,你可以使用运行时分析工具来检测数据和控制流、外部依赖,并计算测试代码覆盖率。

有了这些从运行时分析中收集到的数据,像Parasoft Jtest这样的企业级解决方案可以提示开发人员如何改进测试,通过自动推荐正确行为的断言,以及脱离的方法来提高测试隔离度。这种自动单元测试生成和运行时分析之间的整合,减少了Java单元测试所需的人工干预。


单元测试的好处

单元测试是一种众所周知的做法,但在很多项目中,单元测试的实施需要改进。单元测试做得好,可以提高敏捷过程的敏捷性,提高质量和安全性,并带来长期的成本节约。

不幸的是,无论这些好处如何,开发人员仍然会在单元测试中挣扎,尽管他们希望获得更好的结果。测试创建和维护所需的时间和精力可能太多,无法证明增加测试工作的合理性。通常情况下,由于单元/对象与依赖关系的隔离性差,测试套件很脆弱。对依赖关系进行适当的脱离成为软件测试人员的祸根,创建确定正确程序逻辑所需的断言也是如此。即使是为场景进行参数化测试,也会很繁琐和耗费时间。

软件开发团队如果想获得彻底的单元测试的好处,就必须通过测试创建、隔离和维护来解决这些问题。答案从测试自动化工具开始,但仅仅自动化执行测试并收集结果是不够的。运行时分析,即观察正在运行的可执行文件并记录关键指标的过程,是帮助改进单元测试创建、嘲讽和测试稳定性的创新方法。


运行时分析可以改善单元测试

在大多数情况下,开发人员在单元测试的早期阶段并不认为运行时分析很重要。大多数工具都是用来捕捉单元测试遗漏的错误,或者只是在计算代码覆盖率。但这些好处固然重要,运行时分析还可以观察单元测试第一次迭代的执行情况,从而提出改进测试的建议,并检测出干扰测试稳定性的测试运行时环境的变化。

测试框架(如JUnit)会创建稀疏的代码,需要开发人员进一步输入。这项工作很繁琐,所以可以根据观察到的程序逻辑,自动填写更多的细节。例如,以下单元测试可以由Parasoft Jtest自动生成。

如何通过运行时分析获得单元测试的更多好处

同样,对于参数化输入的单元测试,如下图所示。

如何通过运行时分析获得单元测试的更多好处

由于创建的测试从一开始就可以执行,因此可以通过运行时分析来观察结果和执行流程。例如,一个测试可能会因为引发异常而失败,如下图所示。

如何通过运行时分析获得单元测试的更多好处

用运行时分析检测依赖和脱离

此外,运行时工具还能观察到执行路径成依赖关系,并推荐潜在的脱离,以提高测试的隔离度。虽然对被测对象进行目测会发现它的依赖关系,但自动检测和脱离这些依赖关系可以节省很多繁琐和容易出错的工作。

在下面的例子中,Parasoft Jtest提供给开发者一个选择,根据单元测试的执行跟踪来选择要模拟的内容。

如何通过运行时分析获得单元测试的更多好处

在这种情况下,添加一个可脱离的方法模式,将该方法添加到脱离框架(如PowerMock)处理的脱离列表中。

脱离静态构造函数也是可能的,如下所示。

如何通过运行时分析获得单元测试的更多好处


通过运行时分析提高测试的保真度

通过对执行流程的充分了解,加上方法调用中使用的参数,运行时分析可以为开发人员提供有用的建议,以改进测试代码。虽然在创建测试时,静态地提供了断言,但它们可能没有被启用或正确。在测试执行时,失败和缺失的断言会触发警告,然后导致建议来补救问题。

例如,在创建一个新的测试后,没有推荐的断言没有被注释,你会看到以下内容。

如何通过运行时分析获得单元测试的更多好处

或者如果断言失败,例如,将显示以下内容。

如何通过运行时分析获得单元测试的更多好处

不管发生了什么,都是不断地反馈关于对断言的纠正措施,从而关闭了测试创建到完成单元测试的循环。此外,随着被测单元的变化,这些变化可以用同样的方式处理,不断减少所需的人工测试维护。

用运行时分析提高测试稳定性

运行时分析还可以检测到执行过程中测试环境的变化,这些变化会影响到为后续测试重新创建相同测试环境的能力。一次通过而后又失败的测试可能是造成挫败感和时间精力损失的重要原因。通过运行时分析可以检测到的不稳定性的一些例子包括以下几点。

  • 在测试过程中改变了系统属性,但没有变回原来的状态。后续的测试可能会依赖这个属性。
  • 后台的额外执行线程,可能会干扰测试运行。
  • 在测试执行过程中创建了一个新的文件,如果后续测试依赖于该文件及其内容,则可能会影响后续的运行。
  • 修改的静态字段,可能会影响未来使用这些相同字段的测试。
  • 每次测试执行都有一个相同的起点,以确保结果可靠,这一点至关重要。通过运行时检测防止测试不稳定,可以消除测试调试阶段的猜测。

所以你可以看到,运行时分析不仅仅是为了计算代码覆盖率。测试执行过程中的运行时分析对提高测试效率和效果至关重要。监控执行路径可以提供依赖关系的信息,以改善对依赖关系和嘲讽的处理。断言可以被监控,自动建议可以帮助提高测试保真度。检测运行时测试环境中影响测试稳定性的变化,消除挫折感,减少测试代码的调试周期。

如何通过运行时分析获得单元测试的更多好处

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年10月22日
下一篇 2020年10月22日

相关推荐

发表回复

登录后才能评论