究竟什么是软件测试策略?
【看到ThoughtWorks刘冉的好文章《从测试策略到测试架构》,觉得“测试策略”和“测试架构”是软件测试众多概念中比较难以理解的,也必要多谈谈。这次先谈测试策略,并帮助大家区分测试计划、测试方案等概念,下一次再谈测试架构。】
假如我们要测试微信app,测试涉及的范围很大,即使撇开非功能特性,也有不少功能要测试,不仅要测聊天、通讯录、朋友圈、钱包/支付、购物/游戏等众多接口... 而且还要在不同的平台(Android、iOS)和不同型号的手机上进行测试。其测试的工作量不小,如果公司希望这个版本赶在某个好日子上线,原来测试时间可能被进一步压缩,测试就更是捉襟见肘,怎么办?这时就需要测试策略,设法通过分析受影响的区域缩简测试范围,或找到更有效的测试方式(如探索式测试)或方法(E2E方法)减少测试工作量等。
因为软件开发中测试资源和时间是有限的,测试需要策略,更何况测试总是有风险的,就更需要测试策略。什么是软件测试策略?简单地说,软件测试策略就是在测试质量和测试效率之间的一种平衡艺术(Leverage Test)。更明确地说,测试策略是为了以最低的成本最大程度地揭示(/降低)产品的质量风险或尽早地完成测试所选择(或制定的)的最合理/合适的方式、方法、过程等,这里:
最低的成本是指完成测试所需的资源、时间等最少,“最”是相对的,即基于目前的认识或能力所能做到的;
完成测试,即达到特定的测试目标,如达到测试覆盖率的某个值、发现尽可能多的缺陷、完成所有主要功能特性的验证,这也依赖于对“软件测试”是如何理解的,或测试目标是如何定义的;
方式,包括手工方式、自动化方式;探索式测试或基于脚本的传统测试;自己团队测试还是众测、外包;
方法,包括基于需求的、基于数据流、基于控制流、组合测试、形式化等方法、技术、工具等
过程:先测什么、后测试什么;对测试阶段的不同划分等。
为了节省文字,提高阅读效率,通过下列思维导图来描述什么是测试策略。
如果不同意上面的看法,可以参考维基百科和国际测试标准ISO 29119 所给的定义,更欢迎在下面“写留言”。
一般来说测试策略是测试计划的一部分,但也不一完全是。从一个项目来看,在测试需求、测试风险分析之后,需求制定测试策略尽量降低测试风险,在有限的资源和时间内达到测试目标。但通用的测试策略(如测试四象限)、测试分析策略(如启发式测试策略HTSM)、自动化测试策略(如著名的金字塔策略)、通用的回归测试策略就不属于具体项目,也就不属于测试计划,但可能在测试计划中可能采用或强调其应用。测试策略也不等同于测试方案,测试方案是找到如何测试对象的具体方法(完整的解决办法),虽然包含项目级别的测试策略,但也包括具体的技术运用、新的工具定义/设计等。它们有相交,也有区别,见下面图示。另外,测试策略也不仅仅指导测试设计,而且也指导测试的执行。
制定测试策略当然不容易,影响因素很多,需要经验、需要头脑风暴、需要系统的分析、需要创造性的思维、需要技术,这不是本文讨论的范围。
这里主要讨论什么是测试策略。如果还不理解,再举一个例子,基于风险的测试策略就是最常用的测试策略之一(上面说的测试四象限、金字塔策略、启发式测试策略方法HTSM、回归测试策略也非常流行,如果不了解,可以Google,由于时间关系,不在这里介绍)。基于风险的测试策略是指评估测试项的优先级,先进行高优先级的测试项,或者/并 将测试的优质资源(包括人力、物力等)优先放在高优先级的测试项上。如果时间或精力不够,低优先级的测试可以暂时不做。基于风险的测试,也就是根据事情的轻重缓急来决定测试工作的重点和工作的顺序,而这建立在对测试风险的分析评估的基础上。
ISO 29119 还把测试策略还分为组织级和项目级(受CMMI影响),而且还引入测试政策(Testpolicy,TheOrganizational Test Strategy is aligned with the Organizational Test Policy),可能会让你更糊涂,但不妨可以参考参考。
由于最近比较忙、时间有限,匆匆完成。如果还没有理解,我就需要考虑将来再录制一个5-10分钟视频来讲解。但实际上,大家通过查阅更多资料,通过自我学习也是能做到的。部分可参考资料: