课堂笔记(三)

Chapter3 白盒测试

1、白盒测试

白盒测试又称结构测试,它一般用来测试程序的内部结构(Control Flow , Data Flow/控制流,数据流)。并判定其结果是否与预期的结果一致。

2、白盒测试的种类

(1)静态分析测试

(2)语句分支覆盖测试

3、控制流测试

利用有向图来进行测试。

4、有向图

用G=(N,E)来表示,其中,N是节点集合;E是边集合, 有向边e=(H(e),T(e))∈E,H(e),T(e)是一对有序的邻接节点,T(e)是尾,H(e)是头。T(e)是H(e)的后继(successor)节点,H(e)是T(e)的前驱(predecessor)节点。

5、有向图基本概念

(1)入度:以节点n为终止节点的边的个数

(2)出度:以节点n为起始节点的边的个数

(3)路径(PATH):如果P=(e1,e2,... ,eq),且满足H(ei+1)=T(ei),则P称为路径。

(4)如果P=e1e2…eq是一条路径,且满足H(e1)=Start,T(eq)=End,则P称为完整路径。

(5)如果存在输入数据使得程序按照该路径P=e1e2…eq运行,这样的路径称为可行(feasible)完整路径,否则称为不可行(infeasible)完整路径。

(6)简单路径:路径上的所有节点都是不同的

(7)基本路径:任意有向边都在路径中最多出现一次的路径。

(8)子路径:路径A=eueu+1…et是B=e1e2…eq的子路径,如果满足1≦u≦t ≦ q。

(9)回路:路径A=eueu+1…eq满足H(eu)=T(eq),称为回路。除了第一个和最后一个节点外,其它节点都不同的回路称为简单回路。

(10)无回路路径:一条路径中不包含有回路子路径。

6、控制流覆盖准则

(1)语句覆盖准则

控制流图中的所有语句都被运行的充分必要条件是,覆盖图中的所有节点。

(2)分支覆盖准则

分支覆盖要求在软件测试中,每个分支都至少获得一次真/假取值的经历。

(3)谓词测试

1) 原子谓词覆盖准则

一个分支的条件是由谓词组成。单个谓词称为原子谓词。

测试数据集T称为原子谓词覆盖充分的,如果对任意一个分支中的任意一个原子  谓词,T中存在一个测试数据使其在运行时为“真”、为“假”各一次。

2)分支-谓词覆盖准则

测试数据集T称为分支-谓词覆盖充分的,如果对任意一个分支所包含的任意一个原子谓词,T中存在一个测试数据在运行时为真/假值至少各一次,并且任意一个复合谓词本身也至少获得真/假值各一次。

3)测试数据集T称为复合谓词覆盖充分的,如果任意一个分支,对该分支所包含的原子谓词的任意一个可行的真/假值组合,T中都存在一个测试数据使该组合谓词运行时,原子谓词的取值恰好为该真/假值组合。即每个复合谓词内的原子谓词的各种可能的组合都至少出现一次。

(4)路径覆盖准则

测试数据集T称为路径覆盖充分的,当且仅当LT覆盖了GP中的所有完整路径。让EP(GP)为控制流图中的所有完整路径的集合。

7、数据流测试

数据流测试,是数据交互功能测试,用作路径测试的“真实性检查”。

它关注的是变量接收值的点和使用(引用)这些值的点的结构性测试形式。

8、 数据流覆盖准则

(1)定义覆盖测试准则

测试数据集T对测试程序P满足定义覆盖准则,如果对具有数据流信息的控制流图GP中的每一个变量x的每一个定义性出现,若该定义性出现能够可行地传递到该变量的某一个引用性出现,那么LT中存在一条路径A,它包含一条子路径A’,使得A’将该定义出现传递到某一引用性出现。

应为一个定义可能要传递到多个引用,一个定义要对多个引用都是正确的。

而定义覆盖只要求检查一个引用。所以检查的内容是弱充分的。

定义了的变量一定会被引用,不能有没有配定义得以用。

(2)引用覆盖测试准则

测试数据集T对测试程序P满足引用覆盖准则,如果对具有数据流信息的控制流图GP中的每一个变量x的每一个定义n,以及该定义的每一个能够可行地传递到的引用n’,LT中都存在一条路径A,它包含一条子路径A’,使得A’将n传递到n’。

引用覆盖准则的不足之处是路径集合中可能存在着回路,这样的路径可能是无穷的。变量x的每一个定义性出现都能够可行地传递到该变量的每一个可行的引用性出现。

(3)定义-引用覆盖测试准则

测试数据集T对测试程序P满足定义-引用覆盖准则,如果对具有数据流信息的控制流图GP中的任意一条从定义传递到其引用的路径A,若A是无回路的或A是简单回路,那么LT中存在一条路径B,使得A是B的子路径。

目的:只测试无回路或只包含简单回路的路径。

9、程序插桩

程序插桩技术最早是由J.C. Huang 教授提出的, 它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流数据流信息,进而得到逻辑覆盖动态信息,从而实现测试目的的方法。

10、测试插桩:

1.探测哪些信息:探测覆盖率,某个变量结果是否正确等

2.测试变量值放在变量负值定义之后

3.需要多少探测点:原则越少越好

插桩或设置断点是测试的基本方法。

11、白盒测试静态工具

1.代码审查检查程序是否遵循了程序设计规则规范等

2.一致性检查,各个单元是否使用了统一的记法或术语,是否遵循规格说明

