第八章:最佳实践¶
代码质量管理体系¶
1. 建立质量标准¶
# 推荐的质量标准
代码质量:
可靠性:
- 新代码 Bug 数: 0
- 可靠性评级: A
安全性:
- 新代码漏洞数: 0
- 安全评级: A
可维护性:
- 代码异味密度: < 5%
- 可维护性评级: A
- 技术债务比率: < 5%
覆盖率:
- 单元测试覆盖率: > 80%
- 新代码覆盖率: > 90%
重复代码:
- 重复率: < 3%
2. 分阶段实施¶
# 实施阶段
## 阶段一:引入期(1-2周)
- 部署 SonarQube
- 配置项目
- 仅分析,不阻断
- 收集基线数据
## 阶段二:适应期(2-4周)
- 设置宽松质量门禁
- 修复现有问题
- 团队培训
- 调整规则配置
## 阶段三:规范期(1-2月)
- 收紧质量门禁
- CI/CD 集成
- PR 分析
- 问题趋势跟踪
## 阶段四:优化期(持续)
- 持续改进规则
- 定期审查效果
- 更新质量标准
- 分享最佳实践
规则配置最佳实践¶
1. 规则分级¶
# 规则严重级别建议
BLOCKER:
- 安全漏洞
- 必定导致错误的问题
- 数据丢失风险
CRITICAL:
- 高风险代码异味
- 性能问题
- 重要安全问题
MAJOR:
- 常见代码异味
- 可维护性问题
- 编码规范
MINOR:
- 轻微代码异味
- 代码风格
- 文档问题
2. 规则排除¶
# 合理的规则排除
# 生成的代码
sonar.exclusions=**/generated/**,**/build/**
# 第三方库
sonar.exclusions=**/vendor/**,**/node_modules/**
# 配置文件
sonar.exclusions=**/*.config.js,**/*.json
# 测试代码(部分规则)
sonar.issue.ignore.multicriteria=test1
sonar.issue.ignore.multicriteria.test1.ruleKey=java:S1192
sonar.issue.ignore.multicriteria.test1.resourceKey=**/test/**
3. 自定义规则¶
质量门禁最佳实践¶
1. 渐进式收紧¶
# 质量门禁演进
# 初始阶段
conditions:
- new_bugs <= 10
- new_vulnerabilities = 0
- new_coverage >= 50%
# 中期阶段
conditions:
- new_bugs <= 5
- new_vulnerabilities = 0
- new_coverage >= 70%
# 目标阶段
conditions:
- new_bugs = 0
- new_vulnerabilities = 0
- new_coverage >= 80%
2. 项目差异化¶
# 不同类型项目的质量门禁
# 核心系统
core-system:
- new_bugs = 0
- new_vulnerabilities = 0
- new_coverage >= 90%
# 一般系统
normal-system:
- new_bugs = 0
- new_vulnerabilities = 0
- new_coverage >= 80%
# 原型项目
prototype:
- new_vulnerabilities = 0
- new_coverage >= 50%
CI/CD 集成最佳实践¶
1. 分析时机¶
# 推荐的分析时机
# PR/MR 分析
trigger:
- pull_request:
types: [opened, synchronize]
# 分支分析
trigger:
- push:
branches: [main, develop]
# 定期分析
schedule:
- cron: '0 0 * * 0' # 每周日
2. 性能优化¶
# 分析性能优化
# 缓存配置
cache:
paths:
- .sonar/cache
- ~/.m2/repository
# 增量分析
script:
- sonar-scanner -Dsonar.analysis.mode=incremental
# 并行执行
jobs:
- test
- sonarqube
3. 失败处理¶
# 失败处理策略
# 仅警告,不阻断
- sonar-scanner -Dsonar.qualitygate.wait=false
# 阻断并通知
- sonar-scanner -Dsonar.qualitygate.wait=true
- notify-on-failure
# 分条件处理
- if: branch == 'main'
then: strict-gate
else: relaxed-gate
问题管理最佳实践¶
1. 问题优先级¶
# 问题处理优先级
## P0 - 立即处理
- 安全漏洞
- 阻断级 Bug
- 生产环境风险
## P1 - 本周处理
- 严重级 Bug
- 重要安全问题
- 高风险代码异味
## P2 - 本月处理
- 主要级问题
- 可维护性问题
## P3 - 后续处理
- 次要级问题
- 代码风格问题
2. 问题分配¶
3. 问题跟踪¶
团队协作最佳实践¶
1. 培训计划¶
# 培训内容
## 基础培训
- SonarQube 基本概念
- 质量门禁理解
- 问题查看和处理
## 进阶培训
- 规则配置
- 自定义规则
- CI/CD 集成
## 专项培训
- 安全分析
- 性能优化
- 最佳实践分享
2. 定期审查¶
3. 激励机制¶
性能优化¶
1. 服务器优化¶
# sonar.properties
# 内存配置
sonar.web.javaAdditionalOpts=-Xms2g -Xmx4g
sonar.search.javaAdditionalOpts=-Xms1g -Xmx2g
# 数据库连接池
sonar.jdbc.maxActive=60
sonar.jdbc.maxIdle=30
# 计算引擎
sonar.ce.javaAdditionalOpts=-Xms1g -Xmx2g
2. 分析优化¶
# 分析优化
# 减少分析范围
sonar.exclusions=**/test/**,**/generated/**
# 禁用不需要的分析
sonar.scm.disabled=true
sonar.coverage.enabled=false
# 增量分析
sonar.analysis.mode=incremental
3. 数据库优化¶
-- 定期清理历史数据
DELETE FROM snapshots WHERE created_at < NOW() - INTERVAL '90 days';
-- 创建索引
CREATE INDEX idx_project_uuid ON snapshots (project_uuid);
监控和告警¶
1. 系统监控¶
2. 质量监控¶
3. 告警配置¶
常见问题解决¶
1. 分析时间过长¶
2. 质量门禁通过率低¶
3. 规则误报¶
小结¶
本章介绍了 SonarQube 的最佳实践:
- 代码质量管理体系
- 规则配置最佳实践
- 质量门禁最佳实践
- CI/CD 集成最佳实践
- 问题管理最佳实践
- 团队协作最佳实践
- 性能优化
- 监控和告警
通过遵循这些最佳实践,可以有效地提升代码质量,减少技术债务,保障软件安全。