第 7 讲 软件测试
DESCRIPTION
软件工程导论 之. 第 7 讲 软件测试. 毛新军 教授 [email protected] 计算机科学与技术系 602 教研室 0731-(45)73649. 用工程化的方法来开发软件. 序言. 初步的软件系统存在错误,如何: 发现错误 ? 纠正错误? 软件测试是软件质量保证活动中关键步骤 对 SRS 、设计规格说明书以及编码的最后复审 其工作量往往占软件开发总工作量的 40% 以上 软件测试是确保软件质量的一种有效 ( 可操作 ) 手段 软件测试有其特殊性和规律 – 因为软件是逻辑产品. 本讲内容. 基本概念 软件测试技术 软件测试策略 - PowerPoint PPT PresentationTRANSCRIPT
第第 77讲 软件测试讲 软件测试毛新军 教授
[email protected]计算机科学与技术系 602 教研室
0731-(45)73649
软件工程导论 之
用工程化的方法来开发软件用工程化的方法来开发软件
©Copyright Xinjun Mao
软件测试
2
序言序言 初步的软件系统存在错误,如何:
– 发现错误 ?
– 纠正错误? 软件测试是软件质量保证活动中关键步骤
– 对 SRS 、设计规格说明书以及编码的最后复审– 其工作量往往占软件开发总工作量的 40% 以上– 软件测试是确保软件质量的一种有效 ( 可操作 ) 手段
软件测试有其特殊性和规律 – 因为软件是逻辑产品
©Copyright Xinjun Mao
软件测试
3
本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错
©Copyright Xinjun Mao
软件测试
4
软件测试的基本概念软件测试的基本概念 软件错误
– 软件系统的功能和性能与预期的功能和性能不一致
软件测试是发现软件错误的过程
©Copyright Xinjun Mao
软件测试
5
软件测试的目标软件测试的目标 目标
– 发现软件中的错误,提高软件质量– 注意软件测试中没有发现错误并不意味着软件就没有错误 => 测试不充分 , 潜在错误不能发现
©Copyright Xinjun Mao
软件测试
6
测试 评价 排错
可靠性评测
软件配置(对象和依据)
测试配置(规划)
测试结果
预期结果
错误
经排错后的目标软件系统
统计出错率
软件可靠性
软件测试的信息流程软件测试的信息流程 软件测试思想
– 数据处理 设计测试用例 判断结果
©Copyright Xinjun Mao
软件测试
7
软件测试方法软件测试方法 二种测试方法
– 白盒测试– 黑盒测试
©Copyright Xinjun Mao
软件测试
8
设计测试用例
白盒测试白盒测试 思想
– 已知程序内部工作流程,通过测试检验程序内部动作是否按规格说明书规定正常运作
依据– 程序的内部逻辑结构,针对程序的逻辑路径设计测试用例
特点– 必须了解程序的内部工作流程
©Copyright Xinjun Mao
软件测试
9
功能: 求二个数中较大者
测试用例
黑盒测试黑盒测试 思想
– 根据已知程序的功能和性能 ( 而不是内部细节 ) ,通过测试检验每个功能和性能是否正常
依据– 程序的功能和性能描述
特点– 知道程序的功能和性能,不必了解程序的内部结构和处理细节
©Copyright Xinjun Mao
软件测试
10
软件测试步骤软件测试步骤 软件开发
– 从高抽象层次向低层次抽象过渡 软件测试
– 从低层次抽象向高层次抽象过渡 软件测试的层次
– 单元测试:测试程序中每个模块是否有错误(白盒)– 集成测试:测试软件总体结构是否有错误(黑盒)– 确认测试:测试软件是否满足用户需求(黑盒)
©Copyright Xinjun Mao
软件测试
11
需求分析需求分析
概要设计概要设计
详细设计详细设计
编码编码
单元测试单元测试
集成测试集成测试
确认测试确认测试
软件开发过程 软件测试过程
软件开发活动和软件测试活动间软件开发活动和软件测试活动间的关系的关系
©Copyright Xinjun Mao
软件测试
12
本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错
©Copyright Xinjun Mao
软件测试
13
软件测试技术 软件测试技术 白盒测试
– 白盒测试是根据程序的控制结构来设计测试用例
©Copyright Xinjun Mao
软件测试
14
1
2
3
6
7 8
4
5
11
9 10
白盒测试白盒测试 要设计多少测试用例 ?
覆盖准则– 语句覆盖– 分支覆盖– 路径覆盖 : 程序通道– 基本路径覆盖
©Copyright Xinjun Mao
软件测试
15
基本路径测试的思想基本路径测试的思想 基本路径
– 至少引入一个新语句或者新判断的程序通道 思想
– 路径 ==> 基本路径 ==> 基本路径测试 前提
– 软件模块的逻辑结构(流程图) 如何设计测试用例确保基本路径覆盖
– ==> 哪些基本路径 ==> 流图 ==> 流程图
©Copyright Xinjun Mao
软件测试
16
1
2,3
6
7 8
9
10
4,5
11 程序流图
1
2
3
6
7 8
4
5
11
9 10
模块流程图
流程图和流图示意图流程图和流图示意图
©Copyright Xinjun Mao
软件测试
17
步骤步骤 1:1:根据程序逻辑画出流程图 根据程序逻辑画出流程图 void Func(int nPosX, int nPosY) {
while (nPosX > 0) {int nSum = nPosX + nPosY;if (nSum > 1) { nPosX--;
nPosY--;}else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; }
} // end of while}
1
2
3
6
7 8
4
5
11
9 10
模块流程图
©Copyright Xinjun Mao
软件测试
18
步骤步骤 2:2:将流程图转换为流图将流程图转换为流图 (1/2)(1/2)
流图刻画了程序的控制结构但不涉及程序的过程性细节– 节点 ( 过程块,结合点,判定点 )
– 有向边 判定点不含复合条件,否则应按照下列方式增加判定点
a
b
Y
X
X
If a or b
Then X
Else Y
End If
©Copyright Xinjun Mao
软件测试
19
步骤步骤 2:2:将流程图转换为流图将流程图转换为流图 (2/2)(2/2)
1
2,3
6
7 8
9
10
4,5
11
程序流图
1
2
3
6
7 8
4
5
11
9 10
模块流程图
©Copyright Xinjun Mao
软件测试
20
步骤步骤 3:3:确定基本路径的集合确定基本路径的集合 (1/2)(1/2)
基本路径– 流图 Cyclomatic 复杂度正好是基本路径的数目
V(G) = E – N + 2 V(G) = 11 - 9 + 2 = 4
1
2,3
6
7 8
9
10
4,5
11
程序流图
©Copyright Xinjun Mao
软件测试
21
步骤步骤 3:3:确定测试路径的集合确定测试路径的集合 (2/2)(2/2)
1 - 11 1 - 2, 3 - 6 - 7 - 9 - 10 - 1
- 11 1 - 2, 3 - 4, 5 - 10 - 1 -
11 1 - 2, 3 - 6 - 8 - 9 - 10 - 1
- 11
1
2,3
6
7 8
9
10
4,5
11
程序流图
©Copyright Xinjun Mao
软件测试
22
void Func(int nPosX, int nPosY) {while (nPosX > 0) {
int nSum = nPosX + nPosY;if (nSum > 1) { nPosX--;
nPosY--;}else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; }
} // end of while}
©Copyright Xinjun Mao
软件测试
23
步骤步骤 4:4: 针对测试路径设计测试用例针对测试路径设计测试用例 1-11
– nPosX 取 -1, nPosY 取任意值
1 - 2, 3 - 4, 5 - 10 - 1 - 11– nPosX 取 1, nPosY取 1
1- 2, 3 - 6 - 7 - 9 - 10 - 1 – 11– nPosX 取 1, nPosY取 -1
1- 2, 3 - 6 - 8 - 9 - 10 - 1 - 11 – nPosX 取 1, nPosY取 -3
1
2,3
6
7 8
9
10
4,5
11
程序流图
©Copyright Xinjun Mao
软件测试
24
void Func(int nPosX, int nPosY) {while (nPosX > 0) {
int nSum = nPosX + nPosY;if (nSum > 1) { nPosX--;
nPosY--;}else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; }
} // end of while}
1
2,3
6
7 8
9
10
4,5
11
程序流图
©Copyright Xinjun Mao
软件测试
25
黑盒测试黑盒测试 黑盒测试技术
– 测试软件是否满足功能和性能要求,它不涉及模块的内部过程性细节
主要的黑盒测试技术– 等价分类法– 边界分类法
©Copyright Xinjun Mao
软件测试
26
等价分类法等价分类法 (1/2)(1/2)
思想– 把程序的输入数据集合按输入条件划分为若干个等价类,每一个等价类对于输入条件而言为一组有效或者无效的输入,然后为每一个等价类设计一个测试用例
优点– 减少测试次数,不丢失发现错误的机会
©Copyright Xinjun Mao
软件测试
27
等价分类法等价分类法 (2/2)(2/2)
输入条件为一范围– 划分出三个等价类: (1) 有效等价类 ( 在范围内 ), (2) 大于输入最大值, (3)小于输入最少值
输入条件为一值– 划分为三个等价类 : (1) 有效, (2) 大于, (3) 小于
输入条件为集合– 划分二个等价类 : (1) 有效 ( 在集合内 ), (2) 无效 ( 在集合外 )
输入条件为一个布尔量– 划分二个等价类, (1) 有效 (此布尔量 ), (2) 无效 (布尔量的非 )
©Copyright Xinjun Mao
软件测试
28
等价分类法例子等价分类法例子 z = func(x, y):
– 当 0 < x < 1024 并且 y = 0, z = -1
– 否则, z = x * lg(y)
关于 x 的等价类 : (0, 1024), (-#, 0], [1024, +#)
关于 y 的等价类 : 0, (-#, 0), (0, +#)
测试用例 : 9 个– <1, 0>, <1, -2>, <1, 2>;
– <-1, 0>, <-1, -2>, <-1, 2>;
– <1024, 0>, <1024, -2>, <1024, 2>
©Copyright Xinjun Mao
软件测试
29
边界值分析法边界值分析法 输入条件是一范围 (a,b)
– a,b 以及紧挨 a,b左右的值应作为测试用例 输入条件为一组数
– 选择这组数的最大者和最小者,次大和次小者作为测试用例
如果程序的内部数据结构是有界的– 应设计测试用例使它能够检查该数据结构的边界
©Copyright Xinjun Mao
软件测试
30
本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错
©Copyright Xinjun Mao
软件测试
31
单元测试单元测试 对软件的最小单元-模块进行测试.多采用白盒测试(1) 模块接口测试(2) 模块局部数据结构测试(3) 模块独立执行路径测试(4) 模块中各条错误处理通道测试(5) 模块边界条件测试
©Copyright Xinjun Mao
软件测试
32
驱动模块
被测模块
桩模块 桩模块
界面
局部数据结构
边界条件
独立路径
错误处理路径
测试用例 结果
单元测试单元测试 ((续续 ))
©Copyright Xinjun Mao
软件测试
33
集成测试集成测试 模块相互调用时引入接口问题 => 集成测试 集成测试方法
– (1) 自顶向下集成从目标软件系统的主控模块开始,按照软件的控制层次结构,以深度优先或者广度优先的策略把各个模块集成在一起进行测试
– (2) 自底向上集成从软件结构最底层模块开始自底向上进行组装和测试
©Copyright Xinjun Mao
软件测试
34
M1
M2 M3 M4
M5 M6
M8
M7
集成测试例子集成测试例子
©Copyright Xinjun Mao
软件测试
35
确认测试确认测试 任务
– 判断目标软件系统是否满足用户的功能和性能需求;
– 文档资料是否完整、准确 依据和标准
– 软件需求规格说明书 确认测试的类型
– α 测试– β 测试
©Copyright Xinjun Mao
软件测试
36
测试用例
排错
执行某个测试用例
结果
假想错误 追加测试
确定了错误原因 修正程序 回归测试
排错排错 (1/2)(1/2)
测试是为了发现错误,当发现错误后就要将它改正,改正错误主要依靠排错技术
排错过程
©Copyright Xinjun Mao
软件测试
37
排错排错 (2/2)(2/2)
排错方法– 原始法– 回溯法– 排除法– 基于归纳和演绎的方法 :收集与出错有关的所有数据,假想一组出错的原因,用这组数据证明或者反驳之
©Copyright Xinjun Mao
软件测试
38
本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错
©Copyright Xinjun Mao
软件测试
39
基于基于 CASECASE 的软件测试和排错的软件测试和排错 静态分析器
– 通过静态的扫描源程序,找出可能导致程序出错的异常情况
代码审查器– 检查源程序代码是否满足最基本的代码标准
断言处理器– 检查程序员关于程序行为的断言在程序执行过程中是否成立
测试数据产生器
©Copyright Xinjun Mao
软件测试
40
软件测试和软件调试软件测试和软件调试 目的
– 发现错误;定位和纠正错误独立性
– 可有独立的测试小组进行;必须由开发人员完成
©Copyright Xinjun Mao
软件测试
41
本讲小结本讲小结1. 基本概念 ( 软件测试的概念、目标 , 方法
和过程等 )
2. 软件测试技术 ( 白盒和黑盒软件测试方法 )
3. 软件测试策略 ( 步骤 , 方法等 )
4. 基于 CASE 的软件测试和排错
©Copyright Xinjun Mao
软件测试
42
思考题思考题 思考题
– 只要设计足够多的测试用例,软件测试是否完全可以发现软件中的所有错误?
©Copyright Xinjun Mao
软件测试
43
Q & AQ & AQ & AQ & A
An Introduction to Software EngineeringAn Introduction to Software Engineering
Practice, Practice, and Practice