当前课程知识点:软件理论与工程 >  第5章 软件测试 >  5.2 测试传统的应用系统 >  5.2 测试传统的应用系统

返回《软件理论与工程》慕课在线视频课程列表

5.2 测试传统的应用系统在线视频

下一节:5.3 测试面向对象的应用系统

返回《软件理论与工程》慕课在线视频列表

5.2 测试传统的应用系统课程教案、知识点、字幕

大家好

这一个节我们来分享一下

如何测试传统的应用系统

测试传统的应用系统

我们可以使用白盒测试方法

黑盒测试方法

可以使用基于模型的测试

另外我们还可以应用一些软件测试模式

也就是利用的以往成功测试模式

然后来进行我们的软件的测试

在白盒测试当中

我们要学习基本路径测试

还有控制结构测试

在黑盒测试当中

我们学习一下基于图的测试方法

等价类划分

边界值分析

正交数组测试相关的概念

下面我们开始看一下

测试传统的应用系统

什么是一个“好的”测试

好的测试具有较高发现错误的可能性的能力

好的测试是不冗余的

也就是我们可以使用简单

少量有效的测试达到我们的目的

好的测试应该是“最佳品种”的

也就是非常有代表性的测试

而且好的测试应该既不太简单也不太复杂

通常我们任何的工程化的产品

(以及大多数的东西)

都可以采用两种方式进行测试

也就是内部视角和外部视角

当我们了解已经设计产品要完成的指定功能

可以执行测试以显示每个功能是可操作的

同时查找在每个功能中的错误

这种就主要说外部视角对应我们的测试

是黑盒测试

如果我们了解产品的内部工作情况

可以执行测试

以确保我们的所有的齿轮

都是可以有效的吻合的

也就是从内部视角进行测试

我们这种叫做白盒测试

即内部操作依据规格说明执行

而且对所有的内部构件

已进行了充分的测试

当我们设计测试用例的时候

我们要知道

所有的错误和bug

都潜伏在角落或者是边界处

我们设计测试用例的目标是要发现错误

而且以一种完整的方式

以最小的努力和时间

可以发现尽可能多的错误

我们看一个例子

这样一个程序结构中间有选择

有循环

如果我们想把所有的执行过程

执行路径都测试到

也就是我们要使用一种穷举法测试

这个循环结构的循环小于20次

在这个循环中

这个程序中大约有10的14次方个

可能的执行路径的组合

如果每毫秒执行一个测试

这个工作也要持续3170年

所以大家可以看出来

穷举法的测试是不可能完成的任务

那么通常我们会选择一些

代表性的路径进行测试

所以我们刚才提到了

我们软件测试当中

一共有两种大的测试方法的类别

也就是白盒测试方法和黑盒测试方法

我们在策略的基础上

使用不同的测试方法来进行我们的软件测试

白盒测试也称为玻璃盒测试或者结构化测试

是一种测试用例的设计方法

它利用构件级设计的一部分

所描述的控制结构来生成测试用例

利用白盒测试方法导出的测试用例

可以保证一个模块所有的独立路径

至少被执行一次

而且对所有的逻辑判断

我们都要测试其取真和取假的两个方面

另外在上下边界

及可操作的范围内执行所有的循环

最后要检验内部的数据结构以确保其有效性

在白盒测试当中会有一个概念

叫做基本路径测试

基本路径测试允许测试用例的设计者

计算出过程设计的逻辑复杂性的测量

并以这种测量为指导来定义执行路径的基本集合

执行该基本集合导出的测试用例

保证程序中的每一条语句至少执行一次

在基本路径的时候

我们会涉及到一个概念叫做环路复杂性

很多行业研究已经表明

环路复杂性越高

发生错误的概率也就越大

从这张图上我们可以看出来

这张图中的右侧灰色的部分

环路复杂性比较高

也是这个区域的模块更容易出错

那么怎么设计基本测试路径

我们下面来看一下这个例子

这样一个程序控制结构的程序

我们要导出它的独立路径

我们要经过几个步骤

首先我们要计算它的环路复杂性

这个控制结构的环路复杂性是4

因为环路复杂性计算的方法

是我们的判断的数量+1

或者是封闭区域的数量+1

那么这张图的环路复杂性是4

