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

article/2025/9/30 3:45:24

目录:

 

一、黑盒测试与白盒测试:

 

等价类划分:

一、确定等价类

确定等价类是选取每一个输入条件(通常是规格说明中的一个句子或短语)并 将其划分为两个或更多的组。可以使用图 4-3 中的表格来进行划分。注意,我们确 定了两类等价类:有效等价类代表对程序的有效输入,而无效等价类代表的则是其 他任何可能的输入条件(即不正确的输入值)。

二、生成测试用例

第二步是使用等价类来生成测试用例,其过程如下:

    1. 为每个等价类设置一个不同的编号。

    2. 编写新的测试用例,尽可能多地覆盖那些尚未被涵盖的有效等价类,直到 所有的有效等价类都被测试用例所覆盖(包含进去)。

    3. 编写新的用例,覆盖一个且仅一个尚未被覆盖的无效等价类,直到所有的 无效等价类都被测试用例所覆盖。 用单个测试用例覆盖无效等价类,是因为某些特定的输入错误检查可能会屏蔽 或取代其他输入错误检查。举例来说,如果规格说明规定了“请输入书籍类型(硬 皮、软皮或活页)及数量(l~999 )”,代表两个错误输入的测试用例“XYZ 0”,很可能不会执行对数量的检查,因为程序也许会提示 “XYZ 是未知的书籍类型”,就不检查输入的其余部分了。

边界值分析:

很难提供一份如何进行边界值分析的“详细说明’,因为这种方法需要一定程度的创造性,以及对问题采取一定程度的特殊处理办法(因此,就像测试的许多其他方面一样,这更多的是项智力工作,并非其他的什么)。然而,我们还是给读者提供一些通用指南:
1. 如果输入条件规定了一个输入值范围,那么应针对范围的边界设计测试用例,针对刚刚越界的情况设计无效输入测试用例。举例来说,如果输入值的有效范围是-1.0 至+l.0,那么应针对-1.0、1.0、-1.001 和1.001 的情况设计测试用例。


2. 如果输入条件规定了输入值的数量,那么应针对最小数量输入值、最大数量输入值,以及比最小数量少一个、比最大数量多一个的情况设计测试用例。举例来说,如果某个输入文件可容纳l~255 条记录,那么应根据0、l、255 和256条记录的情况设计测试用例。

3. 对每个输出条件应用指南 1。举例来说,如果某个程序按月计算FICA1的扣除额,且最小金额是$0.00,最大金额$1165.25,那么应该设计测试用例来测试扣除$0.00 和$1165.25 的情况。此外,还应观察是否可能设计出导致扣除金额为负数或超过$1165.25 的测试用例。注意,检查结果空间的边界很重要,因为输入范围的边界并不总是能代表输出范围的边界情况(例如,三角正弦函数sin的情况就如此)。同样,总是产生超过输出范围的结果也是不大可能的,但无论如何,应该考虑这种可能性。


4. 对每个输出条件应用指南 2。如果某个信息检索系统根据输入请求显示关联程度最高的信息摘要,而摘要的数量从未超过4 条,则应编写测试用例,使程序显示0 条、l 条和4 条摘要,还应设计测试用例,导致程序错误地显示5 条摘要。


5. 如果程序的输入或输出是一个有序序列(例如顺序的文件、线性列表或表格),则应特别注意该序列的第一个和最后一个元素。


6. 此外,发挥聪明才智找出其他的边界条件。

因果图分析:

生成测试用例时采用的过程如下:
1. 将规格说明分解为可执行的片段。这是必须的步骤,因为因果图不善于处理较大的规格说明。举例来说,当测试一个电子商务系统时,“可执行的片段”可能是指对挑选和确认购物车中的单件商品的规格说明。在测试一个Web 页面设计时,我们可能会测试一个单独的菜单树,甚至是一个不太复杂的导航序列。


2. 确定规格说明中的因果关系。所谓“因”,是指一个明确的输入条件或输入条件的等价类。所谓“果”,是指一个输出条件或系统转换(输入对程序或系统状态的延续影响)。举例来说,如果某个事务引起文件或数据库记录被修改,那么这种改变就是一个系统转换,而系统反馈的确认信息就是一个输出条件。通过逐字逐句地阅读规格说明,同时标识出描述“因”和“果”的文字或句子,就可以将“因”和“果”确定出来。因果关系一旦确定下来,每个“因”和“果”都被赋予一个惟一的编号。


3. 分析规格说明的语义内容,并将其转换为连接因果关系的布尔图。这就是所谓的因果图。


4. 给图加上注解符号,说明由于语法或环境的限制而不能联系起来的“因”和“果”。


5. 通过仔细地跟踪图中的状态变化情况,将因果图转换成一个有限项的判定表。表中的每一列代表一个测试用例。


6. 将判定表中的列转换成测试用例。

语句覆盖:

每条语句都执行到。

判断覆盖:

每个判断都有出现真和假。

条件覆盖:

每个条件都执行到。

