系列文章目录
LDRA Testbed软件静态分析_操作指南
LDRA Testbed软件静态分析_自动提取静态分析数据生成文档
LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建
LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果
LDRA Testbed软件静态分析_软件质量度量
LDRA Testbed软件静态分析_常见问题及处理
LDRA Testbed(TBrun)软件单元测试_操作指南
LDRA Testbed(TBrun)软件单元测试_实例讲解
LDRA Testbed(TBrun)软件单元测试_常见问题及处理
LDRA Testbed(TBrun)软件集成测试_操作指南
LDRA Testbed(TBrun)软件集成测试_实例讲解
LDRA Testbed(TBrun)软件集成测试_常见问题及处理
粉丝问题解答系列文章… …
其他持续更新中… …
文章目录
- 系列文章目录
- 前言
- 一、TBrun简介
- 二、TBrun界面简介
- 三、单元测试配置
- 1、新建测试工程
- 2、配置编译器
- 四、编写测试用例
- 1、创建测试序列
- 2、创建测试用例
- 3、编写用例描述
- 4、设置桩函数
- 5、插入初始化代码
- 6、设置输入输出
- 五、执行测试用例
- 六、覆盖率分析
- 七、导出测试用例
- 总结
前言
通过前面的几篇文章,使用Testbed进行软件静态分析的内容已经基本讲解完毕。从这篇文章开始,将继续讲解如何使用TBrun进行软件单元测试、软件集成测试。文章皆为本人的一些使用经验,若有不当之处,欢迎各位读者交流指正。
一、TBrun简介
TBrun是LDRA公司出品的软件单元/集成测试工具,其能够自动生成测试驱动、自动执行测试用例、自动统计测试覆盖率,测试人员只需要专注于测试用例设计,帮助开发人员和测试人员更高效地完成测试任务。
二、TBrun界面简介
TBrun软件界面如下:
①是日志信息窗口,比如生成测试驱动、编译测试程序、执行测试用例等过程,都会在窗口输出相应的日志信息。
②是测试用例窗口,显示已经设计的所有用例。
③是文件视图窗口,显示被测源码文件下的变量、类型、函数以及测试覆盖率等。
④是所有调用的函数视图,显示当前被测源码文件中的所有函数。
⑤是测试用例输入输出窗口,每一条测试用例都可以在这个窗口中设计相应的输入输出列表。
三、单元测试配置
1、新建测试工程
在TBrun的上方菜单栏点击Source -> Single File(单个文件)或Multiple Files(多个文件),在弹出的窗口中选择单个被测源码文件或多个被测源码文件:
以Single File(单个文件)为例,在select file窗口选择一个被测源码文件:
导入被测源码文件后,TBrun会自动进行静态分析,分析完成后,会显示出file view和calls view窗口显示相关信息:
2、配置编译器
点击TBrun中上方菜单栏的Configure -> LDRA Testbed Configuration Options -> Switch Compiler进行编译器配置:
在弹出的Configure Compiler窗口中确认Default Compiler和Source Compiler,以选择IAR编译器为例,切换编译器后点击OK即可:
需要注意的是:
1、Default Compiler和Source Compiler都应该选择目标编译器;
2、如果在列表中没有找到对应编译器,可以通过Add Compiler添加需要的编译器(需要先配置编译环境)。
四、编写测试用例
1、创建测试序列
在TBurn中是使用测试序列来管理测试用例和测试数据的,因此在新建测试用例前需要创建序列(为了方便管理,通常一个被测函数创建一个测试序列)。
在TBurn菜单中选择Sequence->New:
输入序列名称(为了方便管理,序列名以函数名命名),勾上Code Coverage选项(这样在运行测试用例后才会对代码覆盖率进行统计):
进行单元测试时,在Test Scenarios选项卡选择Isolate fully all code elements选项(完全隔离所有代码元素,即单元测试时,将本单元以外的调用全部默认打桩隔离):
点击“Continue”即可完成测试序列的创建。
2、创建测试用例
在TBurn界面的右上角文件视图窗口中,选中被测函数,鼠标右键->Create New Test Case创建测试用例:
弹出测试用例创建向导窗口,此时窗口会显示函数的相关信息,如果被测函数涉及到指针,还会引导你设置指针指向的实体,按照引导步骤操作即可:
创建好测试用例后,会在左下角窗口中生成相应的测试用例条目,在右下角会显示该测试用例的默认输入输出列表,如下所示:
3、编写用例描述
用例描述包括序列级别的描述和用例级别的描述。
1、序列级别的描述
在TBurn菜单中点击Sequence->Sequence Documentation,在弹出的下图窗口中进行描述即可:
2、用例级别的描述
选中相应的测试用例,鼠标右键->Documentation & Requirements->Documentation,在弹出的下图中进行描述即可:
在测试用例描述中,建议可以填写被测软件版本、设计需求追踪、测试类型、测试方法、测试用例概述等,用于测试用例的管理、维护,以及生成测试文档。
4、设置桩函数
桩函数是被测试函数调用的子函数的一个替代函数,使得测试时不用关注原调用函数的具体功能,可以专注于被测函数本身的实现逻辑。对于桩函数有很多可选操作,涉及到桩函数的形参输入检查,形参输出赋值,桩函数返回值设置,桩函数修改全局变量(C++中还包括改变成员变量)、插入桩函数代码等。
函数打桩有两种方式:
1、选中测试用例,鼠标右键->Stub Management,这样的桩函数设置是跟选中的测试用例绑定的:
2、在函数调用列表中,单元测试模式默认会将所有调用函数打桩(系统函数除外)。选中要打桩的函数,鼠标右键->Managed Stub Properties可以进行全局桩设置:
选择template for new test cases,可以设置一个全局的测试桩模板,这样在新建的测试用例中会默认带有这个桩模板(测试用例中如果未更改,则会作为每一个测试用例的默认桩设置;测试用例中如果更改了这个桩,其会被测试用例中的桩设置覆盖):
最常用的桩函数设置有:对无返回值的函数打空桩(仅打桩,什么都不设置)、对有返回值的函数设置返回值(set return value on exit)、插入桩函数测试代码,实现对某些变量的赋值(set code segment)。
5、插入初始化代码
在被测函数中,有时会用到结构体指针或数组等变量,此时如果通过创建IO Variable的方式进行初始化,会导致要创建的IO Variables非常之多。因此,可以通过插入初始化代码的方式完成数组等的初始化。
1、序列级的初始化(对所有用例有效)
在TBurn菜单中点击Sequence->Code Inserts->Sequence Initialisation Code:
2、用例级的初始化
选中相应的测试用例,鼠标右键Code Inserts->Initialisation Code:
6、设置输入输出
在Variables I/O view窗口里的变量,在最左边有输入/输出的标识,输入以“I”标识,输出以“O”标识(此处的输出是指预期的输出值)。这些变量列表的Name、Type、Use等都可以根据自己的测试需要进行修改。对于标识为“I”的输入变量,一定要在输入框中填写一个确定的值,否则用例无法执行。
根据实际的测试需求,如果发现默认的测试用例I/O窗口中缺少相关输入输出变量,可以在Test Case View窗口选择测试用例并右键添加相关的输入输出变量,如下图,自己创建或导入即可:
能添加到I/O窗口的变量包括:
1、形参:包括输入赋值,输出检查;
2、全局变量:包括代码里的全局变量和用户自定义的全局变量,全局变量的处理包括输入赋值,输出检查;
3、C++里的成员变量:包括输入赋值,输出检查;
4、函数返回值。
注意:不能添加被测函数的局部变量,局部变量的作用域仅限于被测函数内,不能被单元测试用例访问。
结合实际的测试需求,填写测试用例的测试输入(以“I”标识的输入列表)、期望输出(以“O”标识的输出列表),如下图所示:
五、执行测试用例
测试用例的执行包括2种方式:
1、分步骤执行(生成、构建、执行驱动、输出测试结果及覆盖率情况):在TBurn菜单中的“Run Driver”中,或者在Test Case视图左下角按钮中,依次选择 Generate Driver、Build Driver、Execute Driver、Split Driver Output、Process Driver Output;
2、一步执行:在TBurn菜单中的“Run Driver”中,或者在Test Case视图左下角按钮中,选择Run Test Case Driver;
执行结果如下所示:
从上图可以看出测试用例的结果是PASS/FAIL。同时可以通过弹框右下角的Report查看相应的用例报告。
第1条用例PASS后,可以直接copy第1条用例生成第2条用例,然后再修改用例2的输入输出即可,直到有足够的测试用例来完成测试。
六、覆盖率分析
测试用例执行完成后,相应的代码覆盖率会实时更新,在file view窗口可以看到整个源码文件的覆盖率,以及当前被测函数的覆盖率,包括语句覆盖、分支覆盖、MCDC覆盖等:
在显示的覆盖率上右键选择“view pass/fail + flow diagram”,可以显示详细的代码覆盖情况:
七、导出测试用例
单元测试用例设计并执行完成后(函数功能全部验证通过,并且覆盖率也达到要求),此时该函数的单元动态测试结束。为了方便后续回归测试,需要将测试用例导出。具体操作如下:
在TBurn的菜单,选中Sequence->Export Test Case(TCF),通过文件浏览窗口选择保存路径,保存对应的TCF文件即可:
总结
以上就是如何使用Testbed(TBrun)进行软件单元测试的过程,上述步骤仅为流程性操作讲解,下一篇文章我将以一个被测函数作为示例进行进一步介绍。