测试空间与测试驱动接口设计 step to step

第1章中介绍了可变数据、测试空间、设计空间以及异常空间等概念。本章将对测试空间作进一步分析,探讨一些在第1章的理论引领下的对软件测试有实际作用的内容。

软件测试中,测试用例设计需要寻找测试空间,因此需要寻找出软件中的可变数据,并分析可变数据间的因果关系以得出软件的测试空间。所以本章将首先介绍一些常见的可变数据的访问方式、变化形式、表现形式以及可变数据的分层模型等。

在安全性测试中,许多的安全性准则和测试空间相关,因此本章也会介绍测试空间中的安全性准则。

敏捷阵营提出了测试驱动开发的概念,通过测试空间的分析,实际上测试可以驱动软件设计,本章将以测试空间用于驱动软件接口设计的内容为例讲解这方面的应用。

2.1  可变数据的访问方式与变化形式

2.1.1  访问方式

程序中对可变数据的访问有读、写、执行三种方式。

例如,从配置文件中读取的配置数据,在程序内通常都是进行只读访问的,属于以读形式访问的可变数据。

如果配置数据在程序的运行过程中会被修改,那么又属于以写形式访问的数据。

以执行方式访问的可变数据通常是程序的执行代码,如动态加载的模块、下一版本中可能发生修改或增加的代码等。

变化形式

1. 随时间而变化

随时间而变化是指数据随着时间的改变而改变。随时间而变化的数据属于可变数据最常见的变化形式,例如用户从界面输入的数据,每次输入的数据都存在变化的可能,属于随时间而变化的可变数据。

2. 随空间而变化

随空间而变化是指由于软件在不同的空间运行而导致的数据变化。程序需要读取硬件配置,随不同机器的硬件配置不同,这种变化是由空间的不同而造成,属于随空间而变化的可变数据。

例如,一个工具软件需要读取网卡的物理地址,同一机器上的网卡物理地址在没有更换网卡的情况下是不会随时间而改变的,但是不同机器上的网卡物理地址是不同的,这就是典型的随空间而改变的可变数据。

3. 数量和取值的变化

可变数据在数量和取值上的变化形式有修改、增加、减少三种形式。

修改是指同一可变数据的取值的修改,比如界面输入的数值,如果每次输入的值都不同,表明取值发生了变化,属于以修改形式变化的数据。

增加是指多个同类型数据在数量上的增加,例如命令行程序中执行的命令、下一版本可能增加新的命令等,属于以增加形式变化的数据。

减少是指多个同类型数据在数量上的减少,有些数据在程序运行中或者下一版本中存在被删除的可能,属于以减少形式变化的数据。

2.2  可变数据的表现形式

可变数据在实际情况中的表现形式多种多样,通常是随时间和空间的不同而发生变化,常见的有以下几种形式。

2.2.1  用户从界面输入

从界面输入的数据很容易理解,比如从界面的编辑框中输入、在组合框中进行选择、点击按钮……这些都会引起程序内部的数据变化,都属于可变数据的范畴。这里说的界面不限于图形界面,如命令行界面等都属于输入界面。

2.2.2  文件中的数据

文件中的数据是指那些在程序需要处理的文件数据,比如配置文件、程序要读取的其他数据文件等,这些文件中的数据都属于可变数据。

如果文件是在软件运行过程中生成的,但是软件又要重新读取或修改它,那么这个文件中的数据也属于可变数据。

2.2.3  消息、信号

从外部发给程序的消息、信号会对程序的运行产生影响,实际上它改变了程序内部的数据,属于可变数据的范畴。

2.2.4  网络通信的数据

网络通信数据是最具变化的一种可变数据,它所产生的测试空间非常巨大,这种可变数据几乎可以被认为是一个任意长度的二进制数据流。

当使用网络通信数据构造测试空间时,不能以一个完整报文头的数据作为可变数据,而应该以任意一段时间内收到的数据作为可变数据。

2.2.5  IO硬件设备中的数据

比如从一些存储设备或各种存储卡等IO设备中读取的数据,有些数据是固定在IO设备中的,会随空间而改变,有些数据是由IO设备传送或者可能会随时间发生修改的,这些数据存在变化的可能,会引起程序内部数据的变化。

2.2.6  程序内部的函数参数、变量

程序内部的函数参数、变量等数据其实也属于可变数据,它们是由其他可变数据驱动而发生改变的,也是属于可测试的数据。

2.2.7  程序执行代码

程序内部的执行代码有时候也会发生变化,比如由于版本升级等原因,导致接口或函数的增删或修改,这种情况下程序执行代码也属于可变数据的范畴。

2.2.8  系统中的一些全局数据

程序运行的系统中,操作系统内部的一些全局数据,可能会对程序运行造成影响;对于被测试的程序来说,同样属于可变数据,属于测试空间的内容。程序中使用的很多系统调用都需要操作系统中的全局数据,因此系统调用是程序使用全局数据的表现形式,而真正的全局数据则隐藏在系统中。

2.2.9  数据库中的数据

如果程序要访问数据库,并且数据库中的数据可能发生更改的话(如有多个应用程序并行访问数据库),那么数据库中的数据也属于可变数据。

2.2.10  动态加载模块

很多服务器软件在运行过程中,可以动态加载模块执行,动态加载的模块也属于可变数据的范畴。

2.2.11  系统资源

系统中的任何资源都属于可变数据的范畴,如果软件向系统申请了资源,意味着系统的可用资源发生变化。

2.3  可变数据的分层

根据可变数据在程序处理过程中的不同抽象,可变数据可以分为三层:外部输入层、接口层、实现层。

2.3.1  外部输入层

外部输入层的输入数据形式多种多样,包括用户界面输入和一些隐性输入:如文件输入、网络通信输入、外部消息输入和系统全局数据输入等。

需要说明的是,外部输入层的数据有时会随时间变化而变化(比如网络通信输入),需要计算一段时间内输入的信息,并将其作为测试空间的可变数据来构建测试空间。一个建立在TCP/IP协议之上的应用程序,必须将一段时间内收到的可能具有若干段TCP/IP报文头的数据作为可变数据,并且首尾报文可能是不完整的。而不能以一个完整的TCP/IP报文作为可变数据,否则构建出的测试空间就会不完整。

程序的中间处理结果也可能变成外部输入层的内容。比如一个程序如果需要写一个数据文件来记录一些信息,然后过一段时间又要从数据文件读回信息,那么在两次操作之间是有可能发生数据文件内容修改的。

因此,一切有可能被用户修改的数据都要被当作外部输入层的可变数据,这样构造测试空间时就不容易产生遗漏了。

系统测试主要就是依据外部输入层的测试空间来进行的。在系统测试中,一般需要考虑各个可变数据间的组合关系,因此实际使用的外部测试层的可变数据构成的测试空间在理论上是完备的测试空间。

2.3.2  接口层

模块使用的是可由模块外部改变的数据为接口层的可变数据。接口层的可变数据一般都是由外部输入层的可变数据转换而来。如接口参数、各种隐性可变数据(如内部消息和信号)、全局的数据结构以及全局变量等都属于接口层的可变数据。

集成测试主要是在接口层的测试空间进行的。如果仅以模块为单位来进行集成测试,而不考虑模块间可变数据的组合关系,那么实际测试使用的测试空间将小于整个测试空间,最终的测试结果是不完备的。

2.3.3  内部实现层

内部实现层的可变数据主要是模块内部的各个功能单元的可变数据。一般由接口层的可变数据转换而来,包括函数参数、函数实体(通常用函数指针表示)、模块内部的数据结构、变量、函数内部变量等。

单元测试主要是测试内部实现层的测试空间。单元测试时,由于未考虑单元间可变数据的组合关系,因此实际使用的测试空间也是不完备的。

这几层可变数据中,接口层数据是由系统层和外部输入层转换而来的,而内部实现层则是由接口层转换而来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值