软件测试

臧艳辉

目录

  • 1 走近软件测试
    • 1.1 走近软件测试
    • 1.2 一个软件测试工程师必备的专业技能和素质
    • 1.3 章节测验
  • 2 软件测试技术
    • 2.1 正确认识软件测试
    • 2.2 软件测试遵循的基本原则
    • 2.3 软件测试的分类
    • 2.4 软件测试的过程模型
    • 2.5 章节测验
  • 3 测试中缺陷的识别与描述
    • 3.1 初识软件缺陷
    • 3.2 全面解析软件缺陷
    • 3.3 有效的记录缺陷
    • 3.4 缺陷报告实例
    • 3.5 缺陷报告模板
  • 4 项目测试计划的制定
    • 4.1 一个项目完整的测试流程
    • 4.2 初识测试计划
    • 4.3 测试计划的基本机构和内容
    • 4.4 测试计划模板和案例
  • 5 初识软件测试用例
    • 5.1 什么是测试用例
    • 5.2 项目测试中设计测试用例的作用
    • 5.3 如何设计一个项目的测试用例
    • 5.4 在测试过程中测试用例怎样进行更新和维护
  • 6 使用等价类划分方法设计测试用例
    • 6.1 等价类划分法的基本思想
    • 6.2 进行等价类划分法的原则
    • 6.3 使用等价类划分法设计测试用例实例
  • 7 使用边界值分析法设计测试用例
    • 7.1 边界值分析法的基本思想
    • 7.2 如何确定边界
    • 7.3 测试知识储备
    • 7.4 使用边界值分析法设计测试用例实例
    • 7.5 项目中如何进行健壮性边界值测试
    • 7.6 等价类+边界值
    • 7.7 章节测试
  • 8 使用大纲法设计测试用例
    • 8.1 什么是大纲法
    • 8.2 项目中如何使用大纲法设计测试用例
  • 9 使用场景法设计测试用例
    • 9.1 什么是场景法
    • 9.2 项目中如何使用场景法设计测试用例
  • 10 因果图和决策表结合设计测试用例
    • 10.1 因果图法的介绍
    • 10.2 决策表的介绍
    • 10.3 项目中选用因果图法和决策表设计测试用例需考虑的问题
    • 10.4 使用因果图法和决策表设计测试用例
  • 11 功能测试
    • 11.1 什么是功能测试
    • 11.2 功能测试的主要内容及测试策略
    • 11.3 功能测试的方法汇总
    • 11.4 功能测试的经验及注意事项
  • 12 界面测试
    • 12.1 界面检查的通用原则
    • 12.2 具体的界面检查的举例
    • 12.3 设计界面测试用例
    • 12.4 界面测试标准总结
  • 13 软件的安装卸载测试
    • 13.1 软件的安装卸载测试
    • 13.2 软件的安装测试
    • 13.3 软件的运行测试
    • 13.4 软件的卸载的测试
  • 14 项目中如何使用进行有效的缺陷管理
    • 14.1 进行缺陷管理的目标是什么
    • 14.2 项目中缺陷管理的流程是怎样的
    • 14.3 缺陷的跟踪方法有哪些
  • 15 测试报告该如何撰写
    • 15.1 软件质量评估
    • 15.2 如何撰写测试报告
    • 15.3 如何写项目总结
    • 15.4 如何写个人测试总结
  • 16 集成测试
    • 16.1 初识集成测试
    • 16.2 集成测试方法
  • 17 白盒测试
    • 17.1 初识白盒测试
    • 17.2 白盒测试技术——逻辑驱动测试
    • 17.3 白盒测试技术——循环覆盖测试
    • 17.4 白盒测试技术——基本路径测
  • 18 软件测试技术及岗位需求介绍
    • 18.1 软件测试岗位需求
    • 18.2 软件测试技术介绍
    • 18.3 软件测试比赛内容
    • 18.4 软件测试岗位应聘简历撰写
使用因果图法和决策表设计测试用例
  • 1 电子教材
  • 2 PPT
  • 3 实训任务

10.4  使用因果图法和决策表设计测试用例实例

10.4.1  某航空系统食物供应与播放电影规定测试用例

