技术文章

单元测试与自动生成测试用例

时间:2023-10-20

作者·仝振阳

为什么要做单元测试

 

我们生活在一个信息化社会中,软件已经变得无处不在,航空航天、轨道交通、智能汽车、智能电子设备等各个领域,都深刻的影响着我们的生活。因此,代码的质量也变得至关重要。在这个背景下,单元测试成为确保代码质量的重要环节。

这是微30GB版本ZUNE处理时间的一段代码。

当是闰年的时候,days=366,year=2008,会出现死循环。

根据软件开发模型,先有需求,再根据需求实现代码,然后对代码进行测试。如果对上面的函数做了充分的测试,则可以避免发生这样重大的损失。

通过代码单元测试可以实现以下目标:

保证代码正确性:在代码单元测试中,开发人员通过编写测试用例来验证代码的输入输出是否符合预期,从而发现代码中可能存在的错误和缺陷。

提高代码质量:代码单元测试可以使开发人员更加关注代码的细节和边界条件,从而编写更加高质量的代码。

减少后期维护成本:通过代码单元测试,开发人员可以在开发阶段及时发现和修复代码中的错误和缺陷,从而减少后期维护成本。

增强代码可维护性:通过代码单元测试,开发人员可以编写可重复执行的测试用例,并且可以在代码修改后重新运行测试用例来验证代码的正确性,从而增强代码的可维护性。

增强代码可读性:测试用例可以作为代码的说明文档,帮助其他开发人员更容易理解和维护代码。

 

单元测试用例设计方法

 

单元测试是针对程序中最小的可测试单元——函数或方法,通过对其输入输出进行测试,以检测程序中的错误和缺陷。

测试,首先是基于需求的测试,根据需求设计测试用例,验证代码符合需求的预期功能,即黑盒测试;再是,根据代码结构设计测试用例,验证黑盒测试用例没有覆盖到的语句/分支代码,即白盒测试。

设计白盒测试用例分为手动编写与自动生成两种方式。

手动编写测试用例,可以通过以下方法:

– 等价类划分法

等价类划分,它可以将输入数据划分为若干个等价类,从而生成测试用例。

– 边界值分析法

边界值分析法,它通过测试边界值来检测程序中的错误和缺陷。可以有效地发现程序中的错误和缺陷,同时也可以大大减少测试用例的数量,从而提高测试效率。

– 错误猜测法

错误猜测法,基于之前的测试经验创建测试用例的设计方法

然而,手动编写单元测试用例需要耗费大量的时间和精力,因此自动化生成函数单元测试用例的技术越来越受到开发人员的关注。

 

下面是一些常见的自动化生成函数单元测试用例的技术。

– 模糊测试

模糊测试是一种动态测试技术,它通过随机生成输入数据并观察程序的响应来检测程序中的错误。模糊测试可以自动化地生成大量测试用例,并且在一定程度上可以发现程序中的一些隐蔽性错误。

– 符号执行

符号执行是一种静态分析技术,它可以推导出程序执行路径上的约束条件,从而生成测试用例。符号执行可以通过执行代码的所有可能路径来检测程序中的潜在错误。

– 基于规则的测试用例生成

基于规则的测试用例生成是一种面向规则的测试用例生成技术,它可以通过指定的规则集合生成测试用例。这些规则可以包括语法规则、语义规则、边界条件等,从而生成高质量的测试用例。

– 数据流分析

数据流分析是一种静态分析技术,它可以分析程序中的数据流动,从而确定程序的执行路径和约束条件。数据流分析可以生成测试用例,以覆盖程序中的数据流动情况。

 

LDRA对自动生成用例的支持

 

LDRA工具套件是一个灵活的平台,用于在加速、成本效益和需求驱动的过程中生产安全、保障和关键任务软件。该工具套件的开放和可扩展架构集成了软件生命周期可追溯性、静态和动态分析、单元测试和系统级测试,几乎可以在任何主机或目标平台上进行。

TBextreme 是可用于LDRA工具套件和 LDRAunit的可选模块。TBextreme模块通过为测试用例生成提供完全自动化的解决方案彻底改变了单元测试。通过易于使用的界面,可以调整测试用例生成参数以满足广泛的测试需求。

通过调整参数,改变它们的性质,可以方便的适应不同测试任务。例如,TBextreme可以帮助最大化代码覆盖率,以便在需求可追溯性不是优先考虑的情况下,进行快速有效的结构覆盖率分析;生成边界值,利用允许和不允许的边界值,以测试健壮性;或证明代码变更不会带来额外的问题等。

TBextreme详细的解决方案:

  • LDRA工具套件TBrun组件(或LDRAunit点产品)的补充模块
  • 根据静态分析期间获得的信息生成测试用例
  • 用TBrun变量、参数和桩处理技术来完全自动化该过程
  • 根据不同的测试过程,可以调整相关的参数
  • 可以通过手动创建的 TBrun 测试用例进行补充结果
  • 自动生成的测试可以像手动创建的测试一样重新运行、存储和修改

TBextreme带来的好处:

  • 自动创建测试用例,而不是通过手动输入
  • 能够实现高水平的代码覆盖率
  • 节省大量时间和成本的同时,提供快速可靠的结果
  • 通过额外手工补充测试用例,可以最大化覆盖率
  • 通过执行允许和不允许的边界条件、空指针和其他具有挑战性的条件来测试代码的健壮性

 

随着技术的发展,自动生成用例技术也越来越成熟,可根据代码结构生成大量的测试用例,对多数函数可直接实100%的结构覆盖,但100%的结构覆盖不代表函数没有任何问题,仍可能存在有逻辑与异常错误。因此,自动生成用例技术作为一种补充测试方案,仍需要结合基于需求的测试、及其他方案一起来使用。

总之,自动化生成函数单元测试用例已成为提高软件测试效率和质量的重要手段之一。开发人员,在手动编写基于需求的测试用例之外,可以利用LDRA TBExtreme技术自动化生成测试用例,在保证代码功能的同时,增强代码的健壮性,提高测试效率。

技术文章

姓名

公司

电话

邮箱