软件工程测试工具资料课件.ppt
判断结构的CFG表达,节点1代表了测试条件xy,有不止一条出边,称为决策节点。节点4 有不止一条入边,称为汇合节点。,循环结构的CFG表达,注意,图72 中的节点2 就是增加的虚拟节点,不代表任何语句。,(1)while 循环的CFG 表达,循环结构的CFG表达,(2)do-while循环的CFG 表达,循环结构的CFG表达,(3)for 循环的CFG 表达,节点覆盖,即对于图G 中每个语法上可达的节点,测试用例所执行的测试路径的集合中至少存在一条测试路径访问该节点。语法上可达定义如下:如果存在从节点ni 到节点n(或边e)的一条路径,则节点n(或边e)是从节点ni 在语法上可达的。显然,节点覆盖和语句覆盖是等价的。,边覆盖,即对于图G 中每一个可到达的长度小于等于1 的路径,测试用例所执行的测试路径的集合中至少存在一条测试路径游历该路径。显然,边覆盖包含节点覆盖,且边覆盖也可以实现分支覆盖。,路径覆盖,路径覆盖测试就是设计足够的测试用例,覆盖程序中所有可能的路径。测 试 用 例 通过路径 覆盖条件【(2,0,4),(2,0,3)】ace【(1,1,1),(1,1,1)】abd【(1,1,2),(1,1,3)】abe【(3,0,3),(3,0,1)】acd,基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。它是在程序控制流图的基础上,A.分析控制构造的环路复杂性,B.导出基本可执行路径集合,C.设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次,且每个条件在执行时都将分别取真和假两种值。,基本路径测试,1.计算程序环路复杂性程序的环路复杂性给出了程序基本路径集中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。从控制流图来看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径。计算公式:V(G)=e n+2。其中,e 为图中边的数目;n 为节点数目。,1.计算程序环路复杂性,2.确定线性独立路径的基本集合,2.确定线性独立路径的基本集合从源节点(控制流图的入口点)开始,一直走到汇节点(控制流图的出口点)。该路径作为基线路径。接下来,重新回溯基线路径,依次“翻转”在判断节点上原来选择的路径。即当遇到节点的出度大于等于2 时,必须选择不同的边。重复以上过程,直到得到的路径数目等于V(G)注意:如果存在循环,只能经过一次,否则路径存在冗余;第二,独立路径的基本集合可能不唯一,但集合中路径的数目是唯一的。,导出测试用例,确保基本路径集中的每一条路径的执行。根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到 用逻辑覆盖方法。每个测试用例执行之后,与预期结果进行比较。如果所有测试用例都执行完毕,则可以确信程序中所有的可执行语句至少被执行了一次。必须注意,一些独立的路径,往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。,3.导出测试用例,举例,例如,在图示的控制流图中,一组独立的路径是:Path1:(A,B,C,B,E,F,G)Path2:(A,D,E,F,G)Path3:(A,B,E,F,G)Path4:(A,B,C,G)Path5:(A,D,F,G)路径 path1,path2,path3,path4,path5组成了控制流图的一个基本路径集。,举例,也叫功能测试或数据驱动测试,被测软件看作一个不透明的黑盒子,在软件接口处进行,完成功能的验证。黑盒测试完全不考虑程序内部的逻辑结构和内部特性。,黑盒测试,黑盒测试技术,基于需求的测试,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?,黑盒测试,假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:可能采用的测试数据组:232232264 如果测试一组数据需要1毫秒,一年工作365 24小时,完成所有测试需5亿年。,用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。,黑盒测试的局限性,等价类划分方法 边界值分析方法 状态测试方法,黑盒测试方法,等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。,等价类划分方法,1.划分等价类等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。,1.划分等价类,等价类的划分有两种不同的情况:有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。,1.划分等价类,划分等价类等价类的原则(1)如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。,划分等价类的原则,例如,在程序的规格说明中,对输入条件有一句话:“项数可以从1到999”则有效等价类是“1项数999”两个无效等价类是“项数1”或“项数999”。在数轴上表示成:,划分等价类的原则,例如,在Pascal语言中对变量标识符规定为“以字母打头的串”。那么所有以字母打头的构成有效等价类,而不在此集合内(不以字母打头)的归于无效等价类。,划分等价类的原则,划分等价类等价类的原则(2)如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。,划分等价类的原则,划分等价类等价类的原则(3)如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。,划分等价类等价类的原则(4)如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为 每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。,例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定4个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。,划分等价类的原则,划分等价类等价类的原则(5)如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。,划分等价类的原则,例如,Pascal语言规定“一个语句必须以分号;结束”。这时,可以确定一个有效等价类“以;结束”,若干个无效等价类“以:结束”、“以,结束”、“以 结束”、“以LF结束”等。,2.确立测试用例在确立了等价类之后,建立等价类表,列出所有划分出的等价类。,2.确立测试用例,再从划分出的等价类中按以下原则选择测试用例:(1)为每一个等价类规定一个唯一编号;(2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;(3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。,2.确立测试用例,用等价类划分法设计测试用例的实例,举例:计算两个1-100之间的整数的和。1.划分等价类,用等价类划分法设计测试用例的实例,举例:计算两个1-100之间的整数的和。1.划分等价类,用等价类划分法设计测试用例的实例,举例:计算两个1-100之间的整数的和。2.设计测试用例,另一个用等价类划分法设计测试用例的实例在某一PASCAL语言版本中规定:“标识符是由字母开头,后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。”,用等价类划分的方法,建立输入等价类表:,下面选取了9个测试用例,它们覆盖了所有的等价类。VAR x,T1234567:REAL;BEGIN x:=3.414;T1234567:=2.732;.(1),(2),(4),(8),(9),(12),(14)VAR:REAL;(3)VAR x,:REAL;(5),VAR T12345678:REAL;(6)VAR T12345.:REAL;(7)多于80个字符 VAR T$:CHAR;(10)VAR GOTO:INTEGER;(11)VAR 2T:REAL;(13)VAR PAR:REAL;(15)BEGIN.PAP:=SIN(3.14*0.8)/6;,边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。,边界值分析方法,比如,在做三角形计算时,要输入三角形的三个边长:A、B和C。我们应注意到这三个数值应当满足 A0、B0、C0、ABC、ACB、BCA,才能构成三角形。但如果把六个不等式中的任何一个大于号“”错写成大于等于号“”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。,举例,这里所说的边界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。,边界值分析方法,状试态测,由于在黑盒测试阶段,程序内部的逻辑结构是无从得知的,因此只能通过对状态的测试间接地加以验证。软件状态(software state)是指软件当前所处的条件或者模式。通常,访问所有的状态是可以实现的,但除了极少数简单程序外,不可能以走完所有分支的方式来达到每种状态,即必须选择重要的内容进行测试。,建立状态转换图,标识出软件可能进入的每一种独立状态。找出从一种状态转入另一种状态所需的输入和条件。找出进入或退出某种状态时的设置条件及输出结果。,根据状态转换图设计测试用例,每种状态至少访问一次测试看起来是最常见和最普遍的状态转换测试状态之间最不常用的分支测试所有错误状态及其返回值测试状态的随机转换,静态分析方法,不实际运行程序,通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。作用通过对代码标准及质量的监控提高代码可靠性尽可能早地通过对源代码的检查发现缺陷组织代码审核定位易产生错误的模块非常有效的质量保证手段越来越多地被采用,通用评审过程,评审过程就是执行静态分析的过程。IEEE Standard for Software Reviews and Audits定义了以下6 个步骤:1、计划2、概述3、准备4、评审会议5、返工6、跟踪,静态分析的主要内容,检查需求检查设计检查代码,软件缺陷产生的原因分布,检查需求,需求的标准完整性是否完整描述一个功能正确性是否正确反应客户要求可行性必要性Gold plating?无二义性会引起歧义吗可验证性测试用例怎么写?实施无关性,需求规格说明的标准完整性是否包含所有需求FURPS一致性相互矛盾重复,需求检查练习,例1产品必须在固定的时间间隔内提供状态信息,并且每次时间间隔不得小于60秒。完整吗?清晰吗?例2分析程序应该能生成HTML标记错误的报告,从而使HTML初学者可以用它来快速排错。是否有歧义?可验证吗?例3如果可能的话,应当根据系统货物编号列表,在线确认输入的货物编号。“如果可能的话”是什么意思?,需求检查练习,例4产品不应该提供将带来灾难性后果的查找和替换选择。真正的需求是什么?例5系统对标准XYZ 1.4.1的支持是可选的。有歧义吗?例6当用户选择“紧凑内存”选项时,程序通过Huffman解析矩阵方法将邮件列表数据压缩到相应的大小。可测吗?代码无关吗?,规格说明用语清单,绝对的肯定总是、每一种、所有、没有、从不注意隐含的假设当然、因此、显然、必然模棱两可的词某些、有时、常常、通常、经常、太多、几乎不可测的描述良好、迅速、廉价、高效、稳定隐藏的需求已处理、已拒绝、已忽略、已消除缺少的分支如果那么(没有“否则”分支),检查设计,在编码开始前进行检查功能设计说明,消除歧义功能的用意、总体位置输入、输出可能的错误/例外接口定义交互细节实施建议,检查代码,通过检查代码发现模块中的错误,通过代码检查能够发现大部分的错误,静态分析的类型,同事审查走查审查,同事审查,同事审查是一种非正式的评审,但也应遵循上面介绍的评审流程。适用于初次审查,是要求最低的正式方法,也称为伙伴审查。同事审查常常仅在编写代码或设计体系结构的程序员,以及充当审查者的其他一两个程序员和测试员之间进行。,走查(Walkthrough),开发组内部进行的采用讲解、讨论和模拟运行的方式查找错误的活动限时-避免跑题参加人员经验丰富的开发人员和本模块相关的开发人员本项目组的新人由本模块的开发者进行讲解、回答问题并记录不要现场修改检查要点逻辑错误代码标准/规范/风格,审查(Inspection),开发组、测试组和相关人员(QA、产品经理等)联合进行。采用讲解、提问并使用Checklist方式进行的查找错误的活动。以会议的形式,制定目标、流程、规则和结果报告。相关资料要在会议前下发并阅读。参加人员经验丰富的开发人员和本模块相关的开发人员测试组和相关人员,审查(Inspection),由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录不要现场修改检查要点设计需求代码标准/规范/风格文档的完整性和一致性,通用代码审查清单,1、数据引用错误。2、数据声明错误。3、计算错误。4、比较错误。5、控制流程错误。6、子程序参数错误。7、输入/输出错误。8、其他检查。如:字符集、移植性、兼容性等。,自动化工具,基于编码规则LogiscopeLDRANuMega的CodeReview基于质量度量LogiscopeMcCabeLDRA,如何使静态分析更有效?,必须引入“别人”的眼睛根据团队及项目的实际情况,设计合理的实施办法有准备地进行应该有包含所有关注要点的Checklist把握会议时间每次以 2小时为限可以进行多次,本章小结,软件测试的常用术语软件测试的主要方法有白盒测试和黑盒测试两大类。白盒测试中包括逻辑覆盖测试和控制流图覆盖测试,语句覆盖、分支覆盖、条件覆盖、条件组合覆盖,后者如节点覆盖、边覆盖、基本路径测试。黑盒测试中最常见的方法是等价类划分方法和边界值分析方法,此外还需要针对软件进行状态测试。静态分析要遵循一定的评审过程,主要形式有同事审查、走查和审查。,作业,1、请简述软件缺陷的内涵。并分析为何软件实现了产品说明书未提到的功能反而是软件缺陷的一种情况。2、请简述测试的主要原则。3、输入三个整数 a、b 和c 分别作为三角形的3 条边,通过程序判断由这3 条边构成的三角形类型是:等边三角形、等腰三角形、一般三角形或非三角形(不能构成一个三角形)。请按照等价类划分方法(基本选择覆盖)设计测试用例。4、续上题,假设每边的边长限制在10,20的范围内,按照边界值分析方法应该补充哪些测试用例?,作业(续),5、阅读下面的程序,并按要求进行解答。public String foo(int x,int y)boolean z;if(y10)return C;if(xy)z=true;elsez=false;if(z(1)设计测试用例,达到谓词覆盖标准。(2)设计测试用例,达到相关有效子句覆盖标准。(3)绘出代码对应的CFG 图。(4)设计测试用例,达到节点覆盖标准。(5)设计测试用例,进行基本路径测试。,