假设中国某航空公司规定:中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影;中国去非欧美的国外航线都有食物供应,只有商务舱可以播放电影;中国国内的航班的商务舱有食物供应,但是不可以播放电影。

中国国内的航班的经济舱飞行时间大于2小时有食物供应,但是不可以播放电影,

这样,条件有:

1)航线-一 国外欧美的,国外非欧美,国内;

2)舱位——商务,经济;

3)飞行时间 —— 小于 2 还是大于等于 2

行为有:

1)播放电影;

2)供应食物。

形成的判定表如表10-1所示。

10-1 中国某航空公司决策表设计

 

这样可以写出 6 个测试用例来覆盖这些场景。注意,这些测试用例完全是根据需求定义而来的。对于测试用例 1 来说,需求说明认为商务舱还是经济舱是不能影响后面的行为的,但是对于测试人员来说,其实还是要验证的。所以可能需要加测试用例。

10.4.2  固定资产维修规则测试用例

需求要求:“… 对功率大于 50 马力的机器、维修记录不全或已运行 10 年以上的机器,应给予优先的维修处理 … … ”这里假定,“维修记录不全”和“优先维修处理”均已在别处有更严格的定义。

需求分析如下:

1)确定规则的个数:这里有3个条件,每个条件有两个取值,故应有2X2X2=8种规则。

2)列出所有的条件项和动作桩,如表10-2所示。

10-2 条件项和动作桩

条件

功率大于50马力吗?

动作

进行优先处理

维修记录不全吗?

作其他处理

运行超过10年吗?


3)填入条件项。可从最后1行条件项开始,逐行向上填满。如第三行是Y N Y N Y N Y N,第二行是 Y Y N N Y Y N N,等等。

4)填入动作桩和动作项。这样便得到形如表10-3的初始判定表。

10-3 初始判定表


1

2

3

4

5

6

7

8

条件

功率大于50马力吗?

Y

Y

Y

Y

N

N

N

N

维修记录不全吗?

Y

Y

N

N

Y

Y

N

N

运行超过10年吗?

Y

N

Y

N

Y

N

Y

N

动作

进行优先处理

X

X

X


X


X


作其他处理




X


X


X

  5)化简。合并相似规则后得到表10-4

10-4 化简后的判定表


1

2

3

4

5

条件

功率大于50马力吗?

Y

Y

Y

N

N

维修记录不全吗?

Y

N

N

   --

   --

运行超过10年吗?

   --

Y

N

Y

N

动作

进行优先处理

X

X


X


作其他处理



X


X

10.4.3  某项目中业务单据处理规则测试用例

假设业务单据的处理规则为:“对于处于提交审批状态的单据,数据完整率达到80%以上或已经过业务员确认,则进行处理”。对于这条业务规则,首先通过分析所有可能的输入和可能的输出,可以得到如下结果:

输入:处于提交状态、数据完整率达到 80 %以上、已经过业务员确认。

输出:处理、不处理。

然后,需要进行第二步,找出输入与输出之间的对应关系。通过分析,可以看出有以下的对应关系:

1)单据处于提交审批状态且数据完整率达 80 %以上,则处理。

2)如果单据不处于审批状态,则不处理;如果单据处于提交审批状态,且已经过业务员确认,则处理。

3)如果单据处于提交审批状态,数据完整率未达到80% 以上,但经过了业务员的确认,则处理。

为了方便画出因果图和判定表,需要对所有输入和输出编号,现在编号如下:

1:处于提交状态。

2:数据完整率达到 80%以上。

3:已经过业务员确认。

所有输出项编号如下:

21:处理。

22:不处理。

对于输入和输出的对应关系,需要结合实际业务的逻辑要求进行分析,并画出如图10-3所示的因果图。把因果图转换成如表10-5所示的判定表。

 

10-3 因果图

10-5 判定表

 

最后一个步骤就是把判定表中的8列转化成一个个测试用例。当然也可以先把判定表简化、合并后再转换成测试用例。

10.4.4  某厂发放工资测试用例

某厂发放工资,分析测试需求,列出输入和输出条件如下。

描述:

