首先和小编一起来了解一下什么是单元测试吧!
1. 何为单元测试?
单元测试也叫模块测试或组件测试,是一项在可测试的最小单位在与程序的其他部分相隔离的情况下对其进行测试寻找缺陷并验证其功能的活动。
一般来说,要根据实际情况去判定单元的具体含义,其可以是一个函数、一个模块、一个类或一个对象等。
并且单元测试会先执行功能性(基于要求事项)测试,此外也执行界面测试、源代码相关测试和鲁棒性测试等特定的非功能性测试。
单元测试一般要在以编码为中心的运行环境下进行,因此需要像调试或编译工具等开发环境的支持。但在单元测试中有时会使用到驱动模块(driver)、桩模块(stub)和模拟器(simulator)等,因此并不需要非常完美的环境。
上图是汽车电子控制装置的功能安全性国际标准ISO 26262(Road Vehicles Functional safety)中提出的V模型。汽车相关行业皆需遵守该规定进行开发及验证工作,单元 测试则是右侧测试流程中最先进行的阶段。
汽车控制器通过接受危害分析和风险评估确立 ASIL(Automotive Safety Integrity Levels)等级,根据不同的等级又存在相应的推荐的方法或须满足的结构覆盖率( Structural Coverage: Statement Coverage、Branch Coveage、MC/DC)。
像汽车领域的ISO 26262一样,各行各业均有相应的应遵守的标准,国防及航空领域标准为DO-178B/C、铁路领域的为IEC-62279、EN-50128等。
2.利用Controller Tester进行单元测试的过程
单元测试的流程
首先,在Controller Tester中,基于环境信息(例如集成开发环境和目标软件的编译器版本)构建Build环境,然后继续构建测试环境,通过为每个单元创建一个项目来生成测试代码。
构建测试环境后,为顺利进行测试,需要追加测试代码,此时Controller Tester通过分析规范和代码, 反映所用变量的输入/输出或必要的存根信息来编写测试代码。
完成测试编码后,根据所反映的信息生成要执行的测试用例。创建测试用例的方法有很多种,其中最具有代表性的有等价类划分法和边界值法等。前者是把所有可能输入数据,即程序的输入域划分若干部分(子集),然后从每个子集中选取少量具有代表性的数据作为测试用例;后者则是利用发生错误概率较高的各集合的界限值进行测试。
测试用例由Controller Tester判断其必要性,利用上述方法直接生成或利用Controller Tester提供的自动生成功能自动生成测试用例。
Controller Tester提供的测试用例自动生成功能利用了多种测试用例生成组合方法,包括基于测试数据个数最多的变量简单组合而成的Flat组合,各所选的参数数据与自己以外的参数数据至少进行一次成对组合的Pairwise组合,以及在输入的参数变量分区列表的最小值和最大值之间的任意值按照用户定义的个数进行组合的Random组合等。
测试用例生成后,利用已编写的测试代码和测试用例进行测试,直到100%达到必须满足的结构覆盖率(Structural Coverage:Statement Coverage、Branch Coverage、MC/DC)之前需反复进行测试用例的生成和执行工作。此时,只要利用Controller Tester提供的能够轻易掌握覆盖率满足程度的"覆盖率视图"功能或能够确认函数内执行的分支的"控制流程图(Control Flow Chart)"功能,就可以更简单有效地进行单元测试。
测试结束后,在确认测试结果时,通过分析可能产生致命错误的部分或掌握无法满足覆盖效果的原因,可找出软件缺陷。
我公司的软件Controller Tester通过在目标环境或与目标环境类似的主机环境中配置嵌入式软件,可以帮您轻松进行测试。另外,Controller Tester支持测试设计、测试代码及数据生成、执行测试及覆盖率测定等各个阶段,具有测试自动化过程中所需的各种功能。
看了本篇技术文章后您是否对单元测试的理解又加深了些许呢?如果对您有帮助就请关注我们,期待下一篇的技术文章吧!