软件测试2课程内容1.测试目的和策略2.测试方法3.测试技术4.测试工具5.测试过程3测试目的和策略4什么是软件测试狭义的定义:测试是程序的执行过程,目的在于发现错误;软件测试是根据程序开发阶段的规格说明及程序内部结构而精心设计的一批测试用例(输入数据及其预期结果的集合),并利用这些测试用例去运行程序,以发现错误的过程;一个好的测试用例在于能发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误的测试。5广义的软件测试概念指软件生命周期中所有的检查、评审和确认工作,其中包括对分析、设计阶段,以及完成开发后的维护阶段的各类文档和代码的审查和确认。测试通常包括确认(validation)和验证(verification)两种方式。6验证和确认验证(Verification):在软件生存期各个阶段,验证是指检测各个阶段结束时的工作产品是否满足对上一阶段的结束后的工作产品所定义的规格的验证过程。需求设计编码测试验证7验证和确认确认(Validation):在软件生命周期各个阶段,确认是指检测各个阶段结束时的工作产品是否满足在软件生命周期初期在系统需求文档中描述的各项软件规格的确认过程。需求设计编码测试确认8确认和验证的比较验证是检测每一阶段形成的工作产品是否与前一阶段定义的规格相一致确认是检测每一阶段的工作产品是否与最初定义的软件需求规格相一致软件测试既可用于验证,又可用于确认需求设计编码测试验证确认9什么是缺陷?缺陷:最终产品同用户的期望不一致缺陷的分类错误遗漏超出需求的部分缺陷(未触发)Vs.故障(应首先解决)10测试的职责验证在整个软件开发周期中,各个阶段的软件质量是否合格。验证最终交付给用户的系统是否满足用户的需要,是否符合需求。通过样本测试数据,检查系统在运行过程中的情况。11测试Vs质量保证软件测试并不是质量保证的唯一手段,事后的检验是高价的。应尽量在开发期间减少错误,通过软件过程来建立软件质量。迄今为止,软件质量仍然主要靠软件测试来验证和确认,而且由于测试工作特别耗费资源,在软件开发的总成本中,用在测试上的开销要占30%到50%。在极端的情况下,例如在关系到人的生命安全的软件中(如飞机控制或核反应监控等软件),测试费用可能相当软件生命周期所有其它阶段费用总和的三到五倍。据美国工业界的统计,对商品化的程序来说,测试在时间和费用两方面的花费都要占整个软件开发周期总开销的50%左右。12测试的商业意义降低风险(风险:就是不希望发生的事情的可能性)测试计划中必须标明商业上的风险。测试人员职责:评估商业上的风险如实的向管理层汇报项目情况13对待可能产生的风险的策略我们无法消除风险,但是我们可以降低在风险发生时的损失。降低系统风险的最有效的办法就是对其进行有针对性的测试。14系统风险列举如果某部分产生了错误会导致的结果?未被验证的数据交换如果被接受如果文件的完整性被破坏系统是否能被安全恢复(完全恢复成备份时的状态)是否能暂停系统的运行进行维护工作时,系统性能是否会下降到不能接受的水平。系统的安全性是否有保证15系统风险列举(继续……)系统的操作流程是否符合用户的组织策略和长远规划系统是否可靠,稳定系统是否易于使用系统是否便于维护是否易于与其它系统相连16测试工作量太少的测试是不负责任,过多的测试是一种罪过。100%的测试是不可能的,不同的用户采用的测试策略是不同的。Good-enough原则商业目标系统的质量等级17测试策略在测试策略中必须标明可能存在的风险,这样在测试后的系统中可以有效的降低被标明的风险发生的可能性。测试要素:需要被标明的风险也是我们测试的重点。测试阶段:在整个开发生命周期中,测试工作介入的时期。18测试效果的好坏是组织级的问题有效的测试最好由一个独立的团队来实施。便于确定工作目标便于人员的培养与升迁利于团队建设对质量的忠诚度高利于新技术,新方法的产生和推广工作职责明确19测试方法20测试方法黑盒测试白盒测试静态测试动态测试21需求说明产生被测程序测试结果输出比较测试用例黑盒测试黑盒测试是从用户观点出发的测试,它又称功能测试、数据驱动测试或基于规格说明书或用户手册的测试。它所依据的是程序的外部特性。22黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?黑盒测试23用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。黑盒测试24假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:可能采用的测试数据组:232×232=264如果测试一组数据需要1毫秒,一年工作365×24小时,完成所有测试需5亿年。黑盒测试25黑盒测试的设计方法等价类划分边界值分析错误推测法因果图。。。26等价类划分等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步27划分等价类等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。等价类划分28等价类的划分有两种不同的情况:①有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。②无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。等价类划分29(1)如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。等价类划分的原则30(2)如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。例如,在Pascal语言中对变量标识符规定为“以字母打头的……串”。那么所有以字母打头的构成有效等价类,而不在此集合内(不以字母打头)的归于无效等价类。等价类划分的原则31(3)如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。(4)如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定4个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。等价类划分的原则32(5)如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。例如,Pascal语言规定“一个语句必须以分号‘;’结束”。这时,可以确定一个有效等价类“以‘;’结束”,若干个无效等价类“以‘:’结束”、“以‘,’结束”、“以‘’结束”、“以LF结束”等。等价类划分的原则33数学含义A=X=BC=Y=D等价类划分的原则34确立了等价类之后,建立等价类表,列出所有划分出的等价类。确立等价类测试用例35再从划分出的等价类中按以下原则选择测试用例:为每一个等价类规定一个唯一编号;设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。确立等价类测试用例36在某一PASCAL语言版本中规定:“标识符是由字母开头,后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。”等价类划分举例37建立输入等价类表等价类划分举例38下面选取了9个测试用例,它们覆盖了所有的等价类。①VARx,T1234567:REAL;BEGINx:=3.414;T1234567:=2.732;...…(1),(2),(4),(8),(9),(12),(14)②VAR:REAL;(3)③VARx,:REAL;(5)等价类划分举例39④VART12345678REAL;(6)⑤VART12345......REAL;(7)多于80个字符⑥VART$:CHAR;(10)⑦VARGOTO:INTEGER;(11)⑧VAR2T:REAL;(13)⑨VARPAR:REAL;(15)BEGIN......PAP:=SIN(3.14*0.8)/6;等价类划分举例40边界值分析边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。经验表明,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。41比如,在做三角形计算时,要输入三角形的三个边长:A、B和C。我们应注意到这三个数值应当满足:A>0、B>0、C>0、A+B>C、A+C>B、B+C>A,才能构成三角形。但如果把六个不等式中的任何一个大于号“>”错写成大于等于号“≥”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。边界值分析42这里所说的边界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。边界值分析43边界值分析数学含义A=X=BC=Y=D44错误推测法人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的用例。错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。45因果图因果图的适用范围:如果在测试时必须考虑输入条件的各种组合,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例。因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。46(1)分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。(2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系?根据这些关系,画出因果图。因果图基本步骤47(3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。(4)把因果图转换成判定表。(5)把判定表的每一列拿出来作为依据,设计测试用例。因果图基本步骤48用Ci表示原因,用Ei表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。主要的原因和结果之间的关系有:因果图基本符号49表示约束条件的符号:为了表示原因与原因之间,结果与结果之间可能存在的约束条件,在因果图中可以附加一些表示约束条件的符号。因果图基本符号50例如,有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。”