《Ch03-软件测试方法-软件测试方法和技术课件.ppt》由会员分享,可在线阅读,更多相关《Ch03-软件测试方法-软件测试方法和技术课件.ppt(114页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 软件测试方法和技术软件测试方法和技术第第3章章 软件测试的方法软件测试的方法朱少民 K http:/ 第2章 回顾p软件缺陷是软件质量的对立面p软件缺陷(Bug)是什么p验证和确认p软件测试的分类p静态测试与动态测试p主动测试与被动测试p黑盒测试与白盒测试p测试级别:单元、集成、系统和验收p软件测试计划与用例p专业测试人员的责任和要求第3章 软件测试的方法3.1 基于直觉和经验的方法3.2 基于输入域的方法3.3 基于组合及其优化的技术3.4 基于逻辑覆盖的方法3.5 基于故障模式的测试方法3.6 基于模型的测试方法3.7 形式化方法方法论和具体方法p从方法论看,更多体现了一种哲学的思想从方
2、法论看,更多体现了一种哲学的思想,例如辩证统一的方法,在测试中有许多对立统一体,如静态测试和动态测试、白盒测试和黑盒测试、自动化测试和手工测试等。p软件测试的方法论来源于软件工程的方法论,例如有面向对象的开发方法,就有面向对象的测试方法;有敏捷方法,就有和敏捷方法对应的敏捷测试。测试领域Domains under TestGUIGUILogicLogicInput SpaceInput SpaceSyntaxSyntaxUse casesUse casesSpecsSpecsDesignDesignSourceSourceApplied toDNFDNFSpecsSpecsFSMsFSMsSo
3、urceSourceInputInputModelsModelsIntegrationIntegrationSourceSourceDNF:Disjunctive Normal Form(析取范式)FSM:Finite Status Machine测试方法 SWEBOK 3.06IDBTIDBTCBTCBTFBTFBTUBTUBTMBTMBTTBNATBNA具体方法或技术7IDBTIDBT 等价类、边界值、两两组合等价类、边界值、两两组合(pairwisepairwise)、随机测试)、随机测试黑盒测试黑盒测试CBTCBT 基于控制流的标准、基于数据流的标准、CBT参考模型白盒测试FBTFBT
4、 故障模型、错误猜测法、变异测试UBTUBT 操作配置(operational profile)、用户观察启发黑盒测试MBTMBT 决策表、有限状态机、形式化验证、TTCN3、工作流模型TBNATBNA OOS、web、real-time、SOA、embedded、safe-critical应用领域过去常提“黑盒和白盒”方法8等价类划分法等价类划分法边界值边界值分析法分析法判定表判定表方法方法因果图法因果图法正交试验法正交试验法功能图法功能图法错误推测法错误推测法语句覆盖语句覆盖判定覆盖判定覆盖条件覆盖条件覆盖判定条件覆盖判定条件覆盖条件组合覆盖条件组合覆盖基本路径覆盖基本路径覆盖黑盒方法白盒
5、方法其它方法 world9上下文驱动方法上下文驱动方法上下文驱动方法上下文驱动方法基于需求验证的方法基于需求验证的方法基于需求验证的方法基于需求验证的方法基于场景的测试方法基于场景的测试方法基于场景的测试方法基于场景的测试方法快速测试方法快速测试方法快速测试方法快速测试方法基于经验的方法基于经验的方法基于经验的方法基于经验的方法3.1 基于直觉和经验的方法3.1.1 3.1.1 Ad-hoc测试方法和ALAC测试 3.1.23.1.2 错误推测法 基于经验和直觉基于经验和直觉基于经验和直觉基于经验和直觉推测程序中所有可能存在的各种错误,推测程序中所有可能存在的各种错误,从而有针对性地设计测试用
6、例。从而有针对性地设计测试用例。3.1.1 ALAC测试和随机测试ALAC,是Act-like-a-customer(象客户那样做)的简写,ALAC测试方法是一种基于客户使用产品的知识开发出来的测试方法,它的出发点是著名的Pareto 80/20规律3.1.2 错误猜测法错误推测法是测试者根据经验、知识和直觉来发现软件错误,来推测程序中可能存在的各种错误,从而有针对性的进行测试。pp发现程序经常出现的错误的方法:发现程序经常出现的错误的方法:单元测试中发现的模块错误;单元测试中发现的模块错误;产品的以前版本曾经发现的错误;产品的以前版本曾经发现的错误;输入数据为输入数据为0 0或字符为空;或字
7、符为空;当软件要求输入时当软件要求输入时(比如在文本框中比如在文本框中),),不是没有输入正确的信不是没有输入正确的信息,而是根本没有输入任何内容,单单按了息,而是根本没有输入任何内容,单单按了EnterEnter键;键;3.2 基于输入域的测试方法3.2.1 3.2.1 等价类划分法等价类划分法3.2.2 3.2.2 边界值分析法边界值分析法3.2.1 等价类划分方法pp等价类是某个输入域的子集等价类是某个输入域的子集等价类是某个输入域的子集等价类是某个输入域的子集,在该子集中每个输入数据的作,在该子集中每个输入数据的作,在该子集中每个输入数据的作,在该子集中每个输入数据的作用是等效用是等效
8、用是等效用是等效的的的的.将输入数据分成若干个子集,从每个子集选取将输入数据分成若干个子集,从每个子集选取一个代表性的数据作为测试用例一个代表性的数据作为测试用例pp分为有效等价类和无效等价类分为有效等价类和无效等价类。pp在分析需求规格说在分析需求规格说明的基础上划分等价类,列出等价类表明的基础上划分等价类,列出等价类表设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受异常数据的考验。经过正反的测试才能确保软件具有更高的可靠性。all inputsi1i4i2i3确定等价类的方法pp在输入条件规定了取值范围或值的个数的情况下,则可以确在输入条件规定了取值范围或
9、值的个数的情况下,则可以确立一个有效等价类和两个无效等价类立一个有效等价类和两个无效等价类in rangegreater than rangeless than rangevaluegreater than valueless than value在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类确定等价类的方法(2)not member of setmember of setBooleanNon-Boolean确定等价类的方式(3)pp在规定了输入数据的一组值在规定了输
10、入数据的一组值(假定假定n n个个),并且程序要对每一,并且程序要对每一个输入值分别处理的情况下,可确立个输入值分别处理的情况下,可确立n n个有效等价类和一个个有效等价类和一个无效等价类。无效等价类。pp在规定了输入数据必须遵守的规则的情况下,可确立一个在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类有效等价类(符合规则符合规则)和若干个无效等价类和若干个无效等价类(从不同角度违从不同角度违反规则反规则)。有什么具体案例?等价类测试用例-Example等价类1:Integer等价类2:Decimal fraction等价类3:Negative等价类4:Invalid input根
11、据等价类创建测试用例的步骤a)建立等价类表,列出所有划分出的等价类:b)为每个等价类规定一个唯一的编号;c)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类d)重复c),最后使得所有有效等价类均被测试用例所覆盖;e)设计一个新的测试用例,使其只覆盖一个无效等价类。f)重复e)使所有无效等价类均被覆盖。输入条件有效等价类无效等价类3.2.2 边界值分析方法pp很多错误发很多错误发生在输入或输出范围的边界上,因此针对各种生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,边界情况设置测试用例,可以可以更有效地发现更有效地发现缺陷缺陷。ppBVA Boundary Value
12、AnalysisBVA Boundary Value Analysispp设计方法:设计方法:确定边界情况(输入或输出等价类的边界)选取正好等于、刚刚大于或小于边界值作为测试数据确定边界值的方法如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据。a ab ba ab b确定边界值的方法(2)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。如果程序中使用了一个内部数据结构,则应当选择这个内部
13、数据结构的边界上的值作为测试用例。n Test cases for ABS(x):class x=0,arbitrary value x =100classes x=0,on boundary:x =0classes x=0,below and above:x =-1,x=1正常值(有效类)正常值(有效类):X1=123123边界值边界值:X2=12345边界值边界值:X3=1234567边界值边界值:X4=1边界值边界值:X5=0无效类的值无效类的值:X6=-123123无效类的值无效类的值:X7=asdasd其它其它?BVA 示例2 测试测试 限制性用户输入:限制性用户输入:6位正整数位正
14、整数 无效值无效值:X8=000123 X9=asd123 X10=EmptyBVA 示例3Test cases:任意的正常值:随机选择几个选项 边界值:选择所有选项 边界值:一个都不选边界值:选择一个选项二进制Term 取值范围取值范围BitNibbleByteWordKiloMegaGigaTera0 or 10-15 0-2550-65535 or 0-429496729510241048576107374182410995116277760 0 和和 1,byte 1,byte 由由8 bits 8 bits 构成构成,字由字由4 bytes4 bytes构成构成,ASCII Tabl
15、eCharacterASCII ValueCharacter ASCII ValueNullSpace/0129;A0324748495057586465BYZabyz66899091969798121122123字符编辑域DefaultDefaultEmptyEmptyBlankBlankNullNullZeroZeroNoneNone一些特殊的边界值数值数值数值数值字符字符字符字符位置位置位置位置数量数量数量数量速度速度速度速度位置位置位置位置体积体积体积体积First/lastFirst/last,First-1/Last+1Min/MaxMin/Max,Min-1/max+1Star/
16、FinishStar/Finish,Start-1/Finish+1Empty/FullEmpty/FullLess than empty/more than fullSlower/FasterSlower/FasterLargest/SmallestLargest/SmallestOver/UnderOver/Under,just Over/Just UnderShortest/LongestShortest/Longest 有什么具体案例?3.3 基于组合技术和组合优化的方法3.3.1 3.3.1 判定表判定表/决策表方法决策表方法3.3.2 3.3.2 因果图因果图3.3.3 3.3.3
17、 两两组合方法两两组合方法3.3.4 3.3.4 正交实验法正交实验法3.3.1 判定表方法pp在实际应用中,许多输入是由多个因素构成,而不是单一在实际应用中,许多输入是由多个因素构成,而不是单一因素,这时就需要多因素组合分析因素,这时就需要多因素组合分析。pp对于多因素,有时可以直接对输入条件进行组合设计,不对于多因素,有时可以直接对输入条件进行组合设计,不需要进行因果分析,即直接采用判定表方法。需要进行因果分析,即直接采用判定表方法。pp判定表判定表由由“条件和活动条件和活动条件和活动条件和活动”两部分组成两部分组成,即即即即列出一个测试活列出一个测试活列出一个测试活列出一个测试活动执行所
18、需动执行所需动执行所需动执行所需的条件组合的条件组合的条件组合的条件组合,所有可能的条件组合定义了一系,所有可能的条件组合定义了一系列的选择,而测试活动需要考虑每一个选择。列的选择,而测试活动需要考虑每一个选择。判定表元素pp条件桩条件桩条件桩条件桩,列出问题的所有条件,列出问题的所有条件pp动作桩动作桩动作桩动作桩:列出可能针对问题所采取的操作:列出可能针对问题所采取的操作pp条件项条件项条件项条件项:针对所列条件的具体赋值:针对所列条件的具体赋值pp动作项动作项动作项动作项:列出在条件项(各种取值)组合情况下应该采:列出在条件项(各种取值)组合情况下应该采取的动作。取的动作。pp规则规则规
19、则规则:任何一个条件组合的特定取值及其相应要执行的:任何一个条件组合的特定取值及其相应要执行的操作。操作。判定表方法步骤pp列出条件桩列出条件桩pp列出列出动作桩动作桩pp填入条件项填入条件项及其组合及其组合pp填入动作项,制定初填入动作项,制定初始判定表;始判定表;pp简化、合并相似规则简化、合并相似规则或者相同动作或者相同动作条件桩动作桩规则判定表 示例1IDID项目名称项目名称R1R1R2R2R3R3R4R4R5R5条件项C1此商品在经营范围NYYYYC2此商品可以发货YYNNC3此客户没有拖欠过付款YNYN动作项A1货到后允许客户转账1A2货到客户必须立即付款1A3重新组织货源11A4
20、电话通知1A5书面通知11判定表示例判定表示例23.3.2 因果图法pp多种输入条件的组合,产生多种结果设计测试用例。多种输入条件的组合,产生多种结果设计测试用例。pp设计方法:设计方法:分析软件规格说明文档描述的哪些是原因(输入条件),哪些是结果(输出条件),给每个原因和结果赋予一个标示符。找出原因与结果,原因与原因之间的对应关系,划出因果图在因果图上标上哪些不可能发生的因果关系,表明约束或限制条件根据因果图,创建判定表,将复杂的逻辑关系和多种条件组合很具体明确的表示出来把判定表的每一行作为依据设计测试用例。pp恒等恒等-关系:果关系:果 j j 取决于因取决于因 i i。因出现,则果也出现
21、。因出现,则果也出现。非非-关系:只有当因关系:只有当因 i i 不存在时,果不存在时,果 j j 才出现。才出现。ijij因果图的基本符合n或或-关系:关系:如果因 i1 或或因 i2 或或因 in 存在时,结果 j 才出现。n与与-关系:关系:只有当因 i1 与与因 i2 与与因 in 同时存在时,结果 j 才出现。j i1i2inj i1i2in因果图法示例(1)有效等价类有效等价类:输入条件有效类 .abs(N)N 0,N 0maxint k maxint,k maxint测试用例测试用例:maxintNresult maxint Nresult55105510000 5410erro
22、r100-11 56105510011 000给定maxint 和 N,如果结果 0 and b 0)then4.c=c/a5.end if6.if(a 1 or c 1)then7.c=c+18.end if9.c=b+c程序控制流图示例:语句覆盖可发现的问题(a,b,c)=(1,1,2)3689IFIFENDIFENDIFfeicbad457jh程序源代码1.dim a,b as integer2.dim c as double3.if(a 0 or b 0)then4.c=c/a5.end if6.if(a 1 and c 1)then7.c=c+18.end if9.c=b+c程序控制
23、流图示例:语句覆盖不能发现的问题(a,b,c)=(1,1,2)andor3.4.1 判定覆盖p判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。p一个判定代表着程序的一个分支,所以判定覆盖也被称为分支覆盖。示例:绘制控制图示例:设计测试用例(a,b,c)=(1,1,2)(a,b,c)=(-1,1,0)3.4.2 条件覆盖p条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。(a0 and b0)a0b0 示例:列出所有条件判定条件判定条件M:条件a0:取.T.时为T1取
24、.F.时为F1条件b0:取.T.时为T2取.F.时为F2;判定条件判定条件N:条件a1:取.T.时为T3取.F.时为F3条件c1:取.T.时为T4取.F.时为F4示例:覆盖所有条件(a,b,c)=(2,-1,0)(a,b,c)=(-1,1,2)T1,F2,T3,F4F1,T2,F3,T4但有什么问题吗?但有什么问题吗?3.4.3 判定条件覆盖p判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次条件条件取值条件取值条件分支分支判定条件判定条件a0,b0,a1,c1T1,T2,T3,T4a0 AND
25、 b0M=.T.N=.T.a=0,b=0,a=1,c1 OR c1M=.F.N=.F.示例:覆盖判定/条件(a,b,c)=(2,1,2)(a,b,c)=(-1,0,1)T1,T2,T3,T4F1,F2,F3,F43.4.4 条件组合测试p条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。p它与条件覆盖的差别是它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所所有可能组合都至少出现一次有可能组合都至少出现一次示例(1)组合编号 覆盖条件取值判定条件取值判定-条件组合1T1,T2M=.T.a0,
26、b0,M取真2T1,F2M=.F.a0,b=0,M取假3F1,T2M=.F.a0,M取假4F1,F2M=.F.a=0,b1,c1,N取真6T3,F4N=.T.a1,c=1,N取真7F3,T4N=.T.a1,N取真8F3,F4N=.F.a=1,c=n+1 test cases for a decision with n inputs.示例组合编号 覆盖条件取值判定条件取值1T1,T2M=.T.2T1,F2M=.F.3F1,T2M=.F.4F1,F2M=.F.5T3,T4N=.T.6T3,F4N=.T.7F3,T4N=.T.8F3,F4N=.F.3.4.5 基本路径覆盖p顾名思义,路径覆盖就是设计
27、所有的测试用例,来覆盖程序中的所有可能的执行路径。测试用例覆盖路径覆盖条件覆盖组合输入:a=2,b=1,c=6输出:a=2,b=1,c=5P1(1-2-4)T1,T2,T3,T41,5输入:a=1,b=1,c=-3输出:a=1,b=1,c=-2P2(1-2-5)T1,T2,F3,F41,8输入:a=2,b=-1,c=-2输出:a=2,b=-1,c=-2P3(1-3-4)T1,F2,T3,F42,6输入:a=-1,b=2,c=3 输出:a=-1,b=2,c=6P3(1-3-4)F1,T2,F3,T43,7输入:a=-1,b=-2,c=-3输出:a=-1,b=-2,c=-5P4(1-3-5)F1,
28、F2,F3,F44,8基本路径覆盖的设计过程1.依据代码绘制流程图2.确定流程图的圈复杂度(cyclomatic complexity)3.确定线性独立路径的基本集合(basis set)4.设计测试用例覆盖每条基本路径示例 源代码Procedure:process records1.Do While records remain2.Read record;3.If record field 1=0 Then4.store in buffer;5.increment counter;6.Else If record field 2=0 Then7.reset counter;8.Else st
29、ore in file;9.End If10.End If11.End DoEnd示例 流程图1910112457836基本路径测试:流程图简化12,387694,51011流程图的圈复杂度 V(G)=区域数量(由节点、连线包围的区域,包括图形外部区域)V(G)=连线数量-节点数量+2 V(G)=简单可预测节点数量+1圈复杂度(圈复杂度(Cyclomatic complexity):代码逻辑复杂度的 度量,提供了被测代码的路径数量。复杂度越高,出错的概率越大V(G)modules流程图复杂度例子V(G)=412,378694,51011Region 1Region 2Region 3Regio
30、n 4确定线性独立的路径集合p 独立路径:独立路径:至少引入一系列新的处理语句或条件的至少引入一系列新的处理语句或条件的任何路径任何路径pp 基本集:基本集:由独立路径构成的集合由独立路径构成的集合pp 由基本集导出的测试用例,保证每行代码语句至少由基本集导出的测试用例,保证每行代码语句至少被执行一次被执行一次pp基本集合不一定唯一基本集合不一定唯一 Path1:1-2-3-6-7-9-10-1-11示例:基本路径测试用例 Path2:1-2-3-6-8-9-10-1-11 Path3:1-2-3-4-5-10-1-11Path4:1-111910112458736测试用例覆盖集合中每条路径基
31、本路径测试并不是测试所有路径的组合,仅仅保证每条基本路径被执行一次 不需要活动图,但最好绘制程序流程图 计算每个逻辑测试,也就是布尔操作符数加1 最好每个单元都进行基本路径测试,对关键组件则是必要的小结语句覆盖判定覆盖DC条件覆盖CC判定/条件覆盖DC/CC条件组合覆盖MCC基本路径覆盖BPClCondition Coverage(CC)lDecision Coverage(DC)lMultiple Condition Coverage(MCC)lModified Condition/Decision Coverage(MC/DC)MC/DC作业DC/CCBPCMC/DC1.Testwell
32、CTC+2.CoverageMeter3.BullseyeCoverage4.GCT5.CppUnit6.Dynamic Code Coverage7.TCAT C/C+8.COVTOOL9.gocv10.xCover+找一合适的函数代码+选择一覆盖率工具 完成三种覆盖率的测试小结:方法的灵活运用代码中循环结构如何测试?从数据输入和结构两方面来考虑n目标目标:在循环内部及边界上执行测试在循环内部及边界上执行测试循环测试 11.简单循环简单循环(迭代次数n)完全跳过循环 只经过循环一次 经过循环两次 经过循环m(m 1push height max-1toptop说明push*示例:状态图 输入
33、输入状态状态initpushpopdeletetopinitialemptyemptyfillederrordeletederrorfilledfilled(1)full(2)empty(3)filled(4)errorfilledfullfullfillederrorfulldeleted(1)-push height 1状态表initpush initialempty empty deleted filled filled filledfullfullfilledfulldeletepushpushpoptoptoppush*poppop ERRORpop ERRORtop ERRORde
34、lete filled ERRORdelete状态转化树生成测试用例EFSM工具-FSME补充:基于用户场景的测试w也称作基于用户场景测试(user scenario testing)w分析用户会是怎样与系统打交道的,以及用户典型行为分析w根据不同的特性区分不同的用户群体、用户角色w用例描述了参与者(包括用户与系统)之间的相互作用,并从这些交互产生一个从用户的角度所期望和能观察到的结果。w每个用例都有测试前置条件(precondition)和后置条件(postcondition):w为使应用情况能够顺利运行,必须满足前置条件。w后置条件是在用例执行完成后能观察到的结果和系统的结束状态。用户场景
35、测试w针对典型的行为模式(用例/Use Case)组成测试场景。w用例通常有一个主场景(即最有可能发生的场景),有时候也会有可供选择的分支。w可以根据使用频繁度来确定这些用例的优先级。w因为用例基于系统最可能使用的情况,因此从用例中得到的测试用例,是发现系统在实际应用中存在的缺陷的最有效的方式。w所以很适用于由用户/客户一起参与的验收测试。w也同样适用于在集成测试过程中,通过观察不同组件的相互作用和相互影响,从而发现错误的情况。用例测试111用例测试示例112基于场景的基于场景的测试测试方法方法n基于Use case或User Story直接进行验证n根据UML的序列图来进行验证n列出各种系统事件、观察和分析用户行为,设想各种可能的user scenario来进行验证n分析同类系统和竞争对手的系统参考:参考:基于基于UML顺序图的场景测试用例生成方法顺序图的场景测试用例生成方法基于场景的性能测试设计S SBT:Session-Based Testing/BT:Session-Based Testing/Scenario-Based TestingScenario-Based Testing作业第第3章章 6、7、9尽可能采用所介绍的方法,完善上次作业尽可能采用所介绍的方法,完善上次作业Thank youQ&A
限制150内