敏捷项目中代码质量提升实践

敏捷开发的核心理念就是以最简单有效的方式快速地达成目标,并在这个过程中能够及时地响应外界的变化,做出迅速的调整。上一篇文章

《敏捷项目中的代码质量管理》

主要介绍了通过建立统一的编码规范和Code Review体系来保证代码质量。下面主要从三方面介绍敏捷开发中如何提升开发效率和保证代码质量。

敏捷开发的团队规约

敏捷中会强调仪式感,注重规范和约定。以下几点是敏捷实践中总结的几点实用的团队规约:

1、增量编程,尽快的进行测试

编码的时候,特别是开发复杂功能的时候,借鉴TDD(测试驱动开发)的思想,尽快的进行测试,发现小步幅方式的编码和测试往往比长时间的编码然后再进行测试和重构,具有更高的效率,代码质量也更好。

2、持续提交可编译可执行的代码

敏捷宣言其中一条是工作的软件高于详尽的文档,所以要尽可能频繁的提交代码、收集反馈,持续集成也是基于持续提交。当然必须得时刻保证提交的代码是可编译可执行的,同时不会对其他成员产生不必要的影响。

3、实行代码集体所有制

敏捷开发中不要太强调按功能模块分工,任何成员只要对某段代码足够理解就有权对其重构。可以尝试让开发成员轮换开发不同模块的功能,让每个成员都能对更多的模块有了解,这样不仅有助于大家维护整体的代码质量,也有助于成员开发能力的提升,当然在大型项目中要比较适合进行有条件的所有制,因为当系统比较复杂的时候成员就很难对各个模块都比较熟悉,如果放任随意修改,就存在风险。

代码重构的常见方式

高质量的代码开发一定离不开代码重构,代码重构可以改善代码设计、提升代码可读性、减少bug、甚至提升开发效率。敏捷模式中更应该注重持续的重构。下面介绍几个最常用的重构方法,结合快捷键更能高效重构。另外良好的功能模块划分、良好的继承体系、合适的接口设计等大型的重构下次再讨论,这基于对架构设计和整个项目要有比较深入的理解。

提炼函数(IDEA快捷键Ctrl+Alt+M)

最常用的重构方法之一,提炼的函数以它“做什么”来命名,而不是“怎么做”。当你感觉函数体太长,或者比较复杂,不易于理解的时候,这时候你就应该想到提炼函数,首先配合友好的函数命名,可以让你的代码更加清晰易于理解。其次要关注提炼函数的可复用性,这样也就能很好的避免重复代码。下面以一个例子为例:

当选中的代码需要在多个地方调用的时候就可以抽取出来,提炼后,addAfterThrowingLogger方法做的事情就很好理解了,首先拼装日志,然后将日志发送到Kafka,同时抽取的方法getOperationLog可以被其他方法复用,避免了重复代码。通过快捷键可以一键完成重构。

内联临时变量(IDEA快捷键Ctrl+Alt+N)

去除临时变量,经常是配合提炼函数进行重构

搬移函数

搬移函数是重构理论的重要支柱,如下两种常见情况建议进行函数搬移,另外在进行继承关系梳理、提炼接口等大型重构也需要进行函数搬移。

1、类里面有太多具备不同功能的函数,导致类的内聚性、专一性低并且和很多类耦合。例如SystemDeployImpl这个类里面包含几十个不同功能的方法导致它和另外14个类耦合,但是这个类又不像工具类那样专一性,这时候就可以通过函数搬移,将其中一些函数适当的搬移到调用类中去;

2、函数与另一个类太多的合作导致两个类耦合度高。例如UserModelHelper类的getUserModels方法 被TenantUserService调用3次,被MembergroupUserService调用1次,没有被自身其他方法调用,这时候应该将getUserModels方法搬移到TenantUserService类,这样这个方法就只是跟MembergroupUserService类有合作。

If反转、条件合并、条件提取,逻辑表达式转换(快捷键Alt+Enter)

代码质量扫描

借助一些自动化的工具,能够让我们更好的实践敏捷,Sonarqube是一个功能非常强大的代码质量检查、管理的工具,能够很好的监控我们代码的质量。下面介绍ADCloud团队在如何通过sonar来提升代码质量和开发效率。

1、IDEA+SonarLint插件,开发过程中实时检测代码质量

安装完插件之后,是使用默认的代码规则集进行扫描,当然也可以配置Sonarqube服务器, 使用Sonarqube服务器的代码规则集(Sonarqube上叫质量配置)进行扫描。

进行本地扫描的时候有两种方式一种是全量扫描,一种是针对修改的文件进行扫描(依赖VCS)的增量扫描。如下是刚开始的一个工程使用了默认的校验规则集,进行全量扫描发现工程中54个文件存在了400个问题,这样整个工程代码质量一目了然。同时双击问题就能够实时进行修改,保证本地开发的代码质量。

当然默认的校验规则集一般针对性不够,同时有些问题我们可以忽略,所以应该根据自身的项目配置合适的校验规则集合,以及对规则的严重性机进行设置。校验规则集的扩充主要通过安装sonarqube插件,而校验规则和项目的关联关系,以及自定义校验规则集里的规则个数和严重性可以通过sonarqube页面操作来完成。对于本地代码质量扫描还有PMDPlugin、FindBugs-IDEA(2016年后没有更新)这两个插件,sonarqube安装FindBugs插件后会包含FindBugs-IDEA的扫描规则,如下图PMD会对校验问题进行分类,校验的问题也更多,我觉得其中对代码大小、代码设计、命名、导入包、单元测试、字符串的校验是比较有用的。

2、通过ADCloud建立代码质量自动化审核流水线,实时监控代码分支的代码质量

Sonarqube结合gitlab、CIS(Continuous Integration Servers)是一种主流的对团队的整体代码质量进行监控的方案,也是进行代码Code Review的重要依据。架构如下图所示开发人员将代码提交到源码提交到源码仓库后,自动触发了CIS服务上代码质量扫描任务的执行。扫描完成后,CIS服务会将代码质量报告上传到SonarQube服务器上实时展示给开发者。

目前,浙江移动的麒麟ADCloud平台基于以上流程并结合本地化需求已经集成了全量、增量代码质量自动化审核功能,开发者只需要在可视化界面上对工程应用的源码仓库信息、项目的结构信息以及扫描的时间范围信息进行简单配置,就可以通过平台的流水线进行代码质量的自动化扫描,并能通过平台自动跳转到扫描报告展示的页面。多个维度对代码质量实时展示,能够看到不同类型的问题个数,问题责任人等。如下图所示。

〖★总 结★〗

敏捷开发中对开发有更高的要求,熟悉开发规范以及掌握一定的代码重构方法,养成良好的开发习惯,这是保证开发效率和质量的基础。然后在团队中建立起适合团队的团队规约,通过这些规约来强化团队协作,促进团队提升。另外充分的利用sonar、PMD等自动化工具能够很好的监控代码的质量,对团队的开发效率和质量也会有巨大的提升。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180914G1VFBW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券