团队代码质量这样管理,甩掉技术债务

发表于:2024-3-13 09:19

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:在深圳的程序猿    来源:今日头条

  背景说明
  团队人员较少时,所有编码规范全靠大家自觉执行。团队按照 Gitflow 做版本控制,develop、release、master 分支受保护,向主干合并需要负责人之一做 Code Review进行人工代码审核与检查。不过在开发过程中如果遇到一个特性改动量很大时,代码合并的 Code Review 已经很难阅读了,为了赶工期,人为的把控自然会有松动也会疲惫,久而久之这样的代码又放之任之了,成为了团队的技术债务。因此我们需要一套公开透明的代码质量系统,能随时查看有问题的代码,方便做重构计划。
  SonarQube介绍
  SonarQube是一个开源的代码质量管理系统,它可以从多个维度检测代码质量,可以快速的定位代码中潜在的或者明显的 Bug、错误。
  ·支持超过25种编程语言:Java、PHP、JavaScript、Python、PL/SQL、Kotlin等。
  · 提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在Bug、注释和软件设计报告、指标历史记录
  · 提供了完全自动化的分析:与Maven、Ant、Gradle和持续集成工具(Atlassian Bamboo、Jenkins、Hudson等)
  · 与Eclipse开发环境集成
  · 支持扩展插件
  环境、软件准备
  · Docker、MySQL
  · SonarQube: 7.6 (tag:7.6-community 开始支持kotlin、css)
  · Sonar GitLab Plugin:version 4.1.0(取决于SonarQube版本)
  · GitLab:GitLab Community Edition 8.7.2
  · gitlab-runner:version 1.11.2
  · Sonar Auth GitLab Plugin:version 1.2.2 (可选,取决于SonarQube版本)
  SonarQube安装(docker方式)
  需要先创建空数据库sonar
  docker search sonarqube
  docker pull sonarqube:7.6-community
  docker run -d --name sonarqube \
      -p 9000:9000 \
      -e sonar.jdbc.username=root \
      -e sonar.jdbc.password=123456 \
      -e sonar.jdbc.url=jdbc:mysql://xxx:3306/sonar?useUnicode=true\&autoReconnect=true\&characterEncoding=utf8 \
      sonarqube:7.6-community
  GitLab安装(docker方式)
  可以参照官方安装文档进行安装,本文略过:
  https://docs.gitlab.com/omnibus/docker/
  Sonar GitLab Plugin 安装
  方式一:可以直接下载插件 sonar-gitlab-plugin-4.1.0-SNAPSHOT,放到 <sonarqube_install_dir>/extensions/plugins目录,重启 SonarQube 即可。
  方式二:admin 登录 SonarQube(7.6-community为例),点击 配置 —> 应用市场 —> 搜索 ,输入 GitLab,在列表中点击安装,安装完毕后重启 SonarQube 即可。
