第5章 白盒测试.

Slides:



Advertisements
Similar presentations
面向侧面的程序设计 方林博士 本文下载地址:
Advertisements

1. 软件工程 软件工程包括 3 个要素:方示、工具和过程。方法是完成软件工程项目的技术手段;工 具支持软件的开发、管理和文档生成;过程支持软件开发的各个环节的控制和管理。 软件工程的核心思想是:把软件产品看作是一个工程产品来处理。把需求计划、可行 性研究、工程审核、质量监督等工程化的概念引入到软件生产中,以达到工程项目的.
游戏软件测试 主讲人:徐丽.
证券投资技术分析.
第 5 章 软 件 测 试 5.1 软件测试概述 5.2 测试方法 5.3 测试用例的设计 5.4 测试过程 5.5 调试
软件质量管理 软件测试基础 测试用例设计 软件测试技术 自动化测试. 软件质量管理 软件测试基础 测试用例设计 软件测试技术 自动化测试.
Oracle数据库 Oracle 子程序.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
程序的形式验证 - 简介 中国科学院软件研究所 张文辉 1.
面向对象建模技术 软件工程系 林 琳.
欢乐玩转单元测试之JUnit 讲师:FREE QQ:
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
第一讲: 基本流程(1).
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第17章 网站发布.
第二章 Java语言基础.
单元测试工具XUnit 任课老师:黄武 下午2时20分 25.
动态规划(Dynamic Programming)
整合思维导图的初中英语教学设计 主讲人:卢璐.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
录制回放工具使用说明 鲁晓宇
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
VisComposer 2019/4/17.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
8 [学习目标] 了解管理信息系统的物理实施过程;掌握程序设计的任务和方法,能根据实际需要选择恰当的程序语言进行程序设计;掌握 MIS 的系统测试、切换、运行及维护等的方法与内涵;掌握项目管理与系统评价的方法与内涵。 [学习重点] 系统测试方法、系统切换方式.
iSIGHT 基本培训 使用 Excel的栅栏问题
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
1.非线性规划模型 2.非线性规划的Matlab形式
第七、八次实验要求.
敏捷开发下 问题驱动的软件测试设计 郑文强 测试架构师 阿尔卡特-朗讯.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
第四章 UNIX文件系统.
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
第二次课后作业答案 函数式编程和逻辑式编程
质量控制(QC)模式 BrookFIELD.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

第5章 白盒测试

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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