第 7 讲 软件测试

43
7 7 第 第第第第 第 第第第第 毛毛毛 毛毛 [email protected] 毛毛毛毛毛毛毛毛毛 602 毛毛毛 0731-(45)73649 毛毛毛毛毛毛 毛毛毛毛毛毛毛毛毛毛毛毛 毛毛毛毛毛毛毛毛毛毛毛毛

Upload: ronat

Post on 14-Jan-2016

171 views

Category:

Documents


0 download

DESCRIPTION

软件工程导论 之. 第 7 讲 软件测试. 毛新军 教授 [email protected] 计算机科学与技术系 602 教研室 0731-(45)73649. 用工程化的方法来开发软件. 序言. 初步的软件系统存在错误,如何: 发现错误 ? 纠正错误? 软件测试是软件质量保证活动中关键步骤 对 SRS 、设计规格说明书以及编码的最后复审 其工作量往往占软件开发总工作量的 40% 以上 软件测试是确保软件质量的一种有效 ( 可操作 ) 手段 软件测试有其特殊性和规律 – 因为软件是逻辑产品. 本讲内容. 基本概念 软件测试技术 软件测试策略 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 7 讲 软件测试

第第 77讲 软件测试讲 软件测试毛新军 教授

[email protected]计算机科学与技术系 602 教研室

0731-(45)73649

软件工程导论 之

用工程化的方法来开发软件用工程化的方法来开发软件

Page 2: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

2

序言序言 初步的软件系统存在错误,如何:

– 发现错误 ?

– 纠正错误? 软件测试是软件质量保证活动中关键步骤

– 对 SRS 、设计规格说明书以及编码的最后复审– 其工作量往往占软件开发总工作量的 40% 以上– 软件测试是确保软件质量的一种有效 ( 可操作 ) 手段

软件测试有其特殊性和规律 – 因为软件是逻辑产品

Page 3: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

3

本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错

Page 4: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

4

软件测试的基本概念软件测试的基本概念 软件错误

– 软件系统的功能和性能与预期的功能和性能不一致

软件测试是发现软件错误的过程

Page 5: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

5

软件测试的目标软件测试的目标 目标

– 发现软件中的错误,提高软件质量– 注意软件测试中没有发现错误并不意味着软件就没有错误 => 测试不充分 , 潜在错误不能发现

Page 6: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

6

测试 评价 排错

可靠性评测

软件配置(对象和依据)

测试配置(规划)

测试结果

预期结果

错误

经排错后的目标软件系统

统计出错率

软件可靠性

软件测试的信息流程软件测试的信息流程 软件测试思想

– 数据处理 设计测试用例 判断结果

Page 7: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

7

软件测试方法软件测试方法 二种测试方法

– 白盒测试– 黑盒测试

Page 8: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

8

设计测试用例

白盒测试白盒测试 思想

– 已知程序内部工作流程,通过测试检验程序内部动作是否按规格说明书规定正常运作

依据– 程序的内部逻辑结构,针对程序的逻辑路径设计测试用例

特点– 必须了解程序的内部工作流程

Page 9: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

9

功能: 求二个数中较大者

测试用例

黑盒测试黑盒测试 思想

– 根据已知程序的功能和性能 ( 而不是内部细节 ) ,通过测试检验每个功能和性能是否正常

依据– 程序的功能和性能描述

特点– 知道程序的功能和性能,不必了解程序的内部结构和处理细节

Page 10: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

10

软件测试步骤软件测试步骤 软件开发

– 从高抽象层次向低层次抽象过渡 软件测试

– 从低层次抽象向高层次抽象过渡 软件测试的层次

– 单元测试:测试程序中每个模块是否有错误(白盒)– 集成测试:测试软件总体结构是否有错误(黑盒)– 确认测试:测试软件是否满足用户需求(黑盒)

Page 11: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

11

需求分析需求分析

概要设计概要设计

详细设计详细设计

编码编码

单元测试单元测试

集成测试集成测试

确认测试确认测试

软件开发过程 软件测试过程

软件开发活动和软件测试活动间软件开发活动和软件测试活动间的关系的关系

Page 12: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

12

本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错

Page 13: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

13

软件测试技术 软件测试技术 白盒测试

– 白盒测试是根据程序的控制结构来设计测试用例

Page 14: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

14

1

2

3

6

7 8

4

5

11

9 10

白盒测试白盒测试 要设计多少测试用例 ?

覆盖准则– 语句覆盖– 分支覆盖– 路径覆盖 : 程序通道– 基本路径覆盖

Page 15: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

15

基本路径测试的思想基本路径测试的思想 基本路径

– 至少引入一个新语句或者新判断的程序通道 思想

– 路径 ==> 基本路径 ==> 基本路径测试 前提

– 软件模块的逻辑结构(流程图) 如何设计测试用例确保基本路径覆盖

– ==> 哪些基本路径 ==> 流图 ==> 流程图

Page 16: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

16

2,3

6

7 8

9

10

4,5

11 程序流图

1

2

3

6

7 8

4

5

11

9 10

模块流程图

流程图和流图示意图流程图和流图示意图

Page 17: 第 7 讲 软件测试

©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

模块流程图

Page 18: 第 7 讲 软件测试

©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

Page 19: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

19

步骤步骤 2:2:将流程图转换为流图将流程图转换为流图 (2/2)(2/2)

2,3

6

7 8

9

10

4,5

11

程序流图

1

2

3

6

7 8

4

5

11

9 10

模块流程图

