APP下载

基于VisualUnit的Linux项目单元测试方法研究

2017-07-31唐跃川彭汝凤涂小丽

微处理机 2017年2期
关键词:单元测试用例软件测试

唐跃川 彭汝凤 涂小丽

(重庆金美通信有限责任公司,重庆,400030)

基于VisualUnit的Linux项目单元测试方法研究

唐跃川 彭汝凤 涂小丽

(重庆金美通信有限责任公司,重庆,400030)

首先介绍了VisualUnit的功能特色,然后详细介绍了使用该工具构建Linux项目测试工程的方法,最后对使用过程中的技巧和使用过程中发现的工具本身的问题进行了总结和分析。该工具已经应用到了多个项目的测试中并取得了良好效果。

可视化测试;嵌入式系统;单元测试;白盒测试;测试工程;测试工具

1 引言

伴随着嵌入式软件行业的规模壮大并逐步成熟,嵌入式软件测试也在不断发展,而嵌入式Linux就是其中的佼佼者[1]。从最初的开发人员逐行调试向越来越规范化、流程化的方向发展。其活动过程也变得越来越复杂,如果不借助测试工具,则不仅效率低下、工作量巨大,甚至可能出现无法解决的问题,导致无法进行测试[2]。而单元测试又对测试人员的从业素质提出了更高要求。鉴于以上问题,利用一套好的单元测试工具来帮助软件测试人员提高工作效率和工作质量是非常必要的[3]。

Visual Unit(简称VU)是由广州凯乐软件公司研发的一款C/C++单元测试、可视编程工具[4]。对于软件开发来说,其支持eTDD开发模式(易行测试驱动开发),能够提升开发人员代码的质量及开发效率;对于软件测试来说,它可以完成100%的语句、条件、分支、路径覆盖,并提供详尽的测试报告和测试数据[5]。

2 功能特色

VU提供了以下一些特色功能:

(1)自动生成桩代码、驱动代码、用例代码和用例框架;

(2)使用表格编辑测试用例数据;

(3)提供依据有效值范围、分段点、指定组合等方式生成用例;

(4)提供底层函数输入、局部静态变量及终端模拟功能;

(5)提供用例设计器,自动找出遗漏用例、边界用例,实现全面、高效的覆盖;

(6)支持内部输出的自动判断。

3 环境搭建

对于Linux项目来说,为了提供交叉编译环境,必须先安装Cygwin。

完整的Cygwin可以从官网进行下载,目前有12G,这里使用VU技术支持提供的较低版本,它只包含VU需要使用的库文件和头文件等内容,只有120M左右,安装过程如图1所示。

图1 cygwin安装方法

安装完成后,会形成一个C:cygwin目录文件夹。

4 构建VU工程

这里,用某型通信控制器的一部分源代码为例,来说明构建Linux项目测试工程的方法。

这也是VU的一个特点,只要提供一个能编译通过的C/C++文件,就可以使用它进行单元测试,这就为某些大型项目在集成代码之前进行单元测试提供了基础,也为测试工程师从某些大型项目中挑选测试价值高的部分代码进行测试提供了有效手段[6]。

第二步,启动VU4,选择Linux项目模板,如图2所示。

图2 项目模板选择

然后,在“常规”面板中的“产品项目根目录”中选择需要测试的项目源文件,如图3所示。

其它选择默认,一直“下一步”到VU自动进行项目编译,可以得到如图4所示的编译结果:

图3 项目源文件选择

图4 初次编译结果

5 解决编译问题

由于Cygwin、Linux、VU4这三个软件的版本均较多,所以,它们之间兼容性很差。

同时,VU是不能指定编译器的,它使用VC6-Mini编译器来编译Linux项目,会产生很多编译问题,解决这些问题是单元测试能做得下去的前提[7]。

切换到Build Error界面,先来看第一个错误,如图5所示。

可以看到,错误类型是:外部申明函数clock_gettime()的类型有冲突。由于它是一个外部申明函数,其功能显然并不会影响对这个C文件进行单元测试,所以,解决问题的方式是:直接屏蔽该行代码,使用VU的自动生成庄代码功能来替代这个函数。如图6所示。

图5 类型冲突错误

图6 屏蔽外部函数

重新编译后,该错误消失,重新编译得到结果,如图7所示。

图7 修改源文件代码

直接在测试文件中增加预处理命令#include<linux/ip.h>,重新编译后,可以看到该类型的错误消失了,得到图8所示的错误报告。

图8 符号未定义错误

这是一个符号未定义错误,AF_PACKET这个符号,可以采用上面的方法,从.h文件里面找到这个符号的定义,然后添加这个头文件。然而,VU还提供一种更简单的解决方案,找到这个常量的定义之后,直接在测试文件中定义这个常量,这是为了避免在包含了这个符号定义的头文件之后,会引出更多的头文件包含,由于第5节开篇所说的原因,可能会引起更多的编译错误,使单元测试没法进行下去。而直接定义这个常量不会影响到测试结果,所以,这是一个比较好的解决方式。如图9所示。

图9 修改测试文件

