软件测试技术第2章ppt课件.pptx
《软件测试技术第2章ppt课件.pptx》由会员分享,可在线阅读,更多相关《软件测试技术第2章ppt课件.pptx(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 技术 ppt 课件
限制150内