那我们就设计4个有代表性的测试路径

来测试这个程序

那么这4个代表性的测试路径是

第一条路径走过模块1 2 3 6 7 8

第二条路径走1 2 3 5 7 8

第三条测试基本路径走1 2 4 7 8

第四条路径走1 2 4 7 2 4

再最后走7和8

我们根据这样环路的复杂性

选择测试集合当中的基本路径的数量

然后导出我们的基本测试路径

我们在这里面要注意的问题是

每条新的路径需要引入一条新的边

另外我们要注意的一个问题是

基本测试路径的集合并不是一个唯一的

那么关于导出测试用例

我们要总结一下它的步骤

第一以设计或者是代码作为基础

画出它对应的流图

第二根据流图确定环路复杂性

环路复杂性决定了

独立路径的基本集合当中路径的数量

确定了线性的独立路径的基本集合

然后准备测试用例

使得基本集合中的每条路径都执行

另外测试白盒测试的方法图矩阵法

图矩阵是一种方阵

它的大小或者是行和列的数量

和流图当中的结点数量是一致的

每行和每列都对应着已标识出来的结点

矩阵中的项对应于结点之间的连接

也就是我们图中的边

通过在每个矩阵项中加入一个连接的权重

图矩阵就可以成为有效的测试

评估程序结构的一个强有力的工具

那在我们图中的例子当中有这样一个程序的流图

那么我们根据所有的节点1 2 3 4 5

这样设计了一个矩阵

当某个结点比如

结点2和结点3之间通过d这个边来连接

那在我们的图矩阵当中

2和3对应的位置上就标上了d这个边

那么图矩阵的一个好处就是可以

标明我们的边的权重

可以根据它权重的高和低

我们来设计我们的测试用例

另外一个是控制结构测试

基本路径测试是控制结构测试的技术之一

虽然基本路径测试简单且高效

但其本身并不充分

其他的控制结构测试的变体

拓宽了测试的覆盖率

并提高了白盒测试的质量

比如控制结构测试包括条件测试

条件测试通过检查程序模块中包含的逻辑条件

来进行测试用例设计

另外一个控制结构测试是数据流测试

根据程序中变量的定义

和使用的位置来选择程序的测试路径

我们下面看一下什么叫做数据流测试

数据流测试

测试方法根据程序中变量的定义

和使用位置这两个重要的结点

来选择程序测试的路径

假设程序中每个语句被分配了一个

唯一的语句编号

且每项功能不修改其参数和全局的变量

对于语句号为S的语句

我们可以定义为

它的定义的地方叫做DEF(S)

也就是语句S包含了X的定义

USE(S)也就是语句S包含了X的使用

那么变量X定义使用的这样的一个链就叫做

变量X的(DU)链

(DU)链具有形式这样[X, S, S’]

其中S和S’是语句号

在S处是变量X的定义

在S’是变量X的使用

那么我们应该在语句S中的X的定义

和X的使用

首先他们要都存在

另外我们设计测试用例

可以经过我们的X定义和X的使用

好 我们下面看一下循环测试

我们在软件的程序结构中

有一类很典型的结构就是循环结构

循环结构可以分为图中的简单循环

嵌套循环

串联循环和非结构化循环

那么对于简单循环

我们就是跳过整个循环是一次测试

只执行一次通过循环是一次测试

两次通过循环是一次测试

m次通过循环m小于循环的次数n

另外在n-1 n和n+1次通过循环

我们可以设计这样5个测试的用例

其中n是允许通过循环的最大次数

那么对于嵌套循环怎么测试

我们已经掌握了简单循环的测试方法

那么我们下面看一下嵌套循环

嵌套循环从最内层的循环开始

将其他的循环设置为最小值

对最内层的循环执行简单循环测试

而使外层的循环迭代次数值最小

并对范围以外或不包括在内的值增加其他测试

然后由内向外构造下一个循环的测试

但使其他的外层循环具有最小值

并使其他的嵌套循环为“典型”值

继续这样的过程

直到测试完成所有的循环

还有一种是串联循环

如果串联循环的每个循环是彼此独立的

则使用简单的循环方法就可以测试

如果循环是不彼此独立的

我们就建议使用嵌套循环的方式来进行测试

