测试基础 测试杂谈 1

神奇蛋 · July 17, 2025 · Last by 干饭狂人 replied at July 17, 2025 · 242 hits

话题 1:认识软件测试

为什么要好好讨论 “什么是测试?”,有什么样的理解就会有什么样的行动。

1.定义 s

软件测试的发展历史:The growth of software testing
1957 年之前, 调试为主
1957—1978 年,证明为主(Demonstration Oriented)
1979—1982 年,破坏为主(Destruction Oriented
1983—1987 年,评估为主(Evaluation Oriented
1988 年至今,预防为主(Prevention Oriented)

1973 年 Bill Hetzel 第一个定义:“软件测试技术为了程序能够按预期设想运行而建立足够的信心”。强调证实程序按预期运行。
1979 年,Glen ford Myers 的《软件测试艺术》(The Art of Software Testing) 进行了定义:“测试是为发现错误而执行的一个程序或者系统的过程”。证伪,尽可能多发现问题。
1983 年,IEEE“使用人工或自动和手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果的差异。”
1983 年,Bill Hetzel 在《软件测试完全指南》(Complete Guide of Software Testing) 一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量”。
到了 2002 年,Rick 和 Stefan 在《系统的软件测试》(Systematic Software Testing) 一书中对软件测试做了进一步定义:“测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程”。
软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
chatGPT 定义:
“测试” 一般是指通过一系列的方法和程序,对一个系统、产品或组件进行验证和评估,以确保它们按照预期的方式工作。测试的目的是发现问题、缺陷或潜在的改进空间,保证质量和可靠性。
软件测试是对软件系统进行的一系列活动,目的是评估软件是否符合需求规格、是否按预期工作,及其是否包含错误或缺陷。软件测试不仅仅是找 bug,更重要的是验证软件的功能、性能、安全性、兼容性等多个方面,以确保其质量。

2.关于测试的基本认知讨论

1.基本认知,正反思维
正向思维,对产品进行检验;瓶颈,测试无法穷尽,且不易发现错误;
逆向思维,发现问题;基于心理学原理,目标导向容易发现更多的问题;
缺点:陷入局部深度测试,缺乏广度
所以,好的测试必定是广度 + 深度适度结合的,达到效率和质量的平衡。
2.狭义测试和广义测试
狭义:一般是动态的
广义:动态 + 静态;静态,需求评审、设计评审、代码评审、文档评审。引入的原因是尽早介入测试,把问题消灭在萌芽。
3.基于质量的认知
产品质量和使用质量。产品质量影响使用质量,使用质量依赖产品质量。
产品质量分内部质量和外部质量。
下面是国际标准定义的质量模型(ISO 25010:2011;国家标准《系统与软件工程 系统与软件质量要求和评价(SQuaRE)第 10 部分:系统与软件质量模型》):

内部质量和外部质量的对比:
对比维度 外部质量 内部质量
关注对象 用户可感知的最终产品表现。 代码、架构、文档等开发过程产物。
评估方式 通过用户测试、监控数据、验收标准衡量(如 SLA)。 通过代码审查、静态分析、技术债务评估衡量。
改进手段 优化功能设计、性能调优、用户体验测试。 重构代码、提升模块化、完善单元测试覆盖率。
影响范围 直接影响用户满意度和市场竞争力。 间接影响外部质量,决定长期维护成本和迭代效率。

使用质量:更偏重用户在真实使用场景中的体验与目标达成,需通过真实用户场景的持续验证。

基于上面的定义,软件缺陷应该包含:
软件未实现产品说明书要求的功能
软件出现了产品说明书指明不应该出现的错误
软件实现了产品说明书未提到的功能
软件未实现产品说明书虽未明确但应该实现的目标
软件难以理解、不易使用、运行缓慢或 从测试角度看 最终用户会认为不好
举例:
(1)喜马拉雅,自动缓存功能;当使用移动网络时,从使用质量上就是明显缺陷;
(2)游戏,游戏沉迷;从产品质量上看上是好功能,从使用质量看,会有损于玩家的健康;
4.基于风险的认知
因为无法证明软件或产品是正确的,风险会伴随产品一直存在。从风险的观点看,测试就是对产品质量风险不断地进行评估的活动。
从已知的缺陷,分析某类质量风险或某个具有风险的区域
把测试看做一个动态的质量监控过程,随时发现不健康的征兆,及时评估新的风险
5.基于社会性的认知
产品一般是应用系统,都是人在使用,具有很强的社会性;所以测试不仅仅是技术活动,而且是社会、心理等综合活动。
6.基于经济的认知
劣质成本:软件缺陷会给企业带来成本;测试的目的就是为了降低劣质成本。
测试的经济观点用最小的代价获得更高的收益。尽早开始测试工作。
7.基于标准的认知
“验证” 是检验软件是否已正确地实现了产品规格书所定义的系统功能和特性。单元测试、集成测试、系统测试
“有效性确认” 是确认所开发的软件是否满足用户实际需求的活动。验收测试
8.基于 test Oracle 的认知
测试 = 检验 + 试验,这也是我们目前采用的测试方法。
测试 = 检测已知的 + 试验未知的;即软件测试包括两部分工作—对已知的检测和对未知的试验。
需求明确,或自明的
需求不明取;即测试目标、测试需求和测试预言等是不明确的,也可以理解为产品的功能需求定义是不清楚、不稳定的,测试范围和数据是无限的,很难直接进行验证,而是需要通过不断地试验,才能知道所实现的功能特性是否正确。
Test Oracle:就是一种决定一项测试是否通过的(判断)机制。
①需求规格说明书和其他需求、设计规范文档;已知
②竞争对手的产品;已知
③启发式测试预言 (Heuristic oracle);
④统计测试预言 (Statistical oracle);
⑤一致性测试预言 (Consistency oracle);已知
⑥基于模型的测试预言 (Model-based oracle);已知
⑦人类预言 (Human oracle)。

9.基于批评思维的认知
10.基于传统开发模式的认知
11.基于敏捷开发模式的认知

软件可以是产品,但现在更多的是服务。所以当前更多采取敏捷式开发的方法,有什么样的开发方式就采取什么样的测试。
1.持续揭示软件质量问题
2.持续收集用户问题反馈
3.持续向研发团队提供产品质量信息
要改变原有传统软件测试的价值观和方法
1.个体与协作 vs 流程和工具
2.可工作的软件 vs 完备的文档
3.与客户协作 vs 合同谈判
4.拥抱变化 vs 遵循测试计划
测试:测,已知;试,未知。
如何学习?学习的方法:
可以考虑利用下面的公式进行:
R(s,c,w,A)=kscw2+A
R:结果
s:孤独感 c:危机感 w:正确的读书方式 A:学习者本身的能力 k:比例系数
1.掌握软件测试方法论
2.通过方法论进行实践
话题 q2:测试的任务是什么
1.产品质量持续反馈;通过持续测试对产品质量进行持续的、快速的反馈。目的是改进产品质量,减少返工,降低软件开发的劣质成本。
产出:问题、缺陷
日常测试
反馈;使用者反馈
2.产品质量评估
横向对比
纵向对比
3.客户满意度提升;
4.缺陷预防;对缺陷进行分析,找出缺陷的根本原因或总结缺陷模式,纠正深层次问题,达到预防效果。
软件测试中计算机科学中的位置
计算机科学 -> 软件工程

话题:软件测试的前景怎么样

很多准备开始或者刚开始软件测试行业的朋友,通常会问 “软件测试好就业吗?”“软件测试好学吗?”“做软件测试赚钱吗?”、“软件测试有前途吗?”。
我刚入行时有过同样的问题和疑惑。一个基本的原则,软件测试这个工作的价值是由市场供求关系决定。有需求,自然就有钱途,也有前途。从各大求职平台上来看,软件测试职位的发布量和薪资还是不错的,也就是说有需求。那接下来做到什么程度,就看个人修炼了。
我把上面的这段话发到测试论坛,被各种嘲笑,认为是废话、笑话。
看来在技术论坛需要讲干货,搞技术的大多都是直男直女。而且自从有了 AI 之后,人们思考的时候更多不是通过自己和短信息,而是借助万能的 AI。从某种程度写原创是在和 AI 进行对抗了。
上面我说供求关系决定软件测试是否有前途,实际上是在用经济学的思维方式来思考 “软件测试前景” 这个问题,核心不在于回答有没有前途,而在于我们应该应该调动不同的思维方式来思考问题。
使用不同的思维模型来思考。

共收到 1 条回复 时间 点赞
回复内容未通过审核,暂不显示
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up