模块测试(单元测试)——软件测试的艺术

article/2025/9/30 3:06:22

是大型程序测试的第一个步骤【大型程序即超过500条语句的程序】

了解

模块测试是对程序中的单个程序、子程序/过程进行测试的过程【并非对整个程序】:

  • 关注点在较小单元,是一种管理组合的测试元素的手段
  • 减轻调试的难度,把错误定位到一个小范围
  • 可同时测试多个模块,将并行工程引入软件测试

模块测试的目的在于将模块的功能与定义模块的功能规格说明接口规格说明进行比较。揭示出模块与规格说明的矛盾

测试用例的设计

首先需要模块的规格说明与模块源代码
模块测试总体面向白盒测试【若对大的程序测试,不容易展开,也便于在后续测试中专心于其他类型的错误】
—>测试用例设计:使用一种或多种白盒测试方法分析模块的逻辑结构,然后用黑盒测试方法对照模块规格说明补充测试用例

黑盒方法:黑盒
白盒方法

  • 语句覆盖
    每条语句都执行一次,过于粗超没啥用
  • 判定覆盖
    每条分支路径都至少执行一次(eg:if…else,switch等
    判定覆盖通常满足语句覆盖
  • 条件覆盖
    将一个判断中的每个条件的所有可能结果至少执行一次
  • 判定/条件覆盖
    将一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能结果至少执行一次,将每个入口点至少调一次
  • 多种条件覆盖
    将每个判定中的所有可能的条件结果的组合,及所有的入口点都至少执行一次
增量测试

模块测试中主要考虑两点:

  • 设计测试用例集
  • 将模块组装成工作程序的方式----->涉及到测试用例编写形式、测试工具类型、模块编码、测试的顺序、生成测试用力的成本及调试的成本

这里思考:是否应该先独立测试每个模块,再组装成完整程序;或先把下一步要测试的模块组装到测试完毕的模块集合中再进行测试。第一种称为非增量测试或崩溃测试;第二种称为增量测试或集成

比如现在一程序有六个模块【子程序/过程】,分别以增量/非增量分析:

非增量:每一模块单独进行模块测试根据环境和参与人数,这些模块能同时/按次序进行测试,最后组装【集成】为完整程序

环境:如人机交互、使用批处理计算工具

测试单独一模块需要一个特殊的驱动模块和一个或多个桩模块。如测试B模块,发现在模块B中调用了模块E,就需要一个额外组件,在B调用E时接受B的控制指令。这由桩模块完成【命名为E的特殊模块,模拟完成E的功能】

驱动模块:人为编写的小模块,可将测试用例驱动或者传输到被测模块中【可以用测试工具代替】,最后显示测试模块的结果

增量:将下一步要测的模块先组装到前面测试过的集合。增量方法很多,这里从底部开始

  1. 测试E、C、F,可并行,可串行,需要为每一模块准备驱动模块
  2. 测试B、D,分别将其与E、F组合起来
    将下一个要测试的模块组装到前面已经测试过的模块集合中

分析

  • 非增量测试工作量更大
    对于上面程序,需要准备5个驱动模块和5个桩模块(假设顶部的模块不需要驱动模块)
    自底向上的增量测试需要5个驱动模块,但不需要桩模块
    自顶向下的增量测试需要5个桩模块,但不需要驱动模块
  • 增量测试,可较早发现模块中不匹配接口、不正确假设相关的编程错误
    由于尽早地对模块组合进行了集成测试;而采用非增量测试,只有到了测试过程的最后阶段,模块之间才能“互相看到”
  • 增量测试,调试更容易
    假定存在与模块间接口或假设相关的编程错误,那么,如果使用非增量测试,直到整个程序组装之后,这些错误才会浮现出来。到了这个时候,我们就难以定位错误,因为它可能存在于程序内部的任何位置;相反,如果使用增量测试,这种类型的错误就很容易发现,因为该错误很可能与最近添加的模块有关
  • 增量测试将测试进行得更彻底
    如果当前正在测试模块B,要么是模块E,要么是模块A(取决干测试是从底部还是从顶部开始的)被当作结果而执行。虽然模块E或模块A先前已经进行了完全的测试,但将其作为B的模块测试结果而执行,则会诱发出-一个新的情况,可能会暴露出先前测试过模块中存在的新缺陷。另一方面,如果使用的是非增量测试,对模块B的测试仅影响到其本身。换言之,增量测试使用先前测试过的模块,取代了非增量测试中使用的桩模块或驱动模块。因此,到最后一模块测试完成时,实际的模块经受到了更多的检验
  • 非增量测试所占用的机器时间显得少一些
    如果使用自底向上的方法测试A,在执行A的过程中,模块B、C、D、E和F也会执行到。而在对模块A的非增量测试中,仅会执行模块B、C和E的桩模块。因此,完成一次增量测试所需执行的机器指令,显然多于采用非增量测试方法所需的指令。但此消彼长的是,非增量测试要比增量测试需要更多的驱动模块和桩模块,开发这些驱动模块和桩模块是要占用机器时间的
  • 模块测试阶段开始时,如果使用的是非增量测试,就会有更多的机会进行并行操作
    所有的模块可以同时测试,对于大型的软件项目(模块和人员都很多),这可能十分重要,因为在模块测试开始之时,项目的人员数量常常处于最高峰
执行测试

当测试用例造成模块输出的实际结果与预期结果不匹配的情况时,存在两个可能的解释:

  • 该模块存在错误
  • 预期的结果不正确(测试用例不正确)

为将这种混乱降低到最小程度,应在测试执行之前对测试用例集进行审核或检查(也就是说,应对测试用例进行翻试)

在执行测试时,应该查找程序的副作用( 即模块执行了某些不该执行操作的情况)。一般情况下,这些情况都是很难发现的,但如果在测试用例执行完之后,检查那些不应有变动的模块输人,可能会发现一些错误实例

如果发现某一部分模块存在大量错误,那么很有可能这些模块甚至包含着更多的错误,只是尚未检查出来而已。这样的模块应该进行更进一·步的测试,可能还需要进行额外的代码走查或检查。最后,记住模块测试的目的不是证明模块能够正确地运行,而是证明模块中存在着错误


http://chatgpt.dhexx.cn/article/2xQvqS67.shtml

相关文章

《软件测试的艺术》第1章:一次自评价测试

写在前面: 相比于芯片验证,软件测试有着悠久的历史沉淀和更为完整的生态,和芯片验证在某些方面上几乎有着相同的思路和方法。因此从软件测试的视角出发,重新思考芯片验证的方方面面。第一个系列为《软件测试的艺术》学习。 第一…

9年测试老鸟:Glenford J编写《软件测试的艺术》PDF,高清中文版

内容简介 本书以一次自评价测试开篇,从软件测试的心理学和经济学人手,探讨了代码检查、走查与评审、测试用例的设计、模块(单元)测试、系统测试、调试等主题,以及极限测试、因特网应用系统测试等高级主题,全面展现了作者的软件测…

系统测试——软件测试的艺术

系统测试有着特定的目的:将系统或程序与其初始目标进行比较,给定目标后有两含义: 系统测试不局限于系统,若产品是一个程序:系统测试就是试图说明程序作为一个整体是如何不满足其目标的过程根据定义,若产品…

《软件测试的艺术》重点记录

----定义---- 测试是为发现错误而执行程序的过程。 测试提高了程序的可靠性或质量。 ----测试方法---- 黑盒测试:又称之为数据驱动的测试或输入/输出驱动的测试。 白盒测试:对程序的逻辑结构进行检查,从中获取测试数据。 ----测试的原则…

软件测试的艺术(测试工程师必备基本知识与概念)

目录: 一、黑盒测试与白盒测试: 等价类划分: 一、确定等价类 确定等价类是选取每一个输入条件(通常是规格说明中的一个句子或短语)并 将其划分为两个或更多的组。可以使用图 4-3 中的表格来进行划分。注意&#xff0…

《软件测试的艺术》第五章 模块(单元)测试

目录 5.0 前言 5.1 测试用例设计 5.2 增量测试 5.3 自顶向下测试和自底向上测试 5.4 执行测试 5.5 小结 5.0 前言 大型的软件程序需要特别的测试对策。在本章中我们会探讨构建大型程序测试的第一个步骤:模块测试(单元测试)&#xff0c…

软件测试的艺术_读书笔记(一)

软件测试的艺术是测试人员必看书,两年前看这本书给我很多理论和指导,现在重新看,按照个人的理解,整理一些学习笔记。 第一章 软件测试的心理学和经济学 最重要的一句话 : 测试人员的态度比实际测试过程本身更重要 1.…

【读书笔记】-《软件测试的艺术》

2018年10月13日23:24:26 自诩: 因为上一东家工作的原因而接触测试。原本本职是嵌入式软件,因为公司正在风口浪尖的阶段,就是一种小公司要发展成为大公司而经历的那种痛,全公司上下都忙得焦头烂额的这样的背景下,我从软…

《软件测试的艺术》第2章:软件测试的心理学和经济学

软件测试的心理学 书中此部分首先辨析了两个概念:软件测试的定义、成功的测试和不成功的测试。 软件测试的定义: 测试是为发现错误而执行程序的过程,我们应当假设程序是存在bug的;由于证明程序不存在错误的过程是一项看起来不…

《软件测试的艺术》读书笔记

1 一次自评价测试 所谓软件测试,就是一个过程或一系列过程,用来确认计算机代码完成了其应该完成的功能,不执行其不该执行的功能。 2 软件测试的心理学和经济学 2.1 软件测试的心理学 软件测试是为发现错误而执行程序的过程。 2.2 软…

精读-软件测试的艺术之模块测试及更高级别的测试

本文是关于精读书籍《软件测试的艺术》的一些学习笔记和分享 本书共有九章包括测试思想(心理,经济),代码检查,测试用例设计,模块测试,更高级别的测试,调试,极限测试和因…

软件测试,浅析这项黑色艺术的难与易

今天给各位同行们带来一本技术好书《软件测试的艺术》(原书第3版),让我们一起来赏析这本经典著作吧! 本书是国内很多软件测试书籍的首要参考书目,短小精悍的篇幅、深入浅出的内容很适合初学者作为入门首选。同时&…

软件测试执行的艺术

测试执行 测试执行过程 主要任务 确定测试用例的优先级开发测试规程并确定优先级,创建测试数据,同时也可以准备测试用例和设计自动化测试脚本根据测试规程创建测试套件,以提高测试执行的效率确认已经正确搭建的测试环境根据计划的执行顺序&…

《软件测试的艺术》万字笔记

软件测试的心理学和经济学 软件测试人员在测试过程中要有正确的态度(愿景) 心理学 软件测试的定义需要明确:软件测试的根本应该聚焦到为程序增加价值,让程序变得更加可靠,是找出问题并让问题得到解决的过程 测试是…

《软件测试的艺术》第3章:代码检查、走查与评审

《软件测试的艺术》: 软件开发人员通常不会考虑到的一种测试形式:人工测试。大多数人认为,因为程序是为了供机器执行而编写的,那么也应由机器来对程序进行测试。这种想法是有问题的。人工测试方法在暴露错误方面是很有成效的。实际…

Hash与HashCode

1.hash和hash表 首先看一张来自百度百科的解释 hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值,hash表就是所有的hash值组成的,有很多种hash函数,也就代表着有很多种算法得到hash值…

深入理解 Java 中的 hashCode

深入理解 Java 中的 hashCode 一、hashCode 方法二、为什么重写 equals 方法的时候必须重写 hashCode 方法? 一、hashCode 方法 Java 是一门面向对象的编程语言,所有的类都会默认继承自 Object 类,Object 类中就包含了 hashCode() 方法&…

hashCode 和对象的内存地址

hashCode 文章目录 hashCodehashCode 的生成逻辑第 0 种算法第 1 种算法第 2 种算法第 3 种算法第 4 种算法第 5 种算法 根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值…

HashCode

HashCode 文章目录 HashCode前言Hash是什么?HashCodeHashCode关键点判断两个对象相等 前言 Hash是什么? 哈希函数 把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,是一种压缩映射。 hash是一个函数&#…

java中equals,hashcode和==的区别

2019独角兽企业重金招聘Python工程师标准>>> 1、== java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型 byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.引用类型(类、接口、数组) 当…