软件测试的底层逻辑是什么?
什么是底层逻辑?
按照刘润老师的解释就是:
“事物间的共同点,就是底层逻辑。
只有不同之中的相同之处、变化背后不变的东西,才是底层逻辑。
......
底层逻辑+环境变量 = 方法论”
他还说:“只有底层逻辑,才是有生命力的。”
所以我们要来探讨一下:软件测试的底层逻辑是什么?
对软件测试的基本认知,使我们达成共识,从而基于这个共识,更容易去讨论软件测试的底层逻辑。对软件测试的基本认知,需要精简到一句话来描述,即抓住软件测试的本质,以简洁的方式描述正确的软件测试价值观,但不是某个人的软件测试价值观,而是能被大多数人接受的软件测试价值观。
软件测试是验证软件功能特性是否满足需求; 软件测试就是发现软件中存在的缺陷 软件测试包含了静态测试——需求、设计、代码的评审活动 软件测试是系统、完整地评估软件产品质量,提供质量信息 软件测试是暴露、揭示产品质量风险 软件测试不仅是技术性活动,而且是社会性、心理等多方面的综合性活动。 软件测试是通过投入质量保障性成本来极大地减少劣质成本
这里强调对用户真实需求的理解,一方面体现“没有用户就没有质量,质量相对用户而存在”,我们必须从用户角度出发来完成测试,另方面是用户的真实需求,而不是虚假的、错误的需求,业务的需求最终要分解成用户角色的需求,而系统的功能/非功能性需求也是为了满足用户的需求。 这里提到的“软件产品”不局限于程序,还包括数据、需求文档、设计文档、代码、用户手册、技术手册等。
为什么测? 测什么? 如何测?
为什么测?只要是人做的工作,就不能保证万无一失,会存在问题。如果软件带着问题出去,就很有可能给客户带来损失或让客户不满意,最终导致企业的利益受损。过去无数的质量事故,也证明了这一点,在交付给客户之前,软件需要得到充分的测试,否则后果严重。 测什么?取决于交付的质量目标,即从质量目标出发,进行目标分解,然后针对每一个特地的子目标来确定要获得的有关被测对象的质量数据,从而确定其测试范围或测试项。如果再进一步,我们根据用户对质量特性、功能特性的感受不同来决定测试项的优先级。这部分属于测试分析的工作,并涉及测试风险和测试策略。 如何测?就是找到获取被测对象的质量数据的方式、方法或手段,包括测试方案设计、场景设计、测试用例或测试数据等的设计。
第1问的答案所呈现的底层逻辑:测试是不能穷尽的,测试总是有风险的,而且开发写出的Bug越多,测试漏掉的Bug越多;测试只能证明已发现的缺陷是缺陷,不能证明软件没有缺陷,因为测试是一个样本实验。 第2问的答案所呈现的底层逻辑:对所做的测试工作(包括测试目标的制定、测试分析的过程以及对应的测试设计方法)能解释清楚,而且测试不是孤立的工作,受需求(如需求模糊)、系统设计(如耦合性、复杂性)、编程(如偷偷修改代码)等影响,测试要与产品、开发等紧密合作。 第3问的答案所呈现的底层逻辑:我们可以在开发写完代码之前完成测试分析、测试计划和测试设计,但系统层次的测试执行需要等待开发完成版本构建,测试执行是后期工作,测试时间容易被开发前期工作挤掉一部分,项目的延期容易造成错觉——测试拖后腿。
测试设计是基于测试分析的结果,运用合适的方法完成测试数据、测试场景或测试用例的设计。按照工程思维的方式,解决方案不只一个,要设计多个方案,从中选出更优或最优的方案。
测试设计的本质是以更有效的方式覆盖测试需求,从场景覆盖、逻辑覆盖、路径覆盖和数据覆盖等不同覆盖策略中选择一种或几种。测试设计也是一个循序渐进的过程,不断完善的过程。
测试设计是辩证统一的思维过程,既有严密的逻辑思维,也有跳跃式、发散性的创造性思维;既是黑盒测试方法和白盒测试方法的对立统一、静态测试和动态测试的融合,也是主动测试和被动测试的融合......只有这样才能更彻底地满足设计要求,更快地完成测试以实现测试目标。
6. 测试自动化的底层逻辑
测试自动化就是要充分发挥工具的作用或价值,例如工具能百分之百地执行命令、任劳任怨,所以自动化测试适合机械、单调的测试工作,如回归测试、性能负载测试、压力测试、兼容性测试、BVT(版本构建验证测试)等。
测试自动化的脚本开发和执行是建立在测试分析和设计之上,如果测试分析和设计存在问题,依靠工具是无法解决这类问题的。有更好的测试分析和设计,才有更好的自动化测试,所以我们清楚测试分析/设计与自动化测试的关系显得非常重要。
工具的开发和使用、脚本的开发和使用都是由人完成的,所以人还是第一位的,工具是第二位的。测试自动化还受到文化、流程的影响,测试自动化能否成功不是一个技术问题,今天来看,技术上已经没有障碍了,障碍往往出现在企业的文化、研发流程和开发质量(如软件实现的规范性、可测试性等)等方面。
测试自动化的底层逻辑之一:工具重要,但人才是决定的因素;
测试自动化的底层逻辑之二:自动化测试是建立在测试分析与设计的基础之上;
测试自动化的底层逻辑之三:一切适合自动化的测试工作都尽可能地被自动化,同时要创造有利于自动化测试的环境。
从对人负责的角度,重新理解软件测试 抛砖引玉,讨论如何更好地为测试而学 看家本领之三:软件测试的批判性思维 读了这篇文章,受益终身:敏捷测试思维模式 我见过最大的世面,是2013年负债1万去上海听了一场雅尼的音乐会 只要坚信自己,任何目标都是能实现的 【软件测试能力图谱】升级版 软件测试人员迷茫之中如何找到职业发展的方向? 永远无法改变别人、只能改变自己:持续学习是最好的途径
贯穿整个研发周期,形成闭环,并持续改进测试流程
基于风险的测试策略是必不可少的
以终为始、系统地分析测试需求,在资源和测试目标之间寻求平衡
测试设计是艺术,更要创新、融合
在分析和设计的基础上,尽可能地实现自动化测试
讲好测试故事,和各方一致、协同工作