软件测试的艺术 学习笔记

article/2025/9/30 3:07:37

文章目录

    • 4.2黑盒测试
      • 4.2.1 等价划分
      • 4.2.2 边界值分析
      • 4.2.3 因果图
    • 4.3 错误猜测
    • 4.4 测试策略
  • 5. 模块(单元)测试
    • 5.1 测试用例设计
    • 5.2 增量测试
    • 5.3 自顶向下测试与自底向上测试
      • 5.3.1 自顶向下的测试
      • 5.3.2 自底向上的测试
      • 5.3.3 比较
    • 5.4 执行测试
  • 6 更高级别的测试
  • 6.1 功能测试
  • 6.2 系统测试
      • 6.2.1 能力测试
      • 6.2.2 容量测试
      • 6.2.3 强度测试
      • 6.2.4 可用性测试(用户体验测试)(详细)
      • 6.2.5 安全性测试
      • 6.2.6 性能测试
      • 6.2.7 存储测试
      • 6.2.8 配置测试
      • 6.2.9 兼容性/转换测试
      • 6.2.10 安装测试
      • 6.2.11 可靠性测试
      • 6.2.12 可恢复性测试
      • 6.2.13 服务、可维护性测试
      • 6.2.14 文档测试
      • 6.2.15 过程测试
      • 6.2.16 系统测试的执行
    • 6.3 验收测试
    • 6.4 安装测试
    • 6.5 测试的计划与控制
    • 6.6 测试结束准则
  • 7 调试
    • 7.1 暴力法调试
    • 7.2 归纳法调试
    • 7.3 演绎法调试
    • 7.4 回溯法调试
    • 7.5 测试法调试
    • 7.6 调试原则
      • 7.6.1 定位错误的原则
      • 7.6.2 修改错误的技术
    • 7.7 错误分析
  • 8 敏捷开发模式下的测试
    • 8.1 敏捷开发的特征
    • 8.2 敏捷测试(后面都略过)
    • 8.3 极限编程与测试
      • 8.3.1 极限编程基础
      • 8.3.2 极限测试:概念
      • 8.3.3 极限测试的应用
  • 9 互联网应用测试

4.2黑盒测试

4.2.1 等价划分

  • 特性
    1.严格控制测试用例的增加——体现尽可能多的不同输入情况 —— 设计最小测试用例集
    2.覆盖大部分其他可能的样例——尽量划分输入范围——设计输入条件集合

  • 步骤
    1.确定等价类——有效等价类(有效输入)与无效等价类(注意无效以及未预料到的输入情况)

     取值范围、取值的个数输入值的集合(每个输入值确定一个有效一个无效)某些“必须是”的规定

2.生成测试用例

    编号尽可能多覆盖未被涵盖的有效等价类(直到都)覆盖一个且仅一个剩余的无效等价类(直到都)——某些特定输入错误检查可能会屏蔽或取代其他错误检查
  • 不足
    忽略掉了某些特定类型的高效测试用例

4.2.2 边界值分析

边界条件:输入和输出等价类中恰好处于边界、超过边界、在边界以下的状态

  • 与上一个不同

1.从等价类任意挑选一个元素——>选择一个或多个元素使等价类每个边界都经过测试
2.仅关注输入——>还要考虑输出等价类来设计测试用例
边界值考虑处于等价划分边界或边界附近的状态

  • 设计指南
输入值范围——边界与刚刚越界的情况
输入值数量——最小、最大,最小减一,最大加一
输出值的范围、数量
有序序列——第一个和最后一个元素

4.2.3 因果图

  • 解决痛点
    未对输入条件的组合进行分析(如:程序输入乘积超过某个阈值时会失效,比如程序耗尽内存)
  • 特性
    系统方法选出高效测试用例集
    可以指出规格说明不完整性和不明确之处
    规格说明转化未一个布尔逻辑网络
  • 步骤
    1.将规格说明分解为可执行的片段
    2.确定因果关系并赋予唯一编号
    3.分析规格说明语义内容,转化为布尔图(因果图)
    4.加注解,说明由于语法或者环境限制无法连接的因与果
    5.因果图转化为有限项的判定表,每列表示一个测试用例(最难)
    6.表中每列转为测试用例
  • 不足
    通常不能生成全部应该被确定的有效测试用例
    没有充分考虑边界条件

4.3 错误猜测

列举出可能犯的错误与错误易发情况清单,并依次编写测试用例

4.4 测试策略

以上每种方法都可以提供具体有用的测试用例,但不嫩单独提供一个完整的测试用例集

  • 规格说明中有输入条件组合的情况——首先考虑因果分析法
  • 任何情况都要使用——边界值分析法(注意针对对象),这也可作为补充测试条件
  • 对输入和输出划分有效无效等价类
  • 使用错误猜测技术增加更多测试用例
  • 针对以上检查程序逻辑结构,使用白盒测试

5. 模块(单元)测试

对程序的单个子程序、子程序或过程进行测试的过程
动机
1.管理组合的测试元素的手段
2.减轻了调试的难度
3.为同时测试多个模块提供了可能(将并行工程引入软件测试)
目的
比较模块功能与定义模块的功能规格说明或者接口规格说明揭出其中存在矛盾

5.1 测试用例设计

所需信息
模块规格说明、模块源代码
设计过程
使用一种或多种白盒测试方法分析模块的逻辑结构,用黑盒测试方法对照规格说明补充测试样例

5.2 增量测试

驱动模块
用来将测试用例驱动或传输到被测模块中
桩模块
模拟被调用模块功能,并且返回此次调用所希望的特定值
非增量测试/"崩溃”测试
先独立测试每个模块(需要一个驱动模块与一个或多个桩模块),再将这些组装成完整的程序
增量测试
首先将下一个要测试的的模块组装到前面已经测试过的模块集合中去,再进行测试,对每个模块只需要设立一个驱动模块或者桩模块
优点
1.非增量测试工作量更大(设立模块更多)
2.增量测试能更早发现模块中与不匹配接口、不正确假设相关的编程错误,非增量知道最后模块才能相互看到
3.增量测试的台哦是更加容易(很可能与最近添加的模块有关)
4.增量测试将测试进行的更彻底,非增量的模块测试仅影响当前模块本身
不足
1.非增量测试占用机器时间更少
2.非增量测试更有利于并行操作

5.3 自顶向下测试与自底向上测试

5.3.1 自顶向下的测试

原则
要成为合乎条件的下一个模块,至少一个该模块的从属模块(调用它的模块)实现经过的测试
如何提交测试用例
测试数据通过一个或多个桩模块提交给模块
模块序列考虑指南
1.关键部分应该尽早添加进去(复杂模块、采用新算法的模块或被怀疑容易发生错误的模块)
2.I/O模块应尽早添加进来
缺点
1.在进行到下一个模块前未能穷举测试该模块(测试数据嵌入桩模块困难、程序高层次为低层次提供资源)
2.中间模块对测试用例的影响(输入输出之间的距离太远)
3.与程序设计阶段重叠

5.3.2 自底向上的测试

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

5.3.3 比较

自顶向下测试与自底向上测试的比较

5.4 执行测试

1.输出与预期不匹配——模块存在错误或者测试用例不正确——测试前应对测试用例集进行测试
2.使用自动化测试工具
3.重温心理学与经济学原则
4.避免随意丢弃测试用例,应当按某种格式记录下来,以便将来可以重新使用它们

6 更高级别的测试

当程序无法实现最终用户要求的合理功能时,就发生了一个软件错误
(即使完成了非常完美的模块测试,仍不能保证已经找出了程序中的所有错误)
开发过程与测试过程的对应关系

6.1 功能测试

通常是一项黑盒操作
目的——证明程序未能符合其外部规格说明

6.2 系统测试

目的——将系统或程序与其初始目标进行比较,证明其不一致
测试用例的15个分类

6.2.1 能力测试

判断目标文档提及的每一项能力是否都确定实现、通常人工检查就足够

6.2.2 容量测试

为了证明程序不能处理目标文档中的规定的数据容量

6.2.3 强度测试

是程序承受高负载或强度的检验,即在很短的时间间隔内达到的数据或操作的数量峰值
譬如: 基于Web的应用程序(能否处理一定容量的并发用户)、移动设备上的应用程序(压力测试)

6.2.4 可用性测试(用户体验测试)(详细)

发动最终用户在真实环境下对应用程序进行测试
基本要素
测试流程
1.测试用户的选择(如:长廊测试法,即随机选取一批用户)
2.需要多少用户进行测试
在这里插入图片描述

