• 團隊代碼質量這樣管理,甩掉技術債務

    發表于: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號

    久久97久久97精品免视_欧洲国产伦久久久久久_91麻豆精品国产自产在线观_伊人久久大香线蕉综合av