构建大型程序测试的第一个步骤:模块测试

测试用例的设计

在为模块测试设计测试用例时,需要两种信息:模块的规格说明和模块源代码;
模块测试总体上面向白盒测试;
模块测试的测试用例设计过程:使用一种或多种白盒测试方法分析模块的逻辑结构,然后使用黑盒测试方法对照模块的规格说明以补充测试用例。

增量测试 and 非增量测试

执行单元测试过程中,有两点需考虑:

其一、如何设计一个有效的测试用例集;

其二、将模块组装成工作程序的方式。

前者涉及的内容在上篇已叙述过,而后者,涉及模块测试用例编写的形式、可能用到的测试工具类型、模块编码和测试的顺序、生成测试用例的成本以及调试的成本等。

它有两种具体实现方法:增量测试(自顶向下和自底向上的开发或测试过程)、非增量测试。

 ⊙增量测试:将测试的模块组装到测试完成的模块集合中,再进行测试。

 ⊙非增量测试:先要独立地测试每个模块,再将这些模块组装成完整的程序。且测试单独的模块时,需一个特殊的驱动模块和一个或多个桩模块。
  • 驱动模块:人们编写的一个小模块,用来将测试用例驱动或传输到被测模块中,也可以用测试工具替代;还必须向测试人员显示该模块的结果。

  • 桩模块:被测模块可能调用到了其他的模块,所以还必须使用一个额外的组件,即:特殊模块,用于模拟被调用模块的功能。

  文尾,需提及一个结论:增量测试要更好一些。原因如下:

⊙非增量测试所需的工作量要多一些;(桩模块)

⊙增量测试可以较早发现模块中与之不匹配接口、不正确假设相关的编程错误;

⊙增量测试,调试会进行得比较容易些;(调试)

⊙增量测试会将测试进行得更彻底;(可能会诱发先前测试完的模块出现新缺陷,且会经受更多的检验)

⊙非增量测试所占用的机器时间显得少一些;

⊙模块测试阶段开始时,非增量测试,就会有更多的机会进行并行操作,即:所有的模块可以同时测试。

两种增量测试方法:自顶向下测试 and 自底向上测试

自顶向下测试,是从程序的顶部或初始模块开始。

⊙测试开始之后,挑选哪一个后续模块进行增量测试没有惟一正确的方法;

⊙惟一的原则是:要成为合乎条件的下一个模块,至少一个该模块的从属模块(调用它的模块)事先经过了测试。

⊙该测试策略里边最关键的可能就是编写桩模块了。

⊙它涉及到的几个关键点概括为:桩模块的返回信息一定要给予此次调用所希望的返回值,否则调用模块将会发生失效或是产生一个混乱的结果;早期,测试数据要通过其一个或多个桩模块提交给模块的。

⊙需要指出一点,就是测试完一个模块后,就用一个实际的模块代替其中的一个桩模块,而该模块需要的桩模块也被添加起来。需要注意的是:不存在最佳的模块序列。但尽量让包含I/O操作的桩模块和重要的桩模块添入。

自底向上测试,是开始于程序的终端模块,此类模块不再调用其他任何模块。

⊙测试完这些模块之后,同样没有最佳的方法来挑选要进行增量测试的下一个模块;

⊙惟一正确的原则是:要成为合乎条件的下一个模块,该模块所有的从属模块(它调用的模块)都已经事先经过了测试。

⊙需要指出的是,如果终端模块是多个的话,既可以进行串行测试,也可以进行并行测试。且每一个模块都需要一个特殊的驱动模块,即:包含着有效的测试输入、调用被测模块且将输出显示出来(或将实际输出与预期输出作比较)的模块。

⊙对于测试序列也同自顶向下测试的一样。

《the art of software testing》第五章的更多相关文章

  1. Linux内核设计与实现 第五章

    1. 什么是系统调用 系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备 ...

  2. linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍

    <linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功 ...

  3. 《linux内核设计与实现》第一章

    第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. ——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. — ...

  4. Linux内核设计与实现 第十七章

    1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...

  5. linux及安全《Linux内核设计与实现》第二章——20135227黄晓妍

    第二章:从内核出发 2.1获取源代码 2.1.1使用git Git:内核开发者们用来管理Linux内核源代码的控制系统. 我们使用git来下载和管理Linux源代码. 2.1.2安装内核源代码(如果使 ...

  6. Linux内核设计与实现 第三章

    1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的 ...

  7. 《linux内核设计与实现》第二章

    第二章 从内核出发 一.获取内核源码 1.使用Git(linux创造的系统) 使用git来获取最新提交到linux版本树的一个副本: $ git clone git://git.kernel.org/ ...

  8. Linux内核设计与实现 第四章

    1. 什么是调度 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程). 这个管理程序就是调度程序,功能: 决定哪些进 ...

  9. Linux内核设计与实现第五周读书笔记

    第十八章 调试 18.1准备开始 需要的只是: 一个确定的bug.大部分bug通常都不是行为可靠而且定义明确的. 一个藏匿bug的内核版本. 相关的内核代码的知识和运气. 18.2内核中的bug 内核 ...

  10. 【读书笔记】Linux内核设计与实现(第一章&第二章)

    http://pan.baidu.com/s/1hqYAZNQ OneNote做的笔记没法儿带着格式一起导进来.所以上传到百度云,麻烦老师下载一下了. 下次不再用OneNote.

随机推荐

  1. HttpClient超时设置

    场景:最近并发较高,看到响应时间6s的时候,心里咯噔一下,我记得我设置的超时时间是5s啊.   原来读取超时时间没生效,只生效了连接超时时间. ConnectionPoolTimeoutExcepti ...

  2. ecshop其他页面判断是智能手机访问也跳转到ECTouch对应手机版页面(转)

    ecshop 其他页面(商品详情页.商品分类页.团购页.优惠活动页.积分商城) 判断如果是智能手机访问跳转到ECTouch1.0手机版对应页面 方法 首先在ecshop 根目录下 includes/l ...

  3. 【转】Jmeter:图形界面压力测试工具

    Jmeter是一款强大的图形界面压力测试工具,完全用Java写成,关于Jmeter的介绍,网上其实有不少的文章,我原本是不想再重复写类似文章的,但我发现有些很关键性的,在我们测试中一定会用到的一些设置 ...

  4. 分布式缓存系统 Memcached 工作线程初始化

    Memcached采用典型的Master-Worker模式,其核心思想是:有Master和Worker两类进程(线程)协同工作,Master进程负责接收和分配任务,Worker进程负责处理子任务.当各 ...

  5. Java中的阻塞和非阻塞IO包各自的优劣思考(经典)

    Java中的阻塞和非阻塞IO包各自的优劣思考 NIO 设计背后的基石:反应器模式,用于事件多路分离和分派的体系结构模式. 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个 ...

  6. python学习(十五) 屏幕抓取

    15.1 屏幕抓取 15.1.1 Tidy和XHTML解析 Tidy:用来修复不规范且随意的HTML文档的工具. 为什么用XHTML: 和旧版本的HTML之间最主要的区别:HTML可能只用一个开始标签 ...

  7. ORACLE GoldenGate在Windows与AIX平台ORACLE的单向、双向数据传输配置及其测试

    第1章...... GoldenGate概述 1.1         GoldenGate技术原理 1.2         GoldenGate可靠的复制 1.3         GoldenGate ...

  8. Python多线程-守护线程

    守护线程:守护着非守护线程,守护线程和非守护线程同时运行,当非守护线程运行结束后,无论守护线程有没有运行完,脚本都会停止运行 首先看一段普通的多线程实例 # -*- coding:utf-8 -*- ...

  9. 微信小程序简单步骤记录

  10. Net Framework 4.0 和.Net Framework 4.0 Client Profile

    Net Framework 4.0 和.Net Framework 4.0 Client Profile区别: .Net Framework 4.0毫无疑问就像是.Net Framework 2.0一 ...