软件测试

臧艳辉

目录

  • 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

17.2  白盒测试技术——逻辑驱动测试

17.2.1  什么是逻辑驱动测试 

逻辑驱动覆盖测试是传统的白盒测试方法,主要是针对程序的内部逻辑结构设计测试用例的技术,它通过运行测试用例达到逻辑覆盖的目的。

包括以下6种类型的逻辑覆盖:

Ø 语句覆盖

Ø 判定覆盖

Ø 条件覆盖

Ø 判定一条件覆盖

Ø 条件组合覆盖

Ø 路径覆盖

接下来以下面的函数为例进行介绍:

void DoWork(int xint yint z)

{

int k=0j =0;

if ((x>3) && (z<10) ) {

k=x*y-1;

j=sqrt(k) ;

}

if((x==4) || (y>S)) {

j=x*y+10;

}

j=j%3;

}

函数的流程图如图17-1所示。

17-1 例子流程图

为了做简略说明,分别对各个判断的取真、取假分支编号为bcde

提示:绘制流程图是软件测试中比较常用的方法,该流程图可以辅助分析和设计测试用例。

对于比较复杂的模块,采用绘制流程图的方法更加便于解决问题。

17.2.2  语句覆盖 

语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。

根据概念,为了对上面的函数进行语句覆盖,只要设计一个测试用例就可以覆盖3个执行语句块中的语句。

针对程序的判断语旬,可在入口处设计测试用例。

测试用例输入为:{x=4y=5z=5}

程序执行的路径是:abd

如果程序只运行上面的测试用例,虽然可以执行模块中的所有语句,但并不能检查判断逻辑是否有问题。例如在第一个判断中错误地把&&写成了||,则上面的测试用例仍可以覆盖所有的执行语句。可以说语句覆盖率是最弱的逻辑覆盖准则。

17.2.3  判定覆盖 

判定覆盖(也称为分支覆盖),设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少各执行一次。

根据上面的定义,对于上面的程序,只要设计两个测试用例则可以满足条件覆盖的要求。

测试用例的输入为:{x=4y=5z=5}

{x=2y=5z=5}

上面的两个测试用例虽然能够满足条件覆盖的要求,但是也不能对判断条件进行检查。例如把第二个条件y>5错误地写成y<5,上面的测试用例同样满足了分支覆盖。

17.2.4  条件覆盖 

设计足够多的测试用例,运行所测程序,使程序中每个判断内的每个条件的各个可能取值至少执行一次。

为了清楚地设计测试用例,对例子中的所有条件取值加以标记。

例如:

对于第一个判断:条件x>3,取真值为T1,假值为-T1

条件z<10,取真值为T2,假值为-T2

对于第二个判断:条件x=4,取真值为T3,假值为-T3

条件y>5,取真值为T4,假值为-T4

则可以设计测试用例如表17-1所示。

17-1 测试用例(1

测试用例

通过路径

条件取值

覆盖分支

x=4y=5z=5

abd

T1T2T3-T4

bd

x=2y=5z=5

ace

 -T1T2-T3-T4

ce

x=4y=5z=15

acd

T1-T2T3T4

cd

17-1所示的测试用例不但覆盖了所有分支的真假两个分支,而且覆盖了判断中的所有条件的可能值。但是如果设计了表17-2的测试用例,则虽然满足了条件覆盖,但只覆盖了第一个条件的取假分支和第二个条件的取真分支,并不满足分支覆盖的要求。

17-2 测试用例(2

测试用例

通过路径

条件取值

覆盖分支

x=2y=6z=5

acd

 -T1T2-T3T4

cd

x=4y=5z=5

acd

 T1-T2T3-T4

cd

17.2.5  判定-条件覆盖

设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件所有可能取值至少执行一次,并且每个可能的判断结果也至少执行一次,换句话说,即要求各个判断的所有可能条件取值组合至少执行一次。

根据定义只需设计表17-3中的两个测试用例便可以覆盖8个条件值以及4个判断分支。

17-3 测试用例(3

测试用例

通过路径

条件取值

覆盖分支

x=4y=6z=5

abd

T1T2T3T4

bd

x=2y=5z=11

ace

 -T1-T2-T3-T4

ce

判定条件覆盖从表面来看,它测试了所有条件的取值,但是实际上某些条件掩盖了另一些条件。

例如,对于条件表达式(x>3)&&(z<10)来说,必须两个条件都满足才能确定表达式为真。如果(x>3)为假,则一般不再判断是否z<10了。对于第二个表达式(x==4) || (y>5)来说,若x==4测试结果为真,就认为表达式的结果为真,这时不再检查(y>5)条件了。因此,采用分支条件覆盖,逻辑表达式中的条件结合错误不一定能够查出来。

17.2.6  条件组合测试 

设计足够多的测试用例,运行所测程序,使程序中每个判断的所有可能条件取值组合至少执行一次。

现在对例子中的各个判断条件取值组合加以标记如下:

x>3z<10 记做T1 T2,第一个判断的取真分支。

x>3z>=10 记做T1 -T2,第一个判断的取假分支。

<=3z<0  记做-T1 T2,第一个判断的取假分支。

x<=3z>=10 记做-T1 -T2,第一个判断的取假分支。

x=4y>5 记做T3 T4,第二个判断的取真分支。

x=4y<=5 记做T3 -T4,第二个判断的取真分支。

x!=4y>5 记做-T3 T4,第二个判断的取真分支。

x!=4y<=5 记做-T3 -T4,第二个判断的取真分支。

根据定义取4个测试用例,就可以覆盖上面8种条件取值的组合。测试用例如表17-4所示。

17-4 测试用例(4

测试用例

通过路径

覆盖条件

覆盖组合号

x=4y=6z=5

abd

T1T2T3T4

15

x=4y=5z=15

acd

T1-T2T3-T4

26

x=2y=6z=5

acd

 -T1T2-T3T4

37

x=2y=6z=15

ace

 -T1-T2-T3-T4

48

上面的测试用例覆盖了所有条件可能取值的组合,覆盖了所有判断的可取分支,但是却丢失了一条路径,而且需要设计较多的测试用例。

17.2.7  路径覆盖 

路径测试就是设计足够多的测试用例,覆盖被测试对象中的所有可能路径。

在表17-4所示的测试用例中再添加一个测试用例则可对程序进行全部的路径覆盖,如表17-5所示。

17-5测试用例(5

测试用例

通过路径

覆盖条件

x=4y=6z=5

abd

T1T2T3T4

x=4y=5z=15

acd

T1-T2T3-T4

x=2y=6z=15

ace

 -T1-T2-T3-T4

x=5y=6z=5

ace

 -T1-T2-T3-T4