ParasoftCTest操作手册.docx
《ParasoftCTest操作手册.docx》由会员分享,可在线阅读,更多相关《ParasoftCTest操作手册.docx(60页珍藏版)》请在冰豆网上搜索。
ParasoftCTest操作手册
C++Test介绍
修订历史记录
日期
版本
说明
作者
C++Test
C++Test原理,使用介绍,RuleWizard定制规则
第一章C++Test特性
C++Test是一个C/C++单元测试工具,自动测试任何C/C++类、函数或部件,而不需要您编写一个测试用例、测试驱动程序或桩调用。
C++Test能够自动测试代码构造(白盒测试)、测试代码的功能性(黑盒测试)和维护代码的完整性(回归测试)。
C++Test是一个易于使用的产品,能够适应任何开发生命周期。
通过将C++Test集成到开发过程中,您能够有效地防止软件错误,提高代码的稳定性,并自动化单元测试技术(这是极端编程过程的基础)。
特性
∙即时测试类/函数
∙支持极端编程模式下的代码测试
∙自动建立类/函数的测试驱动程序和桩调用
∙自动建立和执行类/函数的测试用例
∙提供快速加入和执行说明和功能性测试的框架
∙执行自动回归测试
∙执行部件测试(COM)
优点
∙帮助您立即验证类功能性和构造
∙将您从编写测试驱动程序、桩和测试用例的繁重工作中解放出来
∙自动化极端编程和其它编程模式的单元测试过程
∙使得您能够实现和执行100%的代码覆盖性
∙支持紧急和短线开发项目
∙降低调试和维护时间
∙改善应用的可靠性
∙防止简单错误的扩大
系统要求
最小系统要求:
∙Pentiumclassprocessor800MHz
∙512MBRAM(1024MBisrecommended)
∙150MBfreediskspaceforC++Testinstallation
其他要求:
∙保留足够的磁盘空间供测试使用。
支持平台
Windows
•SupportedPlatforms:
WindowsNT,2000,XP
•SupportedCompilers:
Microsoft®VisualC++®,.NET®,or.NET2003®,GNUGCCor.
CygwinGCCGCCSupportedPlatforms:
Linuxkernel(withSystemVIPC),glibc,Pentiumprocessor
Solaris7,8,9,UltraSPARCprocessor
•SupportedCompilers:
GNUGCC,GNUGCC,GNUGCCC++®(SunForteC++6Update2forSPARCSolaris),Sun®C++®(SunONEStudio8)
第二章C++Test使用
一.安装说明
1.Windows下安装
打开安装源程序,同普通的windows应用程序一样,选择安装路径,完成安装。
2.申请License
1.申请License
从桌面或者菜单打开C++Test,将弹出类似于下面的一个要求输入密码的窗口:
按“是(Y)”进入。
这里的machineID就是C++Test和主机绑定的信息。
或在进入C++Test主界面后,在菜单Help->License…可以同样打开下面的界面。
这个machineID需交给Parasoft代理商,来申请license。
而由于license的种类不同,可以分为locallicense(单机版)和netlicense(网络版)。
2.输入License
将相应的license和expiredate粘贴到相应的位置,如果信息正确,系统将提示licenseok。
如果信息不正确,系统将提示wronglicense。
输入正确的license,打开C++Test,就可以进入C++Test的用户界面了。
二.启动C++Test
1.从VC++里启动C++Test
安装VC++后,再安装C++Test,VC++工具条里会自动地增加使用C++Test的按扭。
可以启动C++Test界面,或进行C++Test静态和动态测试。
2.传统启动C++Test
开始->程序->C++Test,可以启动C++Test。
三.Linux下安装及启动
1.建议安装linuxredhat及以上版本,建议安装开发工作站,同时需要图形界面支持
2.在图形界面下建立组gtest(或其他)
3.在图形界面下建立用户utest(或其他),并且属于组gtest。
utest主目录是/home/utest。
用bash。
4.在/home/utest/下建立目录cpptest,并且拷贝到cpptest目录下
5.在图形界面下用utest用户登录
6.在Terminaltool中进入/home/utest/cpptest目录
7.执行安装(或./)。
安装程序是脚本安装程序,没有图形安装界面。
C++Test将安装在/home/utest/cpptest目录下
8.进入/home/utest目录下。
在.bash_profile文件中给环境变量PATH行后面增加:
/home/utest/cpptest/bin。
然后保存
9.用户utest重新在图形界面下登录
10.在Terminaltool中输入c++test(或在图形界面下执行/home/utest/cpptest/bin/c++test程序)。
可以启动c++test
四.C++Test快速测试
1.打开被测文件
(1)打开C++Test,选择file/openfile,选择C++Test安装目录下examples/,这个cpp文件将出现在当前的project下。
(2)在当前project下,右击,选择readsymbols(读入符号表),此时C++Test将parse(剖析)这个源程序,分析出此文件的文件结构。
在源代码窗口可以看到我们所测试的代码,界面非常友好,当选择代码时,被选择的代码也会以蓝色块的形式出现。
并且,当我们进行了静态分析和动态分析时,这里我们也可以非常直观的观测到静态分析和动态分析的结果。
代码左侧的红色精灵帽表示静态分析时出现问题的所在,黄色小齿轮则表示动态分析时出现问题的所在。
点击相应的地方,会出现对问题的一个简单描述。
2.静态测试
在向右三角型旁边的下拉箭头,选择内置的编码规则项目。
C++Test将自动完成对源代码的静态测试,也就是我们所说的代码走查,走查所用到的规范可以在静态测试标签的rulemanage下看到。
在静态分析栏中的Results标签是对静态分析结果的一个罗列。
每个红色精灵帽都代表一种违规行为,而它旁边的数字则代表测试代码中出现这种违规的次数。
紧接着的字母表明违规行为的严重级别。
再后面就是对这条规范的大致描述以及规则编号。
而标签RulesManager则是对这些规则的管理,当用户需要使用某条规则的时候,只需要在相应规则左侧的方框内打上勾就表明选择了该条规则。
而当用户不需要某条规则检查的时候,只需要去掉相应规则的勾就可以了。
下图,右侧就是静态测试(代码走查)的结果。
每条违规信息包括对违规的描述,该错误共发生的次数以及相对应的具体位置。
而下面的ruledesription则是对这条规则的一个比较详细的描述。
顶层的文件夹后面的“I=4PV=1V=33……”描述的是整个的对违规信息的统计。
I表示information,通知行为
PV表示possibleviolation,可能的违规行为
V表示violation,违规行为
PSV表示possibleservereviolation,可能的严重违规行为
SV表示servereviolation,严重违规行为。
3.动态测试
在向右三角型旁边的下拉箭头,选择内置的白盒测试。
C++Test将自动完成代码的动态测试。
可以从各个层面上(单个测试用例,整个函数的测试用例,整个代码的测试用例)去看相对应代码的覆盖率。
操作的时候,只需要右击相应的层次(例如一个测试用例),选择showcoverage,就可以看到对应的覆盖率了。
在动态测试中的TestCase/Results栏中,主要是对测试用例的一个总体管理。
在这里,所有的测试用例的状态都一目了然,绿色表示成功,红色表示失败。
用户可以自己添加或修改测试用例。
而StubTables栏则是对桩函数的管理,Suppressions则是对测试对象的一个管理。
例如,上面的Data类有很多个成员函数,当用户并不想全部都测,而只是测其中的几个。
这个时候就可以通过Suppressions进行选择。
除此之外,上面的Treefilter还提供强大的滤波器功能,可以让用户更好的关注他们的焦点,例如只看最近一次测试的失败用例。
下图,右侧就是对动态测试的一个整体描绘。
列举了所有的测试用例,并且用颜色来区分成功和失败的测试用例,绿色代表成功通过了的测试用例,而红色代表没有通过也就是失败了的测试用例,对于每个错误的测试用例都有一个大致的描述。
每个测试用例或者各个节点上都做到了相应的覆盖率信息,包括了LC(语句覆盖),BBC(块覆盖),PC(路径覆盖),DC(决策覆盖),MCDC(多条件决策覆盖)以及CC(条件覆盖)。
此外,上面的treefilter过滤器功能可以帮助用户迅速察看到自己关心的焦点或错误。
4.生成报表
选择file/generatereport,根据对报表的需求,选择适当的报表内容种类(例如dynamicanalysis1,coveragestatistic1)。
生成一个HTML格式的报表。
第三章C++Test高级功能
一.导入VC++工程(ImportVC++project)
C++Test可以直接导入VC++project,VC++.Netproject和VC++.Net2003project文件。
菜单File->NewProject…出现下面的界面
1.选择ImportVC++project
2.输入测试工程文件名称(projectname)
3.选择VC++工程文件.dsp(VC++projectfiles)
二.选择编译器(projectconfiguration)
如果你同时安装了VC++和VC++.Net的话。
你必须选择你需要的编译器。
否则C++会使用默认的编译器。
菜单Project->ProjectConfigurations…
选择VC++为当前测试工程的编译器(下面界面默认的C++Test使用编译器是VC++.Net2003)
三.设置测试配置(testconfiguration)
C++Test可以选择不同的测试配置选项对一个工程、文件进行测试。
测试配置:
是一系列编码规则、单元测试用例生成规则的组合,决定要测试什么编码规则,如何生成测试用例。
菜单Tests->TestConfigurations…打开测试配置界面。
1.新建一个测试配置:
选择project->鼠标右键–>NewConfiguration
2.AnalysisFlow决定是否要做编码规则测试和单元测试
3.AnalysisSettings包括CodingStandards和UnitTesting。
其中CodingStandards选择需要的规则。
打√选择规则
4.UnitTesting中Types设置不同数据类型在生成测试用例的取值,可以增加某种数据类型在生成测试用例时的取值。
比如char类型可以增加特定的字符’A’
5.设置一个被测单元自动生成测试用例的最大数目(默认是50个)
6.设置新增加的测试设置为活动
7.用新增加测试设置进行测试。
在向右三角型旁边的下拉箭头,选择新增加的测试设置。
四.编码规则测试结果分析
下图,右侧就是静态测试(代码走查)的结果。
I表示information,通知行为
PV表示possibleviolation,可能的违规行为
V表示violation,违规行为
PSV表示possibleservereviolation,可能的严重违规行为
SV表示servereviolation,严重违规行为。
1.顶层的文件夹后面的“I=4PV=1V=33……”描述的是整个的对违规信息的统计。
2.下面的每个小红帽表示一条违例规则。
前面的数字表示违反次数,紧接着是严重程度,然后是此规则的简单描述。
每条违规信息包括对违规的描述,该错误共发生的次数以及相对应的具体位置。
而下面的ruledesription则是对这条规则的一个比较详细的描述。
3.Treefilter:
可以按严重程度分类显示。
4.CodingStandards的Suppressions可以按严重程度,类,文件等条件决定是否要显示测试结果。
下图中对Violation类型的编码规则测试结果不显示
5.不显示Violation类型的测试结果
五.测试用例分析
用C++Test做单元测试,最重要的步骤是分析测试用例。
如果这步没有做好,你会觉得C++Test不适合你们;如果做好了,你的单元测试就做好了。
用C++Test做单元测试,重点在分析测试用例,而不是设计测试用例。
C++Test自动生成的测试用例是白盒测试用例。
如果你要用C++Test做黑盒测试,你需要手工增加黑盒测试用例或修改白盒测试用例使之成为黑盒测试用例,
要求:
要准确地分析测试用例,必须对被测函数有清楚的了解。
1.选择Examples\文件
2.选择工具条中向右三角型进行进行单元测试
3.选择一个测试用例,然后按“Edit”按扭进入测试用例编辑界面
4.分析测试用例
Arguments:
测试前的函数的参数值
ArgumentsPost:
测试后的函数的参数值
Return:
测试前设定的函数的返回值
Pre-Conditions>This:
测试前对象构造值,特别是构造对象时给成员变量设定的的值
Pre-Conditions>Externals:
测试前全局变量值
Post-Conditions>This:
测试后对象构造值,特别是构造对象时给成员变量设定的的值
Post-Conditions>Externals:
测试后全局变量值
ExecutionResult:
预期的测试结果。
是正常返回、Assert失败,还是各种异常返回
A)首先让我们先看看源代码
et2003(默认编译器)调试界面。
注意:
对VC++好象无法进行调试。
六.DataSource
如果一个函数有一系列相似的输入,比如协议类函数。
这个时候可以把这一系列相似的输入保存成一个excel文件,CSV文件或数据库的表。
我们称之为DataSource。
这样当C++Test进行单元测试的时候,可以根据DataSource的内容生成一系列的测试用例。
1.打开C++Test安装目录Examples\DataSource\
2.菜单project->projectconfigurations…->打开工程配置界面。
选择DataSources。
按“Add”按扭增加DataSource文件。
3.输入DataSource名称
4.选择DataSource类型为CSVDataSource
4.选择C++Test安装目录Examples\DataSource\文件。
sv文件分割符号选择’或;。
6.按按扭“ShowColumns”显示DataSouce文件的列名称。
类似excel表格中的列头名称。
7.根据设置的DataSource生成测试用例。
选择UnitTesting->选择函数isBetween->“Add”,增加测试用例
8.选择刚才设置好的DataSource配置csv1。
要在UseDataSouce前面打√。
然后按“ShowColumns”
9.在输入、输出参数和返回值中选择对应的列。
10.测试用例按DataSource文件自动生成。
不同于一般情况下生成的测试用例
七.桩函数设置
对于单元测试,如果一个函数A调用了其他函数B(桩函数),而函数B由于还没有实现或其他原因无法使用。
要正确测试函数A,就必须对函数B(桩函数)进行设置特定的返回值供测试函数A使用
1.打开C++Test自带的Examples\。
2.选择->鼠标右键->ReadSymbols解析。
从下面的界面可以看到mod2()函数调用了odd()函数。
但是odd()函数没有实现。
要对测试mod2的所以必须实现桩函数odd()。
3.选择UnitTesting->选择StubConfiguration->选择odd()函数->鼠标右键->adduserdefinition。
4.打开stub设置界面。
人为增加代码returnture;,让函数boolodd(int)返回trueorfalse(下面返回值为true),保存修改后的桩函数。
5.进行单元测试。
打开C++Test测试用例编辑界面。
不论输入mod2()函数的输入参数是什么值,它的返回值应当是1,这是因为桩函数odd()返回值为true。
八.导入导出测试用例
当你测试某个单元,使用一些特殊或自己定义的测试用例。
而其他人也同样测试此单元,你可以通过测试用例的Import和Export功能,导入或导出特定的测试用例。
生成一个XML文件。
1.导出测试用例:
选择某个测试用例或某个函数->鼠标右键->选择Export(或从菜单File->Export)
2.导入测试用例:
选择某个函数->鼠标右键->选择Import(或从菜单File->Import)
九.TestObjects
当你测试某个类的一个单元时,使用一些特殊或自己定义的类构造对象。
而测试一个类中的其他函数或其他人也需要此构造对象的时候,你可以通过TestObjects例的Import和Export功能,导入或导出特定的TestObjects。
生成一个XML文件。
一个TestObjects可能包含一个或多个成员变量,而且这些成员变量有特定的值。
1.StoreObject:
在图形化测试用例界面中->某个对象->鼠标右键->选择StoreObject)
2.UseObject:
在图形化测试用例界面中->某个对象->选择右边框中的Data对象的一个TestObject->鼠标右键->选择UseObject)
测试用例的对象Data的值已经变成为TestObject的值
1.导出TestObject:
选择某个TestObject或某个对象->鼠标右键->选择Export(或从菜单File->Export)
2.导入TestObject:
选择某个对象->鼠标右键->选择Import(或从菜单File->Import)
十.覆盖率分析
1.可以显示工程、类、函数和单个测试用例的覆盖率。
当分别选择工程、类、函数和单个测试用例的时候,在下边的CoverageStatisticTab中显示相应的覆盖率
2.从菜单Coverage->CoverageSource可以选择覆盖率来源
Any:
包括自身函数和其他函数调用此函数产生的
Own:
函数测试用例产生的
External:
其他函数的测试用例调用此函数产生的
3.覆盖率分:
LineCoverage:
语句覆盖
BasicBlockCoverage:
没有包含分支,控制流转的一段代码覆盖
PathCoverage:
一条从函数入口到出口的路径覆盖
Decision(Branch)Coverage:
分支覆盖
ModifiedCondition/DecisionCoverage(MC/DC):
嵌套boolean表达式的组合覆盖
ConditionCoverage:
boolean表达式中的各个boolean条件覆盖
4.覆盖率显示颜色:
绿色:
>=80%
黄色:
>=40%同时<80%
红色:
<40%
5.在源代码上显示覆盖率
在左边的树状中选择文件,类或函数。
然后选择菜单Coverage->ShowCoverage…打开源文件覆盖率
下图中
第一列数字:
行标
第二列数字:
代码被执行的此数目
:
在当前行上有额外的覆盖率信息
代码蓝色表示执行过
十一.回归测试
回归测试:
先做单元测试->保存单元测试用例->修改源代码->用原来的测试用例测试修改后的代码
1.打开Example\。
按
进行单元测试。
结果如下
2.修改源代码,并保存
voidData:
:
copyToBuffer(char*from){
.
找到自定义规则目录
选择自定义规则