2周快速发布新版App靠持续整合搞定,台湾雅虎高速开发术大公开
2017-06-25 07:36:30 | 来源:ithome | 投稿:阿呆 | 编辑:dations

原标题:2周快速发布新版App靠持续整合搞定,台湾雅虎高速开发术大公开

图片来源:

iThome

在2014年,雅虎前执行长Marissa Mayer一声令下,没有通过持续整合(Continuous Integration,CI)的专案不得上线,不只美国团队,顿时也对亚太地区的台湾、日本雅虎团队运作产生极大影响。

在台湾雅虎,贡献营收的重要三大电商App分别是超级商城、拍卖以及购物中心,在台湾总共有超过千万使用者,在2015年时,行动端的流量也已经超过PC端,目前总占台湾雅虎流量的了6成。台湾雅虎这些重要产品的开发也引入了CI工作流程。

现在台湾雅虎也维持2周一个冲刺期(Sprint)发布新版本的步调,由于开发专案必须配合既定促销活动,例如父亲节、母亲节、周年庆等活动,因此团队所面临的挑战在于专案发布的快步调及複杂度。

即便在快节奏下开发产品,Yahoo亚太区电子商务产品研发工程部资深工程师李卿澄表示,开发团队也得确保每次释出版本的品质皆可靠。同时为了让程式码从最初的提交步骤,到最后进入线上环境过程中,都没有任何人为介入,必须大量仰赖自动化流程,「要达到如此作业,雅虎必须建立CI流程。」他认为,导入自动化流程的重要性在于,让开发人员的时间、精力都集中在开发新功能上,而测试、部署等例行公事,可以交由电脑自动化执行。此外,因为这些流程由电脑执行,比人类可靠许多,让软体开发品质上也能获得一定提升。

通过自动化测试程式码才能合併

在软体专案开发流程中,最一开始的起点是工程师完成程式码。在台湾雅虎的工作流程中,要求工程师在送出合併请求(Pull Request)前,必须在本地开发环境进行基本的单元测试。李卿澄表示,接着就会进行Code Review,让团队成员互相了解对方所撰写的程式码,「同时也会开始进行CI自动化流程。」

在CI流程中,程式码接着上传至雅虎内部自行开发的持续部署(Continuous Delivery,CD)平台Screwdriver。此工具结合Jenkins套件执行程式码覆盖率测试,并且产出后续的测试报告。不仅如此,Screwdriver也能进行水平扩充,让开发者可以将测试範围延伸至数个Jenkins丛集。李卿澄表示,除了基础的测试外,开发者也可以利用Screwdriver执行UI介面相关的测试,像是App是否能开启画面,或是App开启后,是否会发生闪退、当机的状况。

当程式码通过Code Review及Screwdriver的测试后,才可以被合併至既有的程式库中。但开发流程还不在此打住,因为还不足以确定程式码品质可以进入正式环境,必须通过3大自动化阶段才算数。

首先是提交暂存(Commit Stage)阶段,此阶段的目的,除确保App可以正确运作外,也会对程式码进行单元测试,检验输入某参数是否会产出预期结果。同时也会进行App的覆盖率测试。

李卿澄解释,当覆盖率越高,代表原始码通过越多自动化测试,未来释出的App也会有一定的品质保证。再者是验收测试,此阶段得进行烟雾测试,确保最重要的功能能正常运作。

最后,当App通过最后非功能性测试就可以释出,此阶段的重点在确保App执行稳定性及效能表现。台湾雅虎在这引入了猴子测试(Monkey Test),撰写脚本程式随机地滑动App,测试其稳定性。而效能表现则执行冷开机测试、记忆体使用量等效能表现。李卿澄表示:「当程式码通过这些自动化阶段后,就是一个可以释出的候选版本」,反之,当没有测试过,工程师就得开始着手进行修改。

即使程式码通过Code Review,也还不足确保该品质足以合併至正式环境中。因此台湾雅虎还额外设定了3个自动化流程,包含提交暂存阶段、验收测试及非功能性测试,通过测试后即可成为候选版本。(图片来源/台湾雅虎)

着手发展适合台湾雅虎的CI工作术

虽然当时Marissa Mayer强硬要求雅虎开发团队引入CI的做法,引起内部不少声浪、反对,但Yahoo亚太区电子商务产品研发工程部资深经理宋志峰表示,台湾雅虎App开发团队受到的影响不多,「我们还为此特别召开读书会,一同讨论、了解CI的原理。」他表示,在台湾雅虎导入CI时,外界对于App开发引入CI的讨论还不热烈,因此,台湾雅虎得要将教课书中的教条,转换成符合自家工作流程的CI。

「在谈CI时,其中一个重要精神就是吹口哨(Whistle),告知工程师程式码发生问题」,他表示,传统的警示方法,不是在仪表板收到警告,就是发送电子邮件给相关开发者,而台湾雅虎想出了一个将示警资讯具象化的有趣作法,就是将一颗颗灯泡架设在工作桌面上,利用灯号变化作为警示,「颜色改变在工作环境中相当敏感。」宋志峰举例,在程式码建置过程中,灯泡会维持一定频率的明灭状态。当程式码出现问题,灯泡就会开始闪烁红灯。反之,程式码正常无误时,就会呈现蓝色。

宋志峰认为,App开发流程,开发者较少讨论CD的原因在于,无论是iOS或Android应用程式开发,「最后一段的部署工作还是得要引入人工作业。」他解释,程式码完整建置后会封装成二进位档案,接着开发者还得要撰写相关的描述文件,后续再上传至App Store、Google Play,「这也是为何相比App,基础架构或Web应用比较有办法引入CD」,他表示,虽然在CI、CD书籍都会介绍一套标準作法,但是在引入现实开发流程中,还得要根据业务需求微调。李卿澄则表示,即使开发者可以无间断地向Google、Apple上传程式码,「瓶颈仍然在这些平台商。」

CI的重要精神就在于告知开发者程式码出现异常,当而台湾雅虎将该资讯具象化的作法,就是将一颗颗灯泡架设在工作桌面上,利用灯号变化作为警示。当程式码出现问题,灯泡就会开始闪烁红灯。反之,程式码正常无误时,就会呈现蓝色。(图片来源/台湾雅虎)

CI可提高开发者对程式码品质的信任

相比过去没有导入CI的开发流程的差异,宋志峰认为,因为程式码发布前都得要通过CI流程中的测试程序,开发者自然会提高对软体专案的信心。在应用程式功能越来越齐全下,如果没有这些自动化流程,难以确保程式码在通过合併请求后,是否会既有的App产生影响,「如果放任品质不确定的程式码发布,等于让使用者进行公测。」

在导入CI后,李卿澄也得出一些开发上的心得:「CI、CD的重要精神就在于,提早让开发者察觉程式码中的异状。」相比1,000行程式码与10行程式码,他表示,开发者比较容易在后者发现异常之处。也因此,控管每次提交的合併请求程式码数量得在一定範围内,可以减轻人工作业的複杂度,「每次程式码提交的行数不要太多,可以确保Code Review的品质。」

Yahoo亚太区电子商务产品研发工程部资深工程师李卿澄表示,CI、CD的重要精神就在于,提早让开发者察觉程式码中的异状,因此,控管开发者提交的程式码数量,可以降低Code Review作业的複杂度。

管控开发者每次合併请求的程式码数量

而宋志峰也认为,提交过多的程式码,除了拉高人工Code Review複杂度,开发者也难综观全局解读程式码。在实施CI之后,他表示,台湾雅虎也整理出了经验法则,得出单一合併请求得落在一定标準範围内,「如果程式码太多,就得要切割成更多小版本发布。」

虽然程式码複杂度,经常与行数成正相关,不过台湾雅虎并没有做出强制规定,「重点还是在于执行测试的複杂度」,李卿澄举例,即使开发者提出一个修改行数极多的合併请求,但其中的操作相当简单,像是仅对错字进行修改,「就算更动的程式码很多,但是複杂度不高。」透过这样措施,在多人协作开发时,也能减少开发者同时修改到同一功能的状况。

宋志峰表示,虽然开发专案必须配合既定促销活动,例如父亲节、母亲节、周年庆都已经事先规画,虽然,开发团队也能提早计画发布计画,「对开发流程不会产生太多影响。」李卿澄也认为,由于程式码已经通过CI中的审核步骤,让工程师每次发布品质都已达候选版本的水準,「目标是程式码一离手,就是随时可以发布的品质。」

前端框架开发也要靠CI流程

除了App开发,目前台湾雅虎内部大量使用的前端开发框架AppDevKit,也是採用几乎一样的CI流程进行开发。主导这个内部框架工具开发的宋志峰表示,在开发超级商城、拍卖等电商App中,由于电子商务App的架构,或开发碰上的问题也都很类似,因此团队才决定一同整併开发者经常使用的函式库,减少开发者重造轮子的状况。

电子商务App中,「最複杂的就是产品页面,里头包含很多资讯」,宋志峰解释,在同一页面中,除产品的照片外,还要列出相关优惠及折价资讯。同时,系统也会依据产品性质,列出消费者可能会购买的推荐产品。

而考量超级商城、拍卖以及购物中心这3大App,在功能上都有所类似之处,因此AppDevKit也整合前端工程师经常使用的功能,像是调整排版、修改文字大小、下拉式更新(Pull to refresh),让前端工程师不须碰上新专案,就得重新开发此功能。宋志峰表示,这些常见功能,不只电商App,也是其他种类App也可多加利用,「当初AppDevKit的设计,就是一个满足通用的开发套件。」

在台湾雅虎电商App中,UI开发也占了相当比例,利用程式码覆盖计算,光是UI程式码就占了单一页面了30%。因此宋志峰表示,利用AppDevKit,开发者大概可以减少3成的开发重工,让工程师可以专心思考能对业务产生影响的新功能。

?

Yahoo亚太区电子商务产品研发工程部资深经理宋志峰表示,因为程式码发布前都得要通过CI流程,开发者自然会提高对软体专案的信心,如果放任品质不一的程式码发布,等同让使用者进行公测。

靠Crash Manager纪录系统当机资料

但是,天底下并没有完美的程式码,就算通过一系列的审核流程,其中也一定会有Bug的存在。因此台湾雅虎内部也有一个监控系统Crash Manager,用来监控使用AppDevKit开发的应用程式每日总共当机的次数。在应用程式当机之后,系统会自动传送一份报告至Crash Manager,列出可能造成当机原因,接着,开发者就会开始着手修复,「App闪退、当机是我们最在意的问题。」李卿澄表示。

宋志峰进一步解释,Crash Manager回传的报告中,会按照年、月、系统版本等分类,纪录App当机的次数。如果有故障排除的需求,开发者也可以浏览更多资讯。

在排除故障中,开发者得要透过App使用者在操作路径上留下的麵包屑(Breadcrumb),重现应用程式发生当机的原因,「最怕不是找不出问题,而是害怕没办法重新验证问题」,因此,李卿澄表示,开发团队必须知道引起系统当机的原因,并且执行同样的操作路径,确定系统不再因此失灵,才可确认修改程式码有效。

将AppDevKit开源,汇聚社群创新点子

近日,台湾雅虎已经将 这个开发套件在GitHub上开源释出。李卿澄笑说,开源会带来很多好处,「好东西要跟大家一起分享」,台湾雅虎历经许多开发痛点,在解决这些恼人的问题后,也希望其他开发者不要碰上一样的问题,「让工程师更专注在新功能,而不是解决杂事。」此外,将AppDevKit放置在GitHub上面,也能集结外部开发者的意见,将合併请求加入主干,使专案更加茁壮。他表示,即使未来有开发者推出更好的分支版本,「我们也很乐见,代表iOS社群不断在改善这个专案,对台湾雅虎也是受惠。」

宋志峰则认为,开源释出AppDevKit,除了外部社群的力量,台湾雅虎也会持续投入AppDevKit专案的开发,「汇聚来自内外的力量,可以让AppDevKit的未来发展更好。」

tags:

上一篇  下一篇

相关:

台湾暴雨成灾 [热点]

图片来源:台湾《中国时报》人民网6月5日电据台湾《中国时报》报道,梅雨成灾,台湾头淹到台湾尾,蓝绿“立委”昨日一致认为,这场水患提醒蔡英文当局应...据台湾中时电子报报道,今日台湾降水破17年纪录,暴雨成灾。台湾第

机器人需求快速增加 [热事件]

Wind数据显示,截至6月22日,机器人概念板块共有26家公司预告了上半年业绩,逾90%的公司实现盈利增长,行业整体向好。工业机器人需求快速增加,但国内机器人产业总体水平与国外尚有差距,中高端市场进口替代空间大。

台湾桃园枪击案致4人丧生 [生活]

台湾桃园市中坜区22日晚发生一起枪击案。枪手在开枪射杀3人后饮弹自尽送医,今日上午经抢救无效死亡,部分器官已捐赠。6月22日晚,台湾桃园市一办公楼发生枪击案,一名歹徒冲进8楼办公室开枪杀死3人,,警方接到报警后赶到

雅虎关闭 News Digest 可惜了这么好一款新闻应用 [快讯]

BI中文站6月23日报道雅虎将于今年6月底关闭NewsDigest新闻应用,事实上,这个应用推出还不到三年时间。雅虎近日在一份有关NewsDigest应用更新的消息中表示,"在今年6月30日之后,我们不会再创建NewsDigest消息了。这

新版法官服夏装来了!替换已使用十年的旧款 [快讯]

据最高人民法院官方微信号23日消息,6月23日,记者从最高人民法院有关部门了解到,2017版的法官服夏装即将替换2007式法官夏装,成为人民法院法官司法的职业服装。据了解,本次仅对法官服夏装改款,目前的法官服夏装系

站长推荐: