以下不属于逻辑覆盖的是基本路径
以下不属于白盒测试技术的是等价类划分
下列关于逻辑覆盖的说法错误的是满足路径覆盖的也一定满足条件组合覆盖;
正确的是
①满足条件覆盖的并不一定满足判定覆盖
②满足条件组合覆盖的一定满足判定覆盖、条件覆盖和条件判定覆盖
③满足判定/条件覆盖的同时满足判定覆盖和条件覆盖
- 代码检查法主要通过什么方式,对哪些内容进行检查?
- 什么是静态结构分析法?
- 什么是程序插桩技术?
- 什么是逻辑覆盖技术?逻辑覆盖主要包括几类覆盖?
- 什么是基本路径测试法?试简述基本路径测试法的基本步骤
09 静态白盒
**代码审查清单**
数据引用错误?
数据声明错误?
计算错误?
比较错误?
控制流程错误?
子程序参数错误?
输入输出错误?
其他
静态白盒测试:
编译器可以找出源代码语法错误。
测试人员在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程;
也叫做“结构化分析”
目的:是尽早发现软件缺陷,以找出动态黑盒测试难以发现或隔离的软件缺陷。
为黑盒测试员设计和应用测试用例提供思路
动态白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从 程序的控制结构导出测试用例。
动态白盒测试使用被测单元内部如何工作的信息,允许测试人员对程序内部逻 辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、 条件。
动态测试技术主要包括:程序插桩、逻辑覆盖、基本路径测试等
白盒测试的主要目的:
保证一个模块中的所有独立路径至少被执行 一次;
对所有的逻辑值均需要测试真、假两个分支;
在上下边界及可操作范围内运行所有循环;
检查内部数据结构以确保其有效性。
白盒测试特点:
以程序的内部逻辑为基础设计测试用例
参照规格说明书和程序清单
覆盖程序的每一条路径
静态白盒测试的过程叫做正式审查,方式:
◦ 同事审查
◦ 走查
◦ 检验 (最正式最严格)
10 动态白盒
动态白盒测试的特点:
动态——一定要测试运行中的程序;
白盒——一定要洞察盒子(软件)里面,检查代码并且观察运行情况。
动态白盒测试也叫做结构化测试: 测试员可以查看并使用代码的内部结构,从而设计和执行测试。
白盒测试就是利用查看代码功能(做什么)和实现方式(怎么做)得到的信息来确定哪些需要测试,哪些不需要测试,如何开展测试
动态白盒测试应用于单元测试和集成测试
动态白盒测试方法
1.逻辑覆盖法☆
白盒测试考虑测试用例对内部逻辑的覆盖程度。覆盖所有路径是不可能的
测试覆盖标准:
1.1 数据覆盖
(1)考虑程序中的数据
◦ 所有的变量、常量、数组、数据结构
◦ 键盘和鼠标输入
◦ 文件、屏幕输入/输出
◦ 调制解调器、网络等其他设备的输入和输出
(2)数据流分析
◦ 在软件中完全跟踪一批数据
数据流分析检查内容:
*检查在程序运行期间变量的中间值
*检查代码,找到次边界条件,并建立起能测试它们的测试用例。
*特别注意内部数据表,因为这里聚集了大量次边界条件。
*检查公式和等式:查看公式使用的变量,在程序正常输入和输出之外,为其建立测试用例和等价划分
1.2代码覆盖
测试程序的状态以及程序流程,必须设法进入和退出每一个模块,执行每一行代码,进入软件的每一条逻辑和决策分支,这种测试叫做代码覆盖。
代码测试最简单的方式是利用编译环境的调试器通过单步执行程序来查看代码。
覆盖标准从低到高为:
- 语句覆盖
语句覆盖又称为线覆盖面或者段覆盖面,选择测试用例使程序中的每个语句至少执行一次;
也叫做代码行覆盖,即使全部语句都被执行了,仍然不能说走遍了软件的所有路径
- 判定(分支)覆盖
也叫做分支覆盖,是路径覆盖测试中最简单的形式; 设计测试用例,使每个分支至少执行一次,使得每一个分支获得每一种可能的结果
比语句覆盖稍强
判定语句包括:
IF-THEN-ELSE
DO-WHILE
REPEAT-UNTIL
多分支
- 条件覆盖
设计测试用例使得判定中的每个条件获得各种可能的结果(T/F) 条件覆盖通常比判定覆盖强
条件覆盖不包含判定覆盖,满足条件覆盖不一定满足判定覆盖
- 判定/条件覆盖
设计测试用例,使得判定中每个条件取到各种可能的值(真/假)至少一次,并使每个判定取到各种可能的值(真/假)也至少一次。
判定/条件覆盖可能漏掉逻辑表达式中的潜在缺陷
(x>3)&&(z<10)
必须两个条件都满足才能确定表达式为真;若(x>3)为假则一般的编译器不再判断z<10
(x==4) ||( y>5)
若 x==4 为真,不再检查(y>5 )
- 条件组合覆盖
设计测试用例使得每个判定中条件的各种可能组合都至少出现一次。
满足“条件组合覆盖”的测试用例是一定满足“分支覆盖”、“条件覆盖”和“条件判定组合覆盖”
2.路径覆盖法☆
路径测试就是设计足够多的测试用例,覆盖被测试对象中的所有可能路径。
基本路径测试
在实践中,程序的路径数量庞大,要在测试中覆盖所有的路径是不现实的。 应把覆盖的路径数压缩到一定限度内: 如程序中的循环体只执行一次
基本路径测试就是这样一种测试方法
基本路径测试方法在程序控制流图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。
控制流图由结点、边和区域组成。
结点:图中的每一个圆,代表一条或多条语句。
边:带箭头的线条,从一个结点开始到另一个结点结束,表示控制流的方向。
区域 :边和结点围起来的部分
判定结点的条件为单一条件
顺序结构的几个结点可以合并为一个结点
每一个分支结构结束的地方增加一个虚拟的汇聚结点,多个汇聚结点可以合并。
区域包括封闭区域和开放区域
基本路径测试步骤:
①画出控制流图
根据程序框图画出控制流图:
若程序流程图不包含复合条件
◦ 处理方框序列 映射为一个结点
◦ 菱形判断框 映射为一个结点
◦ 程序流程图与控制流程图方向一致
如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的复合条件表达式
◦ 则需要改为一系列只有单条件的嵌套的判断
例:if (a && b) then x; else y
②计算圈复杂度
圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量。
该度量用于计算程序的基本的独立路径数目
确保所有语句至少执行一次的测试数量的上界。
独立路径必须包含一条在定义之前不曾用到的边
路径:从入口到出口的一系列分支
两种表示方法:
用结点表示: 1-2-4-5-1-2-3-4-5
用边表示: abefacde
独立路径:从入口到出口至少经过一条没有走过的边,也即是至少引入一个新处理语句或一条新判断的程序通路。
优点:
◦ 包含所有边和结点
◦ 减少路径数量
缺点
◦ 简化循环结构
例: 下图中独立路径数为2:abd,abcbd
计算程序环路复杂性有三种方法:
①流图中区域的数量对应于环型的复杂性;
②V(G)=E-N+2
E是流图中边的数量,N是流图中结点的数量;
③V(G)=P+1
P是流图G中判定结点的数量。
③确定独立路径集合
④准备测试用例
设计测试用例覆盖基本独立路径
3.程序插桩技术(了解)
程序插桩是通过往被测程序的特定部位插入记录动态特性的语句,将程序执行过程中发生的一些重要的历史事件记录下来,实现对程序语句的执行、变量的变化进行检查。
通常在代码如下部位设置探测点
◦ 程序块的第一个可执行语句之前
◦ for,do,do until,do-while等循环语句分支处
◦ If,else if,else及 end if 等条件语句各分支处
◦ 输入/输出语句之后
◦ 函数、过程、子程序调用语句之后
◦ return语句之后
◦ goto语句之后
其他白盒测试方法
1.域测试
程序控制流有错误,对应某一特定的输入可能执行的是一条错误路径,这种 错误称为路径错误,也叫作域错误。
2.符号测试
符号测试的基本思想是允许程序不仅仅输入具体的数值数据,也可以输入符 号值。
3.Z路径覆盖
针对路径覆盖复杂的问题,舍掉一些次要因素,对循环机制进行简化,从而 极大地减少路径的数量,使得覆盖这些有限路径成为可能。简化循环意义下的路径覆盖为Z路径覆盖。
4.程序变异
一种错误驱动测试,针对某类特定程序错误的测试。
白盒测试应用策略
(1)测试中,尽量先选择工具进行静态结构分析
(2)测试中可采取先静态后动态的组合方式
(3)利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析结果做进一步确认。
(4)覆盖率测试是白盒测试的重点
(5)单元测试阶段,以代码检查、逻辑覆盖为主;在集成测试阶段,增加静态结构分析;在系统测试阶段,根据黑盒测试的结果,采取相应的白盒测试