3.数据采集方法:”发声思考“、”眼球追踪“等
4.可用性问卷调查:
——方法:是/否问题、真/假问题、某种程度的同意/反对
——技巧:一份问卷中多次询问同一个问题(但从相反的角度来问)
5.何时收工还是多多益善
注意:可用性测试结果必须变成开发人员可读懂的修改意见,改进后再交由原来的测试者,确认是否实现了改进意图

6.2.5 安全性测试

设计测试用例来突破程序安全检查的过程

6.2.6 性能测试

程序在特定负载和配置环境下的响应时间与吞吐率

6.2.7 存储测试

证明软件的存储目标没有得到满足

6.2.8 配置测试

至少使用每一种类型的设备,以最大和最小配置来测试程序

6.2.9 兼容性/转换测试

6.2.10 安装测试

6.2.11 可靠性测试

6.2.12 可恢复性测试

6.2.13 服务、可维护性测试

6.2.14 文档测试

6.2.15 过程测试

6.2.16 系统测试的执行

谁来执行测试——不能由程序员来进行、不能又负责该程序开发的机构来执行
要求
1.执行系统测试的人的思考问题方式必须与最终用户相同
2.至少应当由很少受开发机构的独立人群来执行

6.3 验收测试

客户与最终客户的职责

6.4 安装测试

发现在安装过程中出现的错误,应由生产软件系统的机构来设计,作为软件的一部分来发布

6.5 测试的计划与控制

目标、结束准则、进度、责任、测试用例库与标准、工具、计算机时间、硬件配置、继承、跟踪步骤、调试步骤、回归测试(在对程序做了功能改进或修改后进行,目的是判断程序的改动是否引起了程序其他方面的退步)

6.6 测试结束准则

  • 第一类: 根据特定的测试用例设计技术

模块测试结束准则
1.满足多重条件覆盖准则
2.对模块接口规格说明进行边界值分析,产生的所有测试用例最终都是不成功的
功能测试结束准则
测试用例来源于a.因果图分析 b.边界值分析 c.错误猜测 ,并且最终都不成功

  • 第二类:以确切的数量描述结束条件
  • 第三类:记录每单位时间的错误数量,检查统计曲线的形状
    ( 二三类更适用于功能测试与系统测试)

7 调试

测试——证明程序没有实现预期的功能
调试——从成功的测试哟管理开始,明确错误的准确性质与位置,然后修改错误

7.1 暴力法调试

1.利用内存信息输出来调试——最缺乏效率
2.根据一般地”在程序中插入打印语句“建议来调试——主要是碰运气
3.使用自动化的调试工具调试——即可设置断电——同上一条差不多

都忽略了思考的过程,建议仅作为最后的备用方法

7.2 归纳法调试

在这里插入图片描述

7.3 演绎法调试

在这里插入图片描述

7.4 回溯法调试

适用于小型程序,在产生不正确结果的地方开始逆向执行程序

7.5 测试法调试

常与归纳或者演绎一同使用

7.6 调试原则

7.6.1 定位错误的原则

7.6.2 修改错误的技术

7.7 错误分析

出现在什么地方,谁犯的,哪些做得不正确,下次如何避免,为什么没有早点发现,如何更早地发现

8 敏捷开发模式下的测试

8.1 敏捷开发的特征

重点——客户满意度
模式共同点——依赖客户的参与、测试驱动以及紧凑的迭代开发周期
在这里插入图片描述

8.2 敏捷测试(后面都略过)

8.3 极限编程与测试

8.3.1 极限编程基础

8.3.2 极限测试:概念

8.3.3 极限测试的应用

9 互联网应用测试


http://chatgpt.dhexx.cn/article/HBXkAewo.shtml

相关文章

《软件测试的艺术》第六章 更高级别的测试

《软件测试的艺术》第六章 更高级别的测试 6.0 前言软件开发过程模型 6.1 功能测试6.2 系统测试6.2.1 能力测试6.2.2 容量测试6.2.3 强度测试6.2.4 可用性测试6.2.5 安全性测试6.2.6 性能测试6.2.7 存储测试6.2.8 配置设置6.2.9 兼容性/转换测试6.2.10 安装测试6.2.11 可靠性测…

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

是大型程序测试的第一个步骤【大型程序即超过500条语句的程序】 了解 模块测试是对程序中的单个程序、子程序/过程进行测试的过程【并非对整个程序】: 关注点在较小单元,是一种管理组合的测试元素的手段减轻调试的难度,把错误定位到一个小…

《软件测试的艺术》第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 种算法 根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值…