第二章 白盒测试课件.pptx
《第二章 白盒测试课件.pptx》由会员分享,可在线阅读,更多相关《第二章 白盒测试课件.pptx(115页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件测试技术软件测试技术 第第2 2章章白盒测试白盒测试1/116l静态白盒测试主要包括静态白盒测试主要包括代码检查代码检查和和静态结构分析静态结构分析两种方两种方法法。l动态动态白盒测试主要包括程序插桩、逻辑覆盖测试、基本白盒测试主要包括程序插桩、逻辑覆盖测试、基本路径测试、循环结构测试等路径测试、循环结构测试等。动态白盒测试方法动态白盒测试方法是白是白盒盒测试中发现软件缺陷的主要手段。其中,逻辑覆盖测试测试中发现软件缺陷的主要手段。其中,逻辑覆盖测试和基本路径测试方法是实际工作中最常用到的两种动态和基本路径测试方法是实际工作中最常用到的两种动态白盒测试技术,白盒测试技术,2.2.对于白盒测
2、试的基本认识对于白盒测试的基本认识2/116白盒测试简介白盒测试简介白盒测试一般用来分析程序的内部结构,因此有时也被称为基白盒测试一般用来分析程序的内部结构,因此有时也被称为基于程序的测试。白盒测试的前提条件是已知程序的内部工作过于程序的测试。白盒测试的前提条件是已知程序的内部工作过程,清楚其语句、变量状态、逻辑结构和执行路径等关键信息,程,清楚其语句、变量状态、逻辑结构和执行路径等关键信息,因此也被称为玻璃盒测试因此也被称为玻璃盒测试。白盒测试主要是根据程序内部的逻白盒测试主要是根据程序内部的逻辑结构和相关信息,检验程序中的各条通路是否都能够按设计辑结构和相关信息,检验程序中的各条通路是否都
3、能够按设计要求正确工作,从这一意义上来讲,白盒测试又常被称为结构要求正确工作,从这一意义上来讲,白盒测试又常被称为结构测试或逻辑驱动测试。测试或逻辑驱动测试。白盒测试针对的是程序的内部结构和运行白盒测试针对的是程序的内部结构和运行过过程。程。白盒测试重视测试覆盖率的度量,被看白盒测试重视测试覆盖率的度量,被看做是做是“基于覆盖的测试基于覆盖的测试”,要求对被测程序,要求对被测程序的结构能够做到一定程度的覆盖,通过不同的结构能够做到一定程度的覆盖,通过不同类型的覆盖准则来判断测试执行的充分性。类型的覆盖准则来判断测试执行的充分性。3/116白白盒测试的基本原则盒测试的基本原则l保证程序模块中的所
4、有独立路径都至少被使用一次;保证程序模块中的所有独立路径都至少被使用一次;l保证程序中的所有逻辑值都能测试保证程序中的所有逻辑值都能测试TrueTrue和和FalseFalse两种两种情况;情况;l在循环的边界和运行的界限内执行循环体;在循环的边界和运行的界限内执行循环体;l测试程序内部数据结构的有效性以及完成边界数据取测试程序内部数据结构的有效性以及完成边界数据取值情况下的测试。值情况下的测试。4/116穷举路径测试示例穷举路径测试示例5/116白盒测试的缺点白盒测试的缺点白盒测试方法试图穷举所有程序路径进行测试,这往往是不白盒测试方法试图穷举所有程序路径进行测试,这往往是不可能的可能的。穷
5、举穷举路径测试查不出违反设计规范的错误,路径测试查不出违反设计规范的错误,不能发现程序中不能发现程序中已实现但不是用户所需要的功能已实现但不是用户所需要的功能,不可能查出程序中因遗漏不可能查出程序中因遗漏路径而产生的错误路径而产生的错误,可能发现不了一些与数据相关的异常错可能发现不了一些与数据相关的异常错误误。尽管尽管白盒测试方法深入程序内部,针对程序细节的逻辑结构白盒测试方法深入程序内部,针对程序细节的逻辑结构进行测试,对代码的测试比较彻底,但仍然存在着一定的局进行测试,对代码的测试比较彻底,但仍然存在着一定的局限性限性。6/1162.2 静态测试静态测试根据测试时是否运行源程序,白盒测试可
6、以分为根据测试时是否运行源程序,白盒测试可以分为静静态测试态测试和和动态测试动态测试。静态静态测试方法又主要分为代码检查和静态结构分析测试方法又主要分为代码检查和静态结构分析等等。静态静态测试就是不实际运行被测试的软件,而只是静测试就是不实际运行被测试的软件,而只是静态地检查程序代码、界面或文档中可能存在的错误态地检查程序代码、界面或文档中可能存在的错误的过程。的过程。7/116代码检查法代码检查法代码检查法主要包括代码检查法主要包括桌面检查桌面检查、走查走查和和代码审查代码审查。主要主要检查代码的检查代码的规范性、可读性、结构的合理性、逻辑表规范性、可读性、结构的合理性、逻辑表达的正确性达的
7、正确性等内容等内容。代码检查比动态测试更为有效,能快速发现代码检查比动态测试更为有效,能快速发现30%70%的逻的逻辑设计和编码缺陷,应当辑设计和编码缺陷,应当在程序编译和动态测试之前进行在程序编译和动态测试之前进行。最不正式的最不正式的最正式的最正式的临时评审临时评审轮查轮查 走查走查互为评审互为评审同行评审同行评审 审查审查Random review, Pass-round, Walkthrough, Peer review, InspectionRandom review, Pass-round, Walkthrough, Peer review, Inspection8/116表表2-
8、1 桌面检查、走查和代码审查的对比桌面检查、走查和代码审查的对比项目项目桌面检查桌面检查走查走查代码审查代码审查准备准备程序的规格说明、编码规范、错误列表、源代码参加人员事先阅读设计和源代码,准备代表性测试用例需求与设计文档、源代码、编码规范、缺陷检测表、会议计划和流程形式形式无非正式会议正式会议参加人参加人员员程序编写者本人开发组内部人员开发、测试和相关人员主要技主要技术方法术方法无逻辑运行测试用例缺陷检测表9/116表表2-1 桌面检查、走查和代码审查的对比(续表)桌面检查、走查和代码审查的对比(续表)项目项目桌面检查桌面检查走查走查代码审查代码审查注意事项注意事项注释与编码规范限时、不当
9、场修改代码限时、不当场修改代码生成文档生成文档无静态分析错误报告结果报告目标目标无代码标准规范、无逻辑错误代码标准规范、无逻辑错误优点优点省时便于项目组成员交流,共同理解软件产品有计划的对软件产品进行编码质量控制缺点缺点不正式、依赖个人能力、效率低耗时耗时10/1161 1)桌面检查)桌面检查 桌面检查是最不正式,也是最省时的静态测试桌面检查是最不正式,也是最省时的静态测试技术技术。 桌面检查桌面检查就是程序员对自己的代码进行一次自就是程序员对自己的代码进行一次自我检查,对编码成果进行自我完善我检查,对编码成果进行自我完善。 由于由于桌面检查没有任何约束,依赖程序员个人桌面检查没有任何约束,依
10、赖程序员个人的经验和技术能力,因此对于大多数人而言,的经验和技术能力,因此对于大多数人而言,检查效率很低。由编程者本人完成的桌面检查检查效率很低。由编程者本人完成的桌面检查明显违背了软件测试的独立性明显违背了软件测试的独立性原则原则。效果远远效果远远逊色于代码走查和代码审查。逊色于代码走查和代码审查。11/116桌面检查的主要内容:桌面检查的主要内容:l 变量和标号的交叉引用表检查。检查变量的定义变量和标号的交叉引用表检查。检查变量的定义和使用以及转向特定位置的标号。和使用以及转向特定位置的标号。l 子程序、宏、函数检查。子程序、宏、函数检查。l 等价性检查。检查全部等价变量类型的一致性。等价
11、性检查。检查全部等价变量类型的一致性。l 常量检查。常量检查。l 设计标准检查。检查程序是否违反设计标准。设计标准检查。检查程序是否违反设计标准。l 风格检查。风格检查。12/116l 控制流检查。控制流检查。l 选择、激活路径检查。检查每条控制流路径是选择、激活路径检查。检查每条控制流路径是否都能被程序激活,达到语句覆盖。否都能被程序激活,达到语句覆盖。l 规格符合性检查。是否符合程序规格说明以及规格符合性检查。是否符合程序规格说明以及编码规范。编码规范。l 补充文档检查。补充文档检查。13/1162 2)走查)走查代码走查的过程是非正式的,一般是在开发代码走查的过程是非正式的,一般是在开发
12、组内部进行,通过一个代码走查小组,组内部进行,通过一个代码走查小组,以以会会议的方式来检查代码议的方式来检查代码。代代码码走查有利于项目组人员共同理解项目所走查有利于项目组人员共同理解项目所涉及的业务信息和具体代码实现过程,交换涉及的业务信息和具体代码实现过程,交换代码编写思路,帮助开发人员找出程序错误代码编写思路,帮助开发人员找出程序错误和解决方法。和解决方法。14/116代码审查是一种正式的评代码审查是一种正式的评审活动,通过正式会议的审活动,通过正式会议的方式进行,事先一般具有方式进行,事先一般具有制定好的会议计划和流程,制定好的会议计划和流程,会议中应用预先定义好的会议中应用预先定义好
13、的标准和检查技术检查程序标准和检查技术检查程序和文档,发现软件缺陷,和文档,发现软件缺陷,会后形成正式的审查结果会后形成正式的审查结果报告。报告。3)代码审查)代码审查主持人主持人作者记录员列席人员内审员内审员技术专业人员用户代表15/116代码审查是一个软件开发过程代码审查是一个软件开发过程中必不可少的环节。谷歌前资中必不可少的环节。谷歌前资深软件开发工程师深软件开发工程师Mark Chu-Carroll博士认为,之所以让博士认为,之所以让Google的程序如此优秀的一的程序如此优秀的一个重要原因看起来很简单:代个重要原因看起来很简单:代码审查。在码审查。在Google,没有任,没有任何项目
14、的程序源代码可以在没何项目的程序源代码可以在没有经过有效的代码审查前就提有经过有效的代码审查前就提交到代码库中。交到代码库中。Mark Chu-Carroll16/116代码审查的作用和注意事项:代码审查的作用和注意事项:l因知道存在代码审查,编码者编写代码更为规范;因知道存在代码审查,编码者编写代码更为规范;l代码审查能传播知识,使模块编写者之外的审查者代码审查能传播知识,使模块编写者之外的审查者也能熟悉程序的设计和架构;也能熟悉程序的设计和架构;l确保程序作者自己写出的代码是正确的;确保程序作者自己写出的代码是正确的;l不应过于匆忙的完成代码审查;不应过于匆忙的完成代码审查;l需要遵循严格
15、的编码规范。需要遵循严格的编码规范。17/1162.2.2 2.2.2 静态结构分析法静态结构分析法静态结构分析法实际上是通过白盒测试工具辅助进行程序检查静态结构分析法实际上是通过白盒测试工具辅助进行程序检查的一种方法的一种方法。在静态结构分析中,测试人员通过测试工具分析程序的系统结在静态结构分析中,测试人员通过测试工具分析程序的系统结构、数据结构、数据接口、控制逻辑等内部结构,生成函数调构、数据结构、数据接口、控制逻辑等内部结构,生成函数调用关系图、程序控制流图、内部文件调用关系图、子程序表、用关系图、程序控制流图、内部文件调用关系图、子程序表、宏和函数参数表等各类图表,可以清晰地呈现整个系
16、统的组成宏和函数参数表等各类图表,可以清晰地呈现整个系统的组成结构,方便阅读和理解。通过分析这些图表,测试人员可以快结构,方便阅读和理解。通过分析这些图表,测试人员可以快速和有效地发现程序中潜在的错误。速和有效地发现程序中潜在的错误。18/116表表2-2 静态结构分析图表及其作用静态结构分析图表及其作用分类分类名称名称内容与作用内容与作用图图函数调用关系图l 列出所有函数,用连线表示调用关系,展示系统的结构;l 发现系统是否存在结构缺陷、区分函数的重要程度、确定测试覆盖级别;l 检查函数的调用关系是否正确;l 是否存在递归调用;l 函数的调用层次是否过深;l 检查是否存在孤立而未被调用的函数
17、;l 确定函数调用频度,重点检查被频繁调用的函数。模块控制流图l 由结点和边组成,每个结点代表一条或多条语句,边表示控制流;l 能够直观地反映一个模块的内部逻辑结构。19表表2-2 静态结构分析图表及其静态结构分析图表及其作用(续表)作用(续表) 分分类类名称名称内容与作用内容与作用表表标号交叉引用表l 列出所有模块中用到的标号;l 标号的属性,包括已说明、未说明、已使用、未使用;l 模块以外的全局标号、计算标号。变量交叉引用表l 展示所有变量的定义和引用情况;l 变量的属性,包括是否已说明、是否已使用、类型、是否属于公共变量、全局变量等。子程序(宏、函数)引用表列出所有子程序、宏和函数的属性
18、,包括类型、是否已定义、是否已引用、引用次数、输入输出参数的数量、顺序和类型。等价表 列出在等价语句或等值语句中出现的全局变量和标号。常数表 列出所有数字和字符常数。20/116借助图表,可以完成如下静态错误分析:l 数据类型和单位分析。数据类型和单位分析。l 引用分析。找出变量引用错误,例如:变量赋值以引用分析。找出变量引用错误,例如:变量赋值以前被引用或赋值后未被引用。前被引用或赋值后未被引用。l 表达式分析。发现表达式中不正确地使用括号、数表达式分析。发现表达式中不正确地使用括号、数据下标越界等错误。据下标越界等错误。l 接口分析。检查模块之间接口的一致性和模块与外接口分析。检查模块之间
19、接口的一致性和模块与外部数据库之间接口的一致性。部数据库之间接口的一致性。212.3 2.3 程序插桩程序插桩定义定义:是在保证被测程序原有逻辑完整性的基础上在程序中插是在保证被测程序原有逻辑完整性的基础上在程序中插入一些语句,这些语句被称为入一些语句,这些语句被称为“探针探针”、“探测器探测器”或或“探测探测点点”,其本质就是进行信息采集的代码段,其本质就是进行信息采集的代码段。测试人员常常借助程序插桩的方法来收集程序动态运行行为,测试人员常常借助程序插桩的方法来收集程序动态运行行为,一些与运行环境相关的程序行为只能通过程序插桩的方法来收一些与运行环境相关的程序行为只能通过程序插桩的方法来收
20、集,静态程序分析无法完成这样的工作。通过程序插桩技术,集,静态程序分析无法完成这样的工作。通过程序插桩技术,能够获取各种程序信息,是对程序进行白盒测试的一种有效手能够获取各种程序信息,是对程序进行白盒测试的一种有效手段。段。22图图2-3 计算最大公约数函数的程序插桩过程计算最大公约数函数的程序插桩过程23图图2-3是一个计算两个整数的最大公约数函数的程序插桩示是一个计算两个整数的最大公约数函数的程序插桩示例,左边是函数源程序,右边是程序的流程图例,左边是函数源程序,右边是程序的流程图。虚线框代虚线框代表在源程序中插入的一些探针语句,用于记录语句执行的表在源程序中插入的一些探针语句,用于记录语
21、句执行的次数,是一些计数器,可以用数组的方式实现次数,是一些计数器,可以用数组的方式实现。C(1)用于用于记录函数被调用的次数,记录函数被调用的次数,C(2)用于记录循环执行的次数,用于记录循环执行的次数,C(3)是函数出口计数器,是函数出口计数器,C(4) C(5)是主要程序分支上的计是主要程序分支上的计数器。数器。24插插桩注意事项桩注意事项:(1)需要探测哪些)需要探测哪些信息信息:这需要根据具体的测试目标来决定需要根据具体的测试目标来决定。(2)在什么位置设置探测点)在什么位置设置探测点l程序的第一个可执行语句之前,用于判断该程序是否被执行。程序的第一个可执行语句之前,用于判断该程序是
22、否被执行。l有标号的可执行语句之前。有标号的可执行语句之前。lfor、while、do until等循环语句处。等循环语句处。lif、then、else等条件分支语句处。等条件分支语句处。l输入语句之后,用于检验输入数据的正确性。输入语句之后,用于检验输入数据的正确性。l输出语句之前,用于检验将要输出的数据是否正确。输出语句之前,用于检验将要输出的数据是否正确。25/116l函数、过程等程序调用语句之后,用于判断调用结果是否函数、过程等程序调用语句之后,用于判断调用结果是否正确。正确。lReturn语句之前,判断程序是否正常返回。如果探针设置语句之前,判断程序是否正常返回。如果探针设置在在re
23、turn语句之后,那么它将无法被执行。语句之后,那么它将无法被执行。(3)需要设置多少个探测点)需要设置多少个探测点一般情况下,在没有分支的程序段中只需要在首尾各设置一一般情况下,在没有分支的程序段中只需要在首尾各设置一个探测点,用于确定程序执行时该段程序是否被覆盖个探测点,用于确定程序执行时该段程序是否被覆盖。如果。如果程序中有各种分支控制结构,如各种循环和条件判断分支结程序中有各种分支控制结构,如各种循环和条件判断分支结构,那么为了插入最少的探测点,需要针对程序的控制结构构,那么为了插入最少的探测点,需要针对程序的控制结构进行具体的分析。进行具体的分析。26/116(4)如何在程序的特定位
24、置插入用于判断变量特性的)如何在程序的特定位置插入用于判断变量特性的语句语句程序插桩并不是一个独立的白盒测试方法,一般要和诸如覆程序插桩并不是一个独立的白盒测试方法,一般要和诸如覆盖测试等方法结合起来使用。在实现程序覆盖测试时,经常盖测试等方法结合起来使用。在实现程序覆盖测试时,经常需要获得一些特定信息需要获得一些特定信息,要想获得这些信息,就需要在被测要想获得这些信息,就需要在被测程序中插入完成相应工作的代码,即运用代码插桩程序中插入完成相应工作的代码,即运用代码插桩技术技术。需要需要注意的是,代码插桩虽然不影响程序的逻辑结构和复杂注意的是,代码插桩虽然不影响程序的逻辑结构和复杂性,但是会破
25、坏程序的时间特性性,但是会破坏程序的时间特性。因此,在用程序插桩辅助因此,在用程序插桩辅助完成一些性能监视测试工作时,有时需要考虑插桩代码对程完成一些性能监视测试工作时,有时需要考虑插桩代码对程序运行效率的影响。序运行效率的影响。27/116逻辑覆盖测试是一种常用的动态白盒测试方法,主要包括语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖。逻辑覆盖是基于程序的内部逻辑结构进行的测试,要求在设计测试用例时,对被测程序的逻辑结构有清晰的了解。2.4 2.4 逻辑覆盖测试逻辑覆盖测试28/116源程序源程序程序流程图程序流程图图图2-4 逻辑覆盖测试被测程序及其流程图逻辑覆盖测试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 白盒测试课件 第二 测试 课件
限制150内