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

首页 > 人工智能 > 热点

京东商城的通用代码质量提升方案

质量之于系统犹如健康之于生命,其重要性无需多言。对于大多数企业来说,企业业务的需求与增长情况是无法预料的,很难保证此时可以支撑5万用户量的代码,是否依然可以支撑50万甚至更多的用户量。因此,要保证代码是“长期”高质量是一个非常大的挑战。作为用户量数亿的电子商务平台,京东商城的代码质量提升方案值得众多企业学习参考。接下来,就让我们来看看来自京东测试与质量管理团队的熊志男老师都讲了些什么。

作者:谭盼雨 | 2017-11-28 15:56:41 | 来源:

质量之于系统犹如健康之于生命,其重要性无需多言。对于大多数企业来说,企业业务的需求与增长情况是无法预料的,很难保证此时可以支撑5万用户量的代码,是否依然可以支撑50万甚至更多的用户量。因此,要保证代码是“长期”高质量是一个非常大的挑战。作为用户量数亿的电子商务平台,京东商城的代码质量提升方案值得众多企业学习参考。接下来,就让我们来看看来自京东测试与质量管理团队的熊志男老师都讲了些什么。

为什么要质量左移

熊老师告诉我们,最近几年,京东商城的业务程爆发增长趋势,但开发与测试工作人员数量并没有太多的增长。在这种业务增长量巨大而人员增长有限的情况下,在工作反馈总结会中,往往会出现这样的情况:

测试人员会有很多困惑:开发提交的版本无法测试、BUG总是反复出现、测试时间被压缩导致最终项目出现问题的话测试人员成为“背锅侠”等问题;看到这里,我们会认为测试团队人员很委屈,难道其他阶段的小伙伴是不是就不委屈了?

当然不是!而开发人员同样有很多吐槽:业务压力大、测试评估时间长、测试出现问题的话,开发人员是第一责任人等。

之所以会出现以上问题,究其原因,无非是来自业务的压力。那么,站在测试的立场,该如何去保障代码交付质量呢?

这时,我们就需要站在测试的立场上去理解开发小伙伴的吐槽,进而去努力解决这些问题,比如通过一些方法手段来减少测试时间等,将一些测试工作能提前做的话就提前完成,这就是我们所说的——质量左移。这样才能促使测试与开发更好地合作。

质量左移,即在开发阶段的系统质量,主要是提高开发阶段的代码质量。那么在开发阶段,测试人员会有哪些工作要做呢?熊老师表示,除了测试人员可以做一些代码审查工作之外,开发人员也可以进行一些自测。在此,熊老师重点为我们讲解了代码审查的工作。

据熊老师介绍,目前做的比较多的是在合并主干之前进行的代码审查:Master保持稳定,做到随时发布的状态,因此不能在主干上做开发,当有新需求的时候,会以分支(Branch)的状态进行开发,开发完成后再将其并入主干中。在分支往主干做合并的过程中,做代码审查可以保证主干代码不受污染。

图片1.png

图片2.png

代码扫描工具应用实践

图片3.png

根据人工代码审查出来的内容,我们发现有以下几类问题:代码风格、安全问题、潜在缺陷、代码规范等。审查出的许多问题是偏基础性、初级的问题。但是,人工审查具有不够及时、规则不统一、常有低级错误等缺点。有小伙伴会说,那就用自动代码扫描啊,比如SonarQube、Findbugs、Checkstyle、PMD等工具。尽管自动化代码扫描具有着自动执行、及时反馈的优点,但它不够智能,必须要给它定义一个统一的标准。

代码质量提升实践

什么样的代码是好代码呢?

熊老师告诉我们,好的代码拥有以下标准:功能正确、具有可读性、可维护性、简单、可测试性等。要怎样才能让工具按照这些标准去检测代码呢?熊老师以SonarQube为例,为我们介绍了将这些标准转换为工具标准都有:

图片4.png

熊老师表示,一次性放太多维度的话,不利于推进,会给开发造成压力。这时可以先从其中两个维度开始:潜在bug、代码规则开始。按照这个思路的话,就是从抓虫开始,去发现代码中的一些bug,将不符合的代码抓出来。

相信大多数测试人员都有这样一个同感:查出来的问题开发并不认!这时该怎么办呢?

熊老师告诉我们,之所以会出现这样的问题,是因为自动代码扫描工具规则过多。这时,就需要根据自身需求,进行精简规则。

图片5.png

通过规则裁剪可以形成一个基础的规则集,然后让大家进行挑选,主要包含逻辑判断、空指针、循环、多线程、资源未关闭、POM文件扫描等。这些规则集是开放和测试共同制定的规则集,大家都认可,这在以后的工作中可以减少一些阻力。

有了规则集就够了吗?答案当然是否定的,有一些自身业务的特殊性所特有的规则并不包含在规则集中,这时,就需要进行一些规则开发,将业务中常见的一些问题添加进来。在开发规则之后,进一步的就是自定义规则,通过自定义规则,可以实现将文本规范转化为可执行的规则集。

除了功能层面的措施之外,也需要做一些安全层面的规则插件,从安全文件的扫描做起,去扫描出来一些文件存在的安全风险,并逐渐向代码层面扩展。熊老师强调,尽管规则是非常重要的,但在实际应用中,是需要与实际的研发流程结合起来的。

图片6.png

图片7.png

图片8.png

以下是熊老师与网友们的Q&A:

Q:check的规则研发知道么?知道的话,会不会人为利用规则刻意规避扫描啊?

A:目前这种情况不多。因为确实有违规的话,是可以修改,如果是误报,是可以修改规则的。

Q:只做代码规则扫描对提高软件功能实现方面的质量有帮助吗?必要的人工审查是否也应穿插进行?

A:人工审查是肯定要做的。因为自动审查可以为人工审查提供更多的数据参考。目前的自动化程度,有些业务方面或者设计方面的问题,自动化审查是审查不出来的,因此人工审查是必须要做的。

Q:主线是要保证随时可发布的,那京东的提测是在合并到主线之前还是在合并到主线之后呢?

A:每个阶段都需要做测试,合并前是分支测试,发现bug主要也是在分支阶段,合并后主要是跨模块的链条测试和回归测试,包括上线发布前也会有发布前的功能测试和发布后的功能验证。