Ø 工资分为年薪制al,月薪制a2

Ø 错误程度分为普通a3,严重a4

Ø 工资为a1的员工犯普通错误的扣工资2%b1),犯严重错误扣工资4%b2)。

Ø 工资为a2的员工犯普通错误的扣工资4%b3),犯严重错误扣工资8%b4)。

其中,a1a2为互斥;b1b2b3b4是互斥; a3a4可以同时具备。

由以上的输入输出条件得到表的判断表如表10-6所示。

10-6 判定表

输入









a1

T

T

T

T

F

F

F

F

a2

F

F

F

F

T

T

T

T

a3

T

F

T

F

T

F

T

F

a4

F

T

T

F

F

T

T

F

输出









b1

X


X






b2


X

X






b3





X


X


b4






X

X


通过判定表得到测试用例如表10-7所示。

10-7 测试用例

测试用例编号

输入数值

预期输出

1

工资为a1的员工,犯普通错误

b1

2

工资为al的员工,犯严重错误

b2

3

工资为al的员工,犯普通错误和严重错误

b1+b2

4

工资为al的员工不犯错误

0

5

工资为a2的员工,犯普通错误

b3

6

工资为a2的员工,犯严重错误

b4

7

工资为a2的员工,犯普通错误和严重错误

b3+b4

8

工资为a2的员工不犯错误

0

10.4.5  加法计数器测试用例

请看前面做过的两位数加法计算器的例子:

分析测试需求,根据需求确定输入条件和输出条件

输入:(条件桩)

Ø 条件10<=输入12<=99

Ø 条件2-99<=输入12<0

Ø 条件3-99>输入12

Ø 条件4:输入12>99

结果:(动作桩)

Ø 正确计算:程序显示加法计算结果。

Ø 错误提示:程序提示输入数据有误。

其中,条件1234是互斥的,即输入1的取值若为条件1,就不可能为条件234

这样,就可以得到8个输入条件和两个输出结果。根据输入输出条件,得到的判定表如表10-8所示。

10-8 判定表

输入1









条件1

T

T

-

-

-

-

-

-

条件2

-

-

T

T

-

-

-

-

条件3

-

-

-

-

T

-

-

-

条件4

-

-

-

-

-

T

-

-

输入2









条件1

T

-

T

-

-

-

-

-

条件2

-

T

-

T

-

-

-

-

条件3

-

-

-

-

-

-

T

-

条件4

-

-

-

-

-

-

-

T

输出









正确计算

X

X

X

X





错误提示





X

X

X

X

通过判定表得到的测试用例如表10-9所示。

10-9 测试用例

测试用例编号

输入数值

预期输出

1

98+98

正确输出: 196

2

99+ (-99)

正确输出: 0

3

-98+ (50)

正确输出: -48

4

-34+ (-45)

正确输出: -79

5

-100

错误信息

6

100

错误信息

7

20+ (-123)

错误信息

8

20+(123)

错误信息

10.4.6  中国象棋游戏中马的走法测试用例

需求说明如下:

1. 如果落点在棋盘外,则不移动棋子;

2. 如果落点与起点不构成日字型,则不移动棋子;

3. 如果落点处有自己方棋子,则不移动棋子;

4. 如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子;

5. 如果不属于1-4条,且落点处无棋子,则移动棋子;

6. 如果不属于1-4条,且落点处为对方棋子 (非老将) ,则移动棋子并除去对方棋子;

7. 如果不属于1-4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束。

对说明进行分析,得到原因和结果:

原因:

Ø 落点在棋盘外;

Ø 不构成日字;

Ø 落点有自方棋子;

Ø 绊马腿;

Ø 落点无棋子;

Ø 落点为对方棋子;

Ø 落点为对方老将。

结果:

Ø 不移动;

Ø 移动;

Ø 移动己方棋子消除对方棋子;

Ø 移动并战胜对方。

根据分析出来的原因和结果,我们可以画出因果图,如图10-3所示。

 

10-4 因果图

注:这里只加了些必要的约束条件。

11这个结点称做中间结点,是为了让因果图的结构更加明了,简化因果图导出的判定表。分析得出以下两个结论。

