Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 白盒测试.

Similar presentations


Presentation on theme: "第5章 白盒测试."— Presentation transcript:

1 第5章 白盒测试

2 本章要点 了解白盒测试的基本概念 通过案例掌握代码检查法及其应用 通过案例掌握静态结构分析法及其应用 通过案例掌握程序插桩技术及其应用
通过案例掌握逻辑覆盖法及其应用 通过案例掌握基本路径法及其应用 了解不同白盒测试方法的优缺点和应用场合 了解白盒测试和黑盒测试的区别与联系

3 白盒测试,有时也称为玻璃盒测试、结构化测试、逻辑驱动测试等,它关注软件产品的内部细节和逻辑结构,即把被测的程序看成是一个透明的盒子。白盒测试利用构件层设计的一部分而描述的控制结构来生成测试用例,需要对系统内部结构和工作原理有一个清楚的了解。白盒测试的准备时间较长,如果要完成覆盖全部程序语句、分支的测试,一般要花费比编程更长的时间。白盒测试对技术的要求较高,测试成本也比较大。

4 白盒测试可以分为静态测试和动态测试。静态测试不通过执行程序而进行测试,其关键是检查软件的表示与描述是否一致,是否存在冲突或者歧义;动态测试需要执行程序,当程序在模拟的或真实的环境中执行之前、之中和之后,对程序行为分析,主要验证一个程序在检查状态下是否正确。 白盒测试也有多种方法,比如代码检查法,静态结构分析法,程序插桩技术,逻辑覆盖法,基本路径法等。代码检查法和静态结构分析法属于静态测试,程序插桩技术,逻辑覆盖法和基本路径法属于动态测试。

5 5.1 代码检查法 代码检查法包括桌面检查、代码审查和走查等。它主要检查代码和设计的一致性,代码对标准的遵循,可读性,代码逻辑表达正确性,代码结构合理性等方面;发现程序中不安全、不明确和模糊部分,找出程序中不可移植部分;发现违背程序编写风格问题。其中包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。 桌面检查 代码审查 走查 代码检查过程中,也将产生该源代码的变量交叉引用表,函数和宏定义表,常量表等内容,组成源代码的一些有用信息。

6 5.2 静态结构分析法 静态结构分析是一种对代码机械性的、程式化的特性进行分析的方法。在静态结构分析中,测试者通过使用测试工具分析程序源代码的系统结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图、子程序表、宏和函数参数表等各类图形图表,可以清晰地标识整个软件系统的组成结构,使其便于阅读和理解,然后可以通过分析这些图表,检查软件有没有存在缺陷或错误。包括控制流分析、数据流分析、信息流分析、接口分析、表达式分析等。

7 常用的关系图主要有函数调用关系图和模块控制流图。
函数调用关系图列出所有函数,用连线表示调用关系,通过应用程序各函数之间的调用关系展示了系统的结构,利用函数调用关系图可以检查函数的调用关系是否正确,是否存在孤立的函数而没有被调用,明确函数被调用的频繁度,对调用频繁的函数可以重点检查。通过查看函数调用关系图,可以发现系统是否存在结构缺陷,发现哪些函数是重要的,哪些是次要的,需要使用什么级别的覆盖要求等; 模块控制流图是由许多节点和连接节点的边组成的图形,其中每个节点代表一条或多条语句,边表示控制流向,模块控制流图可以直观的反映出一个函数的内部结构,通过检查这些模块控制流图可以很快的发现软件错误与缺陷。

8 静态错误分析用于确认在源程序中是否存在某类错误的危险结构。有以下几种形式:
类型和单元分析 引用分析 表达式分析 接口分析

9 5.3 程序插桩技术 简单来说,程序插桩技术是借助往被测程序中插入操作来实现测试目的的方法,即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。例如想要了解一个程序在某次运行中所有可执行语句被覆盖的情况,或是每个语句的实际执行次数,就可以利用程序插桩技术。 在程序的特定部位插入记录动态特性的语句,最终是为了把程序执行过程中发生的一些重要历史事件记录下来。设计插桩程序时需要考虑的问题如下: 需要探测哪些信息; 在程序的什么部分设置探测点; 需要设置多少个探测点;

10 在应用程序插桩技术时,可以在程序的某些部分插入某些用以判断变量特性的语句,使得程序执行时这些语句得以证实,从而使程序运行特性得以证实,把这些插入的语句称为断言语句。这一方法是程序正确性证明的基本步骤,尽管算不上严格证明,但在实践中十分实用。有些编译系统支持表达式形式的断言语句识别。 为了使程序在运行时更清晰的表现其运行状态,可以对上面两个函数插入一些打印语句。 同样的,也可以为每个子程序和函数在入口处添加打印代码,在某些地方插入断言语句,在有循环语句的部分插入计数器来统计循环语句的执行次数等。

