软件测试方法和技术第3章软件测试的方法朱少民Kerryzhu@vip.163.com第2章回顾软件缺陷是软件质量的对立面软件缺陷(Bug)是什么验证和确认软件测试的分类静态测试与动态测试主动测试与被动测试黑盒测试与白盒测试测试级别:单元、集成、系统和验收软件测试计划与用例专业测试人员的责任和要求第3章软件测试的方法3.1基于直觉和经验的方法3.2基于输入域的方法3.3基于组合及其优化的技术3.4基于逻辑覆盖的方法3.5基于故障模式的测试方法3.6基于模型的测试方法3.7形式化方法方法论和具体方法从方法论看,更多体现了一种哲学的思想,例如辩证统一的方法,在测试中有许多对立统一体,如静态测试和动态测试、白盒测试和黑盒测试、自动化测试和手工测试等。软件测试的方法论来源于软件工程的方法论,例如有面向对象的开发方法,就有面向对象的测试方法;有敏捷方法,就有和敏捷方法对应的敏捷测试。测试领域DomainsunderTestGUILogicInputSpaceSyntaxUsecasesSpecsDesignSourceAppliedtoDNFSpecsFSMsSourceInputModelsIntegrationSourceDNF:DisjunctiveNormalForm(析取范式)FSM:FiniteStatusMachine测试方法@SWEBOK3.06IDBTCBTFBTUBTMBTTBNA具体方法或技术7IDBT等价类、边界值、两两组合(pairwise)、随机测试黑盒测试CBT基于控制流的标准、基于数据流的标准、CBT参考模型白盒测试FBT故障模型、错误猜测法、变异测试UBT操作配置(operationalprofile)、用户观察启发黑盒测试MBT决策表、有限状态机、形式化验证、TTCN3、工作流模型TBNAOOS、web、real-time、SOA、embedded、safe-critical应用领域过去常提“黑盒和白盒”方法8等价类划分法边界值分析法判定表方法因果图法正交试验法功能图法错误推测法语句覆盖判定覆盖条件覆盖判定条件覆盖条件组合覆盖基本路径覆盖黑盒方法白盒方法其它方法@world9上下文驱动方法基于需求验证的方法基于场景的测试方法快速测试方法基于经验的方法3.1基于直觉和经验的方法3.1.1Ad-hoc测试方法和ALAC测试3.1.2错误推测法基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例。3.1.1ALAC测试和随机测试ALAC,是Act-like-a-customer(象客户那样做)的简写,ALAC测试方法是一种基于客户使用产品的知识开发出来的测试方法,它的出发点是著名的Pareto80/20规律3.1.2错误猜测法错误推测法是测试者根据经验、知识和直觉来发现软件错误,来推测程序中可能存在的各种错误,从而有针对性的进行测试。发现程序经常出现的错误的方法:单元测试中发现的模块错误;产品的以前版本曾经发现的错误;输入数据为0或字符为空;当软件要求输入时(比如在文本框中),不是没有输入正确的信息,而是根本没有输入任何内容,单单按了Enter键;……3.2基于输入域的测试方法3.2.1等价类划分法3.2.2边界值分析法3.2.1等价类划分方法等价类是某个输入域的子集,在该子集中每个输入数据的作用是等效的.将输入数据分成若干个子集,从每个子集选取一个代表性的数据作为测试用例分为有效等价类和无效等价类。在分析需求规格说明的基础上划分等价类,列出等价类表设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受异常数据的考验。经过正反的测试才能确保软件具有更高的可靠性。allinputsi1i4i2i3确定等价类的方法在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类inrangegreaterthanrangelessthanrangevaluegreaterthanvaluelessthanvalue在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类确定等价类的方法(2)notmemberofsetmemberofsetBooleanNon-Boolean确定等价类的方式(3)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。有什么具体案例?等价类测试用例-Example等价类1:Integer等价类2:Decimalfraction等价类3:Negative等价类4:Invalidinput根据等价类创建测试用例的步骤a)建立等价类表,列出所有划分出的等价类:b)为每个等价类规定一个唯一的编号;c)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类d)重复c),最后使得所有有效等价类均被测试用例所覆盖;e)设计一个新的测试用例,使其只覆盖一个无效等价类。f)重复e)使所有无效等价类均被覆盖。输入条件有效等价类无效等价类………………3.2.2边界值分析方法很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以更有效地发现缺陷。BVA–BoundaryValueAnalysis设计方法:确定边界情况(输入或输出等价类的边界)选取正好等于、刚刚大于或小于边界值作为测试数据确定边界值的方法如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据。abab确定边界值的方法(2)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。TestcasesforABS(x):classx0,arbitraryvalue:x=-10classx=0,arbitraryvaluex=100classesx0,x=0,onboundary:x=0classesx0,x=0,belowandabove:x=-1,x=1正常值(有效类):X1=123123边界值:X2=12345边界值:X3=1234567边界值:X4=1边界值:X5=0无效类的值:X6=-123123无效类的值:X7=asdasd其它?BVA示例2测试限制性用户输入:6位正整数无效值:X8=000123X9=asd123X10=EmptyBVA示例3Testcases:任意的正常值:随机选择几个选项边界值:选择所有选项边界值:一个都不选边界值:选择一个选项二进制Term取值范围BitNibbleByteWordKiloMegaGigaTera0or10-15Halfbyte0-2550-65535or0-429496729510241048576107374182410995116277760和1,byte由8bits构成,字由4bytes构成,…ASCIITableCharacterASCIIValueCharacterASCIIValueNullSpace/0129;@A0324748495057586465BYZ[‘abyz{66899091969798121122123字符编辑域DefaultEmptyBlankNullZeroNone一些特殊的边界值数值字符位置数量速度位置体积First/last,First-1/Last+1Min/Max,Min-1/max+1Star/Finish,Start-1/Finish+1Empty/FullLessthanempty/morethanfullSlower/FasterLargest/SmallestOver/Under,justOver/JustUnderShortest/Longest……有什么具体案例?3.3基于组合技术和组合优化的方法3.3.1判定表/决策表方法3.3.2因果图3.3.3两两组合方法3.3.4正交实验法3.3.1判定表方法在实际应用中,许多输入是由多个因素构成,而不是单一因素,这时就需要多因素组合分析。对于多因素,有时可以直接对输入条件进行组合设计,不需要进行因果分析,即直接采用判定表方法。判定表由“条件和活动”两部分组成,即列出一个测试活动执行所需的条件组合,所有可能的条件组合定义了一系列的选择,而测试活动需要考虑每一个选择。判定表元素条件桩,列出问题的所有条件动作桩:列出可能针对问题所采取的操作条件项:针对所列条件的具体赋值动作项:列出在条件项(各种取值)组合情况下应该采取的动作。规则:任何一个条件组合的特定取值及其相应要执行的操作。判定表方法步骤列出条件桩列出动作桩填入条件项及其组合填入动作项,制定初始判定表;简化、合并相似规则或者相同动作条件桩动作桩规则判定表示例1ID项目名称R1R2R3R4R5条件项C1此商品在经营范围NYYYYC2此商品可以发货YYNNC3此客户没有拖欠过付款YNYN动作项A1货到后允许客户转账1A2货到客户必须立即付款1A3重新组织货源11A4电话通知1A5书面通知11判定表示例23.3.2因果图法多种输入条件的组合,产生多种结果设计测试用例。设计方法:分析软件规格说明文档描述的哪些是原因(输入条件),哪些是结果(输出条件),给每个原因和结果赋予一个标示符。找出原因与结果,原因与原因之间的对应关系,划出因果图在因果图上标上哪些不可能发生的因果关系,表明约束或限制条件根据因果图,创建判定表,将复杂的逻辑关系和多种条件组合很具体明确的表示出来把判定表的每一行作为依据设计测试用例。恒等-关系:果j取决于因i。因出现,则果也出现。非-关系:只有当因i不存在时,果j才出现。ijij因果图的基本符合或-关系:如果因i1或因i2或……因in存在时,结果j才出现。与-关系:只有当因i1与因i2与……因in同时存在时,结果j才出现。ji1i2inji1i2in因果图法-示例(1)有效等价类:输入条件有效类.abs(N)N0,N0maxintkmaxint,kmaxint测试用例:maxintNresultmaxintNresult551055100005410error100-1156105510011000………给定maxint和N,如果结果=maxint,则按以下公式计算;否则提示出错:K=0|N|kresult=kmaxintkmaxintN0N0kerrorandxorORCauseskmaxint1100Inputskmaxint0011N01010N00101Effectsk1100Outputserror0011因果图法-示例(2)1100error0011kEffects1010N00101N01100kmaxint0011kmaxintCauseCaseMatrix:因果图法-示例(3)3.3.3两两组合(Pairwise)方法大部分缺陷是在两个变量取值冲突的测试时被发现的不仅仅是在所有的组合情况下才会发现所有的测试缺陷这个是“PairwiseTesting”基本原理,不要测试所有的组合,测试所有的“Pairwise”即可Pairwise测试工具