聊聊代码质量的保证措施

Posted 点融黑帮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊代码质量的保证措施相关的知识,希望对你有一定的参考价值。

01

质量标准

1. 新增代码不能存在Minor及更严重级别的Issue

2. 已经存在的Major及更严重级别的Issue必须被修复

3. 新曾代码测试覆盖率不能低于项目规定阈值

4. 单元测试必须全部通过

5. 遵循统一的代码风格

02

质量检测工具

1. 静态代码检测:Checkstyle,Alibaba Coding Guidelines(基于PMD),Findbugs,SonarQube

a.Checkstyle、Findbugs使用项目预定义的规则文件,文件目录为${ProjectRoot}/codestyle/checkstyle/

b.Alibaba Coding Guidelines使用  IDE插件自带规则,gradle使用的版本是 1.3.0

c.SonarQube使用的  QualityProfile是   FindBugs + FB-Contrib

2. 基于Jacoco的单元测试覆盖率统计

3. 基于Junit的单元测试

4. 代码格式化工具

5. 符合Restful URL的规则检查(TODO)

6. 基于Jdepend的开发架构规范,尤其是各  module,package之间的依赖关系(TODO)

03

实时方案

1.开发者本地   IDE集成:

开发者在代码提交到git之前,应该在本地执行以下步骤,保证代码提交之前满足质量标准。

a. 安装插件Checkstyle,Alibaba Coding Guidelines(基于 PMD),Findbugs,SonarLint

b. 为Checkstyle,Findbugs插件指定规则文件,在项目代码的codestyle/checkstyle目录下预设了

该项目的规则文件和使用说明,以Intellij IDEA checkstyle举例

聊聊代码质量的保证措施

c.代码格式化使用IDE自带的formater(code style)功能,在项目代码的codestyle/formatting目录下预设了该项目的代码格式化规则文件

d.Checkstyle(View->Tool   Windows->Checkstyle), Checkstyle相关信息和按钮显示在左下部分"Checkstyle scan"窗口。FindBug、SonarLint使用方式类似

聊聊代码质量的保证措施

e.   Alibaba Coding Guidelines(Tool->Alibaba   Coding Guidelines->Alibaba Coding Guidelines Analyze),相关信息和按钮显示在左下部分  "Inspection Result..."窗口,该插件的分析范围是选中的文件或者项目

聊聊代码质量的保证措施

f. 代码格式化,使用     IDE提供的快捷键或者菜单进行多个或者单个文件的格式化。例如:在IDEA上,可以通过快捷键  Ctrl+Alt+L,或者菜单  Code->Reformat Code格式化代码

g. 如果开发者需在IDE环境下获得完整静态代码检测XML或html报告,可以运行gradle build命令,并在 ${ProjectRoot}/build/reports/目录找到相应报告文件

   

2.自动化的代码质量保证和反馈

下图为点融持续交付的流程图,目前实现了从“本地IDE开发”到“合入Develop分支”部分(Restful检查和质检中心Portal除外)。

聊聊代码质量的保证措施

a. 实现原理

i.Bitbucket的  Parameterized Builds for Jenkins Hooks可以在 Bitbucket发生预定义操作时触发Jenkins构建,例如用户发起  pull request时

   

ii.Bitbucket提供了  Restful API,用于更新 pull request的状态,包括  Pipeline2构建结果、SonarQube分析结果、SonarQube   Comment


iii.Jenkins的基于  Groovy的 Pepeline2提供了丰富的功能,包括构建、报告分析、API调用等


iv.SonarQube的  Stash插件可以调用  Bitbucket提供了 Restful API,将 SonarQube分析结果、

SonarQube Comment同步到   Bitbucket

聊聊代码质量的保证措施

b. 配置  

i.项目代码

1.Gradle checkstyle、findbugs、jacoco、pmd、jdepend、sonarqube插件和规则文件:

聊聊代码质量的保证措施
聊聊代码质量的保证措施

ii.Bitbucket(项目级别的设置)

1. 代码不能直接提交到主干。否则,自动化流程将会因为代码直接提交到主干而失效

聊聊代码质量的保证措施

2. 设置   pull requests,要求满足以下三个条件才能 merge代码:

(1)pull request至少被一个人审(SonarQube算一个,所以这里是2个审核者)

(2)并且要修复所有SonarQube报告的Task 

(3)构建必须成功

聊聊代码质量的保证措施

3. 设置Jenkins Hooks(Settings -> Hooks ->   Parameterized BUilds for Jenkins)

聊聊代码质量的保证措施

Build Parameters详细列表:   

NOCACHE=False

REPOSITORY=$REPOSITORY

PROJECT=$PROJECT

PRID=$PRID

BRANCH=$BRANCH

注意:Job Name 一定要和 Jenkins Job 名称保持一致,请参考关于 Jenkins  的配置示例


iii.Jenkins

1. 创建   Pipeline Job,例如:在 Sunday的  dev目录下创建  Job adminconsoleRefactorPipeline,该任务的Job Name为:Sunday/job/dev/job/adminconsoleRefactorPipeline(填到 BitBucket的 Job Name)

2.   Pipeline配置从  git读取

聊聊代码质量的保证措施

iv.SonarQube   

1.   SonarQube需要依赖  mysql,SonarQube和  MySQL都可以使用  Docker安装。SonarQube要使用Stash插件,还需要以官方  SonarQube容器为基础进行扩展SonarQube 和 Mysql Docker的使用,请参考:https://hub.docker.com/_/sonarqube/

https://hub.docker.com/r/_/mysql/

Stash插件介绍和源代码,请参考:https://github.com/AmadeusITGroup/sonar-stash

2. 集成   Stash插件到自定义  Sonar Docker镜像的  Dockerfile(手动构建了 stash插件)

聊聊代码质量的保证措施

3. 运行   SonarQube后,使用  Admin帐号登录,设置    Stash插件,使 SonarQube可以调用  BitBucket的API,更新 Pull Request的  Preview Report和  Comment

聊聊代码质量的保证措施
聊聊代码质量的保证措施

4.Jacoco覆盖率报告和Unit Testing报告收集设置

聊聊代码质量的保证措施

5. 安装插件Checkstyle、Findbugs、PMD插件,获得自定义Quality Profile和更多预定义Quality Profile的功能

聊聊代码质量的保证措施

6. 创建新的SonarQube项目(),生成一个唯一标识项目的Key,这个Key将和项目代码中的Gradle SonarQube插件配置关联

聊聊代码质量的保证措施
聊聊代码质量的保证措施

7.   Quality Profile和  Quality Gate的设置,根据质量标准进行设置SonarQube详细配置

c. 演示效果

i.提交 pull request,自动触发 Jenkins构建,BitBucket状态为正在构建

聊聊代码质量的保证措施
聊聊代码质量的保证措施

ii.构建完成之后,BitBucket的  PullRequest能看到  SonarQube Preview的报告和  Comment

聊聊代码质量的保证措施
聊聊代码质量的保证措施

iii.Jenkins显示构建的  UnitTest、CheckStyle、PMD和  Stage View等构建报告

聊聊代码质量的保证措施
聊聊代码质量的保证措施

iv.如果是执行 SonarQube的  publish模式,SonarQube会生产质量报告(这一步在部署的时候执行,pull request的时候只执行  SonarQube的  preview模式,不生成如下报告)

聊聊代码质量的保证措施



12

往期精彩

聊聊代码质量的保证措施

· 

· 

·  

· 


以上是关于聊聊代码质量的保证措施的主要内容,如果未能解决你的问题,请参考以下文章

聊聊代码质量 - 《学得会,抄得走的提升前端代码质量方法》前言

聊聊代码质量-《学得会,抄得走的提升前端代码质量方法》前言

敏捷过程中如何保证代码质量

代码质量↑,产品质量↑

程序员如何保证代码质量?

代码质量的保证——代码审查