那么什么叫做不彼此独立

比如如果两个循环串接起来

第一个循环的循环次数为

第二个循环的初始值

那么这两个循环就不独立

在这种情况下

我们就不能使用简单循环来测试

而应该使用嵌套循环的方法来测试

那么对于第四种非结构化循环

我们通常希望重新设计这种程序结构

尽量不出现非结构化循环这种程序

看完了白盒测试

我们下面看一下黑盒测试

黑盒测试也称为行为测试或功能测试

侧重于软件的功能需求

黑盒测试是软件工程师设计出

可以测试程序的所有的功能需求的输入条件集

黑盒测试并不是白盒测试的替代品

而是作为发现其他类型错误的辅助方法

白盒测试在测试过程早期执行

黑盒测试在应用的测试的后期来执行

在黑盒测试中我们设计测试输入

然后通过我们的程序产生输出

然后我们比较测试的输出和预期的输出

来确定黑盒测试的结果

黑盒测试故意不考虑控制结构

而侧重于信息域

黑盒测试重点要测试如何测试功能的有效性

如何测试系统的行为和性能

哪种类型的输入会产生好的测试用例

系统是否对特定的输入值特别敏感

如何分离数据类的边界

系统能承受什么样的数据速率和数据量

特定类型的数据组合

会对系统运行产生什么样的结果

什么样的影响等等

基于图的测试方法

我们有一种测试方法是基于图的测试方法

它的步骤是

第一步

我们要理解

软件中建模的对象和对象之间的关系

然后设计覆盖图的一系列测试用例

使得图中的对象和关系都被测试到

并发现错误

比如我们右面这张图

就画出了一种基于图的测试方法

它设计了对象1 对象2 对象3

并显示了它们之间的关系

那么我们应该设计测试用例

使得对象和对象之间的关系都可以被测试到

再有一种是等价类划分方法

等价类划分是一种黑盒测试方法

它将程序的输入划分为若干个数据类

每个数据类内部是一类相似的输入

我们从每个数据类从中生成测试用例

理想的测试用例可以单独发现一类错误

(例如所有的字符数据处理不正确)

否则在观察到一般的错误之前

需要运行许多的测试用例

而等价类划分的测试用例设计时

我们就基于输入条件的等价类

来进行设计测试用例 进行评估

比如这张图显示的等价类划分

划分了几种等价类

其中包括用户的查询

鼠标的点击

输出的格式 提示和数据等等

我们等价类可以有以下几种情况

我们在这里举一个例子

比如有效的数据的等价类包括用户提供的命令

对系统提示的响应

文件名

计算数据

物理参数

边界值

初始值

输出数据的格式化

对于出错信息的响应

还有图形数据等等

那么无效的数据的等价类

还应该作为我们测试的范围

程序边界处以外的数据

物理上不可能的数据

有错误的地方提供的适当的值等等

除了等价的划分

我们还有一种边界值分析

边界值分析是一种测试用例的设计技术

是对等价类划分的一种补充

我们叫做

Boundary Value Analysis BVA

BVA不是选择等价类的任何元素

而是在等价类的“边缘”上选择测试用例

BVA不仅仅侧重于输入条件

它也从输出域中导出测试用例

根据输出找到输入的边界值相关

进行测试用例设计

另外还有一种是正交数组测试方法

正交数组测试方法适用于输入条件

输入参数的数量不多

且每个参数可取的值有明确的界定的时候

比如在图中我们有x y z这几种输入

那么图中左边的图

和右边的这个图的立方体中

显示的x y z的分布

大家可以看出来不同

我们正交数组的测试方法是

根据x y z的分布

使得它在这个正交空间中

分布比较均匀的输入参数设计

还有基于模型的测试

我们基于模型的测试叫做

Model based testing MBT

基于模型的测试是一种黑盒测试技术

它使用需求模型中的信息

作为生成测试用例的基础

使用UML建模语言的状态图

作为测试用例设计的基础

我们看一下基于模型测试的几个步骤

首先我们分析软件已有的行为模型

或者为它创建一个行为模型

然后我们回顾一下一个行为模型表明了

这个软件将如何对外部事件和刺激做反应

然后我们要遍历行为模型

并标明使得软件在状态之间转换的输入

