持续交付(Continuous Delivery)究竟是什么?Yahoo亚太区产品研发工程部软件工程师李卿澄表示,根据维基百科的定义,持续交付是软件工程中的开发方法。开发团队得在快节奏下开发产品,并且确保每次释出版本的品质皆为可靠。
而李卿澄表示,Yahoo自己有一套定义对持续交付的定义:从提交程序码到产品进入线上环境中,都没有任何人为的介入,一切都要仰赖自动化。「要达到如此,必须建立持续整合的流程。」他表示。
在持续交付中,李卿澄表示,他着重于更快的开发行程及更好的软件品质。而如何在顾及品质的前提下加速开发步调,他表示,必须在开发流程之中尽可能导入自动化,让开发人员的时间、精力都集中在开发新功能上,其他的事情如测试、部署等例行公事,可以透过电脑自动化执行。此外,因为这些流程由电脑执行,比人类可靠许多,让软件品质上也能获得一定的提升。
在开发阶段中,他认为,必须特别注意某些事情,如开发者须确定程序码可以在本地端进行编译,并且自行执行基本单元测试,避免提交品质不佳的原始码到程序库中。另外,Code review也相当重要,让团队中的成员彼此了解对方的程序码,确保程序码应有的品质。
而原始码自提交就开启了自动化流程。他表示,自动化流程要尽可能地结合版本控制系统,让原始码每一次的改变都会自动地产出相对应的上线候选版本,如此在释出最终版本前,就能有许多候选版本中挑选,并且得以决定不同种的功能分别要于哪些版本中释出。
此外,原始码提交后,也可以透过Jenkins等DevOps工具,触发自动化流程。例如程序码若有所改变或者无法通过编译,自动化的流程会立即停止。团队必须停下手边工作,一同思考如何解决问题。如此一来,开发者可以尽快的提早得知问题并且进行修正,避免把问题的版本发布给使用者。
而为了让团队成员对于流程的动态都有所掌握,目前可以透过开源的Web Dashboard显示目前开发的动态。不过,李卿澄认为此方法成效有限。由于团队成员多忙于开发或其他工作,无暇理会这些自动化程式送出的通知。
所以Yahoo决定使用实体灯泡,显示团队目前专案的状况,如绿灯就是代表正确,而红灯代表错误。他表示,视觉化的意义除了让团队快速的得到回馈,也让团队的人都意识到必须为产品品质以及让自动化流程的顺利与否负责。
自动化流程中的3大步骤:提交暂存、验收测试及非功能性测试
他表示,目前导入自动化流程总共有3大步骤,第一是提交暂存(Commit stage),第二是验收测试,第三则是非功能测试。
当程序码通过审核并提交到程序库中,便会进入提交暂存的阶段。此阶段的目的为确保App在技术层级可以运作。另外也要对程序码进行单元测试,检验假想输入是否会产出预期的输出。当单元测试进行结束时,也会针对App进行基本分析,如App的测试覆盖率测试。当覆盖率越高,代表原始码通过越多自动化测试,可预期未来释出的App也会有一定的品质保证。
在验收测试步骤中,团队得衡量是否确实把产品价值传递给使用者。另外,此阶段也要进行基本的UI测试,如烟雾测试,确保最重要的功能是否能运作。如果使用者一开启App就当机,就代表程序码本身存很大的问题。
最后,当App通过最后非功能性测试就可以释出。此阶段主要测试App的稳定性及效能表现。首先要通过猴子测试(Monkey test),即撰写脚本程式随机地滑动App,测试其稳定性。不过,他表示此测试会碰上实务面问题,比如脚本自动打开了飞航模式,导致无法得知与网络相关的测试结果。而效能表现则要测试冷开机测试、记忆体的使用量,或是因为过多UI元件导致App滑动不顺畅。
李卿澄表示,全面自动化目前仍然属于理想阶段。产品在释出前,仍然需经过最后一道的人工测试步骤。不过,他表示,目前人工测试所占比例已经非常的小,仅有比较特别的案例需要经过人工测试,比方说App中涉及金流的过程。但是事情并不在App释出后就打住,如果上架后发现错误,下次便会检讨是否要在流程中增加额外的测试,避免错误再次发生。