Wings是一款用于单元测试测试用例驱动框架自动生成工具,简单来说这款工具主要是全自动生成单元测试驱动代码与测试数据。
下面我们尝试使用Wings来完成单元测试框架与测试数据的自动生成。
首先准备好需要测试的C语言工程,本文以大型开源软件Mysql为例。
第一步:打开Wings工具,选择被测工程的主要目录。
第二步:点击工程操作中的分析生成,对工程目录下的.c文件进行解析,保存为XML的格式,生成的文件保存在工程目录下的FunXml与GlobalXml中,分别是函数信息与全局变量的信息,点击驱动文件结构图,即可看到对应文件的函数结构信息。
上图可以查看所有.c文件的驱动函数,以及函数所对应的参数信息与全局变量的信息。
第三步:点击功能操作驱动生成,完成项目的驱动框架自动生成,驱动文件保存在Wings_projects下的Driver文件夹下。点击驱动文件,即可看到对应.c文件的驱动生成代码。
点击单个函数,可以高亮定位到函数所在位置,并且双击函数参数,可以定位到每个参数的赋值单元,查看每个参数的具体驱动赋值代码。
第四步:点击值功能操作的值生成按钮,则对应生成测试数据。
界面上显示为单个函数的测试数据,可依据需要修改测试次数,重新生成测试数据文件,也可依据需要修改特定的测试数据。
第五步:将驱动文件加载到所在工程目录,与源文件一起编译,即可运行。
如果想查看对应的函数信息与全局变量信息,则右键对应打开对应的Parameter Struture Description(函数信息结构体)与Global Parameter Struture Description(全局变量结构图)。
Parameter Struture Description(函数信息结构体):显示函数的名称,参数个数,参数类型以及复杂类型的展开形式。
Global Parameter Struture Description(全局变量结构图):显示全局变量的结构信息。
使用过程中注意事项:
(1) 编译源文件过程中,需要手动注释调源文件中的main函数,Wings将自动生成调用驱动函数的主函数。
(2) 遇到特殊类型的赋值或者系统变量的驱动构造,可自行添加模板赋值方式,添加之后,再次生成驱动文件即可。
例如:遇到FILEL类型的赋值,可在模板中添加对应的赋值方式。
通过前面得介绍可以看到Wings的应用非常简单,下面是以在Visual Studio 2015中可正常编译的Mysql 代码为例,生成的测试数据的统计指标,整个生成过程实现了全部自动化。
使用Wings为开源软件Mysql生成单元测试用例集:
Mysql版本 |
5.5 |
C语言代码文件个数 |
578个 |
分析所用时间(PSD生成时间) |
149.099s |
驱动生成所用时间 |
27.461s |
值生成所用时间 |
84.974s |
电脑配置说明:
操作系统 |
Windows7 |
处理器 |
Inter(R) Core(TM) i7-7700cpu 3.60GHz |
内存 |
8.00GB |
系统类型 |
64位 |
以下是使用源码统计工具得到的结果,虽然多达400多万行有效的单元测试代码是由Wings全自动生成的,有意思的是可以看到这些代码采用人工开发的成本高达1079个人月,成本更是达到了1079万之多。
Wings实现了由程序自动生成程序的第一步探索,目前发布的是第一版,有兴趣的开发者直接在码云平台(https://gitee.com/teststars/wings_release进行下载),商业授权提供了一个月无限功能体验期,可以快速Wings的神奇能力,Wings c语言版支持多平台,例如visual studio、vxworks、gcc、qt等。Wings由星云测试(www.teststar.cc)团队设计和研发,有兴趣的开发者可以通过码云的互动平台与星云测试团队取得联系,贡献自己的设计思路和产品使用反馈。Wings具有强大的、底层的大幅度改进软件质量的基因,未来Wings的将深度优化自动编写的程序的可读性(更接近优秀程序员的编写水平)以及对于c++语言的支持。