11 5.4 逻辑覆盖法 逻辑覆盖法是一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。从覆盖源程序语句的详尽程度,可以分为语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、多条件覆盖和修正条件判定覆盖。 从书中两个覆盖的测试用例可以看出,满足条件覆盖比满足语句覆盖需要更多的测试用例,条件覆盖是比语句覆盖更强的逻辑覆盖。在这个案例中,条件覆盖的测试用例也能够满足判定覆盖(虽然在有些情况下并不是如此),因此本案例采用条件覆盖就能达到最强的逻辑覆盖效果。

12 5.5 基本路径法 基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行的路径集合,从而设计测试用例的方法。在基本路径测试中,设计出的测试用例要保证在测试中程序的每条可执行语句至少执行一次。在基本路径法中,需要使用程序的控制流图进行可视化表达。

13 程序的控制流图是描述程序控制流的一种图示方法。其中,圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句;箭头称为边或连接,代表控制流。在将程序流程图简化成控制流图时,应注意:
在选择或多分支结构中,分支的汇聚处应有一个汇聚结点; 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。

14 基本路径测试法适用于模块的详细设计及源程序。其步骤如下:
以详细设计或源代码为基础,导出程序的控制流图; 计算得出控制流图G的环路复杂度V(G); 确定线性无关的路径的基本集; 生成测试用例,确保基本路径集中每条路径的执行。 每个测试用例执行后与预期结果进行比较,如果所有测试用例都执行完毕,则可以确信程序中所有可执行语句至少被执行了一次。但是必须注意,一些独立路径往往不是完全孤立的,有时它是程序正常控制流的一部分,这时对这些路径的测试可以是另一条测试路径的一部分。

15 5.6 白盒测试方法选择 白盒测试的每种测试方法都有各自的优点和不足,需要测试人员根据实际软件特点、实际测试目标和测试阶段选择合适的方法设计测试用例,这样能能有效的发现软件错误,提高测试效率和测试覆盖率。以下是选择方法的几条经验: 在测试中,可采取先静态再动态的组合方式,先进行代码检查和静态结构分析,再进行覆盖测试; 利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析的结果做进一步确认; 覆盖测试是白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准,对于软件的重点模块,应使用多种覆盖标准衡量测试的覆盖率; 在不同的测试阶段测试重点不同,在单元测试阶段,以代码检查、覆盖测试为主,在集成测试阶段,需要增加静态结构分析等,在系统测试阶段,应根据黑盒测试的结果,采用相应的白盒测试方法。

16 5.7 白盒测试和黑盒测试比较 黑盒测试 白盒测试 不涉及程序结构 考察程序逻辑结构 用软件规格说明书生成测试用例
用程序结构信息生成测试用例 可适用于从单元测试到系统验收测试 主要适用于单元测试和集成测试 某些代码段得不到测试 对所有逻辑路径进行测试 白盒测试和黑盒测试各有侧重点,不能相互取代,在实际测试活动中,这两种测试方法不是截然分开的。通常在白盒测试中交叉着黑盒测试,黑盒测试中交叉着白盒测试。相对来说,白盒测试比黑盒测试成本要高得多,它需要测试在可以被计划前产生源代码,并且在确定合适数据和决定软件是否正确方面需要花费更多的工作量。

17 灰盒测试是介于白盒测试和黑盒测试之间的测试方法,它关注输出对于输入的正确性,同时也关注内部表现,但是不像白盒测试那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。有时候输出是正确的,但是程序内部已经是错误的,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此可采取灰盒测试这种方法。 灰盒测试结合了白盒测试和黑盒测试的要素,考虑了用户端、特定的系统知识和操作环境。它在系统组件的协同性环境中评价应用软件的设计。可以认为,集成测试就是一类灰盒测试。

18 本章习题 什么是白盒测试,包括哪些技术? 代码检查法主要包括哪些主要内容,可以产生哪些基本因素? 静态结构分析法主要基于哪些图表或数据?
程序插桩的基本原则是什么? 逻辑覆盖法包括哪些内容,分别要求达到怎样的代码覆盖率? 给出白盒测试与黑盒测试的不同? 利用基本路径测试技术为以下一段程序设计测试用例: while(a >0) { a = a – 1; if(b <0 || c >=1) c = c – b; } else c = c + b; a = b + c;


Download ppt "第5章 白盒测试."

Similar presentations


Ads by Google