摘 要针对嵌入式软件单元测试,开展了一定的工程实践,明确了单元测试的要求,介绍了如何达到覆盖率测试的充分性以及结合工具开展单元测试的方法,有利于提高软件单元测试的有效性。
【关键词】Testbed/Tbrun 软件单元测试 嵌入式
单元测试是保障软件质量的重要技术手段,其过程十分复杂,如果不借助辅助工具,仅靠人工处理,则不仅效率低下,工作量巨大,而且可能出现无法解决的问题。因此,利用一套好的单元测试工具帮助测试人员提高工作效率、工作质量是非常必要的。
1 单元测试的定义
单元测试(***1和***2)是一个在隔离状态下测试单个***软件单元的过程,而集成测试(***3)允许好几个单元的同时分析,是多单元测试。因此,在单元测试时,需要模拟被测单元与其他模块之间的交互,开发驱动模块和桩模块构建一个可执行的环境。
2 单元测试的要求
单元测试重点要考虑的测试类型有:
2.1 功能测试
根据需求的关键成都选取相应单元开展单元测试(建议需求的关键程度为关键、重要的单元应100%开展单元测试,需求的关键程度为一般的单元可以通过代码审查验证其功能)。
2.2 覆盖率测试
根据软件等级确定覆盖率测试(见表1)。
3 如何达到充分的覆盖率测试
3.1 根据对被测程序的期望实现的功能来构造最有可能的功能测试
这些功能从软件需求说明书或用户文档获得。在加载测试数据的情况下,应该能够通过测试工具监控源代码的执行。当实现功能测试的数据用完后,检查覆盖率来发现程序中的哪些部分仍然没有被测到。应该进一步的构造测试数据并进行执行、分析。一直持续到进行功能测试的数据被执行完或者达到所需的测试度量标准。如果测试数据执行完那么进行(3.2);否则的话(达到测试度量标准的要求)那么任务就完成了。
3.2 检查测试覆盖度量指标
如果语句覆盖率没有达到完全覆盖,那么可能是由于某个特殊的用例运行失败,错误退出等造成的。为了将代码中的每一行都执行到,将程序执行多次通常是必须的。通常功能测试只能覆盖程序中40%到60%的可执行语句。当语句覆盖达到完全,每一条语句都被执行时,便可进行(3.3)。
3.3 检查所有没有被执行的分支
通常这些分支中的一部分可以通过构造专门的用例实现对它们的测试。找出程序中未执行分支,将分支测试充分实施后再进行(3.4)。
3.4 有些没有执行到的分支和路径,是由于相关的测试用例只有在程序执行出错或者计算出错的错误状态下才能实现
这些通常是和程序的冗余保护设计相关,这样的路径应该完整的保留。一旦不可行测试路径被去掉,那么源代码将会更加有效、健壮并且占用更少的空间。
4 Testbed/Tbrun在单元测试中的应用
使用/Tbrun可自动产生软件测试的驱动、桩模块,从而节省时间,测试人员可将重点放在设计测试用例上,提高软件测试效率。使用Testbed/Tbrun的基本方法:
(1)在已集成了开发环境的Testbed中加载被测软件单元。
(2)创建并设计测试用例。设置输入变量值。Testbed/Tbrun创建的测试用例,初始默认的输入变量有时可能不满足实际执行路径的要求,也有可能存在当前执行路径不需要的输入变量,可将多余的输入变量删除掉,输入变量选择完成之后,根据希望被测函数执行的路径,设置各输入变量的值;设置桩函数。Testbed/Tbrun能够通过对被测函数的分析自动为被测函数生成桩函数,在桩函数管理界面,选择需要进行设置的桩函数,分析判断是否需要设置桩函数的返回值,还是需要通过调用桩函数改变某些全局变量的值;执行测试用例。设置完成输入变量和桩函数之后,就可以开始执行测试用例了。
(3)查看覆盖率信息。每成功执行一个测试用例后,Testbed/Trbun都会统计当前测试用例执行的路径以及相应的覆盖率,其中“S”表示语句覆盖率,“B”表示分支覆盖率,“MCDC”表示MC/DC覆盖率,即修正条件/判定覆盖率。
(4)动态覆盖率报告的保存。动态覆盖率报告以.c文件为基本单元,包含当前.c文件中所有函数的动态执行情况,建议每执行完成一个函数的单元测试之后,为各被测函数单独保存动态覆盖率报告,在该报告中找到被测函数的具体动态执行信息。
在实际应用中,需要注意以下几个方面:
(1)main函数的测试。Testbed/Tbrun不支持直接对名称为main的函数进行单元测试,可通过修改main函数的名称后再进行单元测试,如将main函数名称修改为testmain等。
(2)指针变量的测试。Testbed/Tbrun不支持直接对指针进行引用的操作,容易跑飞,需要将指针映射到相应的变量,Testbed/Tbrun支持对指针进行映射。
(3)指针指向绝对的内存地址。在头文件中,代码可能包含下列风格,用#define来引入绝对内存地址。例如:#define CONGIG_PAGE_1_ADDR 0x418000,然后在函数中直接从绝对地址中写入和读出数据。当在一个主机/主机的测试环境中运行这个函数时,内存访问违反将发生,易出现程序跑飞的现象。
5 结论
相对于完全人工测试,使用Testbed/Tbrun工具测试提高了工作效率、工作质量。因此,Testbed/Tbrun可以较好地支持嵌入式软件单元测试的开展。
参考文献
[1]GlenfordJ.Myers.软件测试的艺术[M].北京:机械工业出版社,2006.
转载请注明出处学文网 » 基于Testbed/Tbrun的嵌入式软件单元测试