1、只有1234都不成立时,产生11,跟567结合分别得出222324三个结果;

2、不管567哪个成立,只要1234有一个成立,就产生结果21

再加上落点有自方棋子的状况。可以得到判定表如下:

条件

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

2

0

0

0

1

1

1

0

0

0

0

0

0

0

0

0

0

0

3

0

0

0

0

0

0

1

1

1

1

0

0

0

0

0

0

0

4

0

0

0

0

0

0

0

0

0

0

1

1

1

0

0

0

0

5

0

0

0

1

0

0

1

0

0

0

1

0

0

1

0

0

0

6

0

1

0

0

1

0

0

1

0

0

0

1

0

0

1

0

0

7

0

0

1

0

0

1

0

0

1

0

0

0

1

0

0

1

0

中间结果

11

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

结果

21

1



1

1

1




1

1

1

1

0

0

0


22

0



0

0

0




0

0

0

0

1

0

0


23

0



0

0

0




0

0

0

0

0

1

0


24

0



0

0

0




0

0

0

0

0

0

1


进一步分析,将各种不可能产生的组合情况,取消掉,用灰色表示出来了。这些都是之前没有写的一些约束条件导致的。比如落点在棋盘外,那么落点就不可能在对方棋子上了。最后将判定表内的规则转换成测试用例如下:

测试用例1

测试用例编号

CHINESECHESS_ST_MOVE_MA_001

测试项目

象棋马的移动

测试标题

条件1-4不成立,移动马,落点是对方老将

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击对方老将。

预期输出

移动棋子并提示战胜对方。

测试用例2

测试用例编号

CHINESECHESS_ST_MOVE_MA_002

测试项目

象棋马的移动

测试标题

条件1-4不成立,移动马,落点是对方棋子(非老将)

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击对方棋子。

预期输出

移动棋子并除去对方棋子。

测试用例3

测试用例编号

CHINESECHESS_ST_MOVE_MA_003

测试项目

象棋马的移动

测试标题

条件1-4不成立,移动马,落点无棋子

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击无棋子的落点。

预期输出

移动棋子。

测试用例4

测试用例编号

CHINESECHESS_ST_MOVE_MA_004

测试项目

象棋马的移动

测试标题

绊马腿,落点为对方老将

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击对方老将。

预期输出

不移动棋子。

测试用例5

测试用例编号

CHINESECHESS_ST_MOVE_MA_005

测试项目

象棋马的移动

测试标题

绊马腿,落点为对方棋子(非老将)

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击对方棋子。

预期输出

不移动棋子。

测试用例6

测试用例编号

CHINESECHESS_ST_MOVE_MA_006

测试项目

象棋马的移动

测试标题

绊马腿,落点无棋子

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击无棋子落点。

预期输出

不移动棋子。

测试用例7

测试用例编号

CHINESECHESS_ST_MOVE_MA_007

测试项目

象棋马的移动

测试标题

落点为自方棋子

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击自方棋子。

预期输出

不移动棋子。

测试用例8

测试用例编号

CHINESECHESS_ST_MOVE_MA_008

测试项目

象棋马的移动

测试标题

不构成日字,落点为对方老将

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击对方老将。

预期输出

不移动棋子。

测试用例9

测试用例编号

CHINESECHESS_ST_MOVE_MA_009

测试项目

象棋马的移动

测试标题

不构成日字,落点为对方棋子(非老将)

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击对方棋子。

预期输出

不移动棋子。

测试用例10

测试用例编号

CHINESECHESS_ST_MOVE_MA_010

测试项目

象棋马的移动

测试标题

不构成日字,落点无棋子

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击无棋子落点。

预期输出

不移动棋子。

测试用例11

测试用例编号

CHINESECHESS_ST_MOVE_MA_011

测试项目

象棋马的移动

测试标题

落点在棋盘外

重要级别

预置条件

输入

点击马,点击棋子的落点

操作步骤

1、点击自方马;

2、点击棋盘外。

预期输出

不移动棋子。

小结

本节课对通用测试技术中的因果图和决策表进行了较为详细的阐述,大家要注意到因果图方法有其适用范围和一定的局限性。


附件1: