背 景
转转QA一直践行全项目流程的质量把控,QA不再局限于测试阶段,还在积极的推进测试左移,尽早参与测试活动,尽早发现和解决问题,以期望提高交付效率、把控项目质量。
这其中很核心的一环:技术方案评审。在技术方案设计时规避掉一些问题,成本是极低的,就像建造房子,改图纸总比推墙更容易。
目 标
在工作中审视自己和观察同事发现,QA在参与技术方案时通常会有以下几种状态:
- 光听不发表意见,全程都没有问题(没有准备和熟悉方案)
- 听不懂但能提出问题,需要解释才能理解
- 听懂并理解,能发现方案中的问题,提出好的建议
希望通过本文,让大家都能有效参与技术方案评审,避免需求理解偏差,理解并帮助RD完善技术方案,为后续的测试环节做好准备。
动 作
1、技术方案的要求
技术方案的内容格式因RD而异,但理应包含各方需要关注的内容,这些内容是通用的。
以下是本业务QA梳理出的技术方案目录,经和RD讨论后在团队实施,供大家参考。
目录说明:
业务流程:流程图帮助大家理解和理清思路,需要包括正向、逆向、异常链路
核心设计思路:需求中核心的、复杂的逻辑是如何设计的
交互细节:对外提供的和提供给外部的接口、MQ等内容
改动和回归:改动的接口、库表字段和一些配置的说明,开发评估的影响范围
测试建议:不容易测试的环节、容易忽略的测试场景
沙箱和上线:沙箱和线上计划,数据的处理
评审纪要:评审中的问题,需要会后确认的内容
2、评审前置准备
2.1 需求分析转化
梳理需求中的业务场景、相关链路,思考需求中核心的功能应该怎么设计,这样设计的优势是什么(此处是为了和开发的设计思路做比较)
2.2 熟悉技术文档
评审前至少详细阅读一遍技术方案文档。
阅读目标:
- 理解:接收和了解技术方案中的信息,能理解技术方案
- 对比:和自己的设计思路对比,谁的设计更合理
- 审核:找到技术方案的遗漏场景,挖掘技术方案的问题
3、技术方案评审
3.1 思维方式
在技术方案(包括在CASE设计)中,我们通常会使用以下几种思维方式来帮助我们梳理思路
正向 – 完整的正向/分支链路,穷举场景
逆向 – 完整的逆向/异常链路,假设场景
组合 – 梳理复杂多场景的情况,组合交叉
简单 – 用简单的设计实现需要的场景
全局 – 站在业务系统上而不是仅一个服务上考虑,比如与各方的交互
用户 – 根据用户真实操作和体验来设计场景
比较 – 和原有业务流程或市场上做的好的产品进行比较
过程 – 注意过程数据的准确性,中间态变化
3.2 核心:理解设计思路,提出问题和建议
举几个设计上的关注点:
a. 穷举核心业务处理的异常场景,是否都已处理
例如:接口超时、失败,数据为空、字段应符合业务最大长度
b. 关键的业务场景避免重复
例如:前端防抖(重复提交),后端防超卖(并发提交)、防重复执行(重复消费)
c. 性能相关
例如:
占用资源时间长的操作,允许适当延迟的操作,最好使用异步
经常访问的数据做好缓存:内存初始化/存放Redis,缓存更新
批量查询场景是否需要设计分页,分页条件和break结束是否生效
d. 多步操作的数据一致性,是否有使用事务
e. 不同版本、新老数据和在途数据做好兼容
···
需求案例:
【实现一个线上拍卖卖场,创建具有指定开始和结束时间的卖场,发布拍卖商品到卖场】
1.发布商品到卖场,调用量肯定很大就需要设计缓存,需要考虑:
缓存内容
缓存初始化
缓存更新
失效降级
2.如果缓存失效,则需要降级从表中获取,如果表中也没有,则需要创建
3.创建卖场,从配置中读取需要创建的类型、开始时间和结束时间
校验配置正误
如果库表里存在,则不创建
如果库表里不存在,则创建
创建成功,更新缓存
4.发布商品(创建商品,数据落表),穷举发布商品逻辑场景:
调商品中台接口成功
调商品中台接口失败
本地落表成功
本地落表失败
5.幂等(重复发布),保证同时在架的实物商品只能有一个,防止超发超卖
这个过程中,实际设计中我们应避免掉卖场不存在的情况,所以最好是预创建好未来的卖场。
过程数据状态一致:发布商品获取infoId后落表,落表失败删除商品(这里仅举例单商品发布,类似业务都应保证状态一致)
对于测试CASE设计,在技术方案评审中能想到可能的问题点即是我们的测试点
3.3 评估影响范围
1、技术文档中给出的代码改动,对业务功能的影响
2、不同的设计方案,对于业务功能和测试方案的影响
选择实现简单,影响范围小,可扩展的方案;涉及接口的复用或修改,分析对调用方和原业务的影响
不要盲目相信RD提供的影响范围,结合业务理解圈定回归范围
3.4 提高可测性
在技术方案的设计中,要想办法让测试阶段更好测,怎么测的快
1、使用关键日志
提出测试诉求,让RD增加关键日志,比如打印计算过程数据等,通常很有用
2、合理后门
对于需要特殊才能触发的场景,让RD提供后门来触发,帮助测试提效
3、单测/构造
提前准备构造,或向RD提出单测诉求,没有数据源时方便构造数据
4、不好测试的内容
明确需要测试,但不好测试的地方寻得开发帮助,比如指定时间的测试点增加配置来缩短时间
某些组件或某些领域功能不需要QA测试的提前沟通清楚
以上截图的例子都是在技术设计期间考虑到给RD提出的诉求,在测试期间提供了便利。
结 果
1、完善技术方案
发现并纠正产品、开发、测试之间的需求理解偏差
发现需求与技术方案的差异或错误
2、帮助测试方案选型
哪些是核心接口需要单独测试,哪些重要逻辑需要全覆盖。
结合技术方案提前编写合适的Mock构造,提高测试效率。
3、帮助测试设计CASE
针对技术方案里涉及到的场景设计CASE,覆盖隐藏的分支,避免漏测。
通过分析技术方案中的影响范围,明确回归内容,缩小测试范围,保证原功能的基础上减少回归case。
4、提高白盒测试思维
通过技术方案对被测系统和底层实现更了解,Code Review时思路更清晰,同时定位Bug也更快更精准。
5、项目上的变化
通过技术方案梳理的内容,合理评估系统的复杂度,技术排期更准确
各方补充方案中的内容,降低了项目后期又发现遗漏点的问题
QA在测试时覆盖技术方案中get到的测试点,发现潜在的BUG
写在最后
交付高质量产品需要团队成员共同对质量负责,其中一个理念:从源头预防bug产生。
测试同学发现技术方案中的设计问题很难,但可以不断积累这方面的思维,同时利用QA的业务经验,多在业务角度上挖掘问题。
当对技术方案有疑问时,敢于质疑,及时提问,充分参与技术方案的评审,希望大家能发现更多的问题,提出更多的建议。
资源分享
下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】