您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C++Test介绍及使用说明
华唐信息1个人意见1.1一个例子对以下的函数(在其提供的例子程序divide_by_zero.cpp中)//calculatessumofspecifiedvaluesintget_sum(int*data,unsignedintsize){//missingcheckingif'data'existsintsum=0;for(inti=0;isize;i++){sum+=data[i];}returnsum;}在VC环境下对其进行动态分析,选择把信息输出到C++Test界面下,可以看到:可以看到红色的测试用例表示出现异常,绿色的测试用例表示正确。对第一个红色的测试用例进行分析:输入值data为空,size为198,很明显data为空,即指针为空,没有对指针进行保护,肯定出异常,在原来的函数中加上一段,如红色所示。//calculatessumofspecifiedvaluesintget_sum(int*data,unsignedintsize){//missingcheckingif'data'existsintsum=0;if(!data){return0;}for(inti=0;isize;i++){sum+=data[i];}returnsum;}再次分析,可得到如下的结果:华唐信息第1页共4页对于AUTO_1_A_2这个测试用例,用鼠标右键可以查看此测试用例,如下图:可见对于只有一维的数组,却加了4294967265次。这次是SIZE越界。需要保护://calculatessumofspecifiedvaluesintget_sum(int*data,unsignedintsize){//missingcheckingif'data'existsintsum=0;if(!data){return0;}for(inti=0;isize;i++){sum+=data[i];}returnsum;}还有很多问题,例如:I是int类型,而size是unsignedint类型,当size很大时,I就无法跟上它同步大小,sum也可能越界。另外,也可以设置自己的测试用例,设置预期的结果,进行对算法正确地判断。如下图:华唐信息第2页共4页当datat[0]=2147483647,size=1,这时候sum肯定=2147483647,否则就是算法错误。其实这个测试用例是C++Test自动生成的,怎么样?够强大吧。1.2个人意见有人认为:C++Test速度慢,耗系统资源,测试执行效率低。我觉得,如果你要马上看到测试结果,最好一个文件一个文件的测试,因为你还要仔细分析测试用例和测试结果。如果你想大规模的对很多文件进行单元测试,最好下班前做好准备,第二天早上来看结果。我对一个VC的工程,856K大小的源程序,46个C文件,用了两个小时。不过也是应该的,因为要生成很多的测试程序、桩程序和测试用例,很麻烦的。基于消息驱动的,函数之间传递的参数多为消息结构或消息的指针,对于这种类型的函数测试,C++Test的自动生成的测试用例和测试结果都没有实际意义,必须人工编辑测试用例。我觉得,C++Test主要是对指针的保护、越界,数组的越界,变量的越界等很有用,对于数学运算等函数,可以明确知道返回值的,可以设置预期的返回值,来检查算法是否正确。对于可以通过以下的7种类型的值的设置可以判断函数算法的正确也很有用。对于象数据库,可以用对函数来互相测试,例如测试建立一个数据库的函数,可以用写库函数或读库函数来判断是否建立正确。对于象消息的建立、释放等也可以用对函数来互相测试。本来单元测试的目的就是查找一些保护、越界错误,简单的可以通过以下7种来判断的函数的算法正确,代码走读是必不可少的。对于复杂的函数还要靠自己建立驱动程序和桩函数。C++Test测试用例可以控制7种类型的变量条件(取决于被测函数用了多少):.参数(Arguments):函数的入口参数。.参数出口条件(ArgumentsPost):函数执行完成时入口参数的状态。.返回值(Return):函数的返回值。.对象前置条件(PreConditionsThis):测试开始前对象的条件。.对象后置条件(PostConditionsThis):测试执行后对象的条件。.前置条件(PreConditionsExternals):测试开始前全局变量的条件。.后置条件(PostConditionsExternals):测试执行后全局变量的条件。2如何操作C++Test2.1在VC见面下选择动态分析按钮,输出结果可以输出到VC的OUTPUT窗口或C++Test界面的窗口。建议输出到C++Test界面的窗口,看到的内容比较直观和多。华唐信息第3页共4页2.2在C++Test的界面下打开一个VC的工程,先ReadSymbls,再运行动态分析。察看分析结果,如果有必要可以对一个函数增加一个自己的测试用例进行单独测试。也可以建立一个测试单元包含几个文件测试,桩函数可以选择是自己原先的函数还是C++Test创建的函数。以下是一些说明:3设置自己的测试参数C++Test有三种类型的测试参数设置:通用设置(General):应用于整个C++Test操作。命令:SettingsCustomize。项目设置(Project):应用于项目中所有的C++Test测试。命令:ProjectProjectSettings。自动测试设置(Automatic):应用于动态分析测试。命令:ProjectProjectTestConfiguration;如果要为某个文件、类或方法定制测试参数:在项目树中选择目标符号(如项目、类或方法),然后用右键或菜单选择ProjectFile/Class/MethodTestConfiguration。自动测试设置由三部分组成:值、类型和测试用例生成。3.1自动测试设置[值-ValueGroups]这些设置描述在动态分析测试时分配给变量的值一般是如何确定的:ParentValues:Valuesaredefinedonlyintheparent'scontext。StandardValues:在测试参数中预先定义的标准值。HeuristicValues:在自动生成测试用例时采用“智能参数推测(SmartArgumentGuessing)”技术―――一种内建的专门为测试设计的智能系统,可以根据代码中的上下文关系生成更好的输入值。具体示例见【自动测试尽可能多的分支和边界条件】。UserDefinedValues:用户自定义的特殊值。←自定义值3.2自动测试设置[类型-Types]C++Test在测试每种类型的变量(布尔/字符/整数等)时将要分配的值。你可以使用或禁用某些值,或增加自己的特定值。C++Test还提供了指定一组值的能力。【例】设计一组整数值选择:Typesint,单击[AddValue],单击[Values’Range],然后输入你想要的值。(1)按步长5定义一组5个值(-10,-5,0,5,10):华唐信息第4页共4页(2)在[-10,10]内随机生成5个值(可能是-8,1,3,4,10):3.3自动测试设置[测试用例生成-TestCaseGeneration]控制动态分析测试的测试用例生成:Max.CountofGeneratedTestCases:对一个被测函数可能生成的最大测试用例的数量。允许任何大于0的整数。默认是50个,可以修改。MaxDepthofFieldInspection:对分层或嵌套的类可能生成的测试用例的最大深度。允许任何大于0的整数。有时不很容易确定合适的域检查的最大深度。我们建议你观察一下测试结果浏览窗,在你的初始测试中包括多少层次的检查,如果你需要更多的检查层次,增加该值。Timeout(inseconds)forTestCaseExecution:一个测试用例执行的最长时间(秒数),超过这个时间,C++Test将给出一个信息并终止当前测试用例的执行,转到下一个测试用例执行。允许任何大于0的整数。Max.DynamicAllocationSize:对于一个给定的变量,当动态分配内存(该变量类型)时,分配的元素的最大数量。该参数避免分配过量的内存,而你在当前测试时并不需要,例如数组。允许任何大于0的整数。ObjectInitializationMode:你可以自由选择地初始化对象,有三种方法:1)UseConstructors―――使用构造函数,2)UsingMemberWise―――在成员函数中直接初始化,3)UseObjectRepository―――使用对象库中保存的自定义对象。可以组合使用这些方法。注意只使用构造函数时,产生的测试用例可能比预期的要少。DynamicAnalysisModeforSymbolswithoutTestCases:Auto-GenerateTestCases:控制是否要自动生成测试用例。华唐信息第5页共4页4自动执行白盒测试白盒测试的目的是验证一个类的所有成员方法或函数(包括保护和私有成员)是否足够强壮(robust),当遇到各种预期或非预期的输入时它们的执行是否正确。C++Test通过自动生成和执行大量的测试用例,检查代码在各种输入下的行为,并报告异常行为。这是一个非常好的做进一步测试和调整测试用例的开始点,例如继续进行黑盒测试。5黑盒测试黑盒测试的目的是检查类的功能性是否正确,即类的接口的执行(输入和输出)是否符合说明书(设计文档)。你需要比较一个测试用例的实际执行结果(输出)是否与预期的输出一致。在C++Test中,第1次执行测试用例(自动或用户自定义)后,会将其结果自动保存在输出条件中,你可以使用上述结果也可以自己设置正确的预期输出(通过测试用例编辑器,见下节)。6定制测试用例使用“测试用例编辑器”定制或建立自己的测试用例。C++Test测试用例可以控制7种类型的变量条件(取决于被测函数用了多少):.参数(Arguments):函数的入口参数。.参数出口条件(ArgumentsPost):函数执行完成时入口参数的状态。.返回值(Return):函数的返回值。.对象前置条件(PreConditionsThis):测试开始前对象的条件。.对象后置条件(PostConditionsThis):测试执行后对象的条件。.前置条件(PreConditionsExternals):测试开始前全局变量的条件。.后置条件(PostConditionsExternals):测试执行后全局变量的条件。C++Test能够支持任意类型的变量和条件,并且你可以控制到每个变量的任意层次上或最底华唐信息第6页共4页层的基本类型变量,你可以任意修改和扩充变量的值。7对象库如果你需要经常用到一个对象的一组变量值,可以将它保存到对象库中。在定制其它测试用例时可以直接复制这组值。关于测试用例的各种复杂应用见下面各个例子。8回归测试回归测试的目的是为了保证对代码的任何修改以后没有引入错误。因此一定要保持与前次测试的可比性。在C++Test中,你可以有多种方式执行已有的测试用例,如这个项目、一个文件、类、方法、若干测试用例或单个测试用例。9自动测试尽可能多的分支和边界条件C++Test具有一定的“智能”,能够自动分析你的代码,根据一些特征值自动生成能够更好地执行各个条件分支的测试用例,提高代码覆盖性。虽然目前这种能力还是比较初步,但在市场上还是独有的,是ParaSoft自动测试用例生成技术专利的一部分,能够有效地提高测试覆盖性。C++Test的这种能力主要表现在几个方面:.根据输入参数的类型特征生成测试用例。.你可以设置特定的边界值,用于自动生成测试用例。.自动分析代码中的边界条件,并自动生成相应的测试用例。9.1【例】发现条件中的整型边界条件#defineSIZE88intuser_input_handler(inti){intresult=0;if(iSIZE)result=-1;elseif(i33)result=1;r
本文标题:C++Test介绍及使用说明
链接地址:https://www.777doc.com/doc-4632916 .html