人工智能时代前沿技术社区

首页 > 人工智能 > 热点

持续集成在京东研发的落地及应用

尽管持续集成这个方法论听起来非常得便捷有效,但真正在落地实践应用中也是那么容易被推行的吗?来自京东测试与质量管理团队的高级测试开发工程师熊志男老师为我们解答了这一问题。

作者:谭盼雨 | 2017-11-14 17:01:29 | 来源:飞马网

说到持续集成,相信不少技术人都不陌生。尤其在互联网飞速发展的今天,软件交付的生命周期越来越短,迭代速度越来越快,需要能够尽早去发现问题、解决问题,而不是在急着上线前才来解决。因此,持续集成这种能够尽早发现问题,帮助研发团队实现快速交付的实践模式就被越来越多的企业所采用。

尽管持续集成这个方法论听起来非常得便捷有效,但真正在落地实践应用中也是那么容易被推行的吗?来自京东测试与质量管理团队的高级测试开发工程师熊志男老师为我们解答了这一问题。

图片1.png

熊志男,京东商城-POP平台-测试与质量管理部高级测试开发工程师。具有十年以上软件研发与质量相关经验,主要负责部门拜仁研发团队的代码质量体系建设和持续集成基础平台搭建、建立持续集成及自动化测试流程等。同时也是Testwo社区联合创始人、《京东系统质量保障技术实战》作者之一、《Selenium自动化测试—基于Python语言》译者。

快速迭代模式下的研发流程

首先,熊老师为我们介绍了研发流程的演变过程:从最初小企业里的“小作坊”的研发形式,到研发流程逐渐完善的CMMI阶段,再到今天互联网企业所推崇的“敏捷”发展模式。我们可以发现这么一个趋势:迭代速度越来越快,角色分工越来越明确。

图片2.png

熊老师表示,整个互联网研发流程,总体来说可以分为三大阶段:需求、研发、测试运维阶段。用一个字表现其特点就是:快!

图片3.png

那么在如此快的研发节奏下,该如何去保证效率与质量呢?熊老师给出了以下建议:

* 效率:自动化测试;

自动部署环境;

自动代码扫描;

* 质量:质量迁移;

线上质量;

覆盖率提升;

自动化测试探索

大部分团队并不是从一开始就做持续集成,而是从自动化测试实践开始的。自动化测试里面,有一个分层的概念,自动化测试分层的演化如下:

图片4.png

其中UI测试的特点是上手快,可以使许多测试同学参与进来去写一些自动化脚本;接口测试的要求相对比较高,要求测试人员来写代码;理论上来说单元测试是投入产出比最高的,不依赖于外边测试环境或组件去写方法级的代码。

随着脚本规模的增加,维护成本就会不断提高。这时就需要一些框架,来更简单地实现脚本,可以自动化生成脚本、通过一些手段把脚本与数据分离等。但往往方法还是有限的,从根本上还是要去增加接口测试的比例。接口测试受影响的元素少,变化小,因此在一些业务中,一些核心的接口测试的稳定的,不会经常变动,这样刻意降低维护成本,投入产出较高。这个时候就可以转化策略,以接口测试为主,UI测试为辅,单元测试去逐渐做提升。

图片5.png

熊老师以京东为例,为我们介绍了在探索自动化测试的过程中所做的一些努力:通过做自动化测试框架和接口测试框架,不仅可以使测试人员写脚本更加快捷,而且也可以自动化得检测出一些问题。框架建完之后,就需要自动化测试报告平台,可以将检测结果自动生成报告。熊老师告诉我们,自动化测试收集数据的方式有两种,一种是把数据放在Jenkins server上,另一种是用户本机执行脚本。

图片6.png

有些人会觉得在本地执行有点“low”,但事实上,熊老师告诉我们,在本地执行速度会更快。

除了技术方面外,在测试领域,流程也是同样重要的。

图片7.png

自动化测试流程:

BTV自动化测试:在提交版本的时候,就需要做一个核心功能的自动化回归,可以发现一些问题,可以减少成员之间互相扯皮。

主干自动化回归测试:相比分支开发,主干比较稳定,比较适合进行核心功能的回归测试。

线上核心功能自动化回归:线上核心功能回归可以解决多机部署的问题。

总而言之,我们做自动化测试的目的是为了解放测试人员劳动力,使他们能够做一些更加有价值的工作,促使质量迁移。但在自动化测试的探索过程中,在不同阶段还是会遇到一些瓶颈,这时就需要做持续集成。

持续集成系统演进

提起质量管理,有的人会认为这只是测试人员的工作,但实际上,质量有三个阶段:开发环境质量、测试环境质量、生产环境质量。在开发编码阶段,就应该有质量意识,也就是我们常说的“质量左移”。

图片8.png

提升开发阶段的质量,该从哪里做起呢,熊老师给我们提出了以下建议:

持续编译构建:对已提交的代码进行编译并打包,如果打包不成功的话,就说明你的代码有问题,就需要对代码进行再修改。这样可以减少研发人员的代码冲突问题。

图片9.png

持续代码扫描:在开发提交代码的时候,它可以通过Jenkins进行监听,通过变更可以进行自动的代码检测进而去发现一些问题。

图片10.png

自动部署测试环境:在环境不可控的时候,过程会比较麻烦,自动化部署环境可以大大提升效率。

图片11.png

持续集成系统建设:将编译构建、代码扫描、自动部署、自动化测试这四个阶段串联起来形成一个流水线。

图片12.png

独立工具平台建设

尽管持续集成系统有很多优点,但是将四个阶段统一起来,还是会有不灵活的现象,这时,就需要建立独立工具平台。我们可以将系统拆分为:代码质量平台、自动部署平台、自动测试平台。

代码质量平台:包括代码质量分析和应用发布红线。其中代码质量分析除了包括代码违规、安全漏洞等分析外,还包括部门、团队、应用、个人等维度的分析。应用发布红线主要包含质量阈值。

自动部署平台:主要解读的是环境的问题。主要有功能测试分支环境、自动化测试分支环境、开发分支测试、主干稳定测试环境。实现环境的分层,能够为自动化测试提供好的环境。

自动测试平台:最开始做的是数据收集,主要是Jenkins server的收集和本地的收集,主要是查看它的一个用力度等。

实现研发流程自动化

流程具有指导作用、操作步骤、风险控制、质量标准的作用。在快速迭代模式下的研发流程,参与者有需求、研发和测试三方,熊老师建议,在工作交接过程中,尽量采用文档的形式来进行流程控制,尽量把工具打通,保证文档同步、数据同步。避免信息传达不及时出现问题。

图片13.png

实现流程自动化的实现步骤如下:

单点突破:对不同的问题进行单点突破,比如环境上有痛点,那就通过持续集成解决环境的痛点。

养成习惯:在编码过程中养成良好的检查优化习惯。

系统串联:将系统串联起来,再将现有业务融合进来。