保存之后重新编译,这个错误类型消失了,但是,会出现乱码提示的错误信息。这个时候,可以采用一种比较暴力的解决方式。首先,分析一下源代码,可以看出,这行语句是属于某一个语句块的中间代码,它并不包含任何的判断/条件,那就意味着,屏蔽这行代码之后,不会对这个函数的单元测试过程和结果造成任何影响;其次,这只是一个单独的错误,屏蔽它的工作量很小,不需要整篇代码去查找类似的错误并且作屏蔽工作,所以,可以直接屏蔽代码,然后重新编译。可以看到,这个错误已经消失了,并且没有引入新的错误,如图10-11所示。

图10 无效代码错误

图11 无效代码错误

现在报告的3个错误类型虽然不一样,但是其实质是一样的,都是由于中间屏蔽了部分测试代码,造成这些测试代码无效,那么,既然是无效的测试代码,直接删除就行了。将以上3个错误报告出现的测试代码删除后,重新编译,得到如图12所示的结果。

图12 得到正确结果

至此,表示编译链接顺利通过,已经可以开始表格驱动数据的测试用例设计了。

6 VU本身的问题

通过这个过程,可以总结出VU本身存在的一些BUG或者是使用上不太方便的地方,同时,在实际使用过程中,还发现一些VU存在的问题,下面分别列举:

(1)编译结果的错误提示中有乱码。

(2)不支持自选编译器,所有的嵌入式项目默认都使用VC-Mini编译器。

(3)测试VS系列项目时,使用导入工程文件的方式导入项目数据会丢失resouce.h文件。

(4)VU的多文件搜索功能不能准确定位查找目标。

(5)VU可能会自动导入多余的LIB库。

7 结束语

综合来讲,VU具备两个功能,其一是支持eTDD(易行测试驱动开发),其二是支持各种嵌入式项目、Linux项目、VC系列项目等的C/C++单元测试,且其覆盖标准为目前单元测试中最严格的欧美航空标准——MC/DC覆盖[8]。虽然其本身还存在很多BUG,对Linux项目的支持也不是很好,但是,所有的问题VU基本都提供了对应的解决方法,使得单元测试可以做得下去,较好的解决了单元测试“落地”的问题。同时,对于一直以来困扰企业单元测试实践的几个核心问题,诸如:编写测试代码花销较高、高标准的测试覆盖难以实现等等,都提供了对应的解决方法,使得其对提高代码质量和开发效率及测试效率、降低测试成本有很大的促进作用。

[1]余艳.软件单元测试技术研究[D].武汉:华中科技大学,2004. Yu Yan.Software unit testing technology research[D].Wuhan: HuazhongUniversityofScience and Technology,2004.

[2]黄铮.基于Junit的自动单元测试环境开发及应用研究[D].上海:上海交通大学,2005. Huang Zheng.Based on the development and application of the automatic test environment unit Junit[D].Shanghai: Shanghai JiaoTongUniversity,2005.

[3]丰励.单元测试技术研究与应用[D].武汉:华中师范大学,2008.Feng Li.Research and application of unit testing technology [D].Wuhan:HuazhongNormal University,2008.

[4]陈静.单元测试在软件开发过程中的作用[J].舰船电子对抗2006,6(4):31-32. Chen Jing.The role of unit testing in software development [J].shipboard electronic warfare 2006,6(4):31-32.

[5]聚光科技.单元测试指导手册[J].聚光科技股份有限公司,2010,13(1):19-20. Focusing technology.Unit test guidance manual[J].spotlight Polytron Research ofTechnologies Inc,2010,13(1):19-20

[6]王陈,左雪梅,黄烨明.实时嵌入式系统平台自动测试工具[J].计算机应用,2004,23(29):7-8. Wang Chen,Zuo Xuemei,Huang Yeming.Automatic testing tool for real-time embedded system platform[J].computer application,2004,23(29):7-8.

[7]CemKamer,Jack FaIk,HungQuoc Nguye,著.计算机软件测试[M].王峰,陈杰,喻琳,译.北京:机械工业出版社2004. Cem Kamer,Jack FaIk,Hung Quoc Nguyen Write,.Computer software testing[M].Wang Feng,Chen Jie,Yu Lin translation.Beijing:Mechanical IndustryPress,2004.

[8]赵斌.软件测试技术经典教程[M].北京:科学出版社,2007. Zhao Bin.Software testing technology classic tutorial[M]. Beijing:Science Press,2007.

Research on Linux Project Unit Testing Method Based on VisualUnit

Tang Yuechuan,Peng Rufeng,Tu Xiaoli
(Chongqing Jinmei Communication Co.,Ltd.,Chongqing 400030,China)

This article firstly introduces basic features of VisualUnit,and then particularly details the methods of building Linux project test engineering by the tool.Finally,the author summarizes and analyses techniques and problems of the tool in using.The tool is applied to project tests and achieves good results.

Visual testing;Embedded system;Unit test;White-box test;Test project;Test instrument

10.3969/j.issn.1002-2279.2017.02.012

TP311

B

1002-2279-(2017)02-0052-04

唐跃川(1983-),男,重庆市人,软件工程硕士,主研方向:软件测试。

2016-10-25

猜你喜欢

单元测试用例软件测试
UML用例模型中依赖关系的比较与分析
基于OBE的软件测试课程教学改革探索
联锁软件详细设计的测试需求分析和用例编写
從出土文獻用例看王氏父子校讀古書的得失
EXCEL和VBA实现软件测试记录管理
关于软件测试技术应用与发展趋势研究
软件测试工程化模型及应用研究
一年级上册第五单元测试
一年级上册一、二单元测试
第六单元测试卷