保证交付效率和质量把控是一项业务长远、稳定发展的必经之路,来自微信支付的张洪晖在第二届小程序云开发技术峰会上就介绍了高速发展的业务团队如何利用小程序云开发搞定持续交付和质量管控。
在上半部分文章中,作者主要介绍了微信支付境外团队应用云开发的背景,以及在持续交付侧做出的探索实践。下半部分文章将聚焦于团队在质量管控中做出的尝试。
为什么需要质量管控
先来介绍一下金融业务下的质量难题,很多团队可能经常会遇到一些质量问题。大家可以思考一下,在不把控质量的情况下追求效率是否有实质性作用?
对于这个问题,以微信支付为例:微信支付是一个传统金融与互联网的结合。传统金融的稳定性要求比较高,一定程度上可以牺牲效率来换取稳定性,而互联网追求的就是效率,当质量和效率进行结合的时候,对团队要求是非常高的。
举个例子,我们团队小程序的发布节奏是平均每周一个版本,每天平均 新增800行代码、修改300行代码。业务压力来了之后,开发同学进行代码的变更时就涉及到质量管控问题,这反过来可能会影响效率。例如,在进行重构和代码的修修补补时,其他需求的涌入,会加大整个业务的压力,长此以往,很可能进入到一种负循环中。
那么,如何破局?常规思路下,业务压力大,首先想到就是通过增加人力来缓解业务压力,但由于每个人的代码风格不尽相同,人员增多也增加了代码的管控难度。而在重构方面,团队通过持续交付的流水线、重构抑制效率的损失,但反过来,也存在重构某些代码影响线上业务的风险。
由此,为了解决这个痛点,团队提出了非常重要的一点——质量管控。
质量管控
下面重点介绍下团队是如何省心又省力地做好质量管控。
这是团队在优化质量管控前的情况,总体来说,流程分为需求、开发、发布和线上阶段。概括来说,可以分为事前、事中和事后三个阶段。
对于金融业务来说,这真的够了吗?事实上,以上流程存在一定的隐患,以小程序的底层架构为例,相信对小程序开发熟悉的同学非常了解,图中的逻辑层和渲染层是分离的,也即逻辑层无法拿到渲染层的结果,没有办法对渲染层进行监控。
假设在这种情况下,账单和资金展示出现了问题,一定会引起用户的投诉,那么,如何防范这种情况的发生?
首先,团队便想到做标准化的组件,其中最主要的就是金额渲染的组件,不单要做,还要考虑开发同学有没有真正用起来。为此,在开发流程当中,会对敏感字段进行一些扫描,来看一下组件是否有被正确的使用。
下图左侧是一个例子,我们通过关键字检测到这段代码没有正确使用金额渲染的组件,就立即停止了代码的提交。并且,为了增强检测的力度,团队也会在流水线中进行关键字的扫描。
静态金额渲染检查一定程度上解决了我们的问题,但是它足够安全吗?当然不是的。试想,如果关键词中的 money 拼错了,写成了 mnoey,是不是就被漏掉了?另外我们 UI 也有可能溢出,导致账单或资金展示出错的风险。
这里团队就引入了一个 UI 自动化截屏的方案,底层基于小程序开发者工具的 automator 的能力,实现自动地拉起开发者工具,并且跳转到对应的页面,然后对数量进行拦截(提前写好接口用例),在拦截之后,会对页面进行滚动截屏,截下来的图片会进行图片的比对并归档,在归档之后,还会通知产品和研发去进行审核。
举个例子,我们用一个命令启动了开发者工具,在开发者工具启动之后,会启动模拟器,模拟器会根据我们预设好的一个路径去跳转对应的页面,并自动进行滚动截屏。当我们截完所有的页面后,会在本地将这些图片保存下来,以供比对和归档。
左边是我们的旧截图,右边是我们的新截图,两个截屏之间进行对比,中间是对比,发现底部的优惠券区域有所变化:新增了小红点。由此我们就只需关心本次变更是否有影响到这一块逻辑,如果有的话,需要及时排查问题。
这里就是刚才讲到的质量管控的总体思路,是分为事前、事中和事后三个阶段进行。
总结
最后,总结下团队为什么使用云开发,以及云开发到底给了我们什么样的能力?
第一,云开发给了前端同学一个全栈开发的能力,同时对后端同学也是非常受益的,让后端可以更关注业务的稳定性。
第二,云开发成本非常低,具体包括低开发成本,低开发门槛和零运维成本。
第三,团队非常看重云开发的生态能力,包括接入了微信支付、COS 和 redis各种各样的能力套件,都支持开箱即用。
用上云开发之后,大家也可以思考一下是否有「用好」云开发呢?本次分享的内容主要集中在如何用云开发提升效能,包括持续构建、持续发布 ABTest 方面,而在质量方面,我们也会有灰度发布、自动化测试以及 UI 的自动截屏,另外,使用云开发的过程中也运用到了微信的私有链路,可以提供强大的安全防刷能力。无论路径如何,这些目标都是一样的,最终都是为了更好地支持我们业务的快速迭代以及小步快跑。
希望大家都能基于云开发这个研发平台,多思考,多尝试,站在云开发的“肩膀”去做出更多适用于自身业务的改良。
产品介绍
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等serverless化能力,可用于云端一体化开发多种端应用(小程序,公众号,Web 应用,Flutter 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
开通云开发:https://console.cloud.tencent.com/tcb?tdl_anchor=techsite
产品文档:https://cloud.tencent.com/product/tcb?from=12763
技术文档:https://cloudbase.net?from=10004
技术交流加Q群:601134960
最新资讯关注微信公众号【腾讯云云开发】
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。