第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  内部实现层

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

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

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

测试空间与测试驱动接口设计 step to step相关推荐

  1. 测试驱动设计_测试驱动的设计,第2部分

    这是一个由两部分组成的文章的第二部分,该文章探讨了在编写代码之前,如何使用TDD可以使编写测试的过程中出现更好的设计. 在第1部分中 ,我使用后测试开发(在编写代码后编写测试)编写了一个理想数查找器版 ...

  2. python行为驱动测试开发_行为驱动开发在 Python 开发测试中的应用

    行为驱动开发 (BDD) 简介 行为驱动开发是什么? 说到行为驱动开发(BDD),无可避免的要提到敏捷里面的测试驱动开发(TDD),TDD 的主要思想是"代码即文档",其倡导的流程 ...

  3. 测试驱动开发 测试前移_测试驱动开发:它是什么,什么不是。

    测试驱动开发 测试前移 by Andrea Koutifaris 由Andrea Koutifaris Test driven development has become popular over ...

  4. PXA270处理器PCMCIA/CF接口设计及WinCE 5.0驱动实现 ----eetchina.com

    PXA270处理器PCMCIA/CF接口设计及WinCE 5.0驱动实现 ----eetchina.com 2008年09月19日 星期五 21:20 本文以Intel PXA270开发平台Mains ...

  5. 数字系统的测试与可测试设计(DFT)

    数字系统的测试与可测试设计(DFT) 背景介绍 1 Defects 1.1 名词解释 1.2 缺陷种类 1.2.1 Physical Defects物理缺陷 1.2.2 Shorting Defect ...

  6. 软件质量保证与测试 实验一:白盒测试用例设计 实验报告,白盒测试和黑盒测试实验报告...

    白盒测试和黑盒测试实验报告 (24页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 软件质量保证与测试实验指导计算机工程学院测试环境配置1 ...

  7. react测试组件_测试驱动的开发,功能和React组件

    react测试组件 This article is part of my studies on how to build sustainable and consistent software. In ...

  8. android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试

    主要内容 稳定性测试是什么 Monkey 介绍 自动化 Monkey 稳定性测试是什么 通过随机点击屏幕一段时间,看看 app 会不会奔溃,能不能维持正常运行. Monkey 介绍 Monkey 是一 ...

  9. oracle xtts 测试,XTTS 跨平台表空间迁移测试

    简介 这两天一直在研究xtts(跨平台表空间迁移的方法),因为一是网上的资源不是很多,二是个人感觉这是个很实用的迁移技巧.下面就和大家来分享一下我个人做的测试过程吧. 1.搭建测试环境 跨平台表空间迁 ...

  10. XTTS 跨平台表空间迁移测试

    简介            这两天一直在研究xtts(跨平台表空间迁移的方法),因为一是网上的资源不是很多,二是个人感觉这是个很实用的迁移技巧.下面就和大家来分享一下我个人做的测试过程吧. 1.搭建测 ...

最新文章

  1. ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客
  2. 微软小动作气炸用户:装Win10系统,现在得被迫注册账号,脱机安装选项被悄悄删除...
  3. 2021网络药理学研究的免费数据库、在线平台与软件工具汇总整理介绍
  4. mongodb插入速度每秒_MongoDB事实:商品硬件上每秒插入80000次以上
  5. 详解rel=”nofollow”的用法与意义
  6. webpack 的webpack.config文件配置css-loader,style-loader注意的问题
  7. undo_management设置与隐含参数*._offline_rollback_segments和*._corrupted_rollback_segments关系...
  8. 红橙Darren视频笔记 OKHttp基本使用 对http框架进行封装 链式调用
  9. 会话和连接的区别_websocket和ajax区别,只有这5点不同
  10. srsLTE源码学习:RRC:(Radio Resource Control):无线资源控制协议
  11. android spi串口调试,PIC入门3,SPI通信和串口调试实验
  12. java yml文件_yml文件内容映射到pojo
  13. vue自带的实例属性和方法($打头)
  14. 金仓数据库 Oracle 至 KingbaseES 迁移最佳实践 (4. Oracle数据库移植实战)
  15. phpstudy安装部署DVWA
  16. 泡沫一般是执行什么标准呢?
  17. scan函数函数用法详解
  18. c语言课程设计歇后语,拼音字母c开头的歇后语
  19. Android超人气系列动态壁纸下载(免费)
  20. 佳能(Canon)打印机初始化备忘录

热门文章

  1. 腾讯2016实习招聘-安全岗笔试题答案详细解释
  2. 工作英语: Meetings
  3. 画一个神经元的结构简图,神经元的简图画法
  4. 一次简单的PC游戏汉化
  5. 【改写历史】--历史谁书写?谁将改写历史?
  6. matplotlib使用笔记
  7. java 调用 yed 绘制 流程图_让人一见倾心的流程图绘制软件yEd
  8. 假如王思聪是个程序员...
  9. 【蓝桥杯】基础练习 十六进制转八进制
  10. PHP实现的7组经纬度与距离的计算函数