Page 20: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

20

步骤步骤 3:3:确定基本路径的集合确定基本路径的集合 (1/2)(1/2)

基本路径– 流图 Cyclomatic 复杂度正好是基本路径的数目

V(G) = E – N + 2 V(G) = 11 - 9 + 2 = 4

2,3

6

7 8

9

10

4,5

11

程序流图

Page 21: 第 7 讲 软件测试

©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

2,3

6

7 8

9

10

4,5

11

程序流图

Page 22: 第 7 讲 软件测试

©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}

Page 23: 第 7 讲 软件测试

©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

2,3

6

7 8

9

10

4,5

11

程序流图

Page 24: 第 7 讲 软件测试

©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}

2,3

6

7 8

9

10

4,5

11

程序流图

Page 25: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

25

黑盒测试黑盒测试 黑盒测试技术

– 测试软件是否满足功能和性能要求,它不涉及模块的内部过程性细节

主要的黑盒测试技术– 等价分类法– 边界分类法

Page 26: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

26

等价分类法等价分类法 (1/2)(1/2)

思想– 把程序的输入数据集合按输入条件划分为若干个等价类,每一个等价类对于输入条件而言为一组有效或者无效的输入,然后为每一个等价类设计一个测试用例

优点– 减少测试次数,不丢失发现错误的机会

Page 27: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

27

等价分类法等价分类法 (2/2)(2/2)

输入条件为一范围– 划分出三个等价类: (1) 有效等价类 ( 在范围内 ), (2) 大于输入最大值, (3)小于输入最少值

输入条件为一值– 划分为三个等价类 : (1) 有效, (2) 大于, (3) 小于

输入条件为集合– 划分二个等价类 : (1) 有效 ( 在集合内 ), (2) 无效 ( 在集合外 )

输入条件为一个布尔量– 划分二个等价类, (1) 有效 (此布尔量 ), (2) 无效 (布尔量的非 )

Page 28: 第 7 讲 软件测试

©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>

Page 29: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

29

边界值分析法边界值分析法 输入条件是一范围 (a,b)

– a,b 以及紧挨 a,b左右的值应作为测试用例 输入条件为一组数

– 选择这组数的最大者和最小者,次大和次小者作为测试用例

如果程序的内部数据结构是有界的– 应设计测试用例使它能够检查该数据结构的边界

Page 30: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

30

本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错

Page 31: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

31

单元测试单元测试 对软件的最小单元-模块进行测试.多采用白盒测试(1) 模块接口测试(2) 模块局部数据结构测试(3) 模块独立执行路径测试(4) 模块中各条错误处理通道测试(5) 模块边界条件测试

Page 32: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

32

驱动模块

被测模块

桩模块 桩模块

界面

局部数据结构

边界条件

独立路径

错误处理路径

测试用例 结果

单元测试单元测试 ((续续 ))

Page 33: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

33

集成测试集成测试 模块相互调用时引入接口问题 => 集成测试 集成测试方法

– (1) 自顶向下集成从目标软件系统的主控模块开始,按照软件的控制层次结构,以深度优先或者广度优先的策略把各个模块集成在一起进行测试

– (2) 自底向上集成从软件结构最底层模块开始自底向上进行组装和测试

Page 34: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

34

M1

M2 M3 M4

M5 M6

M8

M7

集成测试例子集成测试例子

Page 35: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

35

确认测试确认测试 任务

– 判断目标软件系统是否满足用户的功能和性能需求;

– 文档资料是否完整、准确 依据和标准

– 软件需求规格说明书 确认测试的类型

– α 测试– β 测试

Page 36: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

36

测试用例

排错

执行某个测试用例

结果

假想错误 追加测试

确定了错误原因 修正程序 回归测试

排错排错 (1/2)(1/2)

测试是为了发现错误,当发现错误后就要将它改正,改正错误主要依靠排错技术

排错过程

Page 37: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

37

排错排错 (2/2)(2/2)

排错方法– 原始法– 回溯法– 排除法– 基于归纳和演绎的方法 :收集与出错有关的所有数据,假想一组出错的原因,用这组数据证明或者反驳之

Page 38: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

38

本讲内容本讲内容1. 基本概念2. 软件测试技术3. 软件测试策略4. 基于 CASE 的软件测试和排错

Page 39: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

39

基于基于 CASECASE 的软件测试和排错的软件测试和排错 静态分析器

– 通过静态的扫描源程序,找出可能导致程序出错的异常情况

代码审查器– 检查源程序代码是否满足最基本的代码标准

断言处理器– 检查程序员关于程序行为的断言在程序执行过程中是否成立

测试数据产生器

Page 40: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

40

软件测试和软件调试软件测试和软件调试 目的

– 发现错误;定位和纠正错误独立性

– 可有独立的测试小组进行;必须由开发人员完成

Page 41: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

41

本讲小结本讲小结1. 基本概念 ( 软件测试的概念、目标 , 方法

和过程等 )

2. 软件测试技术 ( 白盒和黑盒软件测试方法 )

3. 软件测试策略 ( 步骤 , 方法等 )

4. 基于 CASE 的软件测试和排错

Page 42: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

42

思考题思考题 思考题

– 只要设计足够多的测试用例,软件测试是否完全可以发现软件中的所有错误?

Page 43: 第 7 讲 软件测试

©Copyright Xinjun Mao

软件测试

43

Q & AQ & AQ & AQ & A

An Introduction to Software EngineeringAn Introduction to Software Engineering

Practice, Practice, and Practice