3.错误检查:检查确定差异和分析错误的严重性及原因,潜在的错误

4.接口分析:单元之间的接口一致性,模块完整型

5.输入输出规格分析:用于生成测试数据

6.数据流:赋值与引用之间是否有矛盾,引用未赋值的变量,

7.类型分析:数据项和操作是否得到正确使用

8.单元分析:单元是否定义正确和使用一致

9.复杂度分析:帮助策划精确的测试活动,是软件测试成本或存在故障的指示器。

12、白盒测试动态工具

1.功能确认与接口测试

测试包括对各模块功能、模块间的接口、局部数据结构、主要执行路径、错误处理等方面进行的测试。

2.覆盖测试

覆盖分析对所涉及的程序结构元素进行度量,以确定测试执行的充分性。

时间: 2024-10-10 11:46:17

课堂笔记(三)的相关文章

?统计学习精要(The Elements of Statistical Learning)?课堂笔记(三)

照例文章第一段跑题,先附上个段子(转载的哦~): I hate CS people. They don't know linear algebra but want to teach projective geometry. They don't know any probability but want to use graphical models. They don't understand stats at all but still do machine learning like c

第三周课堂笔记请上传

第三周课堂笔记提交地址: https://edu.cnblogs.com/campus/bjgygd/EIE15-1Computersoftwaretechnologyfoundation/homework/316

九章算法系列(#2 Binary Search)-课堂笔记

前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一节课,说真的很实用,特别是对于我这种算法不扎实,并且又想找工作,提高自己的情况. 那就不多说废话了,以后每周都写个总结吧,就趁着这一个月好好把算法提高一下.具体就从:课堂笔记.leetcode和lintcode相关习题.hdu和poj相关习题三个方面来写吧.希望自己能够坚持下来,给大家分享一些好的东

2017年5月12号课堂笔记

2017年5月12号 星期五 空气质量:轻度污染(昨天的北风转今天的南风) 内容:html表格的基本使用,表格跨行跨列,高级表格,播放音乐,播放视频,网页布局,iframe内联框架: 文本框,密码框,单选按钮,复选框,下拉框  备注:周日晚想起来补上的周五课堂笔记(一带一路今天开会天气好晴朗) 一.html表格的基本使用 模仿老师代码: <!DOCTYPE html><html><head lang="en"> <meta charset=&q

?统计学习精要(The Elements of Statistical Learning)?课堂笔记(一)

前两天微博上转出来的,复旦计算机学院的吴立德吴老师在开?统计学习精要(The Elements of Statistical Learning)?这门课,还在张江...大牛的课怎能错过,果断请假去蹭课...为了减轻心理压力,还拉了一帮同事一起去听,eBay浩浩荡荡的十几人杀过去好不壮观!总感觉我们的人有超过复旦本身学生的阵势,五六十人的教室坐的满满当当,壮观啊. 这本书正好前阵子一直在看,所以才会屁颠屁颠的跑过去听.确实是一本深入浅出讲data mining models的好书.作者网站上提供免

线程(java课堂笔记)

1.两种方式的差异 2.线程的生命周期 3.线程控制(线程的方法) 4.线程同步 5.线程同步锁 一. 两种方式的差异 A extends Thread :简单 不能再继承其他类了(Java单继承)同份资源不共享 B implements Runnable:( 推荐) )多个线程共享一个目标资源,适合多线程处理同一份资源. 该类还可以继承其他类,也可以实现其他接口. 二. 线程的生命周期 新建:当程序使用new创建一个线程后,该线程处于新建状态,此时他和其他java对象一样,仅仅由Java虚拟机

CSS基础入门 第4天课堂笔记

CSS基础入门 第4天课堂笔记(本课程共6天) 前端与移动开发学院 http://web.itcast.cn 目录 目录 2 一.复习 3 二.浮动性质的复习 4 三.浮动的清除 5 3.1 清除浮动方法1:给浮动的元素的祖先元素加高度. 5 3.2 清除浮动方法2:clear:both; 6 3.3 清除浮动方法3:隔墙法 7 3.4 清除浮动方法4:overflow:hidden; 8 3.5 清除浮动总结与案例 9 3.6 浏览器兼容问题 11 四.margin 13 4.1 margin

SQL课堂笔记

--注释 公司里一般而是用绝不重复的guid()做主键(web项目不常用) 如null参与运算,结果都是null 在数据库中创建索引能提高查询效率,)只在经常要检索的字段创建索引) sql查询null的数据 selsct * from table where name is null 查询年龄介于20到30的数据 selsct * from table where age between 20 and 30 查询年龄是20,22,32,46的数据 selsct * from table wher

JAVA的面向对象编程--------课堂笔记

JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.   为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参

九章算法系列(#3 Dynamic Programming)-课堂笔记

前言 时隔这么久才发了这篇早在三周前就应该发出来的课堂笔记,由于懒癌犯了,加上各种原因,实在是应该反思.好多课堂上老师说的重要的东西可能细节上有一些急记不住了,但是幸好做了一些笔记,还能够让自己回想起来.动态规划算是我的一道大坎了,本科的时候就基本没有学过,研一的时候老师上课也是吃力的跟上了老师的步伐,其实那个时候老师总结的还是挺好的:把动态规划的题目都分成了一维动规.二维遍历.二维不遍历等一系列的问题.这次听了老师的课程,觉得还是需要更加集中的去把各种题进行一个分类吧,然后有针对的去准备,虽然