(精品)测试用例设计方法.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(精品)测试用例设计方法.ppt》由会员分享,可在线阅读,更多相关《(精品)测试用例设计方法.ppt(123页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、测试用例设计方法主要内容主要内容功能性测试设计功能性测试设计结构性测试设计结构性测试设计状态转换测试设计状态转换测试设计OO单元测试设计单元测试设计参考书参考书1.软件测试(原书第二版)(软件测试(原书第二版)(Software Testing A craftsmans Approach Second Edition)美美 Paul C.Jorgensen 著著 韩柯韩柯 杜旭涛翻译,机械工业出版社杜旭涛翻译,机械工业出版社2.软件工程实践者的研究方法软件工程实践者的研究方法(Software Engineering A practitioners Approach Fifth Edition
2、)Roger S.Pressman,黄伯素,梅宏黄伯素,梅宏 翻译,机械工业出版社翻译,机械工业出版社3.嵌入式软件测试嵌入式软件测试(Testing Embeded Software)美美 Bart Borekman,Edwin Notenboom著,张君施,张思宇,周承平译,电子工业出版社著,张君施,张思宇,周承平译,电子工业出版社测试用例设计方法概述测试用例设计方法主要分两大类:黑盒测试(功能性测试)和白盒测试(结构性测试),它们使用的测试用例在表现形式上一模一样,都是:(输入1,输入2,.输入n,预期输出)这输入1,输入2,.输入n就是程序的输入(可以理解为程序的输入参数,全局变量,触
3、发事件),预期输出可以是程序的输出(可理解为程序的输出参数,返回值,全局变量,输出事件)如右图 程序的规格说明(预期行为)和内部结构(决定实际行为)黑盒测试与白盒测试的区别在于,黑盒测试方法通过程序的规格说明来识别测试用例。白盒测试根据程序的内部代码结构(分支,循环,条件)来识别测试用例.见右图图8 程序的规格说明(预期行为)和内部结构(决定实际行为)黑盒测试与白盒测试的结合基于黑盒的测试(也就是基于规格说明测试)可能有些程序的内部路径(大多数是些异常处理路径)覆盖不到,往往是这里的代码会使程序表现出大家所不期望的行为(程序异常死机,或隐藏了恶意的代码,如特洛伊木马程序,还有内存泄漏,程序走飞
4、,死循环等等)。所以有必要在黑盒测试结束后,检查一下程序内部的测试覆盖率,对没有覆盖到的路径或代码,根据代码结构信息,再设计一些测试用例覆盖这些没有覆盖到路径或代码,看看程序是否会出现异常的行为。这是我们所倡导的基本的软件单元测试策略。两个示例程序三角形问题NextDate问题三角形问题陈述三角形问题接受三个整数a,b和c作为输入,用做三角形的的边。程序的输出是由这三条边确定的三角形类型:等 边三角形,等腰三角形,不等边三角形或非三角形。NextDate问题NextDate是一个有三个变量(月份,日期和年)的函数。函数返回输入日期后面的那个日期。变量月份,日期和年都具有整数值,且满足下列条件:
5、C1:1=月份=12C2:1=日期=31C3:1812=年=2012如果任意一个条件失败,则NextDate会出示一个消息,指示相应的变量超出范围功能性测试设计边界值测试等价类测试决策表测试边界值测试 任何程序都可以看做是一个函数,程序的输入构成函数的定义域,程序的输出构成函数的值域,输入定义域测试是最著名的功能性测试手段,它的重点是在输入定义域边界值分析健壮性测试最坏情况测试特殊值测试 边界值分析大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。针对各种边界情况设计测试用例,可以查出更多的错误。边界值分析的基本思想是使用在最小值,略高于最小值,正常值,略低于最大值和最大值处取
6、输入变量值边界值分析基于单缺陷假设:失效极少是由两个(或多个)参数同时取某一特定值引起的,基本是由单变量取某一特定值引起的.边界值测试用例的获得:通过所有变量取正常值,只有一个变量取边界值。,共 9个测试用例变量是离散有界值都可以用边界值分析,但逻辑布尔量不适用(如电话号码)X2abdc两变量函数边界值分析测试用例X1边界值分析举例在描述问题时,关于三角形的边,除了说明是整数外,没有给出其他条件.显然,低端边界都是1.我们任意取200做为高端边界,下表给出使用这些定义域产生的边界测试用例.健壮性测试健壮性测试是边界值分析的一种简单扩展:除了变量的五个边界值分析取值,还要通过采用一个略超过最大值
7、(max)的取值,和一个略小于最小值(min)的取值如果程序执行显式的范围检查并适用例外处理机制解决“健壮值”问题,必须选择健壮性测试X2abdc两变量函数健壮性测试用例X1最坏情况测试最坏情况测试最坏情况测试拒绝单缺陷假设,采用多缺陷假设:某些失效(Failure)是由两个或多个参数同时取某些特定值引起的.对每个变量首先进行包含最小值,略高于最小值,正常值,略低于最大值,最大值五元素测试然后对这集合进行笛卡尔儿积计算,生成测试用例X1abcb两变量函数最坏情况测试用例笛卡尔积两个集合A和B的笛卡尔积,是集合AB;xAYB例1:集合A=1,2,3集合B=w,x,y,zA和B的笛卡尔积是集合AB
8、,例2:一个更直观的例子:x轴上的点与y轴上的点的笛卡尔积是整个平面上所有点的集合。最坏情况测试举例我们仍然以三角形程序举例来说明最坏情况测试特殊值测试当测试人员适用其领域知识,适用类似程序的经验以及关于“软点”信息开发测试用例时,就会出现特殊值测试,就是不使用测试方针,只使用“最佳工程判断”特殊值测试是高度主观性的,但是所产生的测试用例集合,常常比我们已经研究过的其他方法生成的测试集合,更能有效地发现缺陷边界值测试总结除了特殊值测试,基于函数(程序)输入定义域的测试方法除了特殊值测试,基于函数(程序)输入定义域的测试方法是所有测试方法中最基本的,这些测试方法都有一种假设:是所有测试方法中最基
9、本的,这些测试方法都有一种假设:即输入变量是真正独立的,如果不能保证这种假设,就不能即输入变量是真正独立的,如果不能保证这种假设,就不能产生令人非常满意的测试用例(如产生令人非常满意的测试用例(如NextDate中生成中生成1912年年2月月31日)日)这些方法还有两方面的区别:正常值和健壮值,单缺陷和多这些方法还有两方面的区别:正常值和健壮值,单缺陷和多缺陷假设缺陷假设等价类测试使用等价类作为功能性测试的基础有两个动机:1.我们希望进行完备的测试2.同时又希望避免冗余等价类测试重复边界值测试的两个决定因素:健壮性和单/多缺陷假设等价类的重要问题是它们构成集合的划分,其中划分是指互不相交的一组
10、子集,子集的元素都有一些共同的特点等价类测试的思想就是通过每个等价类中的一个元素代表整个等价类元素集合,来标识测试用例。等价类测试的关键就是选择类的等价关系。示例函数我们讨论一个具有两个变量x1,x2的函数F其中:1.a=x1=d,区间为a,b),b,c),c,d2.e=x2=g,区间为e,f),f,gX1和x2的无效值是:x1d,和X2g弱一般等价类测试弱一般等价类测试:测试用例中每个参数等价类(区间)的都被遍历到注意单缺陷假设的作用,弱一般等价类测试的测试用例的个数等于max(参数1等价类个数,参数2等价类个数参数n的等价类个数)X2abfe弱一般等价类测试用例CdgX1强一般等价类强一般
11、等价类测试基于多缺陷假设,因此测试用例的个数等于各个参数等价类个数的乘积。X2abfe弱一般等价类测试用例CdgX1弱健壮等价类测试这种测试的名称显然与直这种测试的名称显然与直觉矛盾,而且自相矛盾,觉矛盾,而且自相矛盾,怎么既弱而且又健壮?怎么既弱而且又健壮?健壮是考虑了无效值健壮是考虑了无效值弱是有单缺陷假设弱是有单缺陷假设1.对于有效输入,使用等价对于有效输入,使用等价类的一个值类的一个值2.对于无效输入,测试用例对于无效输入,测试用例将拥有一个无效值将拥有一个无效值X2abfe弱健壮等价类测试用例CdgX1强健壮等价类测试这种测试名称既不与直觉矛盾,也不自相矛盾,只是觉得有些冗余健壮是指
12、要考虑无效指强是指多缺陷假设我们从所有等价类的笛卡尔积中获得测试用例X2abfe强健壮等价类测试用例CdgX1三角形问题的等价类测试用例在描述问题时,我们曾经提到过有四种可能出现的输出:非三角形,不等边三角形,等腰三角形和等边三角形。可以使用这些输出标识如下所示的输出(值域)有效等价类(无效等价类没有列出):R1=:有三条边a,b和c的等边三角形R2=:有三条边a,b和c的等腰三角形R3=:有三条边a,b和c的不等边三角形R4=:三条边a,b和c不构成三角形一般等价类,弱健壮,强健壮等价类举例NextDate问题的等价类测试NextDate是一个三变量函数,即月份,日期和年,这些变量的有效值区
13、间定义如下:M1=月份:1月份12D1=日期:1日期31Y1=年:1812 年2012无效等价类M2=月份:月份1M3=月份:月份12D2=日期:日期1D3=日期:日期31Y2=年:年1812Y3=年:年2012NextDate问题的等价类测试用例NextDate问题的等价类测试(第二次)以上只是在有效/无效的层次上处理等价类,通过对平年和闰年的分析,日期是月末最后一天的分析,可以对有效值进行进一步区分等价类:M1=月份:每月有30天M2=月份:每月有31天M3=月份:此月是2月D1=日期:1日期28D2=日期:日期=29D3=日期:日期=30D4=日期:日期=31Y1=年:年=2000Y2=
14、年:年是闰年Y3=年:年是平年NextDate问题的等价类测试用例和以前一样,机械地从对应的等价类中间选择输入,机械选择输入值不考虑领域知识,会出现不可能的输入日期,“自动”的测试用例生成永远都会有这种问题,因为领域知识不是通过等价类选择获得的。等价类测试的总结1.等价类测试的弱形式不如强形式的测试全面2.如果输入数据以离散值区间和集合定义,则等价类测试是合适的。当然也适用于如果边界值越界系统就会出现故障的系统 3.通过结合边界值测试,等价类测试可得到加强4.在发现“合适”的等价关系之前,可能需要进行多次尝试。如果程序函数很复杂,则等价类是被暗示的,如NextDate函数基于决策表的测试在所有
15、功能性测试方法中,基于决策表的测试方法是最严格的,因为决策表具有逻辑严格性20世纪60年代初以来,决策表一直被用来表示和分析复杂逻辑关系.决策表很适合描述不同条件集合下采取行动的若干组合的情况.使用决策表来设计测试用例为了使用决策表标识测试用例,我们把条件解释为输入,把行动解释为输出.(第一种方法)有时候条件最终引用输入的等价类,行动引用被测软件的主要功能处理部分.这时每条规则就被解释成测试用例的输入.(第二种方法)由于决策表可以机械地强制为完备的,因此可以生成用测试用例的完整集合决策表的构成决策表有四部分:条件桩,条件条目,行动桩和行动条目所有条件都是二叉条件的决策表叫做有限决策表如果条件可
16、以有多个值,则对应的决策表叫做扩展条目表条件桩规则1规则2规则3规则4C1C2:C3:TTTTTFTFTTFFA1xxA2xA3:xx三角形问题决策表 -第一种方法三角形问题决策表中,给出了不关心条目和不可能规则不关心条目和不可能规则使用的例子,不关心条目实际表明条件是不相关的,它代表了多条规则(如果是有限条目决策表,则规则中每出现一个不关心条目,该规则数乘一次2)不可能规则不关心条目条件桩代表测试用例的输入行动桩代表测试用例的输出每条规则标识了一个测试用例NextDate的决策表测试用例前面在讲extDate的等价类测试中,发现从等价类中随意地选取输入值会产生很奇怪的测试用例,如1812年6
17、月31日的下一天。问题的根源在于假设变量都是很独立的。如果变量确实是独立的,则是用等价类的笛卡尔积是有意义的。如果变量之间在输入定义域中存在逻辑依赖关系,则这些依赖关系在笛卡尔积中就会丢失(说抑制可能更确切)。决策表格通过使用“不可能行动”概念来表示条件的不可能组合,使我们能够强调这种依赖关系。选择NextDate函数,是因为它可以说明输入定义域中的依赖性问题,这使得这个例子成为基于决策表测试的一个完美的例子。NextDate的第一次尝试先考虑前面为NextDate函数划分的等价类集合。M1=月份:每月有30天M2=月份:每月有31天M3=月份:此月是2月D1=日期:1日期28D2=日期:日期
18、=29D3=日期:日期=30D4=日期:日期=31Y1=年:年是闰年Y2=年:年不是闰年如果我如果我们希望突出不可能的希望突出不可能的组合,合,则可以建立具有以可以建立具有以下条件和行下条件和行动的的优先条目决策表先条目决策表有256规则的第一次尝试这个决策表会有这个决策表会有256条规则,其中有很多是不可能的条规则,其中有很多是不可能的NextDate的第二次尝试为了说明另一种决策表表示方法,这一次采用扩展条目决策表开为了说明另一种决策表表示方法,这一次采用扩展条目决策表开发,并更仔细地研究行动桩。在构建扩展条目决策表时,必须保发,并更仔细地研究行动桩。在构建扩展条目决策表时,必须保证等价类
19、构成输入定义域的真划分(划分是一组不相交的子集,证等价类构成输入定义域的真划分(划分是一组不相交的子集,子集的并是全集子集的并是全集).如果规则条目之间存在如果规则条目之间存在“重叠重叠”,则会存在冗,则会存在冗余情况,使得多个规则都能够满足余情况,使得多个规则都能够满足。为了产生给定日期的为了产生给定日期的NextDate,能够使用的操作只有五种:日期能够使用的操作只有五种:日期和月份的增和月份的增1和复位,年的增和复位,年的增1,我们不允许复位年来回退时间,我们不允许复位年来回退时间。利用前面的年月日的等价类划分,我们可以得到利用前面的年月日的等价类划分,我们可以得到36规则的决策表规则的
20、决策表与等价类测试时含与等价类测试时含36个测试用例的笛卡尔积对应。但我们利用不个测试用例的笛卡尔积对应。但我们利用不关心条目得到下表关心条目得到下表17条规则的决策表。(仍然有逻辑不可能的规条规则的决策表。(仍然有逻辑不可能的规则)则)第二次尝试的等价类划分M1=月份:每月有30天M2=月份:每月有31天M3=月份:此月是2月D1=日期:1日期28D2=日期:日期=29D3=日期:日期=30D4=日期:日期=31Y1=年:年=2000Y2=年:年是闰年Y3=年:年时平年17条规则的扩展决策表如果填满这个决策表的行动条目,如果填满这个决策表的行动条目,就会发现就会发现12月份由一些麻烦的问题。
21、月份由一些麻烦的问题。如果是12月31日,该怎么办?每列规则识别一个测试用例规则代表测试用例的输入行动代表程序的主要处理测试用例的输出怎么办?根据规格说明和测试用例的输入计算出来第三次尝试的等价类划分通过引入月份等价类的第三个集合,可以澄清年末问题M1=月份:每月有30天M2=月份:每月有31天,12月除外M3=月份:此月是12月M4=月份:此月是2月D1=日期:1日期27D2=日期:日期=28D3=日期:日期=29D4=日期:日期=30D5=日期:日期=31Y1=年:年是闰年Y2=年:年不是闰年这些等价类的笛卡尔积包含40个元素。由于组合规则中包含不关心条目,最后我们得到一个22规则的决策表
22、22条规则的决策表上图所示决策表应该是上图所示决策表应该是NextDate函数源代码的基础,这个例子从另一函数源代码的基础,这个例子从另一方面说明测试如何能够很好地改进程序设计。所有决策表分析都应该方面说明测试如何能够很好地改进程序设计。所有决策表分析都应该在在NextDate函数的详细设计期间完成函数的详细设计期间完成12月31日8月31日这四条可以合并NextDate的精简决策表决策表测试的指导方针决策表技术适用于具有以下特征的应用程序:1.If then else逻辑很突出2.涉及输入变量子集的计算3.输入和输出存在复杂因果关系4.很高的圈(McCabe)复杂度(后面解释)决策表不能很好
23、地伸缩(有n个条件的有限决策表有2N个规则与其他技术一样,多次尝试的迭代会有所帮助。结构性测试设计结构性测试(又称为白盒测试)用例设计方常见的主要有以下几种1:条件测试基本路径测试循环测试状态机测试设计以实现测试用例对程序的逻辑覆盖,和路径覆盖:1 参见软件工程实践者的研究方法第17章,323页335页测试覆盖种类测试覆盖种类1.语句覆盖语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次;2.判定覆盖(也称为分支覆盖):判定覆盖(也称为分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次;3.条件覆盖条件覆盖:设
24、计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次;4.判定判定-条件覆盖条件覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的所有可能取值至少执行一次,并且每个可能的判断结果也至少执行一次5.条件组合测试:条件组合测试:设计足够多的测试用例,运行所测程序,使程序中每个判断的所有可能的条件取值组合至少执行一次;6.路径测试路径测试:设计足够多的测试用例,运行所测程序,要覆盖程序中所有可能的路径。下面以例子进行分析讲解 void DoWork(int x,int y,int z)int k=0,j=0;if(x3)&(z5)j=x*y+10
25、;/语句块2 j=j%3;/语句块3画出前面函数的流程图如右:判断条件语句覆盖:语句覆盖:为了说明简略,分别对各个判断的取真、取假分支编号为b、c、d、e。为了测试语句覆盖率只要设计一个测试用例就可以把三个执行语句块中的语句覆盖了。测试用例输入为:x=4、y=5、z=5程序执行的路径是:abd该测试用例虽然覆盖了可执行语句,但并不能检查判断逻辑是否有问题,例如在第一个判断中把&错误的写成了|,则上面的测试用例仍可以覆盖所有的执行语句。可以说语句覆盖率是最弱的逻辑覆盖准则。分支覆盖分支覆盖 对于上面的程序,如果设计两个测试用例则可以满足判定覆盖的要求。测试用例的输入为:x=4、y=5、z=5 程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 测试 设计 方法
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内