VisualUnit使用基础手册.docx

上传人:b****5 文档编号:5791143 上传时间:2023-01-01 格式:DOCX 页数:27 大小:1.24MB
下载 相关 举报
VisualUnit使用基础手册.docx_第1页
第1页 / 共27页
VisualUnit使用基础手册.docx_第2页
第2页 / 共27页
VisualUnit使用基础手册.docx_第3页
第3页 / 共27页
VisualUnit使用基础手册.docx_第4页
第4页 / 共27页
VisualUnit使用基础手册.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

VisualUnit使用基础手册.docx

《VisualUnit使用基础手册.docx》由会员分享,可在线阅读,更多相关《VisualUnit使用基础手册.docx(27页珍藏版)》请在冰豆网上搜索。

VisualUnit使用基础手册.docx

VisualUnit使用基础手册

VisualUnit顾客使用手册

 

第一章软件简介

1.1概述

VisualUnit是一种可视化、自动化、原则化、高效率C/C++单元测试工具,主是是提高开发人员代码质量及开发效率。

功能强大并且易学易用。

1.2软件特色

∙自动生成桩代码、驱动代码和用例框架

∙自动生成用例代码,人工及时干预避免生成垃圾;

∙自动将数据移到表格中,支持表格中编辑用例;

∙依照有效值范畴、分段点生成测试数据;

∙依照指定组合生成用例;

∙无需编程解决底层函数不可控、失真、难于初始化;

∙无需编程解决局部静态变量用例中控制,以及中断模仿;

∙用例设计器高效找出漏掉用例实现高覆盖;

∙支持内部输出自动判断;

∙自动生成边界测试用例。

 

第二章软件安装与卸载

2.1软件安装环境

·软件运营环境规定:

操作系统:

Windows,WindowsXP,WindowsServer,WindowsVista。

内存:

128M,推荐256M。

硬盘空间:

200M。

支持语言

   C/C++。

测试IDE

   VU采用顾客提供编译编辑环境来编译编辑测试代码,称为测试IDE。

支持测试IDE涉及:

VC6.0、VC、VC、VC、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"     

 ·宽字符串如:

L"abcd"

 ·字符如:

'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()数量。

·测试状态:

如果测试断言所有通过,显示一种绿条,否则显示一种红条。

·失败测试:

如果存在失败断言,列出失败断言及其文献名和行号。

   如果存在失败断言,表达程序代码存在错误或预期输出是不对的。

   单击失败断言,产生失败断言用例成为当前用例,其她窗口将显示有关数据。

   双击失败断言,切换到用例数据窗口或用编辑器,并选中产生失败断言用例。

5.4.途径窗口

途径窗口画出逻辑构造图,并标示未覆盖分支和途径

·删除/恢复

   分支构造、分支、语句块、途径都是可删除,如下图所示,点击选中某一对象,从快捷菜单中选取“删除”或“恢复”命令,即可删除或恢复该对象。

删除或恢复一种对象时,会重新记录程序途径,信息窗口有关数据会发生变化。

·删除不可达分支

   有些分支是明显不可达,如循环构造形成分支,如果必定会进入循环,那么不进入循环分支就是不可达。

为未覆盖分支设计测试用例时,如果待满足条件和已满足条件冲突,则该分支是不可达。

不可达分支删除后,所有通过该分支途径会自动删除。

·删除不可覆盖途径:

   为未覆盖途径设计测试用例时,如果待满足条件和已满足条件冲突,则该途径是不可覆盖。

被删除途径,信息窗口视为不存在,但逻辑构造图中只是在途径入口处画个红X,随时可以恢复。

逻辑构造图在记录途径时依然把已删除途径计算在内,因而,途径数量会与信息窗口不相似。

第六章高档技巧

6.1.底层模仿

6.1.1什么是底层模仿

底层模仿就是在用例中模仿、控制子函数行为,使底层函数产生数据像参数同样可以在用例中设立,称不内部输入,涉及:

指定子函数返回值;指定子函数输出参数成果值;指定成员变量值(仅限于C++);指定全局变量值。

6.1.2为什么要引入底层模仿

·解决失真:

子函数未实现或被隔离,则用自动生成桩函数来代替。