条件/判定覆盖:

每个条件都有真假出现。

组合覆盖:

每个条件直接的组合都出现(显然,这种测试用例数很多)

 

二、模块测试与增量测试:

模块测试(或单元测试)是对程序中的单个子程序、子程序或过程进行测试的 过程,也就是说,一开始并不是对整个程序进行测试,而是首先将注意力集中在对 构成程序的较小模块的测试上面。

模块测试的目的是将模块的功能与定义模块的功能规格说明或接口规格说明 进行比较。有自顶向下测试与自底向上测试。

什么是驱动模块和桩模块

单元本身无法构成一个切实可运行的程序系统,所以我们需要为单元测试来开发桩模块和驱动模块,从而完成我们的单元测试目的,这是桩模块和驱动模块的作用。
驱动模块是用来模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启用被测模块,并打印出相应的结果。
桩模块(Stub)是指模拟被测试的模块所调用的模块,而不是软件产品的组成的部分。

 

增量测试--

    1. 非增量测试所需的工作量要多一些。

    2. 如果使用了增量测试,可以较早地发现模块中与不匹配接口、不正确假设 相关的编程错误。

    3. 因此如果使用了增量测试,调试会进行得容易一些。

    4. 增量测试会将测试进行得更彻底。

    5. 非增量测试所占用的机器时间显得少一些。

    6. 模块测试阶段开始时,如果使用的是非增量测试,就会有更多的机会进行 并行操作(也就是说,所有的模块可以同时测试)。

三、更高级测试:功能测试、系统测试、验收测试、安装测试

软件开发流程:

举例来说:

模块测试的目的是发现程序模块与其接口规格说明之间的不一致。

功能测试的目的是为了证明程序未能符合其外部规格说明

系统测试的目的是为了证明软件产品与其初始目标不一致。

在 这里忽略了集成测试,因为集成测试往往并不作为一个独立的测试步骤,而且在进 行增量模块测试时,它是模块测试的隐含部分。

总结:模块测试主要是代码层的白盒测试;功能测试主要是类似测试各部件功能是否与外部规格说明一致而采用的黑盒测试;系统测试主要是针对整个系统性能的测试,如强度测试与容量测试。验收测试是验收方处理的,安装测试主要是测试安装方面的功能。

四、调试:暴力法、归纳法、演绎法、回溯法、测试法

    简单地讲,调试是执行一次成功的测试之后所要进行的工作。记住,所谓成功 的测试,是指它可以证明程序没有实现预期的功能。调试是一个包含两个步骤的过 程,从执行了一个成功的测试用例、发现了一个问题之后开始。第一步,确定程序 中可疑错误的准确性质和位置;第二步,修改错误。

 

五、极限测试

极限编程(XP,Extreme Programming),XP 到目前为止还是最流行的敏捷软件开发过程。测试在 XP 中的地位如此重要,以至于需要首先创建单元(模块)测试和验收测试, 然后才创建代码库。这种形式的测试被称为极限测试(XT,Extreme Testing)。

极限测试主要由两种类型的测试组成:单元测试和 验收测试。

XP 开发模型用 12 个核心实践来驱动该过程。表 8-l 总结了这些实践。简单来 说.这 12 个核心的 XP 实践可以归纳为 4 个概念: 1. 聆听客户和其他程序员的谈话。

        2. 与客户合作,开发应用程序的规格说明和测试用例。

        3. 结对编码。

        4. 测试代码库。

常见词汇表

 


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

相关文章

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

目录 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.引用类型(类、接口、数组) 当…

hashcode讲解【最详细版本】

Object 基类 Object 含有的方法 hashCode 作用:用于查找的快捷性,常用于确定对象的存储地址 如 Hashtable,HashMap 默认情况下,Object中的hashCode() 返回对象的32位jvm内存地址。 如果两个对象相同, equals方法一…

hashcode详解

前言 HashCode是在Java中用于获取对象的唯一标识符的方法。它是根据对象的内容生成的一个整数值。对象的hashCode()方法被调用时,它返回的是对象的哈希码。哈希码可以用于在哈希表等数据结构中快速定位对象。 在Java中,hashCode()方法是被Object类定义…

真正搞懂hashCode和hash算法

本人当初刚接触java的时候一说到hash算法或者hashCode也是蛋蛋疼,两只都疼 后来花了整整一天时间来研究hash,搞懂后发现其实也不难理解,时隔一年突然想起来,写篇博客记录下; 以前我莫得选择,现在我想搞懂…

腾讯_TEG一面

总结 不愧是腾讯内部技术含量较高的部门,上来怼基础。总体有套路可循,比较偏技术

腾讯技术解读|TEG—硬核拆解,腾讯产品的底层技术牛在哪里?

技术,是各个事业群的核心力量 然而,事业群的不同,核心力量也不同 你是否还在纠结事业群的选择? 担心对事业群不了解而选错事业群? 毫无疑问 技术也是事业群选择的重要衡量因素之一哦! 对此&#xff0c…