输入将触发事件

使得状态转换发生

然后我们回顾行为模型

标注当软件在状态之间转换的时候

所期望的预期的输出

然后运行测试用例

来比较实际的输出和预期的输出之间的差距

然后根据需要采取纠正措施

基于模型的测试重点就是

关心我们的软件在整个运行过程中

所进行的状态的变迁

并且有哪些的事件和行为促使了状态的变迁

然后根据这样的状态变迁过程

来设计测试用例刺激软件进行状态变迁

然后比较预期输出和实际输出之间的差距

来进行软件测试的一个方法

我们最后看一下软件测试模式

我们软件测试模式

和我们之前在设计模式中讲过的模式类似

测试模式是以相同方式被描述为设计模式

模式作为描述特定的设计问题

和解决方案的一种机制

但是模式也可以用于

提出其他软件工程的解决方案

不仅仅用于设计领域

比如测试

我们的测试模式可以描述常见的测试问题

和对应的解决方案

可以辅助软件工程师处理这一类问题

并重复的运用设计模式来处理这一类问题

比如我们看一个软件测试模式的例子

叫做场景模式

场景模式是指

一旦进入了单元测试和集成测试

有必要确定该软件

是否会以满足用户的方式来执行

那么场景测试模式描述了一种技术

用于从用户的角度来运行软件

在这个级别上的故障表明

该软件已经无法满足用户的可视化的需求

那么场景模式是

设计模式在软件测试领域的应用的

一个测试模式的代表

那么到这里面

我们对于测试传统的应用系统

已经学习了白盒测试方法

黑盒测试方法

基于模型型的测试方法和软件测试模式

那么关于测试传统的应用系统

我们今天就学习到这里

谢谢大家

软件理论与工程课程列表:

课程概述

-课程概述

第1章 软件与软件工程

-1.1 软件的本质

--1.1 软件的本质

-1.2 软件工程

--1.2 软件工程

-1.3 软件过程结构

--1.3 软件过程结构

-1.4 过程模型

--1.4 过程模型

-1.5 敏捷开发方法

--1.5 敏捷开发方法

-第1章 习题

--第1章 习题

第2章 需求分析

-2.1 需求工程过程

--2.1 需求工程过程

-2.2 需求获取

--2.2 需求获取

-2.3 需求分析

--2.3 需求分析

-2.4 过程建模

--2.4 过程建模

-2.5 面向对象建模

--2.5 面向对象建模

-第2章 习题

--第2章 习题

第3章 软件设计

-3.1 设计概述

--3.1 设计概述

-3.2 设计的概念

--3.2 设计的概念

-3.3 设计模型元素

--3.3 设计模型元素

-3.4 体系结构概述

--3.4 体系结构概述

-3.5 体系结构风格

--3.5 体系结构风格

-3.6 构件级设计

--3.6 构件级设计

-3.7 UI设计

--3.7 UI设计

-3.8 基于模式的设计

--3.8 基于模式的设计

-第3章 习题

--第3章 习题

第4章 UML方法

-4.1 UML概述

--4.1 UML概述

-4.2 UML 及UML中的事物

--4.2 UML 及UML中的事物

-4.3 UML关系和图

--4.3 UML关系和图

-4.4 UML 图细节(上)

--4.4 UML 图细节(上)

-4.4 UML 图细节(下)

--4.4 UML 图细节(下)

-第4章 习题

--第4章 习题

第5章 软件测试

-5.1 软件测试策略

--5.1 软件测试策略(上)

--5.1 软件测试策略(下)

-5.2 测试传统的应用系统

--5.2 测试传统的应用系统

-5.3 测试面向对象的应用系统

--5.3 测试面向对象的应用系统

-5.4 测试web应用系统

--5.4 测试web应用系统

-5.5 测试移动应用系统

--5.5 测试移动应用系统

-第5章 习题

--第5章 习题

第6章 项目管理

-6.1 软件项目估算

--6.1 软件项目估算

-6.2 软件过程管理

--6.2 软件过程管理

-6.3 软件配置管理

--6.3 软件配置管理

-6.4 项目版本控制及调试

--6.4 项目版本控制及调试

-第6章 习题

--第6章 习题

5.2 测试传统的应用系统笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。