SonarQube版本对应Sonar GitLab Plugin版本
  GitLab添加统一认证账号
  为了方便管理,需要在GitLab添加账号(如sonarQube),作为对接 SonarQube 的统一账户,为其赋予项目/项目组开发者权限(添加comment和注释行)。
  使用sonarQube 登录GitLab,获取的User Token为下一步配置使用(不同版本略有差异,以下以两种版本为例)
  ·Community Edition 11.11.0:User Settings —> Access Tokens —>Personal Access Tokens
  · GitLab Community Edition 8.7.2:User Settings —> Account —> Private Token
  SonarQube配置
  admin 登录 SonarQube(7.6-community为例),点击 配置 —> 通用配置 —> GitLab —> Reporting —> 配置 GitLab User Token 以及 GitLab url,其他配置默认即可。
  · GitLab url : GitLab 服务地址(如:https://gitlab.host.com)
  · GitLab User Token :GitLab 上用户的 Token(上一步获取的User Token)
  gitlab-runner
  gitlab-runner介绍与安装配置略过。 编写gitlab-ci.yml,实现日常提交分支提交自动扫描检测代码(ci/sonar_preview.sh,自动检测并对commit添加注释 ),develop、release代码合并则上传检测报告(ci/sonar_analyze.sh ,或者阶段性分支上传检测报告,提交检测报告扫描往往耗时较长,在持续集成过程中,develop、release每次都提交报告也不大必要)。
  Maven
  ci/sonar_preview.sh
  mvn --batch-mode verify sonar:sonar \
      -Dsonar.host.url=http://host:port \
      -Dsonar.login=xxx \
      -Dsonar.password=xxx \
      -Dsonar.analysis.mode=preview \
      -Dsonar.java.binaries=target/sonar \
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID \
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME \
      -Dmaven.test.skip=true
   
  if [ $? -eq 0 ]; then
      echo "sonarqube code-analyze-preview over."
  fi
  ci/sonar_analyze.sh
  mvn --batch-mode verify sonar:sonar \
      -Dsonar.host.url=http://host:port \
      -Dsonar.login=admin \
      -Dsonar.password=xxx \
      -Dsonar.issuesReport.html.enable=true \
      -Dsonar.analysis.mode=publish \
      -Dmaven.test.skip=true
  if [ $? -eq 0 ]; then
      echo "sonarqube code-analyze over."
  fi
  Gradle
  集成sonarqube插件,添加task:
  buildscript {
    dependencies {
      # 在此位置追加以下依赖行
      classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1")
    }
  }
  # plugins段放置位置有要示,放在buildscript段前面会报错,放到文件最末尾也报错,紧跟buildscript放置OK,其余位置没有偿试
  plugins {
    # 添加插件信息
    id("org.sonarqube") version "2.7.1"
  }
  # 声明插件
  apply(plugin:"org.sonarqube")
  # 如果项目不存在嵌套的子项目,则以上配置即可
  # 如果项目存在嵌套的子项目,还要添加以下配置
  subprojects {
      # 在subprojects段中添加以下块内容
      sonarqube {
          properties {
              property("sonar.sources", "src/main/kotlin")
              }
          }
  }
  ci/sonar_preview.sh
  gradle sonarqube \
      -Dsonar.host.url=http://host:port \
      -Dsonar.login=admin \
      -Dsonar.password=admin \
      -Dsonar.analysis.mode=preview \
      -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
      -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME \
      -Dsonar.gitlab.project_id=$CI_PROJECT_ID
      -x test
  if [ $? -eq 0 ]; then
      echo "sonarqube code-analyze-preview over."
  fi
  ci/sonar_analyze.sh
  gradle sonarqube \
      -Dsonar.host.url=http://host:port \
      -Dsonar.login=admin \
      -Dsonar.password=admin \
      -Dsonar.issuesReport.html.enable=true \
      -Dsonar.analysis.mode=publish \
      -x test
  if [ $? -eq 0 ]; then
      echo "sonarqube code-analyze over."
  fi
  gitlab-ci.yml:
  stages:
    - build
    - build-deploy
  sonar_preview:
    stage: build
    script:
      - ci/sonar_preview.sh
    except:
      - develop
      - /^release-.*$/
      - master
    tags:
      - meyours-ci
  sonar_analyze:
    stage: build-deploy
    script:
      - ci/sonar_analyze.sh
    only:
      - develop
      - /^release-.*$/
    tags:
      - meyours-ci
gitlab CI/CD流程(来自Gitlab官方)
  排除扫描的目录
  在实际应用中,我们需要排除某些目录/文件扫描检测(如我们后端代码中jooq生成的实体类文件),以免构建时间过长、消耗资源,配置路径如下:
  *代表一个或多个字符
  **代表一个或多个目录
  整合阿里JAVA开发规约
  下载插件 JAR 包,放到 SonarQube 所在服务器的 <SonarQube Home>\extensions\plugins 目录下,重启SonarQube服务。
  1. 登录 SonarQube 打开 质量配置(profiles)页,点击右上方的【创建】按钮,创建 p3c profiles:
  2. 首次创建会跳转到代码规则配置页面,刚新建的 profile 是没有激活任何规则的,需要手动激活
  3. 跳转到激活页面,搜索【p3c】,点击【批量修改】,激活所有 p3c 规则
  4. 返回质量配置页,我们可以设置 p3c 为默认,点击激活更多规则将sonar way默认规则加入
  插件下载地址:
  https://github.com/rhinoceros/sonar-p3c-pmd/releases/download/pmd-3.2.0-beta-with-p3c1.3.6-pmd6.10.0/sonar-pmd-plugin-3.2.0-SNAPSHOT.jar
  流程与管理
  规范
  为代码编写可执行的单元测试用例,及时执行测试用例并获取代码覆盖率报告,且发布前代码覆盖率必须达到 x% 以上。
  通过这套SonarQube代码质量系统,实时知道工程代码还有哪些待优化的部分以及技术债务。
  详细计划
  ·所有单元测试用例优先保障覆盖率,再关注测试结果验证
  · 技术债务需要清零,并纳入编码规范
  · 静态代码分析对代码质量的标准应逐步提高:内部编码规范
  · 代码重复率不能高于 x%
  · 试行将 Sonar 中的项目代码质量评分纳入绩效考评范围
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号