由于桩函数普通什么也不做,导致失真,使测试无法进行,因而,调用隔离函数时应在用例中设定其行为,以便模仿真实情境。

·子函数不可控或不符合测试规定:

子函数行为难于控制,例如调用一种通过硬件取环境温度函数,环境温度显然不能按测试规定迅速变化;再如调用一种返回随机数函数,需要该函数返回指定值,真实代码无法返回指定值。

子函数从文献或数据库中读取数据,数据也许不存在或不符合测试规定,但愿在用例中设定;子函数某些行为难于浮现,例如读取内存失败,连接网络失败等,但愿在用例中设定;程序某些执行逻辑很难通过变化参数或其她变量来覆盖,但愿通过控制子函数输出来覆盖,

·难于初始化

被测试函数某些输入也许很复杂,但仅用于传递给底层函数,以便获得一种简朴值,这种情形可以直接设定底层函数输出,避免复杂初始化。

对于一种函数来说,需要直接读取数据往往并不多,复杂输入多是传递给底层函数数据,巧用底层模仿可以大幅减少用例设计难度。

·控制局部静态变量

局部静态变量与全局变量同样,测试时需在用例中控制,但用例中却无法访问。

·模仿中断

惯用于嵌入式测试,可模仿中断导致全局变量修改

·“控制测试”

“控制测试”,就是测试程序“在某种条件下,与否做了某个动作”,只需要懂得做了没有,不需要判断或无法判断输出数据。

 

6.1.3底层模仿实现办法

主界面右侧切换到用例代码窗口,在左侧函数代码窗口双击子函数名或参数,即可打开“底层模仿器”并自动填好初始数据,如下图。

如果被测试代码未编写,可用右键菜单打开“底层模仿器”。

·底层模仿器基本使用

在函数代码窗口,双击子函数名或参数,即可找开“底层模仿器”,并自动填好初始数据,如下图。

如果被测试代码未编写,可用快捷菜单打开“底层模仿器”。

控制局部变量和模仿中断,不需要打开底层模仿器

“子函数名”编辑框:

填写子函数名,普通会自动填写;

“不可屏蔽”复选框:

如果选中,那么该底层模仿总是有效,否则,当在“设定”“测试”页选中了“屏蔽底层模仿时”时,底层模仿会被屏蔽,改为调用实际代码或空桩。

“子函数名”编辑框:

填写子函数名,普通会自动填写;“不可屏蔽”复选框:

如果选中,那么该底层模仿总是有效,否则,当在“设定”“测试”页选中了“屏蔽底层模仿时”时,底层模仿会被屏蔽,改为调用实际代码或空桩。

“设定哪个值?

”单选钮:

选取调用该子函数后,需要设定数值目的对象,如果选中“仅判断调用次数”,则不设定任何数据,仅判断子函数调用次数与否符合预期。

“预期调用次数”单选钮:

底层模仿功能还可以自动计算子函数调用次数,不符合预期时会报告错误,缺省值为“忽视”。

此功能普通合用于非表格化用例,对于表格化用例来说,由于指定预期调用次数对表格中所有用例有效,而不同用例实际调用次数也许不同,因而易发生误报。

“前置代码”编辑框:

如果模仿值是复杂对象或对象指针,在这里定义和初始化该对象。

“模仿值”编辑框:

设定模仿目的成果值,分为四类:

数字,字符,字符串,对象。

数字直接填写,如1234或123.789,字符要加单引号,如'a',字符串要加双引号,如"VISUALUNIT",对象要先在前置代码中定义并初始化,然后填写对象名或指针,如data或&data,下图为返回一种构造指针:

关闭“底层模仿器”后,会自动生成底层模仿代码,这些代码也是用例输入一某些。

除“仅判断调用次数”外,其她底层模仿代码均是从第一种参数开始即为模仿值。

·底层模仿数据表格化

   生成代码后,双击数据(如下示例红色某些),即可实现表格化。

   SF_RETURN_DIG(123456.789,"Return_Double",RUN_TIMES_NOZERO,1)//模仿返回值,因此设定返回值是“数据”

   SF_EXPECT_RUNTIMES_HARD("Operate1",RUN_TIMES_NOZERO,1)       //控制测试,只判断子函数执行次数,因此最后预期执行次数是“数据”

   表格中忽视个别用例底层模仿将单元格值设为“//”。

