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

article/2025/9/30 3:47:18
  • 软件测试的心理学

书中此部分首先辨析了两个概念:软件测试的定义、成功的测试和不成功的测试。

软件测试的定义:

测试是为发现错误而执行程序的过程,我们应当假设程序是存在bug的;由于证明程序不存在错误的过程是一项看起来不太可能完成的工作,从心理学角度将软件测试定义为发现错误的动作,而不是证明程序不存在错误。软件测试的效果之一是对程序具有一种信心:软件做了其应该做的,未做其不应该做的。

成功的测试和不成功的测试:

如果在测试某段程序时发现了错误,而且这些错误是可以修复的,就将这次合理设计并得到有效执行的测试称作是“成功的”。如果本次测试可以最终确定再无其他可查出的错误,同样也被称作是“成功的”。

所谓“不成功的”测试,仅指未能适当地对程序进行检查,在大多数情况下,未能找出错误的测试被认为是“不成功的”,这是因为认为软件中不包含错误的观点基本上是不切实际的。

  • 软件测试的经济学

存在软件测试的经济学问题的根源在于:软件测试不能发现“所有”的错误。即使是规模很小的程序。一般说来,要发现程序中的所有错误也是不切实际的,常常也是不可能的。为了应对测试经济学的挑战,应该在开始测试之前建立某些策略。黑盒测试和白盒测试是两种最普遍的策略。

黑盒测试:又称为数据驱动的测试或输入/输出驱动的测试。将程序视为一个黑盒子,测试目标与程序的内部机制和结构完全无关。在这种方法中,测试数据完全来源于软件规范。如果想用这种方法来发现程序的所有错误,判定的标准就是“穷举输入测试”将所有可能的输入条件都作为测试用例。

白盒测试:或称逻辑驱动的测试,允许我们检查程序的内部结构。这种测试策略对程序的逻辑结构进行检查,从中获取测试数据(遗憾的是,常常忽略了程序的规范)。建立起与黑盒测试中穷举输入测试相似的测试方法:即将程序中的每条语句至少执行一次,这种方法通常称为穷举路径测试。

  • 软件测试原则

  1. 测试用例中一个必需部分是对预期输出或结果进行定义

  2. 程序员应当避免测试自己编写的程序

  3. 编写软件的组织不应当测试自己编写的软件

  4. 应当彻底检查每个测试的执行结果

  5. 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况

  6. 检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”

  7. 应避免测试用例用后即弃,除非软件本身就是一个一次性的软件

  8. 计划测试工作时不应默许假定不会发现错误

  9. 程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比

  10. 软件测试是一项极富创造性、极具智力挑战性的工作

验证芯发现:

  1. 和软件测试相同,芯片的验证空间也是无限大的,发现所有的bug似乎也是不可能的。既然发现所有的bug几乎是不可能的,那验证的追求、目标或者交付的标准是什么呢?

    笔者认为,验证的目标总是尽可能多地发现代码缺陷,最终的验证交付也是在质量、风险和时间三者之间做一个平衡。最终RTL模块验证的是否“完备”,则是现在大家都比较认可的覆盖率驱动验证流程(CDV)。

  2. 成功的验证用例是什么?首先肯定不是用例pass了,验证用例能够有效地发现代码问题,或者证明代码没有问题。实际中可能会有所谓的“太平盛世”现象:测试用例回归PASS,其实并没有发现真正的问题,并且认为验证已趋于收敛。验证用例能够发现代码问题,其中蕴含了验证用例的有效性。一个验证用例的有效性可以从对覆盖率的贡献和发现问题的可能性分析。

  3. “程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比”,笔者认为这个整体性的原则在芯片验证中也同样成立。在实际项目,也会经常发现,有问题的模块总是有问题,没有问题的模块总是风平浪静。针对bug的重灾区模块,则需要重点考虑设计和验证的质量,当然也需要注意"风平浪静"的模块验证用例有效性。

  4. "软件测试是一项极富创造性、极具智力挑战性的工作",芯片验证的价值是什么?这个问题对于从事验证几年左右的工作者来说,是一个非常让人困惑的现象,验证看似重复枯燥的工作,我们的成就感,存在感在哪里呢?


验证芯发现:《软件测试的艺术》第2章icon-default.png?t=M85Bhttps://mp.weixin.qq.com/s?__biz=Mzg3ODczNDg0NA==&mid=2247483683&idx=1&sn=9ea2ba51138ded047532649eac41198e&chksm=cf0e7db0f879f4a688afda348e0cd6b9fa0ca4ad02ef69d225e6aa4f7d12486b1690830fa9b4&token=1931400576&lang=zh_CN#rd 


http://chatgpt.dhexx.cn/article/6aKNTjS0.shtml

相关文章

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

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…

15 年腾讯老兵谈技术人成长之路

作者:alexguo,腾讯TEG技术总监&技术专家 每个职场人都会经历从职场新人到骨干、专家亦或是管理者的蜕变过程。作为技术职业人,大家常会碰到一些困惑,在不同职业发展阶段所需要具备的认知和专业能力差异在哪里?除了…

腾讯TEG客户端开发面经

2022年秋招/春招/提前批/大厂面经整理(持续更新中~) 腾讯TEG客户端开发面经 2021/05/19下午两点半初试 1、面试官先让做自我介绍,主要介绍项目,简短一点不需要太详细。 ------我大概讲了一下我的三个项目,第一个是高…

腾讯TEG首次集体亮相腾讯全球数字生态大会,这些亮点不容错过!

5月21日—23日,腾讯全球数字生态大会将在昆明滇池国际会展中心召开。大会是将腾讯过往的三大峰会“腾讯全球合作伙伴大会”、“腾讯云未来峰会”和“互联网数字经济峰会”进行有机整合,届时,众多行业领袖、技术领军人物、国际知名数字经济研究…

粉丝投稿!大三参加校招三面腾讯TEG实习岗面经分享,希望对大家有帮助!(已拿意向书)

背景介绍 背景:本科大三,末流211,计科专业,寒假在某bat一家实习 腾讯流程好快,从面到结束一周拿意向书,3.18开始一面,3.25拿到意向书 一面 75min 自我介绍学校做的项目有没有什么优点&#x…