VisualUnit用户使用手册第一章软件介绍1.1概述VisualUnit是一种可视化、自动化、标准化、高效率的C/C++单元测试工具,主是是提升开发人员代码的质量及开发的效率。功能强大并且易学易用。1.2软件特色自动生成桩代码、驱动代码和用例框架自动生成用例代码,人工及时干预避免生成垃圾;自动将数据移到表格中,支持表格中编辑用例;根据有效值范围、分段点生成测试数据;根据指定组合生成用例;无需编程解决底层函数不可控、失真、难于初始化;无需编程解决局部静态变量的用例中控制,以及中断模拟;用例设计器高效找出遗漏用例实现高覆盖;支持内部输出的自动判断;自动生成边界测试用例。第二章软件安装与卸载2.1软件安装环境·软件运行环境要求:操作系统:Windows2000,WindowsXP,WindowsServer2003,WindowsVista。内存:128M,推荐256M。硬盘空间:200M。支持语言C/C++。测试IDEVU采用用户提供的编译编辑环境来编译编辑测试代码,称为测试IDE。支持的测试IDE包括:VC6.0、VC2003、VC2005、VC2008、Code::Blocks(使用GCC编译器)。·对嵌入式项目的支持自动解决各种嵌入式项目的平台差异和编译差异,以及自动模拟底层调用包括操作系统API,支持各种嵌入式项目及Linux项目。如果测试嵌入式项目有困难,可与技术支持联系,技术支持可以根据项目特点定制工程模板。在“帮助”菜单,单击“技术支持信息”,可查看技术支持联系方式。2.2软件安装过程运行安装程序VU27Setup.exe在安装向导点击“下一步”按钮通过“浏览”按钮选择软件的安装路径,点击“下一步”按钮点击“安装”按钮进入软件安装过程软件安装进度显示最终显示软件安装成功,选择是否直接启动该软件,点击完成按钮即可2.3卸载过程从控制面板/添加删除程序或运行“开始”菜单下“VisualUnit2\卸载VisualUnit2”程序卸载.出现如下图对话框第三章新建工程在主工具栏单击,或在“工程”菜单单击“新建工程”,即可打开“新建UDT工程向导”。3.1模板选择一个项目可以建立任意数量的UDT工程,建立项目的第一个UDT工程时,先选择开发IDE,再在右边的模板列表中,根据项目特性选择合适模板;UDT工程建立后,自动保存为模板,并出现在“或选择现有项目”框内,建立第二个或更多的UDT工程时,可选择先前的UDT工程作为模板,通常只需设定不同的被测文件和外围文件。3.2导入数据只有当开发IDE为VC6.0时,才会出现“导入数据”页,可选择.dsp文件导入项目数据,也可以直接点击“下一步”。3.3常规信息设定UDT工程的基本信息。建立项目的第一个UDT工程时,通常只需选择“产品项目根目录”和填写“UDT工程名称”,建立项目的第二个或更多的UDT工程时,通常只需填写“UDT工程名称”。可将任务简写、模块名称或负责该模块的开发或测试人员的姓名,作为“UDT工程名称”。“语言”、“开发IDE”及“测试IDE”不能更改,如果不正确,请返回选择正确的模板。3.4设定测试任务点击复选框,将需测试的源文件设为T,不需测试但可能要使用的底层或关联源文件设为N,设为X的文件将被隔离,必要时自动打桩。以后可从工程菜单打开“工程属性”,重设源文件类别或指定新加入的源文件的类别。能够设为N的源文件不要设为X,即尽可能减少打桩。作为一种策略,以后可在代码菜单单击“屏蔽桩代码”,临时屏蔽桩代码,利用链接错误找出本应链接的库和本应链接的源文件,以避免不当打桩。按住Shift键,点击前面的加号,可递归展开设定完测试单元后,点击“下一步”按钮点击“下一步”按钮点击“下一步”按钮点击“完成”,VU会自动解析代码,生成桩、底层模拟、测试驱动、用例框架,然后自动启动测试IDE,并自动打开测试工程。解析过程中,“系统信息”窗口会打印错误及警告信息。由于“工程属性/高级”页未曾设置,点击完成后,在VU自动解析过程中,往往会出现各种链接错误。解决方法是修改工程属性。点击主界面工具栏,或在“工程”菜单单击“工程属性”,打开“工程属性”对话框,根据“系统信息”窗口打印出错误及警告信息根据3.5里的方法进行修改。3.5常见错误及解决方法·文件[xxx]包含的文件[xxx.h]未找到常见的原因是头文件搜索目录遗漏。与一般编译器一样,VU搜索头文件时,不搜索子目录。切换到“头文件”页,增加include目录。VU具有自动搜索头文件所在目录的功能,如果认为未找到的头文件可能是库头文件,则点击“库头文件”右侧的“搜索”按钮,否则点击“常规头文件”右侧的“搜索”按钮。打开如下图所示的对话框,未找到的头文件已经自动列出,搜索的起始目录也已设好,如果需添加其他起始目录,请点击“添加”,不需要的起始目录,可点击选中后,再点击“删除”。点击“查找”,“查找结果”框中会列出所有包含这些头文件的目录(如果在多个目录下有同名头文件,全部列出),请检查,并将不正确的目录删除。最后点击“加入”。另一种比较少见的原因是编译条件遗漏。编译条件是指产品项目使用了用户设定的“预处理定义”(可在工程Setting中查看,如,VC6.0,PreprocessorDefinitions为“WIN32,_DEBUG,_CONSOLE,_MBCS,MY_DEFINE”,则“MY_DEFINE”就是“编译条件”),为了让VU的解析结果以及测试代码的编译结果与原项目一致,UDT工程和测试工程也要使用这些“编译条件”。解决办法:切换到“高级”页,点击“预处理选项”,在“预处理定义”输入框中,加入编译条件。测试工程的项目Setting中也要加入同样的编译条件。错误:未找到预编译头文件[xxx.h]解决办法:切换到“高级”页,点击“扩展”,打开“扩展”对话框,选中“不使用预编译头文件”。·警告:引用了同名头文件可能导致错误,如果确认引用多个同名头文件是没必要的,请切换到“头文件”页,点击“详细分类”,将不使用的头文件设为X。警告:引用了同名头文件可能导致错误,如果确认引用多个同名头文件是没必要的,请切换到“头文件”页,点击“详细分类”,将不使用的头文件设为X。·警告:头文件缺少预处理“哨兵”预处理“哨兵”是指:#ifndefXXX#defineXXX//文件内容#endif用于防止头文件被重编译,重编译可能产生“标识符重定义”错误,如果头文件不需要重编译,建议在产品项目的头文件中加上“哨兵”。·警告:预处理“哨兵”已在其他文件定义可能因代码未编译产生“标识符未定义”错误,建议修改产品代码,消除不同头文件的相同预处理“哨兵”。·警告:在头文件中定义变量可能产生重定义错误,建议将产品代码的变量定义移到源文件,头文件只保留声明。·警告:目录太深或太长由于VU会自动处理#include指令,目录太深或太长可能导致#include指令超过测试IDE的长度限制,引起编译错误,建议将项目移到较浅的目录中并缩短根文件夹名,重建UDT工程。界面总体布局如下图所示第四章建立用例测试的目的是检查程序的功能逻辑是否符合设计,即检测程序在各种输入下是否产生了正确的输出,因此,一个典型的测试用例完成以下工作:设定输入数据、执行程序、验证输出是否符合预期。4.1.设定输入输出数据点击中间工具栏,打开输入输出生成器,如下图所示,填入要传入的参数值,预计要输出的返回值,及用到的成员变量及全局变量。数据格式与标准C/C++语言的“文字常量”完全一致,也支持宏和enum。·字符串如:abcd·宽字符串如:Labcd·字符如:'a'·宽字符如:L'a'·整数如:1234、0xFF12·单精度浮点数如:12.00F·双精度浮点数如:123.456·宏,如:TRUE//#defineTRUE1·enum,如E1//enum{E1,E2};上图左下角有个表格化的选项,如选中,设定完成后,在用例数据窗口里将自动添加到表格里也可以直接在用例数据表格里修改输入输出值。4.2.一次设定多个用例在“用例数据”页面里,选中一列,点击中间的按钮,可复制选中的列,再对其修改输入输出值。·批量添加用例数据点击,打开“用例生成/检查器”,如下图。·自动生成用例数据在如上图的“用例生成/检查器”中,点击“生成数据”,打开如下对话框,可以自动为数字类型生成数据。其中,“有效值内的分段点”,是指在有效值范围内,可能需分类处理的数据的分界点,例如,一个表示年龄的整数,有效值范围为0-200,程序需对不同年龄段做不同的处理:10岁以下为儿童、20岁以下为青年、60岁以上为老人,那么,分段点填写10,20,60(用,分隔)。如果自动生成的数据与“用例生成/检查器”中的现有数据重复,会自动删除。自动生成用例数据可以提高用例设计的效率,也有利于提高数据取值的完整性。下图是设定输入之间的组合,单击行首或列首,可以重置全行或全列。系统会保证设定的组合得于覆盖。填写预期输出用例数据生成器只生成用例的输入,需为每个用例设定预期输出。表格中,与左边单元格相同的数据可以省略,如下图,用例2的预期输出与用例1相同,用例5的预期输出与用例4相同,都可以省略。设定完用例后,点击中间的工具栏,执行测试代码。第五章测试输出及应用测试输出信息主要有四个窗口,如下图所示:5.1.数据窗口数据窗口显示成员变量、参数的输入/输出值,返回值和内部输入,以及内部输出。内部输入是指子函数所产生的数据,如子函数的返回值、输出参数的结果值,内部输入通常由底层模拟设定;内部输出是指在代码的任何位置指定输出的变量或表达式的值。5.2.代码窗口·当前用例所执行的代码当前用例所执行的代码用黑色显示,当前用例未执行的代码用红色显示。注释用绿色显示,其他代码(流程控制关键字及其括号,{},逻辑操作符,字符和字符串)一概用蓝色显示。·未覆盖代码字体颜色为红色且背景色为淡红色的代码是未覆盖代码(所有用例均未执行)。语句覆盖的统计单位是语句块,语句块是指一组语句序列,在该语句序列中,如果第一条语句执行了,在未发生异常的前提下,其他语句也会执行。判定中的每个条件,按一个语句块计算。语句覆盖率=已覆盖语句块数/全部语句块数,请参考信息窗口。浏览当前用例所执行的代码,结合数据窗口,程序行为一目了然,可以实现VTDD,也容易找出错误原因。·条件覆盖与MC/DC条件覆盖的统计单位是条件的取值(真/假)。条件前面的[T]表示该条件的真值未覆盖,[F]表示假值未覆盖。条件覆盖率=已覆盖条件数/全部条件数。MC/DC的核心意思是每个条件独立影响判定结果,如果某个条件未独立影响判定结果,将在前面加上[M]。·用例设计点击未覆盖语句,或条件前面的[T]、[F]、[M],右键菜单选择“用例设计”,即可切换到用例设计器,为选中的语句、条件、或MC/DC设计覆盖用例。条件的覆盖分为三个层次:最低层次是条件语句的覆盖、其次是真值和假值的覆盖、最高层次是MC/DC。由于完成了[T]或[F]覆盖,条件语句即可完成覆盖,因此,没必要为条件语句覆盖设计用例,未覆盖的条件语句不能点击。如果某一语句块无法覆盖(测试用例设计器中,待满足条件和已满足条件冲突),则该语句块是冗余的,应考虑删除。100%的语句覆盖是很容易达到的,也是必须的。5.3.信息窗口信息窗口从总体上提供测试结果信息。·测试用例:总的测试用例数。·当前用例:当前显示的测试用例编号,从1开始。数据窗口、代码窗口、路径窗口显示的都是当前用例的数据。所有窗口的快捷菜单都可以切换当前用例。·语句覆盖:显示已覆盖的语句块数/全部语句块数以及语句覆盖率。·条件覆盖:显示已覆盖的条件值数/全部条件值数以及条件覆盖率。·分支覆盖:显示已覆盖的分支数/全部分支数以及分支覆盖率。·C/DC(判定条件覆盖):显未判定条件覆盖率。·路径覆盖:显示已覆盖的路径数/全部路径数以及路径覆盖率。·MC/DC(修改判定条件覆盖):显示修正判定条件覆盖率。·测试断言:显示全部断言数和失败断言数。断言数就是TEST_ASSERT()的数量。·测试