底层模仿应放在输入最后

   底层模仿可以视为内部输入,即函数内部获取输入,放在输入最后易于阅读和理解;

对于C语言来说,底层模仿代码放在最后,还可以避免可执行语句之后声明变量导致编译错误。

底层模仿调用了一种或各种函数,是普通执行语句,对于C语言来说,此类语句背面不能再声明变量。

设定成员变量、全局变量值

   在“设定哪个值”中选取成员变量或全局变量,并填写变量名,其她与设定返回值一致。

这里成员变量是指被测试类成员变量,因而,设定成员变量普通用于子函数是被测试类成员函数,并且它功能是修改成员变量时。

设定输出参数

   与设定返回值有两点不同:

   一是通过双击参数来打开底层模仿器,这样系统会自动选取需要模仿参数;

   二是填写模仿值是“值”而不是“地址”,例如:

   子函数为:

MYSTRUCT1*func(MYSTRUCT*pData);

   前置代码:

MYSTRUCTdata;...

   如果模仿返回值,则模仿值填写:

&data,由于咱们要返回就是构造对象地址。

   如果模仿参数值,则填写:

data,由于咱们要设定不是地址,而是对象值,用简朴类型比较容易理解,例如,子函数:

   int*subfunc(int*ptr);

   模仿返回值(返回一种指针),要在“前置代码”中定义一种变量如intdata=0;,然后返回合法地址:

&data;

   模仿输出参数,则是为了修改ptr所指向内存数据,直接填写这个数据就可以了,例如,在“模仿值”中填写0,那么,*ptr就会设为0。

   这一点,在模仿全局变量、成员变量时也同样。

设定参数数组

   由于C/C++将数组解析为指针,也就是只传递第一项地址,其她项不会在参数中传递,因而,需用宏STUB_ARRAY(类型,维数)来定义数组。

例如:

   子函数为:

voidfunc(intarg[10]);则:

   在前置代码某些定义数组:

STUB_ARRAY(int,10)arr={1,2,3,4};

   模仿值填写:

arr

·对局部变量、代码扩展模仿

可以对局部变量、代码片断实行模仿,以便在用例中设定需要数据:

模仿局部数据(替代"="号右边):

将"="右边替代为调用一种自动生成函数,通过在用例中设定该函数返回值,模仿"="左边变量各种值。

  模仿局部数据(替代选中代码):

将选中代码替代为调用一种自动生成函数,通过在用例中设定该函数返回值,模仿选中代码各种值。

  模仿局部数据(插入赋值语句):

插入一种赋值语句,赋值语句将调用一种自动生成函数,通过在用例中设定该函数返回值,模仿指定变量各种值。

  插入普通代码:

插入任意普通代码。

  替代选中代码:

用普通代码替代选中代码。

  模仿复杂类型或字符串:

被模仿局部数据,如果是复杂类型或字符串,需预先定义,办法和底层模仿一致。

  删除附加代码:

应用以上功能时,VU会在函数代码窗口插入或替代某些代码,称为附加代码,可以通过双击删除,也可以通过右键菜单所有删除。

详细使用操作请看VU2协助。

 

6.2.编辑测试代码

VU生成所有代码都是可见可编辑,既可在VU界面下编辑,也可在测试IDE中编辑,可以适应各种复杂情形。

6.2.1编辑方式

1.在VU界面编辑

2.在测试IDE中编辑

6.2.2语法

固定变量名

字符串赋值

字符串与浮点数比较

在预期输入中添加普通代码

输入输出代码格式

预期输出不能具有转定义双引号

6.2.3表格化与取消表格化

表格化

取消表格化

6.2.4编辑用例输入输出代码

参数

成员变量

全局变量

前置操作

注释

6.2.5编辑桩代码

有了便利底层模仿功能,桩代码普通不需要修改,如需修改,在主工具栏点击

,或在“代码”菜单,单击“桩代码管理器”,打开桩代码管理器,可以搜索、修改、屏蔽桩代码

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1