快速迭代的开发方式中的QA实践方法

背景

尽管"小步快跑"的快速迭代开发方式早已成为互联网软件开发的主流指导思想,但大量开发团队在落地这一开发方式时最常遇到的问题就是"如何QA",因为,传统软件行业的QA方式(手动测试,回归测试等)无法适应每天多次上线的迭代节奏。这时,开发团队往往会面临这两种窘境: 要么是为了速度不顾质量,导致线上故障频发;要么是为了质量而固定发布窗口,导致业务不够敏捷。

那么,在快速迭代的开发方式下,究竟应该采用怎样的QA实践才既能控制住风险又能跟上节奏?

本文对小博无线技术团队在2014-2016三年间的QA实践之路进行了总结,并对上面的问题给出如下的答案:

QA无法作为业务变更发布前的一个独立环节存在,它必须被渗透在开发,运维和数据分析的过程中。

采用这种"渗透式"的QA实践方法,我们的线上生产环境可以每天发布数十次变更,并且风险可控。

开发中的QA

由于引入专门的测试人员会带来额外的沟通成本以及在多个系统并行开发上线时在测试人力资源上会形成瓶颈,我们并没有设置专职测试人员。功能测试主要由开发人员自测,上线前的验证流程如下:

  1. 在自己的开发环境中测试;
  2. 在预发布环境中测试, 如有必要,请产品功能设计人员协助测试,主要看对业务功能理解是否正确;
  3. 提出合并变更到发布分支的merge request;
  4. 和另一位开发人员共同逐行阅读该change,向TA说明每一行change的原因。如发现功能实现上的问题,需修改后才能上线;如只是风格方面的问题,则可先上线再重构,重构后再上线一次。

预发布环境的意义

  1. 方便集成测试
  2. 方便开发和产品之间的沟通
  3. 在代码共阅时方便开发之间的沟通

运维中的QA

当merge request通过code review,确认可以上线后,由开发人员自己上线。为了降低风险,提升效率和舒适度,整个上线动作只需要开发人员在CI系统中一键部署即可全自动完成无感知漂移上线[1]. 除了一键部署外,运维基础设施至少还需要提供下面几个基础功能:

一键回滚

原则上,能不回滚则不回滚,一般只有在出现影响可用性的严重问题,万不得已才会回滚。虽然回滚极少发生,但保证可回滚的变更设计却非常重要,任何一个变更都要尽可能设计为可回退的。当新版本上线后发现未预见的严重问题时,可以一键回退到上一个能正常工作的版本。

错误监控和告警推送

使用运维机器人收集并分析系统日志,监控错误日志的数量变化趋势,当某个服务的错误日志数量变化率明显增大时,向该服务的开发和运维人员推送告警。这样,如果新版代码存在问题,开发人员在其上线后的几分钟内就能收到告警,并决定是快速修复还是回滚。

灰度发布

如果发布的某个变更位于影响全局的基础功能模块,为了降低风险,可采用灰度发布,先使用新版本代码处理一小部分流量,观察一段时间,确认无异常后再将新版代码应用到全网。

数据驱动QA

数据驱动QA是一种通过查看,分析或统计数据来确认当前系统状态是否正常,或确定新版代码的实现效果和旧版相比是有提高还是下降的测试办法。

从这个意义上说,上面的"错误监控和告警推送"亦可算是数据驱动QA的方法之一,另外,常用的数据驱动QA的方法还有:

  1. 使用运维机器人周期性检查关键业务数据之间的不变式约束是否成立,例如记账系统中的账目始终要保持平衡,一旦发现不平衡要及时告警并查出原因
  2. 检查关键业务指标是否平稳,例如上一个小时的成单量,不应偏移平均值太多,如果下降太多,有可能是系统可用性下降;如果上涨太多,则有可能存在恶意刷单
  3. 统计和比较不同版本的关键性能指标,利用数据来判断究竟哪个版本的质量更好


[1] 这部分的具体方案和实现可见《云计算十字真言及其在小博无线的实践》中的“漂移”一节:

时间: 2024-08-04 14:24:39

快速迭代的开发方式中的QA实践方法的相关文章

KDD 2011 最佳工业论文中机器学习的实践方法-翻译

作者:黄永刚 Practical machine learning tricks from the KDD 2011 best industry paper 原文链接:http://blog.david-andrzejewski.com/machine-learning/practical-machine-learning-tricks-from-the-kdd-2011-best-industry-paper/ 研究机器学习的论文通常倾向于提出一种新理论或算法,对于问题背景.数据表示.特征工程

快速查出Oracle数据库中锁等待的方法_oracle

通常在大型数据库系统中,为了保证数据的一致性,在对数据库中的数据进行操作时,系统会进行对数据相应的锁定. 这些锁定中有"只读锁"."排它锁","共享排它锁"等多种类型,而且每种类型又有"行级锁"(一次锁住一条记录),"页级锁"(一次锁住一页,即数据库中存储记录的最小可分配单元),"表级锁"(锁住整个表).若为"行级排它锁",则除被锁住的该行外,该表中其它行均可被其它的

快速查找QQ像册中的照片的方法

将照片存放到QQ像册很方便,但照片一多查找却不方便.不妨试试用SOSO图片搜索查找QQ像册中的照片,很快捷的. 1.首先打开SOSO图片搜索(地址:http://image.soso.com): 2.然后登录QQ,接着在搜索文本框中输入照片的关键词: 3.点击"QQ像册"按钮,很快就可以看到搜索结果(结果中的像册权限属性均为公开).

产品是如何快速迭代的

今天在微博上又一次看到有人转发小马哥的:"小步快跑,快速迭代"理论,刚好鄙人近期收集了一些快速迭代的资料,接下来结合自身的经验来浅谈产品的快速迭代方式.这篇文字可能会偏项目管理一些,不过我认为项目管理也是产品经理基本素质之一. 关于立项 这一点相信大家都不陌生,每个产品在经过 BRD.MRD (当然,这两个过程并不是所有产品经理都能参与)之后,就会进入立项阶段.在传统的立项过程中,我们更多的是走流程,项目负责人提出立项申请,项目组进行可行性讨论分析,然后召开大会进行立项评审,负责人根据

从“憋大招”到快速迭代 细数Windows 10变化背后的小秘密

 Windows 10一周岁了.这个史上最不一样的Windows被赋予了太多标签,"增长速度最快的Windows "."最安全的Windows"."最好用的Windows"."最后一个独立版本Windows"--微软(中国)操作系统工程院院长谢育涛表示,Windows10也是史上最有中国印记的Windows. 史上"最"不一样的Windows 微软正试图以完全不同的方式去思考Windows在改变科技行业过程

敏捷开发-快速迭代

今天跟大家分享的是"敏捷开发.快速迭代".我们大都采用的是"瀑布开发模式",有了问题,就得返工,虽然最终的产品会比较齐全完善,但是开发周期太长,开发人员会产生排斥,甚至厌恶的心理.经过YH系统的开发,也且生体会到了这一弊端. 有问题就要去解决它!于是我想到了"敏捷开发".借鉴敏捷开发模式,来改善软件开发过程,提高项目的开发效率. 要想借鉴,首先得弄懂以下3个问题. 1. 什么是敏捷开发 百度百科中是这样解释的:敏捷开发是一种以人为核心.迭代.循序

Google+话题探讨分享:应用快速迭代(敏捷模式)和用户不升级

文章描述:当移动应用"敏捷迭代"遇到"用户不升级". 某个深夜在Google+参与一个话题的讨论,事后觉得这个话题有价值,就继续做思考整理.顺便把stream里的内容转贴在文末留以备份,方便沉淀,也可以让大家继续参与交流讨论. APP升级习惯调查 是这个话题讨论的源头,这篇日志是从移动应用快速迭代升级与用户忽视或者不升级应用之间带来的冲突,引发的一连串的思考和分析. 根据这个话题,我也做了一些延伸的思考. 在移动应用的研发中,应用快速迭代(敏捷模式)和用户不升级应用

Weex在千牛开放中的应用实践

摘要:在2017年1月12日 Weex Conf 2017上,阿里巴巴商家事业部无线千牛团队的无灵结合阿里巴巴无限商家端的实际业务分享了Weex在千牛开放中的应用实践,本文分享了面对业务的各种挑战,无线千牛团队是如何一步步转向Weex的,以及在实际过程中遇到挑战和所做的努力.本文是无灵关于Weex在千牛开放中的应用实践的分享整理. 本文整理自演讲嘉宾的分享视频以及PPT. 本次分享将主要介绍Weex在千牛开放平台中的一些应用实践,今天分享的内容主要分为以下四个部分: 千牛当前的业务场景与挑战 为

Go语言在扫码支付系统中的成功实践

今天的内容主要分四个方面.第一,金融支付系统的一些特点;第二,我们的扫码支付系统技术选型;第三,系统迭代过程中的架构演进;第四,与Go相关的一些坑. 金融支付系统的一些特点 图 1 首先从业务流程入手,其实非常简单.一位消费者结账时,假如选择扫码支付的方式付款 100 元,产生一笔交易信息.如图 1 所示,我们看上面蓝色的线条,通过商家的收款产品,把这 100 元的交易信息送到我们的扫码支付系统,然后传递到后面的微信.支付宝或者其他支持扫码支付的相应钱包,完成这笔交易信息的传递,完成这笔交易处理