《软件测试技术第2章ppt课件.pptx》由会员分享,可在线阅读,更多相关《软件测试技术第2章ppt课件.pptx(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件测试技术及实践第第2 2章章 白盒测试技术白盒测试技术詹慧静 陈燕 段相勇在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确本章学习目标软件测试技术的基本理论白盒测试常用的测试方法软件测试技术可分为白盒测试技术和黑盒测试技术两大类,任何软件产品都可以使用这两种技术进行测试。通常软件产品的测试采用黑盒测试和白盒测试相结合的方法。白盒测试(WhiteboxTesting)又称结构测试、逻辑驱动测试或基于程序的测试。白盒测试的对象是源程序,通过对程序的内部逻辑进行分析,来设计测试用例,对程序细节进行严密检验,对软件的逻辑路径进行测试。在程
2、序的不同点检验“程序的状态”以判定其实际情况是否和预期的状态相一致。黑盒测试(BlackboxTesting)又称功能测试、数据驱动的测试或基于规格说明的测试,是一种从用户观点出发的测试。用这种方法进行测试时,被测程序被当作一个黑盒,在不考虑程序内容结构和内部特征,测试者只知道该程序输入和输出之间的关系或程序的功能的情况下,依靠能够反映这一关系和程序功能的需求规格说明书,考虑确定测试用例和推断测试结果的正确性。软件的黑盒测试被用来证实软件功能的正确性和可操作性。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确白盒测试检查的内容如下:1
3、)对程序模块的所有独立的执行路径至少测试一遍。2)对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一遍。3)在循环的边界和运行的界限内执行循环体。4)测试内部数据结构的有效性等。黑盒测试主要是能发现以下几类错误:1)功能错误或功能遗漏。2)接口错误,输入及输出数据是否能通过接口正确的被传递。3)界面错误。4)数据结构或外部数据库访问错误。5)性能错误,如:性能不能满足需求。6)初始化和终止错误。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确为了能够掌握对软件进行白盒测试,需要掌握:静态测试方法动态测试方法白盒测试技术又可分
4、为静态测试方法和动态测试方法。静态测试检查代码,代码被测试而不执行。动态测试则执行代码,代码被执行而不必检查。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确静态测试是指不需要运行被测程序,而是使用人工和借助软件工具自动的来检查程序代码的语法、结构、过程、接口可能存在的错误,并检查软件的界面或文档可能存在的错误。最常见的静态测试是找出源代码的语法错误,这类测试可由编译器来完成,因为编译器可以逐行的分析检验程序的语法,找出错误并报告。而对于非语法类的错误,编译器无法检查。非语法错误的静态测试主要有代码检查、静态结构分析等。它可以由人工检
5、测,也可以借助于软件工具自动进行。2.2.1 2.2.1 静态测试静态测试技术技术在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确1代码检查法代码检查法代码检查包括桌面检查、代码审查、代码走查等。2.2.1 2.2.1 静态测试静态测试技术技术在代码检查中,需要依据被测软件的特点,选用适当的标准与规则、规范。代码检查可使用测试工具或人工检查。可利用桌面检查、代码走查、代码审查等人工检查的方法仔细检查程序的结构、逻辑等方面的缺陷。在使用测试工具进行自动化代码检查时,测试工具一般会内置许多的编码规则。代码检查法可以发现如下软件缺陷:代码是
6、否遵循设计标准、代码和设计是否一致。代码逻辑表达的正确性。代码结构的合理性。代码编写是否符合代码规约、代码的可读性、编程风格是否一致。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.1 2.2.1 静态测试静态测试技术技术1代码检查法代码检查法2.2.1 2.2.1 静态测试静态测试技术技术代码检查需要检查的内容如下:变量交叉引用表:检查未说明的变量和违反了类型规定的变量,以及变量的引用和使用情况。检查标号的交叉引用表:验证所有标号的正确性以及转向指定位置的标号是否正确。检查子程序、宏、函数:验证每次调用与所调用位置是否正确,
7、调用的子程序、宏、函数是否存在,参数是否一致,以及检查调用方式与参数顺序、个数、类型上的一致性。等价性检查:检查全部等价变量的类型的一致性。常量检查:确认常量的取值、数制、数据类型。标准检查:检查程序是否有违反标准的问题。风格检查:检查程序的设计风格。比较控制流:比较设计控制流图和实际程序生成的控制流图的差异。选择、激活路径:在设计控制流图中选择某条路径,到实际的程序中激活这条路径。补充文档:根据以上检查项目,可以编制代码规则、规范和检查表等文档。对照程序的规格说明,详细阅读源代码:比较实际的代码,从中发现程序的问题和错误。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定
8、的梯度,由浅入深,所提出的问题也很明确1代码检查法代码检查法2.2.1 2.2.1 静态测试静态测试技术技术1)桌面检查)桌面检查桌面检查由程序员检查自己编写的程序。程序员对源程序代码进行分析、检验并补充相关文档,目的是发现程序中的错误。由于程序员熟悉自己的程序及其程序设计风格,桌面检查由程序员自己进行可以节省很多的检查时间,但应避免主观片面性。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确1代码检查法代码检查法2.2.1 2.2.1 静态测试静态测试技术技术2)代码审查)代码审查由程序员和测试人员组成审查小组,通过阅读、讨论对程序
9、进行静态分析的过程。代码审查分两个步骤:(1)小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为审查的依据,小组成员充分阅读这些材料。(2)召开程序审查会。在会上,首先由程序员逐句讲解程序的逻辑。在此过程中,程序员或其他小组成员可以提出问题,展开讨论,审查错误是否存在。实践表明,程序员在讲解过程中能发现许多原来自己没有发现的错误,而讨论和争议则促进了问题的暴露。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确1代码检查法代码检查法2.2.1 2.2.1 静态测试静态测试技术技术3)代码走查)代码
10、走查由程序员和测试人员组成审查小组,通过逻辑运行程序发现问题的过程。与代码审查基本相同,代码走查也分为两个步骤:(1)小组负责人把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给走查小组的每个成员,小组成员充分阅读这些材料。(2)召开程序走查会。首先由测试组成员为被测试程序设计有代表性的测试用例,使用这些测试用例逻辑运行程序。在对程序进行逻辑运行时,随时记录程序的踪迹,供分析和讨论用。借助测试用例的媒介作用,对程序的逻辑和功能提出各种疑问,结合问题开展热烈的讨论和争议,能够发现更多的问题。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出
11、的问题也很明确2静态结构分析静态结构分析2.2.1 2.2.1 静态测试静态测试技术技术静态结构分析主要是以图形的方式表现程序的内部结构,静态结构分析通过应用程序各函数之间的调用关系展示了系统的结构,并可以直观地展示一个函数的内部逻辑结构。这两个功能可用函数调用关系图、模块控制流图完成。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2静态结构分析静态结构分析2.2.1 2.2.1 静态测试静态测试技术技术1)函数调用关系图)函数调用关系图函数调用关系图以直观的图形方式描述一个应用程序中各个函数的调用和被调用关系。通过查看函数调用关系
12、图,可以检查函数之间的调用关系是否符合要求,是否存在递归调用,函数的调用是否过深,有没有独立存在没有被调用的函数。从而可以发现系统是否存在结构缺陷,发现哪些函数是重要的,哪些是次要的,需要使用什么级别的覆盖要求。2)模块控制流图)模块控制流图模块控制流图是由许多节点和连接节点的边组成的一种图形,其中一个节点代表一条语句或数条语句,边代表节点间控制流向,它显示了一个函数的内部逻辑结构。通过检查这些模块控制流图,能够很快发现软件的错误与缺陷。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2静态结构分析静态结构分析2.2.1 2.2.1
13、静态测试静态测试技术技术静态结构主要分析以下内容:1)函数的调用关系是否正确。2)是否存在孤立的函数没有被调用。3)明确函数被调用的频繁度,对调用频繁的函数可以重点检查。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试动态测试(DynamicTesting),是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程。动态测试方法的主要特征是计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况(输入/输出的对应关系)进行分析。在动态测试中,通常使用白盒测试和黑盒测试
14、从不同的角度设计测试用例,查找软件中的错误。动态测试的黑盒测试方法及测试用例的设计在第3章中讲解,本节介绍动态测试的白盒测试方法及测试用例的设计。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试1程序插桩技术程序插桩技术程序插桩,最早是由J.C.Huang教授提出的,它是在保证被测程序原有逻辑完整性的基础上,在程序的相应位置上插入一些探针(又称为“探测器”),通过探针的执行而得到程序运行的特征数据,通过对这些特征数据的分析,了解程序的内部行为和特征。这些探针实际上就是进行信息采集的代码段,可以是
15、赋值语句、计数语句或采集覆盖信息的函数调用等,通过这些探针可以了解最为关注的信息,以判断程序执行过程中的一些动态特性。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试1程序插桩技术程序插桩技术由于程序插桩技术通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。目标代码插桩需要对目标代码进行必要的分析以确定需要插桩的位置和内容。目标代码的格式主要和操作系统相关,与具体的编程语言及版本无关。目标代码插桩有着广泛的应用,例如在需
16、要对内存进行监控的软件中。但是,由于目标代码中语法、语义信息不完整,而插桩技术需要对代码词法的分析有较高的要求,因此在覆盖测试工具中多采用源代码插桩。源代码插桩是在对源代码进行完整的词法分析和语法分析的基础上进行的,这可以保证对源代码的插桩具有很高的准确度和针对性。源代码插桩需要接触到源代码,工作量较大,而且会因为编码语言及版本的不同而做适当的修改。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试1程序插桩技术程序插桩技术【例2-1】计算整数X和整数Y的最大公约数程序,通过插桩技术了解该程序在某
17、次运行中所有可执行语句被覆盖的情况,既每个语句的实际执行次数。其插桩后的流程图如下。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确Q=Q-RR=R-QC=C+1QR入口入口出口出口C=C+1Q=XR=YQRC=C+1C=C+1C=C+1C=C+1在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试1程序插桩技术程序插桩技术设计插桩程序时要考虑和确定以下问题:明确要探测哪些信息。可根据需要和具体情况确定。在程序的什么部位插入探测点。需要插入
18、多少个探测点。就是要考虑如何能插入最少的点,来完成实际的探测问题。程序中特定部位插入某些用以判断变量特性的语句。在程序中的特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得到证实,把这些插入的语句称为断言语句。断言语句的作用是当程序执行到它的时候必须应该与之前的假设一致,否则,就会产生错误。例如,除法运算之前,加一条分母不为0的断言语句,可以有效的防止分母为0错误。断言语句对程序中隐藏很深,用其它方法很难发现的问题很有效。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2
19、 动态测试动态测试1程序插桩技术程序插桩技术在实际测试中通常在下面一些部位设置探测点。程序块的第一个可执行语句之前。for、do、dowhile、dountil等循环语句处。If、else、else及endif等条件语句各分支处。函数、过程、子程序调用语句之后。Return语句之后。Goto语句之后。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖逻辑覆盖也是白盒测试主要的动态测试方法之一,是以程序内部的逻辑结构为基础的测试技术,是通过对程序逻辑结构的遍历实现程序的覆盖,这一方
20、法要求测试人员对程序的逻辑结构有清楚的了解。根据覆盖源程序语句的详细程度,逻辑覆盖包括以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖。为了理解各种逻辑覆盖标准,根据下面源代码程序(用C语言书写),分别讨论不同的覆盖标准设计测试用例。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖【例2-2】有下列程序,其流程图如下图所示。Voidsp(intA,intB,intC)intx=0;y=0;if(A0&B1)Y=A*C;prinf(x,y);在整堂课
21、的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确NYYX=0X=0,Y=0Y=0A0and B0and B1A=5 or c1X=A+BX=A+BY=ACY=AC输出输出X X,Y Y 开始开始 结束结束Nacbde在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖1)语句覆盖()语句覆盖(StatementCoverage)语句覆盖的标准是设计足够的测试用例,运行被测程序,使被测程序中每条可执行语句至少执行一次。对于例2-2,
22、为达到“语句覆盖”的标准,只需设计一个能通过路径a-b-d的数据就可以使程序中每条可执行语句至少执行一次,为此可设计以下测试用例。TestCase1:A=3,B=-1,C=5优点:语句覆盖可以很直观地从源代码得到测试用例,无须细分每条判定表达式。缺点:语句覆盖的测试用例虽然覆盖了所有可执行语句,但并不能检查每个判断逻辑是否有问题,例如在第一个判断中把&错误的写成了|,则上面的测试用例仍可以覆盖所有的执行语句。因此语句覆盖是很不充分的一种标准,是最弱的逻辑覆盖标准。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2
23、动态测试动态测试2逻辑覆盖逻辑覆盖 2)判定覆盖()判定覆盖(DecisionCoverage)比语句覆盖稍强的覆盖标准是判定覆盖。判定覆盖的标准是设计足够的测试用例,运行被测程序,使被测程序中每个判断的“真”和“假”分支均至少执行一次,即判断的真假值均曾被满足。判定覆盖又称为分支覆盖。对于例2-2,为达到“判定覆盖”的标准,只需设计通过路径a-c-d和a-b-e,或通过路径a-b-d和a-c-e,就可达到判定覆盖标准,为此可设计以下测试用例。TestCase1:A=5,B=10,C=-1(沿路径a-c-d执行)TestCase2:A=2,B=-2,C=1(沿路径a-b-e执行)在整堂课的教学
24、中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖 2)判定覆盖()判定覆盖(DecisionCoverage)判定覆盖比语句覆盖严格,每个分支都执行过了,每个语句一定也执行过。达到了判断覆盖标准一定也会达到语句覆盖标准。优点:判定覆盖具有比语句覆盖较强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。缺点:往往大部分的判定语句是由多个逻辑条件组合而成,判定覆盖考虑的是每个判断语句的最终结果,而不能检查判断语句中每个逻辑条件是否有问题,有时某个逻辑条件有
25、错误,设计的测试用例仍然能达到判定覆盖。因此判定覆盖仍是弱的逻辑覆盖标准。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖 3)条件覆盖()条件覆盖(ConditionCoverage)很多时候一个判断语句是由多个条件组合而成的复合判断。为了更彻底地实现逻辑覆盖,可以采用条件覆盖标准。条件覆盖的标准是设计足够的测试用例,运行被测程序,使被测程序中每个判断语句中每个逻辑条件的“真”和“假”值均至少被满足一次。对于第1个判断语句:条件“A0”,取真值为T1,取假值为F1;条件“B1
26、”,取真值为T4,取假值为F4;为达到“条件覆盖”的标准,只需设计足够的测试用例,使得T1、F1、T2、F2、T3、F3、T4、F4均至少被满足一次,就可达到条件覆盖标准,为此可设计以下测试用例。TestCase1:A=5,B=-2,C=-6,满足T1、T2、T3、F4(沿路径a-b-d执行)TestCase2:A=-2,B=8,C=3,满足F1、F2、F3、T4(沿路径a-c-d执行)在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖 4)条件判定组合覆盖)条件判定组合覆盖(D
27、ecisionConditionCoverage)条件判定组合覆盖的标准是设计足够的测试用例,运行被测程序,使被测程序中每个判断语句中每个逻辑条件的“真”和“假”值均至少被满足一次,并且每个判断的“真”和“假”分支也均至少执行一次。对于例2-2,与条件覆盖一样,为程序的每个判断语句中所有条件取值加以标记。条件“A0”、“B1”取真值分别为T1、T2、T3、T4,取假值分别为F1、F2、F3、F4。为达到“条件判定组合覆盖”的标准,只需设计足够的测试用例,使得T1、F1、T2、F2、T3、F3、T4、F4均至少被满足一次,并且程序中2个判断的“真”、“假”分支均至少被满足一次,就可达到条件判定组
28、合覆盖标准,为此可设计以下测试用例。TestCase1:A=5,B=-2,C=3,满足T1、T2、T3、T4(沿路径a-b-d执行)TestCase2:A=-2,B=8,C=-3,满足F1、F2、F3、F4(沿路径a-c-e执行)满足条件判定组合覆盖标准的一定会满足语句覆盖、判定覆盖和条件覆盖。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖5)多条件覆盖)多条件覆盖多条件覆盖也称为条件组合覆盖,多条件覆盖的标准是设计足够的测试用例,运行被测程序,使得每个判断中各条件的各种可能
29、组合都至少被满足一次。显然满足多条件覆盖标准的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖标准。对于例2-2,为程序中每个判断的各条件取值的组合加以标记如下:(1)“A0,B0,B6”,记为“T1、F2”,第1个判断的取假分支。(3)“A0,B1”,记为“T3、T4”,第2个判断的取真分支。(6)“A=5,C1”,记为“T3、F4”,第2个判断的取真分支。(7)“A5,C1”,记为“F3、T4”,第2个判断的取真分支。(8)“A5,C1”,记为“F3、F4”,第2个判断的取假分支。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很
30、明确2.2.2 2.2.2 动态测试动态测试2逻辑覆盖逻辑覆盖5)多条件覆盖)多条件覆盖为达到“多条件覆盖”的标准,只需设计足够的测试用例,使得上面(1)(8)组合都至少被满足一次,为此可设计以下测试用例。TestCase1:A=5,B=-5,C=8,4个条件取值分别T1、T2、T3、T4(沿路径a-b-d执行),满足(1)、(5)组合。TestCase2:A=5,B=9,C=1,4个条件取值分别T1、F2、T3、F4(沿路径a-c-d执行),满足(2)、(6)组合。TestCase3:A=-3,B=2,C=6,4个条件取值分别F1、T2、F3、T4(沿路径a-c-d执行),满足(3)、(7)
31、组合。TestCase4:A=0,B=10,C=0,4个条件取值分别F1、F2、F3、F4(沿路径a-c-e执行),满足(4)、(8)组合。虽然多条件覆盖比语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖有更强的覆盖准则,但仍然有a-b-e路径未被覆盖,而且当程序的判定语句较多是,其条件取值的组合数目是非常庞大。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试3测试覆盖准则测试覆盖准则2)LCSAJ覆盖准则覆盖准则在实施测试时,若要实现上述的Woodward层次LCSAJ覆盖,需要产生被测程序的所
32、有LCSAJ。尽管LCSAJ覆盖要比判定覆盖复杂得多,但是LCSAJ的自动化相对还是容易获得的。另外,对一个模块的微小变动可能对LCSAJ产生重大影响,因此维护LCSAJ的测试数据是相当困难的。一个大模块包含极其庞大的LCSAJ,因此要获得100%的覆盖率也是不现实的。然而Woodward等人提供的证据表明,把测试100%的LCSAJ作为目标比100%的判定覆盖要有效得多。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试3测试覆盖准则测试覆盖准则1)错误敏感测试用例分析()错误敏感测试用例分析(
33、ESTCA)准则)准则K.A.Foster的经验型覆盖准则是从硬件的早期测试方法中得到启发的。在硬件测试中,对每一个门电路的输入、输出测试都是有额定标准的。通常,电路中一个门的错误常常是“输出总是0”,或是“输出总是1”。与硬件测试中的这一情况类似,程序中谓词的取值也是比较容易出错的地方,而且它可能比硬件测试更加复杂。Foster通过大量的实验确定了程序中谓词最容易出错的部分,得出了一套错误敏感测试用例分析ESTCA(ErrorSensitiveTestCasesAnalysis)准则。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确
34、2.2.2 2.2.2 动态测试动态测试3测试覆盖准则测试覆盖准则1)错误敏感测试用例分析()错误敏感测试用例分析(ESTCA)准则)准则规则1:对于ArelB(rel可以是)型的分支谓词,在选择A与B的取值,使得测试执行到该分支语句时,应考虑AB的情况分别出现一次。规则2:对于Arelc(rel可以是,A是变量,c是常量)型的分支谓词。当rel为时,应适当地选择A,使得:A=c+M若A和c均为整数时,M=1。规则3:对外部输入变量赋值,使其在每一测试用例中均有不同的值与符号,并与同一组测试用例中其它变量的值与符号不一致。其中,规则1是为了检测rel的错误,如将“AB”。规则2是为了检测“差一
35、”之类的错误,如将“A1”错写成“A0”。而规则3则是为了检测程序语句中的错误(如将引用一变量错写成引用一常量)。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试3测试覆盖准则测试覆盖准则2)LCSAJ覆盖准则覆盖准则LCSAJ覆盖(LinearCodeSequenceandJumpCoverage)是线性代码顺序和跳转覆盖。在程序中,一个LCSAJ是一组顺序执行的代码,以控制跳转为其结束点。LCSAJ的起点,根据程序本身决定的。起点可以是程序第一行或转移语句的入口点,或是控制流可跳达的点。如果
36、有几个LCSAJ首尾相接,且第一个LCSAJ起点为程序起点,最后一个LCSAJ终点为程序终点,这样的LCSAJ串就组成了程序的一条路径(LCSAJ路径)。一条LCSAJ程序路径可能是由2个、3个或多个LCSAJ组成的。基于LCSAJ与路径的这一关系,Woodward提出了LCSAJ覆盖准则,这是一个分层的覆盖准则:第一层:语句覆盖。第二层:分支覆盖。第三层:LCSAJ覆盖。即程序中的每一个LCSAJ都至少在测试中经历过一次。第四层:两两LCSAJ覆盖。即程序中每两个首尾相连的LCSAJ组合起来在测试中都要经历一次。第n+2层:每n个首尾相连的LCSAJ组合在测试中都要经历过一次。在整堂课的教学
37、中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试3测试覆盖准则测试覆盖准则2)LCSAJ覆盖准则覆盖准则在实施测试时,若要实现上述的Woodward层次LCSAJ覆盖,需要产生被测程序的所有LCSAJ。尽管LCSAJ覆盖要比判定覆盖复杂得多,但是LCSAJ的自动化相对还是容易获得的。另外,对一个模块的微小变动可能对LCSAJ产生重大影响,因此维护LCSAJ的测试数据是相当困难的。一个大模块包含极其庞大的LCSAJ,因此要获得100%的覆盖率也是不现实的。然而Woodward等人提供的证据表明,把测试100%的
38、LCSAJ作为目标比100%的判定覆盖要有效得多。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。基本路径测试方法包括以下步骤:1)画出程序控
39、制流图2)计算程序的环路复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。3)根据程序的环路复杂度数目,确定程序的独立路径的集合。4)为3)中独立路径集合中每一条独立路径设计测试用例。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法1)程序的控制流图(1)程序控制流图程序的控制流图可以从程序的流程图简化映射得到。控制流图是描述程序控制流的一种图示方式。针对于程序的几种常用的控制结构的相应的表示如下图。其中
40、,圆圈称为控制流图的一个结点,它表示一个或多个语句、一个处理框序列或一个条件判断框(不包含复合条件)。带箭头的直线或弧线为控制流图中控制流的方向,可称为边。For/While For/While 循环结构循环结构Until Until 循环结构循环结构If If 分支结构分支结构CASE CASE 多分支结构多分支结构在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法(2)程序的控制流图的映射规则)程序的控制流图的映射规则程序的流程图是用来描述程序的控制结构的。可将程
41、序的流程图简化映射为相应的控制流图(假设流程图的菱形判断框不包含复合条件)。将程序的流程图映射为相应控制流图映射规则如下:在程序流程图中,一个或顺序连接在一起的几个处理框可映射为一个节点。一个菱形判断框或一个菱形判断框与其上顺序连接在一起的几个处理框可映射为一个节点。与程序的流程图不同的是,在程序的控制流图中,一条边必须终止于一个节点。在分支或多分支结构中分支的汇聚处,即使没有执行语句也要添加一个汇聚节点。边和节点圈定的部分叫做区域。当对区域计数时,图形外的一个部分也应记为一个区域。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.
42、2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法(2)程序的控制流图的)程序的控制流图的映射规则映射规则例如,有左图的一程序的流程图,假设3、5条件判断框(不包含复合条件),按以上规则映射为相应的右图控制流图。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法(2)程序的控制流图的映射规则)程序的控制流图的映射规则如果判定语句中的条件表达式为复合条件,即条件表达式由一个或多个逻辑运算符(and、or等)连接的逻辑表达式,则需要将复合条件转换为一系列只
43、有单个条件的嵌套判断。例如,“Ifaandbthenxelsey”或“Ifaorbthenxelsey”,假设a和b都为单条件判断节点。“aandb”复合条件控制流图“aorb”复合条件控制流图在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法【例2-3】有下面结构的C函数,用基本路径测试方法设计测试用例。Voidpd(intx,inty,intz)While(x0)If(y=0)if(z10)语句体1else语句体2elseIf(z0)语句体3语句体4在整堂课的教学
44、中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法解:用基本路径测试方法设计测试用例的步骤如下。第一步:将被测程序流程图映射为控制流图在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法第二步:计算环路复杂度可用以下3种方法计算环路复杂度。1)将环路复杂度定义为控制流图中的区域数。2)设E为控制流图的边数,N为图的结点数,则定义环路的复杂度为V(G)=EN+
45、2。3)若设P为控制流图中的判断结点数,则有V(G)=P+1。本实例控制流图中:有5个区域,其环路复杂度为5;V(G)=E-N+2=14-11+2=5V(G)=P+1=4+1=5“5”是构成基本路径集的独立路径数的上界,可据此得到应该设计测试用例的数目。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法第三步:确定独立路径集合独立路径的条数为V
46、(G),即为5条。路径1:1-8路径2:1-2-3-4-10-11-1-8路径3:1-2-3-5-10-11-1-8路径4:1-2-6-7-9-11-1-8路径5:1-2-6-9-11-1-8第四步:准备测试用例为确保基本路径集中的每一条路径的执行,根据判断节点给出的条件,选择适当的测试数据,保证每一条路径可以被测试到。TestCase1:x=0,y=12,z=-1测试路径1;TestCase2:x=3,y=0,z=20测试路径2;TestCase3:x=10,y=0,z=6测试路径3;TestCase4:x=30,y=-8,z=-10测试路径4;TestCase5:x=16,y=7,z=2测
47、试路径5;在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法【例2-4】有一被测程序,该程序可以根据输入的学生成绩,统计有效分数的个数、计算总分数及平均成绩。试用基本路径测试法设计测试用例。假设该程序最多可输入100个数据(以-1作为输入结束标志)解:基本路径测试法设计测试用例的步骤如下:第一步:将程序的流程图导出控制流图根据题意画出程序的流程图,之后转换为控制图。第二步:计算环路复杂度V(G)1)按区域计算:V(G)=62)根据边数和节点数计算:V(G)=E-N+2
48、=15-11+2=6E为控制流图的边数,N为控制流图的结点数。3)根据判断节点数计算:V(G)=P+1=5+1=6P为控制流图的判断节点数。图2-10中,节点2、3、5、6、9为判断节点。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本路径测试法【例2-4】有一被测程序,该程序可以根据输入的学生成绩,统计有效分数的个数、计算总分数及平均成绩。试用基本路径测试法设计测试用例。假设该程序最多可输入100个数据(以-1作为输入结束标志)解:第三步:确定基本路径集合。根据环路复杂度的
49、值,需要确定6条独立的路径。路径1:1-2-9-11路径2:1-2-3-4-5-8-2-3-9-11路径3:1-2-3-4-5-6-7-8-2-3-9-10-11路径4:1-2-3-4-5-8-2-9-10-11路径5:1-2-3-4-5-6-8-2-9-10-11路径6:1-2-3-4-5-6-7-8-2-9-10-11在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.2.2 2.2.2 动态测试动态测试4基本路径测试法基本
50、路径测试法【例2-4】有一被测程序,该程序可以根据输入的学生成绩,统计有效分数的个数、计算总分数及平均成绩。试用基本路径测试法设计测试用例。假设该程序最多可输入100个数据(以-1作为输入结束标志)解:第四步:为每条独立路径设计测试用例为每条独立路径设计测试用例,在测试时使每条独立路径至少被执行一次。1)路径1(1-2-9-11)的测试用例:Score1=-1;预期结果:结束该程序。2)路径2(1-2-3-4-5-8-2-3-9-11)的测试用例:输入多于100个数据,Scorei100(1i100,Scorei+1=-1当1i100预期结果:根据输入的有效分数计算出有效分数的个数n1、总分数