forked from wangtao/AI4SE_Practices
Compare commits
1 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
ee92c6debe |
|
|
@ -1,4 +1,4 @@
|
|||
# [Code Buddy] - 工具概览
|
||||
# [Refact] - 工具概览
|
||||
|
||||
> **工具类型**:[重构]
|
||||
> **工具分类**:code-generating、debugging、refactoring
|
||||
|
|
@ -7,44 +7,46 @@
|
|||
|
||||
### 工具简介
|
||||
|
||||
CodeBuddy 是腾讯云推出的 AI 编程助手,支持自然语言编程、多文件代码生成、代码补全、单元测试生成等功能。其核心创新是 **Craft 智能体模式**,可通过自然语言指令生成完整项目代码,覆盖从需求设计到部署的全流程开发[简要描述工具的核心功能和定位]
|
||||
Refact AI是一款强大的AI驱动编程助手,专为追求高效和高质量代码的开发者设计,同时保障对代码库的完全掌控。它可无缝集成VS Code、JetBrains等主流IDE,具备基于检索增强生成(RAG)的上下文感知代码补全、AI驱动的代码重构、调试与聊天辅助等功能。
|
||||
|
||||
### 官方网站
|
||||
|
||||
- **官网**:[Tencent Cloud Code Assistant CodeBuddy – AI Code Editor](https://www.codebuddy.ai/) or [腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴](https://copilot.tencent.com/)
|
||||
- **文档**:[腾讯云代码助手 CodeBuddy – AI 代码编辑器](https://copilot.tencent.com/docs/ide/What%20is%20our%20IDE%EF%BC%9F)
|
||||
- **官网**:[[AI Coding Agent for Software Development - Refact.ai - Refact.ai](https://refact.ai/)](https://copilot.tencent.com/)
|
||||
- **文档**:[Refact Documentation | Refact Documentation](https://docs.refact.ai/)
|
||||
- GitHub:[https://github.com/smallcloudai/refact](https://github.com/smallcloudai/refact)
|
||||
|
||||
### 定价信息
|
||||
|
||||
- **免费版**:IDE 完全免费、高频限制速率
|
||||
- **付费版**:旗舰版78/人/月、专享版158/人/月、每月 2000 Credits,
|
||||
- **免费版**:社区版完全免费,速率限制 1 000 次/日
|
||||
- **付费版**:旗舰版10$/人/月;
|
||||
- **开源**:不开源
|
||||
|
||||
### 大模型底座
|
||||
|
||||
- **底层模型**:腾讯混元大模型 + DeepSeek V3 双引擎协同
|
||||
- **模型版本**:DeepSeek-V3.1、GPT-5、Gemini-2.5-Flash
|
||||
- **底层模型**:StarCoder-7B(自训重构 LoRA)+ 可插拔 GPT-3.5 / Claude / CodeLlama
|
||||
- **模型版本**:StarCoder-Refact-7B-v1.5(2025-10)、Claude 4、GPT 4.1、4o、Gemini 2.5 pro
|
||||
|
||||
## 🎯 核心功能
|
||||
|
||||
### 主要功能
|
||||
|
||||
1. **智能代码补全**:基于上下文感知,支持200+语言及框架的精准补全
|
||||
2. **Craft智能体模式**:通过自然语言生成完整项目(含前后端代码、配置文件、部署脚本)
|
||||
3. **代码分析与评审**:多维度检测代码漏洞、性能问题及规范性,提供修复建议
|
||||
4. **单元测试生成**:一键生成高覆盖率的测试用例
|
||||
5. **全栈IDE体验**:集成需求分析、UI设计、代码开发到云端部署的一体化开发平台
|
||||
1. **RAG 代码补全**:基于私有代码库语义检索,单行/多行/块级补全
|
||||
2. **AI 重构**:提取函数/变量、接口迁移、死代码删除、复杂度提示
|
||||
3. **漏洞 & 性能扫描**:OWASP Top-10、常见代码异味实时标记
|
||||
4. **单元测试生成**:一键生成 pytest/JUnit 模板,支持 Mock 自动注入
|
||||
5. **可自托管**:Docker 一键启动,模型与代码永不离开内网
|
||||
|
||||
### 适用场景
|
||||
|
||||
* **国内项目开发**:深度集成微信小程序、腾讯云服务,适合本土化需求
|
||||
* **快速原型搭建**:通过Craft模式快速生成项目骨架,缩短开发周期
|
||||
* **企业级安全合规**:支持私有化部署及等保三级认证,满足金融、政务行业需求
|
||||
* 金融 / 政府 / 医疗等对源码外流零容忍的场景
|
||||
* 团队希望在本地 GPU 工作站统一微调自己的重构模型
|
||||
* 需要“补全+重构+扫描”三合一,而不想装多个插件
|
||||
|
||||
### 不适用场景
|
||||
|
||||
* **深度GitHub生态绑定**:对GitHub生态依赖强的项目适配性较弱
|
||||
* **基础代码补全需求**:仅需简单补全功能的用户可选择其他工具
|
||||
* 无 Docker 运维资源的小团队
|
||||
* 超大型单体(> 2 M 行)首次索引较慢(需 30 min+)
|
||||
* 需要 GUI 可视化重构流程(目前仅文本/ diff 交互)
|
||||
|
||||
## 🛠️ 技术栈支持
|
||||
|
||||
|
|
@ -64,9 +66,10 @@ CodeBuddy 是腾讯云推出的 AI 编程助手,支持自然语言编程、多
|
|||
|
||||
### IDE集成
|
||||
|
||||
* **VS Code**:✅(插件市场一键安装)
|
||||
* **JetBrains系列**:✅(IntelliJ IDEA、PyCharm等)
|
||||
* **微信开发者工具**:✅(插件化支持小程序开发)
|
||||
* **VS Code**:✅ 插件市场 “Refact.ai”
|
||||
* **JetBrains 系列**:✅ IDEA、PyCharm、WebStorm、CLion
|
||||
* **Vim/Neovim**:✅ 官方 LSP 绑定
|
||||
* **其他**:Emacs(社区贡献)
|
||||
|
||||
## 🚀 部署方式
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# [Code Buddy] - 安装配置指南
|
||||
# [Refact] - 安装配置指南
|
||||
|
||||
## 📋 前置要求
|
||||
|
||||
|
|
@ -14,11 +14,10 @@
|
|||
|
||||
#### 1. 注册账号
|
||||
|
||||
1. 访问官网([腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴](https://copilot.tencent.com/ide/))
|
||||
2.
|
||||
3. 点击"注册"或"Sign Up"
|
||||
4. 填写注册信息(邮箱、密码等)
|
||||
5. 验证邮箱
|
||||
1. 访问官网[AI Coding Agent for Software Development - Refact.ai - Refact.ai](https://refact.ai/?utm_source=moge.ai)
|
||||
2. 点击"注册"或"Sign Up"
|
||||
3. 填写注册信息(邮箱、密码等)
|
||||
4. 验证邮箱
|
||||
|
||||
### 方式2:IDE插件安装
|
||||
|
||||
|
|
@ -26,7 +25,7 @@
|
|||
|
||||
1. 打开VS Code
|
||||
2. 点击左侧"扩展"图标(Extensions)
|
||||
3. 搜索"CodeBuddy"
|
||||
3. 搜索"Refac"
|
||||
4. 点击"安装"(Install)
|
||||
5. 安装完成后,点击"重载"(Reload)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,380 +0,0 @@
|
|||
# SonarQube - 工具概览
|
||||
|
||||
> **工具类型**:代码审查
|
||||
> **工具分类**:code-review
|
||||
|
||||
## 📋 基本信息
|
||||
|
||||
### 工具简介
|
||||
|
||||
- **核心功能**:企业级持续代码质量管理平台,支持静态代码分析、安全漏洞检测、代码异味识别、技术债务量化。提供Web界面展示代码质量趋势,集成CI/CD管道自动化审查,支持Quality Gate(质量门禁)机制阻止低质量代码合并。内置500+代码规则,覆盖30+编程语言。
|
||||
- **适用场景**:企业级代码质量管控、DevOps流程集成、技术债务管理、安全合规审计(OWASP、CWE、SANS)、大型团队协作开发、开源项目质量监控、遗留代码重构评估、多项目统一质量标准。
|
||||
|
||||
### 官方网站
|
||||
|
||||
- **官网**:https://www.sonarqube.org/
|
||||
- **文档**:https://docs.sonarqube.org/
|
||||
- **GitHub**:https://github.com/SonarSource/sonarqube
|
||||
- **社区论坛**:https://community.sonarsource.com/
|
||||
|
||||
### 定价信息
|
||||
|
||||
- **社区版**:免费开源,支持基础代码分析和常见语言
|
||||
- **开发者版**:$150/年,支持分支分析、PR装饰
|
||||
- **企业版**:$15,000/年起,支持高级安全检测、组合分析
|
||||
- **数据中心版**:$120,000/年起,支持高可用、横向扩展
|
||||
- **开源**:是(社区版基于LGPL 3.0许可)
|
||||
|
||||
### 技术架构
|
||||
|
||||
- **分析引擎**:静态代码分析(SAST)+ 规则引擎
|
||||
- **语言支持**:基于语言特定分析器(Java、C#、Python、JavaScript等)
|
||||
- **数据库**:PostgreSQL、Oracle、Microsoft SQL Server
|
||||
- **架构模式**:Server-Scanner分离架构
|
||||
- **扫描器**:SonarScanner CLI、Maven插件、Gradle插件、Jenkins插件等
|
||||
|
||||
## 🎯 核心功能
|
||||
|
||||
### 主要功能
|
||||
|
||||
1. **全面的静态代码分析**
|
||||
- **代码质量检测**:500+规则覆盖Bug、代码异味、可维护性问题
|
||||
- **安全漏洞扫描**:OWASP Top 10、CWE Top 25、SANS Top 25覆盖
|
||||
- **热点分析**:识别高风险、高复杂度的代码热点
|
||||
- **重复代码检测**:精确的代码克隆检测算法
|
||||
|
||||
2. **质量门禁(Quality Gate)**
|
||||
- 自定义质量标准(覆盖率、漏洞数、代码异味等)
|
||||
- PR/MR合并前自动检查
|
||||
- 不符合标准自动阻止合并
|
||||
- 支持多级门禁策略
|
||||
|
||||
3. **技术债务量化**
|
||||
- **SQALE方法论**:将代码问题转换为修复时间
|
||||
- **债务比率**:技术债务/开发时间
|
||||
- **趋势分析**:债务增长/减少趋势图表
|
||||
- **优先级排序**:按影响程度排序问题
|
||||
|
||||
4. **安全漏洞管理**
|
||||
- **Taint Analysis**:污点分析追踪数据流
|
||||
- **SAST扫描**:SQL注入、XSS、CSRF、密码学缺陷等
|
||||
- **CVE集成**:关联已知漏洞数据库
|
||||
- **安全热点**:标记需要人工审查的安全敏感代码
|
||||
|
||||
5. **多分支/PR分析**
|
||||
- **长期分支跟踪**:主分支、发布分支独立分析
|
||||
- **PR装饰**:在GitHub/GitLab/Bitbucket上直接显示问题
|
||||
- **增量分析**:仅分析新增/修改代码
|
||||
- **对比分析**:分支间质量差异对比
|
||||
|
||||
6. **可视化报告**
|
||||
- **仪表板**:项目质量概览、趋势图表
|
||||
- **代码浏览器**:在线查看代码和问题标注
|
||||
- **度量指标**:复杂度、覆盖率、重复率、规模等
|
||||
- **PDF报告**:可导出的质量报告
|
||||
|
||||
7. **CI/CD集成**
|
||||
- **Jenkins**:官方插件支持
|
||||
- **GitLab CI/CD**:原生集成
|
||||
- **Azure DevOps**:扩展支持
|
||||
- **GitHub Actions**:Action支持
|
||||
- **其他**:Bamboo、TeamCity、CircleCI等
|
||||
|
||||
### 适用场景
|
||||
|
||||
- 企业代码质量标准化
|
||||
- DevSecOps安全左移
|
||||
- 大型单体应用重构
|
||||
- 微服务架构质量管控
|
||||
- 开源项目公开质量报告
|
||||
- 监管合规审计(金融、医疗等)
|
||||
- 技术团队KPI考核
|
||||
- 代码审查辅助工具
|
||||
|
||||
### 不适用场景
|
||||
|
||||
- 小型个人项目(配置成本高)
|
||||
- 快速原型开发(过于严格)
|
||||
- 动态语言脚本(分析能力有限)
|
||||
- 实时代码审查(延迟较高)
|
||||
- 完全离线环境(需要定期更新规则库)
|
||||
|
||||
## 🛠️ 技术栈支持
|
||||
|
||||
### 支持的编程语言
|
||||
|
||||
**免费(社区版)**:
|
||||
- **Java**:✅ 完整支持(Java 8-21)
|
||||
- **JavaScript/TypeScript**:✅ 完整支持
|
||||
- **Python**:✅ 完整支持(2.7, 3.x)
|
||||
- **C#**:✅ 完整支持(.NET Core/.NET Framework)
|
||||
- **Kotlin**:✅ 支持
|
||||
- **Ruby**:✅ 支持
|
||||
- **Go**:✅ 支持
|
||||
- **Scala**:✅ 支持
|
||||
- **XML**:✅ 支持
|
||||
- **HTML/CSS**:✅ 支持
|
||||
- **PHP**:✅ 支持(基础)
|
||||
|
||||
**商业版额外支持**:
|
||||
- **C/C++**:✅ 完整支持(企业版)
|
||||
- **Objective-C/Swift**:✅ 支持(企业版)
|
||||
- **Apex**:✅ 支持(Salesforce,企业版)
|
||||
- **COBOL**:✅ 支持(企业版)
|
||||
- **PL/SQL**:✅ 支持(企业版)
|
||||
- **T-SQL**:✅ 支持(企业版)
|
||||
- **ABAP**:✅ 支持(企业版)
|
||||
- **VB.NET**:✅ 支持(企业版)
|
||||
- **Flex**:✅ 支持(企业版)
|
||||
|
||||
**总计**:30+编程语言
|
||||
|
||||
### 支持的框架
|
||||
|
||||
- **Java框架**:Spring、Spring Boot、Struts、JSF、Hibernate
|
||||
- **JavaScript框架**:React、Vue、Angular、Node.js、Express
|
||||
- **Python框架**:Django、Flask、FastAPI、Pyramid
|
||||
- **C#框架**:ASP.NET、ASP.NET Core、Entity Framework
|
||||
- **移动端**:Android(Java/Kotlin)、iOS(Swift/Objective-C)
|
||||
- **数据库**:SQL查询分析(PostgreSQL、MySQL、Oracle等)
|
||||
|
||||
### CI/CD集成
|
||||
|
||||
- **Jenkins**:✅ 官方插件(SonarQube Scanner for Jenkins)
|
||||
- **GitLab CI/CD**:✅ 原生支持
|
||||
- **GitHub Actions**:✅ 官方Action
|
||||
- **Azure DevOps**:✅ 扩展支持
|
||||
- **Bitbucket Pipelines**:✅ 支持
|
||||
- **Bamboo**:✅ 插件支持
|
||||
- **TeamCity**:✅ 插件支持
|
||||
- **CircleCI**:✅ Orb支持
|
||||
- **Travis CI**:✅ 配置支持
|
||||
|
||||
### IDE集成
|
||||
|
||||
- **IntelliJ IDEA**:✅ SonarLint插件
|
||||
- **Eclipse**:✅ SonarLint插件
|
||||
- **Visual Studio**:✅ SonarLint插件
|
||||
- **VS Code**:✅ SonarLint插件
|
||||
- **PyCharm**:✅ SonarLint插件
|
||||
- **WebStorm**:✅ SonarLint插件
|
||||
|
||||
**注意**:SonarLint提供本地实时检测,与SonarQube Server同步规则
|
||||
|
||||
## 🚀 部署方式
|
||||
|
||||
### 云端服务
|
||||
|
||||
- **SonarCloud**:✅ SaaS版本(https://sonarcloud.io/)
|
||||
- 公共项目免费
|
||||
- 私有项目付费($10/月起)
|
||||
- 自动更新、免维护
|
||||
- 与GitHub/GitLab/Bitbucket深度集成
|
||||
|
||||
### 本地部署
|
||||
|
||||
- **单机部署**:✅ 支持
|
||||
- Docker容器部署(推荐)
|
||||
- ZIP包直接解压运行
|
||||
- 适合小团队(<100人)
|
||||
|
||||
- **集群部署**:✅ 支持(数据中心版)
|
||||
- 应用服务器集群
|
||||
- 搜索服务器集群(Elasticsearch)
|
||||
- 数据库高可用
|
||||
- 适合大型企业(1000+人)
|
||||
|
||||
### 混合部署
|
||||
|
||||
- **本地Server + SonarCloud备份**:✅ 可行
|
||||
- **多区域部署**:✅ 支持(企业版)
|
||||
|
||||
### 系统要求
|
||||
|
||||
**最低要求**:
|
||||
- CPU:2核
|
||||
- RAM:4GB(推荐8GB+)
|
||||
- 磁盘:10GB(根据项目规模增长)
|
||||
- 数据库:PostgreSQL 12+(推荐)
|
||||
|
||||
**推荐配置**(中型团队):
|
||||
- CPU:4核
|
||||
- RAM:16GB
|
||||
- SSD:100GB
|
||||
- PostgreSQL 14+
|
||||
|
||||
## 📊 版本信息
|
||||
|
||||
### 当前版本
|
||||
|
||||
- **版本号**:SonarQube 10.3 LTS(长期支持版)
|
||||
- **发布日期**:2023-10
|
||||
- **最后更新**:2024-11(10.3.1补丁)
|
||||
|
||||
### 版本历史
|
||||
|
||||
- **10.0**(2023-05):全新UI、改进的安全分析
|
||||
- **9.9 LTS**(2023-02):长期支持版
|
||||
- **9.0**(2022-01):支持Java 17、改进的分支分析
|
||||
- **8.9 LTS**(2021-05):广泛使用的稳定版本
|
||||
- **7.9 LTS**(2019-07):经典稳定版本
|
||||
|
||||
### 更新策略
|
||||
|
||||
- **LTS版本**:每18个月发布,支持3年
|
||||
- **非LTS版本**:每2-3个月发布
|
||||
- **补丁版本**:按需发布安全修复
|
||||
|
||||
## 📈 质量模型
|
||||
|
||||
### SQALE方法论
|
||||
|
||||
SonarQube基于SQALE(Software Quality Assessment based on Lifecycle Expectations)方法论:
|
||||
|
||||
1. **可靠性(Reliability)**
|
||||
- Bug检测和分类
|
||||
- 评级:A-E
|
||||
- 目标:0 Bug
|
||||
|
||||
2. **安全性(Security)**
|
||||
- 漏洞检测
|
||||
- 安全热点标记
|
||||
- 评级:A-E
|
||||
- 目标:0漏洞
|
||||
|
||||
3. **可维护性(Maintainability)**
|
||||
- 代码异味检测
|
||||
- 技术债务量化
|
||||
- 评级:A-E
|
||||
- 目标:债务比率<5%
|
||||
|
||||
4. **覆盖率(Coverage)**
|
||||
- 单元测试覆盖率
|
||||
- 集成测试覆盖率
|
||||
- 目标:>80%
|
||||
|
||||
5. **重复率(Duplication)**
|
||||
- 重复代码百分比
|
||||
- 目标:<3%
|
||||
|
||||
### 问题严重性分类
|
||||
|
||||
- **阻断(Blocker)**:必须立即修复的严重缺陷
|
||||
- **严重(Critical)**:高优先级修复
|
||||
- **主要(Major)**:影响质量的重要问题
|
||||
- **次要(Minor)**:小问题
|
||||
- **信息(Info)**:建议性改进
|
||||
|
||||
## 🔒 安全特性
|
||||
|
||||
### 安全检测能力
|
||||
|
||||
1. **OWASP Top 10覆盖**:100%
|
||||
2. **CWE Top 25覆盖**:95%+
|
||||
3. **SANS Top 25覆盖**:90%+
|
||||
4. **污点分析**:追踪数据流(注入攻击)
|
||||
5. **加密检测**:弱加密算法、硬编码密钥
|
||||
6. **认证授权**:不安全的身份验证模式
|
||||
|
||||
### 合规标准
|
||||
|
||||
- **OWASP ASVS**:应用安全验证标准
|
||||
- **PCI DSS**:支付卡行业数据安全标准
|
||||
- **HIPAA**:医疗数据隐私
|
||||
- **GDPR**:数据保护合规
|
||||
- **ISO 27001**:信息安全管理
|
||||
|
||||
## 📚 学习资源
|
||||
|
||||
- **官方文档**:https://docs.sonarqube.org/latest/
|
||||
- **社区论坛**:https://community.sonarsource.com/
|
||||
- **在线课程**:SonarSource Academy
|
||||
- **YouTube**:SonarSource官方频道
|
||||
- **博客**:https://blog.sonarsource.com/
|
||||
- **演示实例**:https://next.sonarqube.com/sonarqube/
|
||||
|
||||
## 🎓 认证培训
|
||||
|
||||
- **SonarQube管理员认证**
|
||||
- **SonarQube开发者认证**
|
||||
- **企业培训**:定制化培训课程
|
||||
|
||||
## 📞 支持渠道
|
||||
|
||||
- **社区支持**:论坛、Stack Overflow
|
||||
- **商业支持**:
|
||||
- 开发者版:邮件支持
|
||||
- 企业版:7x24技术支持
|
||||
- 数据中心版:专属支持团队
|
||||
- **咨询服务**:架构设计、最佳实践指导
|
||||
|
||||
## 🌟 特色功能
|
||||
|
||||
### Quality Gate(质量门禁)
|
||||
|
||||
```yaml
|
||||
# 示例配置
|
||||
conditions:
|
||||
- metric: new_coverage
|
||||
operator: LESS_THAN
|
||||
value: 80
|
||||
|
||||
- metric: new_security_rating
|
||||
operator: GREATER_THAN
|
||||
value: A
|
||||
|
||||
- metric: new_reliability_rating
|
||||
operator: GREATER_THAN
|
||||
value: A
|
||||
|
||||
- metric: new_maintainability_rating
|
||||
operator: GREATER_THAN
|
||||
value: A
|
||||
```
|
||||
|
||||
### PR装饰(Pull Request Decoration)
|
||||
|
||||
- GitHub/GitLab/Bitbucket集成
|
||||
- PR中直接显示新增问题
|
||||
- 质量门禁状态检查
|
||||
- 自动评论详细分析结果
|
||||
|
||||
### 项目徽章(Badges)
|
||||
|
||||
```markdown
|
||||
[](https://sonarcloud.io/summary/new_code?id=your-project)
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
|
||||
- 质量门禁状态变化通知
|
||||
- 分析完成回调
|
||||
- 集成Slack、Teams、Email等
|
||||
|
||||
## 🏆 行业应用
|
||||
|
||||
### 成功案例
|
||||
|
||||
- **大型企业**:Microsoft、Adobe、eBay使用SonarQube
|
||||
- **开源项目**:Apache、Eclipse、Spring Framework
|
||||
- **金融行业**:多家银行用于代码合规
|
||||
- **政府机构**:用于安全审计
|
||||
|
||||
### 市场占有率
|
||||
|
||||
- **企业级SAST工具**:市场份额前3
|
||||
- **开源社区**:10,000+星标(GitHub)
|
||||
- **使用统计**:400,000+组织使用SonarCloud
|
||||
|
||||
## 🔄 与竞品对比
|
||||
|
||||
| 特性 | SonarQube | Checkmarx | Veracode | Fortify |
|
||||
|------|-----------|-----------|----------|---------|
|
||||
| 开源 | ✅(社区版) | ❌ | ❌ | ❌ |
|
||||
| 价格 | 免费起 | $$$$ | $$$$ | $$$$ |
|
||||
| 语言支持 | 30+ | 25+ | 100+ | 27+ |
|
||||
| 学习曲线 | 中 | 高 | 高 | 高 |
|
||||
| CI/CD集成 | 优秀 | 良好 | 中等 | 良好 |
|
||||
| 社区活跃度 | 极高 | 低 | 低 | 中 |
|
||||
|
||||
---
|
||||
|
|
@ -1,804 +0,0 @@
|
|||
# SonarQube - 安装配置指南
|
||||
|
||||
## 📋 前置要求
|
||||
|
||||
### 系统要求
|
||||
|
||||
- **操作系统**:
|
||||
- Linux(Ubuntu 20.04+、CentOS 7+、RHEL 7+)
|
||||
- Windows Server 2016+
|
||||
- macOS 10.15+(仅用于开发测试)
|
||||
- **硬件要求**:
|
||||
- CPU:最低2核(推荐4核+)
|
||||
- RAM:最低4GB(推荐8GB+,大型项目16GB+)
|
||||
- 磁盘:最低10GB(根据项目规模,建议100GB+ SSD)
|
||||
- **网络要求**:需要访问互联网以下载插件和规则更新
|
||||
|
||||
### 软件依赖
|
||||
|
||||
- **Java**:OpenJDK 17或Oracle JDK 17(必需)
|
||||
- **数据库**:
|
||||
- PostgreSQL 12+(推荐)
|
||||
- Oracle 19c+(企业版)
|
||||
- Microsoft SQL Server 2019+(企业版)
|
||||
- **浏览器**:Chrome、Firefox、Edge最新版本
|
||||
- **Git**:用于代码版本控制(可选但推荐)
|
||||
|
||||
### 网络端口
|
||||
|
||||
- **9000**:SonarQube Web服务器(默认)
|
||||
- **9001**:SonarQube嵌入式Elasticsearch(内部通信)
|
||||
- **5432**:PostgreSQL数据库(如果本地部署)
|
||||
|
||||
## 🔧 安装步骤
|
||||
|
||||
### 方式1:Docker部署(推荐新手)
|
||||
|
||||
#### 1. 安装Docker和Docker Compose
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get update
|
||||
sudo apt-get install docker.io docker-compose
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install docker docker-compose
|
||||
|
||||
# 启动Docker服务
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
```
|
||||
|
||||
#### 2. 创建docker-compose.yml
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
sonarqube:
|
||||
image: sonarqube:10.3-community
|
||||
container_name: sonarqube
|
||||
depends_on:
|
||||
- db
|
||||
environment:
|
||||
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
|
||||
SONAR_JDBC_USERNAME: sonar
|
||||
SONAR_JDBC_PASSWORD: sonar
|
||||
volumes:
|
||||
- sonarqube_data:/opt/sonarqube/data
|
||||
- sonarqube_extensions:/opt/sonarqube/extensions
|
||||
- sonarqube_logs:/opt/sonarqube/logs
|
||||
ports:
|
||||
- "9000:9000"
|
||||
networks:
|
||||
- sonarnet
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
|
||||
db:
|
||||
image: postgres:14
|
||||
container_name: sonarqube-db
|
||||
environment:
|
||||
POSTGRES_USER: sonar
|
||||
POSTGRES_PASSWORD: sonar
|
||||
POSTGRES_DB: sonar
|
||||
volumes:
|
||||
- postgresql_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- sonarnet
|
||||
|
||||
volumes:
|
||||
sonarqube_data:
|
||||
sonarqube_extensions:
|
||||
sonarqube_logs:
|
||||
postgresql_data:
|
||||
|
||||
networks:
|
||||
sonarnet:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
#### 3. 配置系统参数
|
||||
|
||||
```bash
|
||||
# Linux系统需要调整vm参数
|
||||
sudo sysctl -w vm.max_map_count=524288
|
||||
sudo sysctl -w fs.file-max=131072
|
||||
|
||||
# 永久生效
|
||||
echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.conf
|
||||
echo "fs.file-max=131072" | sudo tee -a /etc/sysctl.conf
|
||||
```
|
||||
|
||||
#### 4. 启动SonarQube
|
||||
|
||||
```bash
|
||||
# 启动服务
|
||||
docker-compose up -d
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f sonarqube
|
||||
|
||||
# 等待服务启动(大约1-2分钟)
|
||||
# 访问 http://localhost:9000
|
||||
```
|
||||
|
||||
#### 5. 首次登录
|
||||
|
||||
- 默认账户:`admin`
|
||||
- 默认密码:`admin`
|
||||
- 首次登录会要求修改密码
|
||||
|
||||
### 方式2:ZIP包安装(生产环境推荐)
|
||||
|
||||
#### 1. 安装Java
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get update
|
||||
sudo apt-get install openjdk-17-jdk
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install java-17-openjdk
|
||||
|
||||
# 验证安装
|
||||
java -version
|
||||
```
|
||||
|
||||
#### 2. 安装PostgreSQL
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get install postgresql postgresql-contrib
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install postgresql-server postgresql-contrib
|
||||
|
||||
# 初始化数据库
|
||||
sudo postgresql-setup initdb # CentOS/RHEL
|
||||
sudo systemctl start postgresql
|
||||
sudo systemctl enable postgresql
|
||||
|
||||
# 创建SonarQube数据库
|
||||
sudo -u postgres psql
|
||||
```
|
||||
|
||||
```sql
|
||||
-- 在PostgreSQL中执行
|
||||
CREATE USER sonar WITH PASSWORD 'sonar123';
|
||||
CREATE DATABASE sonar OWNER sonar;
|
||||
GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;
|
||||
\q
|
||||
```
|
||||
|
||||
#### 3. 下载SonarQube
|
||||
|
||||
```bash
|
||||
# 下载最新版本
|
||||
cd /opt
|
||||
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.3.0.82913.zip
|
||||
|
||||
# 解压
|
||||
sudo unzip sonarqube-10.3.0.82913.zip
|
||||
sudo mv sonarqube-10.3.0.82913 sonarqube
|
||||
|
||||
# 创建专用用户
|
||||
sudo useradd -r -s /bin/bash sonar
|
||||
sudo chown -R sonar:sonar /opt/sonarqube
|
||||
```
|
||||
|
||||
#### 4. 配置SonarQube
|
||||
|
||||
编辑 `/opt/sonarqube/conf/sonar.properties`:
|
||||
|
||||
```properties
|
||||
# 数据库配置
|
||||
sonar.jdbc.username=sonar
|
||||
sonar.jdbc.password=sonar123
|
||||
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar
|
||||
|
||||
# Web服务器配置
|
||||
sonar.web.host=0.0.0.0
|
||||
sonar.web.port=9000
|
||||
sonar.web.context=/
|
||||
|
||||
# Elasticsearch配置(内嵌)
|
||||
sonar.search.javaOpts=-Xmx512m -Xms512m
|
||||
|
||||
# 日志配置
|
||||
sonar.log.level=INFO
|
||||
sonar.path.logs=logs
|
||||
```
|
||||
|
||||
#### 5. 配置系统限制
|
||||
|
||||
```bash
|
||||
# 编辑 /etc/security/limits.conf
|
||||
sudo nano /etc/security/limits.conf
|
||||
|
||||
# 添加以下内容
|
||||
sonar - nofile 65536
|
||||
sonar - nproc 4096
|
||||
|
||||
# 编辑 /etc/sysctl.conf
|
||||
sudo nano /etc/sysctl.conf
|
||||
|
||||
# 添加以下内容
|
||||
vm.max_map_count=524288
|
||||
fs.file-max=131072
|
||||
|
||||
# 应用配置
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
#### 6. 创建systemd服务
|
||||
|
||||
创建 `/etc/systemd/system/sonarqube.service`:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=SonarQube service
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
|
||||
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
|
||||
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
|
||||
|
||||
User=sonar
|
||||
Group=sonar
|
||||
Restart=always
|
||||
|
||||
LimitNOFILE=65536
|
||||
LimitNPROC=4096
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
#### 7. 启动SonarQube
|
||||
|
||||
```bash
|
||||
# 重载systemd
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# 启动服务
|
||||
sudo systemctl start sonarqube
|
||||
|
||||
# 设置开机自启
|
||||
sudo systemctl enable sonarqube
|
||||
|
||||
# 查看状态
|
||||
sudo systemctl status sonarqube
|
||||
|
||||
# 查看日志
|
||||
tail -f /opt/sonarqube/logs/sonar.log
|
||||
```
|
||||
|
||||
#### 8. 访问Web界面
|
||||
|
||||
- 浏览器访问:`http://your-server-ip:9000`
|
||||
- 默认账户:`admin` / `admin`
|
||||
- 首次登录修改密码
|
||||
|
||||
### 方式3:使用SonarCloud(SaaS)
|
||||
|
||||
#### 1. 注册账户
|
||||
|
||||
1. 访问 https://sonarcloud.io/
|
||||
2. 使用GitHub/GitLab/Bitbucket/Azure账户登录
|
||||
3. 选择组织(个人或团队)
|
||||
|
||||
#### 2. 导入项目
|
||||
|
||||
1. 点击"Analyze new project"
|
||||
2. 选择代码仓库
|
||||
3. 授权SonarCloud访问
|
||||
4. 等待自动配置完成
|
||||
|
||||
#### 3. 配置CI/CD
|
||||
|
||||
SonarCloud会自动生成配置文件,无需手动安装Server。
|
||||
|
||||
## ⚙️ 配置说明
|
||||
|
||||
### 基础配置
|
||||
|
||||
#### 1. 修改管理员密码
|
||||
|
||||
```bash
|
||||
# 登录后进入:
|
||||
# Administration → Security → Users → admin → Change Password
|
||||
```
|
||||
|
||||
#### 2. 配置SMTP(邮件通知)
|
||||
|
||||
进入 `Administration → Configuration → General Settings → Email`:
|
||||
|
||||
```properties
|
||||
Email prefix: [SonarQube]
|
||||
From address: sonar@yourdomain.com
|
||||
From name: SonarQube
|
||||
SMTP host: smtp.gmail.com
|
||||
SMTP port: 587
|
||||
SMTP username: your-email@gmail.com
|
||||
SMTP password: your-app-password
|
||||
Secure connection: STARTTLS
|
||||
```
|
||||
|
||||
#### 3. 配置认证(LDAP/SAML/OAuth)
|
||||
|
||||
**LDAP配置示例**:
|
||||
|
||||
编辑 `sonar.properties`:
|
||||
|
||||
```properties
|
||||
sonar.security.realm=LDAP
|
||||
ldap.url=ldap://ldap.company.com:389
|
||||
ldap.bindDn=cn=sonar,ou=users,dc=company,dc=com
|
||||
ldap.bindPassword=secret
|
||||
ldap.user.baseDn=ou=users,dc=company,dc=com
|
||||
ldap.user.request=(&(objectClass=inetOrgPerson)(uid={login}))
|
||||
```
|
||||
|
||||
### 项目配置
|
||||
|
||||
#### 1. 创建项目
|
||||
|
||||
```bash
|
||||
# 方法A:通过Web界面
|
||||
# Projects → Create Project → 填写信息
|
||||
|
||||
# 方法B:通过API
|
||||
curl -u admin:password -X POST "http://localhost:9000/api/projects/create?name=my-project&project=my-project-key"
|
||||
```
|
||||
|
||||
#### 2. 配置Quality Gate
|
||||
|
||||
进入 `Quality Gates`:
|
||||
|
||||
```yaml
|
||||
# 创建自定义Quality Gate
|
||||
Name: Strict Quality Gate
|
||||
|
||||
Conditions:
|
||||
- Coverage on New Code >= 80%
|
||||
- Duplicated Lines on New Code <= 3%
|
||||
- Maintainability Rating on New Code = A
|
||||
- Reliability Rating on New Code = A
|
||||
- Security Rating on New Code = A
|
||||
- Security Hotspots Reviewed = 100%
|
||||
```
|
||||
|
||||
#### 3. 设置项目权限
|
||||
|
||||
```bash
|
||||
# Administration → Security → Global Permissions
|
||||
# 或项目级别:
|
||||
# Project → Administration → Permissions
|
||||
|
||||
权限类型:
|
||||
- Browse:查看项目
|
||||
- See Source Code:查看源代码
|
||||
- Execute Analysis:执行分析
|
||||
- Administer:管理项目
|
||||
```
|
||||
|
||||
### SonarScanner配置
|
||||
|
||||
#### 1. 安装SonarScanner CLI
|
||||
|
||||
```bash
|
||||
# 下载SonarScanner
|
||||
cd /opt
|
||||
sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip
|
||||
|
||||
# 解压
|
||||
sudo unzip sonar-scanner-cli-5.0.1.3006-linux.zip
|
||||
sudo mv sonar-scanner-5.0.1.3006-linux sonar-scanner
|
||||
|
||||
# 添加到PATH
|
||||
echo 'export PATH=$PATH:/opt/sonar-scanner/bin' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
|
||||
# 验证安装
|
||||
sonar-scanner --version
|
||||
```
|
||||
|
||||
#### 2. 配置sonar-scanner.properties
|
||||
|
||||
编辑 `/opt/sonar-scanner/conf/sonar-scanner.properties`:
|
||||
|
||||
```properties
|
||||
# SonarQube服务器配置
|
||||
sonar.host.url=http://localhost:9000
|
||||
|
||||
# 可选:默认编码
|
||||
sonar.sourceEncoding=UTF-8
|
||||
|
||||
# 可选:日志级别
|
||||
sonar.log.level=INFO
|
||||
```
|
||||
|
||||
#### 3. 项目配置文件
|
||||
|
||||
在项目根目录创建 `sonar-project.properties`:
|
||||
|
||||
```properties
|
||||
# 项目基本信息
|
||||
sonar.projectKey=my-project
|
||||
sonar.projectName=My Project
|
||||
sonar.projectVersion=1.0
|
||||
|
||||
# 源代码路径
|
||||
sonar.sources=src
|
||||
sonar.tests=tests
|
||||
|
||||
# 排除文件
|
||||
sonar.exclusions=**/vendor/**,**/node_modules/**,**/*.min.js
|
||||
|
||||
# 编码
|
||||
sonar.sourceEncoding=UTF-8
|
||||
|
||||
# 语言特定配置
|
||||
# Python
|
||||
sonar.python.version=3.9
|
||||
sonar.python.coverage.reportPaths=coverage.xml
|
||||
|
||||
# JavaScript
|
||||
sonar.javascript.lcov.reportPaths=coverage/lcov.info
|
||||
|
||||
# Java
|
||||
sonar.java.binaries=target/classes
|
||||
sonar.java.libraries=target/dependency/*.jar
|
||||
```
|
||||
|
||||
### CI/CD集成配置
|
||||
|
||||
#### GitHub Actions
|
||||
|
||||
创建 `.github/workflows/sonarqube.yml`:
|
||||
|
||||
```yaml
|
||||
name: SonarQube Analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, develop]
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
jobs:
|
||||
sonarqube:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # 完整历史用于blame信息
|
||||
|
||||
- name: SonarQube Scan
|
||||
uses: sonarsource/sonarqube-scan-action@master
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
|
||||
with:
|
||||
args: >
|
||||
-Dsonar.projectKey=my-project
|
||||
-Dsonar.sources=src
|
||||
-Dsonar.tests=tests
|
||||
|
||||
- name: SonarQube Quality Gate Check
|
||||
uses: sonarsource/sonarqube-quality-gate-action@master
|
||||
timeout-minutes: 5
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
```
|
||||
|
||||
#### GitLab CI/CD
|
||||
|
||||
在 `.gitlab-ci.yml` 中添加:
|
||||
|
||||
```yaml
|
||||
sonarqube-check:
|
||||
image:
|
||||
name: sonarsource/sonar-scanner-cli:latest
|
||||
entrypoint: [""]
|
||||
variables:
|
||||
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
|
||||
GIT_DEPTH: "0"
|
||||
cache:
|
||||
key: "${CI_JOB_NAME}"
|
||||
paths:
|
||||
- .sonar/cache
|
||||
script:
|
||||
- sonar-scanner
|
||||
-Dsonar.projectKey=my-project
|
||||
-Dsonar.sources=src
|
||||
-Dsonar.host.url=$SONAR_HOST_URL
|
||||
-Dsonar.login=$SONAR_TOKEN
|
||||
only:
|
||||
- merge_requests
|
||||
- main
|
||||
- develop
|
||||
```
|
||||
|
||||
#### Jenkins
|
||||
|
||||
安装"SonarQube Scanner for Jenkins"插件后:
|
||||
|
||||
```groovy
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
stages {
|
||||
stage('SonarQube Analysis') {
|
||||
steps {
|
||||
script {
|
||||
def scannerHome = tool 'SonarScanner'
|
||||
withSonarQubeEnv('SonarQube') {
|
||||
sh "${scannerHome}/bin/sonar-scanner \
|
||||
-Dsonar.projectKey=my-project \
|
||||
-Dsonar.sources=src \
|
||||
-Dsonar.tests=tests"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Quality Gate') {
|
||||
steps {
|
||||
timeout(time: 5, unit: 'MINUTES') {
|
||||
waitForQualityGate abortPipeline: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 高级配置
|
||||
|
||||
#### 1. 分支分析配置(开发者版+)
|
||||
|
||||
```properties
|
||||
# 启用分支分析
|
||||
sonar.branch.name=feature/my-feature
|
||||
sonar.branch.target=main
|
||||
|
||||
# PR分析
|
||||
sonar.pullrequest.key=123
|
||||
sonar.pullrequest.branch=feature/my-feature
|
||||
sonar.pullrequest.base=main
|
||||
```
|
||||
|
||||
#### 2. 多模块项目配置
|
||||
|
||||
```properties
|
||||
# 父项目配置
|
||||
sonar.projectKey=parent-project
|
||||
sonar.modules=module1,module2,module3
|
||||
|
||||
# Module 1
|
||||
module1.sonar.projectName=Module 1
|
||||
module1.sonar.sources=module1/src
|
||||
|
||||
# Module 2
|
||||
module2.sonar.projectName=Module 2
|
||||
module2.sonar.sources=module2/src
|
||||
```
|
||||
|
||||
#### 3. 自定义规则配置
|
||||
|
||||
在Web界面:`Quality Profiles → Create → 选择语言 → 激活/停用规则`
|
||||
|
||||
```bash
|
||||
# 导出Quality Profile
|
||||
curl -u admin:password "http://localhost:9000/api/qualityprofiles/backup?language=py&qualityProfile=MyProfile" > profile.xml
|
||||
|
||||
# 导入Quality Profile
|
||||
curl -u admin:password -F 'backup=@profile.xml' "http://localhost:9000/api/qualityprofiles/restore"
|
||||
```
|
||||
|
||||
## 🔍 使用指南
|
||||
|
||||
### 执行首次分析
|
||||
|
||||
```bash
|
||||
# 1. 生成Token
|
||||
# Web界面:User → My Account → Security → Generate Token
|
||||
|
||||
# 2. 设置环境变量
|
||||
export SONAR_TOKEN=your-token-here
|
||||
|
||||
# 3. 执行分析
|
||||
cd /path/to/your/project
|
||||
sonar-scanner \
|
||||
-Dsonar.projectKey=my-project \
|
||||
-Dsonar.sources=src \
|
||||
-Dsonar.host.url=http://localhost:9000 \
|
||||
-Dsonar.login=$SONAR_TOKEN
|
||||
|
||||
# 4. 查看结果
|
||||
# 访问 http://localhost:9000/dashboard?id=my-project
|
||||
```
|
||||
|
||||
### Maven项目分析
|
||||
|
||||
```bash
|
||||
# 在pom.xml中添加插件配置
|
||||
mvn clean verify sonar:sonar \
|
||||
-Dsonar.projectKey=my-project \
|
||||
-Dsonar.host.url=http://localhost:9000 \
|
||||
-Dsonar.login=$SONAR_TOKEN
|
||||
```
|
||||
|
||||
### Gradle项目分析
|
||||
|
||||
```groovy
|
||||
// build.gradle
|
||||
plugins {
|
||||
id "org.sonarqube" version "4.4.1.3373"
|
||||
}
|
||||
|
||||
sonar {
|
||||
properties {
|
||||
property "sonar.projectKey", "my-project"
|
||||
property "sonar.host.url", "http://localhost:9000"
|
||||
property "sonar.login", System.getenv("SONAR_TOKEN")
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
./gradlew sonar
|
||||
```
|
||||
|
||||
## 🔧 故障排查
|
||||
|
||||
### 常见问题
|
||||
|
||||
**1. Elasticsearch启动失败**
|
||||
|
||||
```bash
|
||||
# 检查vm.max_map_count
|
||||
sysctl vm.max_map_count
|
||||
|
||||
# 如果小于524288,执行:
|
||||
sudo sysctl -w vm.max_map_count=524288
|
||||
```
|
||||
|
||||
**2. 内存不足**
|
||||
|
||||
编辑 `sonar.properties`:
|
||||
|
||||
```properties
|
||||
sonar.ce.javaOpts=-Xmx2048m -Xms512m
|
||||
sonar.web.javaOpts=-Xmx1024m -Xms512m
|
||||
sonar.search.javaOpts=-Xmx1024m -Xms512m
|
||||
```
|
||||
|
||||
**3. 数据库连接失败**
|
||||
|
||||
```bash
|
||||
# 测试数据库连接
|
||||
psql -h localhost -U sonar -d sonar
|
||||
|
||||
# 检查PostgreSQL配置
|
||||
sudo nano /etc/postgresql/14/main/pg_hba.conf
|
||||
# 确保有:
|
||||
# host sonar sonar 127.0.0.1/32 md5
|
||||
```
|
||||
|
||||
**4. 分析超时**
|
||||
|
||||
```properties
|
||||
# 增加超时时间
|
||||
sonar.web.http.maxThreads=50
|
||||
sonar.ce.workerCount=4
|
||||
```
|
||||
|
||||
### 日志查看
|
||||
|
||||
```bash
|
||||
# Web服务日志
|
||||
tail -f /opt/sonarqube/logs/web.log
|
||||
|
||||
# Compute Engine日志
|
||||
tail -f /opt/sonarqube/logs/ce.log
|
||||
|
||||
# Elasticsearch日志
|
||||
tail -f /opt/sonarqube/logs/es.log
|
||||
|
||||
# 访问日志
|
||||
tail -f /opt/sonarqube/logs/access.log
|
||||
```
|
||||
|
||||
## 📚 最佳实践
|
||||
|
||||
### 1. 质量门禁策略
|
||||
|
||||
```
|
||||
新代码质量优先:
|
||||
- 新代码覆盖率 >= 80%
|
||||
- 新代码0漏洞、0 Bug
|
||||
- 新代码可维护性评级 = A
|
||||
|
||||
存量代码渐进改进:
|
||||
- 整体覆盖率每月提升1-2%
|
||||
- 高严重性问题优先修复
|
||||
```
|
||||
|
||||
### 2. 分析频率
|
||||
|
||||
- **主分支**:每次Push触发
|
||||
- **开发分支**:每日定时分析
|
||||
- **PR/MR**:自动触发分析
|
||||
|
||||
### 3. 团队协作
|
||||
|
||||
- 每个开发者安装SonarLint(IDE插件)
|
||||
- 本地实时检测问题
|
||||
- 服务器端定期全量分析
|
||||
- 周度质量报告会议
|
||||
|
||||
### 4. 性能优化
|
||||
|
||||
```properties
|
||||
# 并行分析
|
||||
sonar.ce.workerCount=4
|
||||
|
||||
# 增量分析(减少分析时间)
|
||||
sonar.scm.disabled=false
|
||||
|
||||
# 排除不必要的文件
|
||||
sonar.exclusions=**/test/fixtures/**,**/vendor/**
|
||||
```
|
||||
|
||||
## 🔄 更新与维护
|
||||
|
||||
### 版本升级
|
||||
|
||||
```bash
|
||||
# 1. 备份数据库
|
||||
pg_dump sonar > sonar_backup_$(date +%Y%m%d).sql
|
||||
|
||||
# 2. 备份SonarQube目录
|
||||
cp -r /opt/sonarqube /opt/sonarqube_backup_$(date +%Y%m%d)
|
||||
|
||||
# 3. 下载新版本
|
||||
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-X.Y.Z.zip
|
||||
|
||||
# 4. 解压并替换
|
||||
unzip sonarqube-X.Y.Z.zip
|
||||
# 复制旧版本的conf、data、extensions目录
|
||||
|
||||
# 5. 启动并访问/setup执行数据库迁移
|
||||
```
|
||||
|
||||
### 数据库维护
|
||||
|
||||
```sql
|
||||
-- 定期清理旧数据
|
||||
-- Administration → Configuration → General Settings → Housekeeping
|
||||
|
||||
-- 查看数据库大小
|
||||
SELECT pg_size_pretty(pg_database_size('sonar'));
|
||||
|
||||
-- 数据库真空清理(提升性能)
|
||||
VACUUM FULL ANALYZE;
|
||||
```
|
||||
|
||||
### 插件管理
|
||||
|
||||
```bash
|
||||
# Web界面:Administration → Marketplace
|
||||
# 或手动下载插件到 extensions/plugins/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**注意**:本指南基于SonarQube 10.3 LTS版本,不同版本配置可能略有差异。生产环境部署建议阅读[官方文档](https://docs.sonarqube.org/)。
|
||||
|
|
@ -1,814 +0,0 @@
|
|||
# SonarQube 代码审查测试结果
|
||||
|
||||
本目录包含使用SonarQube对5个PR样例进行代码审查的测试结果。
|
||||
|
||||
## 📋 测试环境
|
||||
|
||||
- **工具版本**:SonarQube 10.3.0 Community Edition (LTS)
|
||||
- **SonarScanner**:sonar-scanner-cli 5.0.1
|
||||
- **数据库**:PostgreSQL 14
|
||||
- **测试日期**:2025-12-02
|
||||
- **分析器**:Python Analyzer 4.8.0
|
||||
- **测试样例**:与Cursor、GitHub Copilot相同的5个PR样例
|
||||
|
||||
## 📊 测试概览
|
||||
|
||||
| PR编号 | 问题类型 | 严重性 | 实际问题数 | 检测到问题数 | 检测率 | 误报数 | 误报率 |
|
||||
|--------|----------|--------|-----------|-------------|--------|--------|--------|
|
||||
| PR#1 | SQL注入漏洞 | 高 | 4 | 4 | 100% | 0 | 0% |
|
||||
| PR#2 | 文件上传漏洞 | 高 | 5 | 5 | 100% | 1 | 17% |
|
||||
| PR#3 | 性能问题 | 中 | 5 | 3 | 60% | 1 | 25% |
|
||||
| PR#4 | 逻辑错误 | 中-高 | 7 | 4 | 57% | 0 | 0% |
|
||||
| PR#5 | 代码风格 | 低 | 22 | 22 | 100% | 0 | 0% |
|
||||
| **总计** | - | - | **43** | **38** | **88%** | **2** | **5%** |
|
||||
|
||||
## 🎯 详细测试结果
|
||||
|
||||
### PR #1: SQL注入漏洞测试
|
||||
|
||||
**文件**:`pr1-sql-injection.py`
|
||||
|
||||
#### SonarQube分析报告
|
||||
|
||||
```
|
||||
分析时间:2025-12-02
|
||||
分析耗时:3.2秒
|
||||
代码行数:45行
|
||||
问题总数:4个(全部为阻断级别)
|
||||
技术债务:2小时20分钟
|
||||
```
|
||||
|
||||
#### 检测到的问题 ✅
|
||||
|
||||
**1. SQL注入漏洞 - 用户登录** (BLOCKER - CWE-89)
|
||||
- **位置**:第12行
|
||||
- **规则**:`python:S3649` - SQL queries should not be vulnerable to injection attacks
|
||||
- **严重性**:阻断(Blocker)
|
||||
- **描述**:
|
||||
```
|
||||
使用字符串格式化构建SQL查询,攻击者可以注入恶意SQL代码。
|
||||
|
||||
不安全代码:
|
||||
query = f"SELECT * FROM users WHERE username='{username}'"
|
||||
|
||||
攻击示例:
|
||||
username = "admin' OR '1'='1"
|
||||
结果查询:SELECT * FROM users WHERE username='admin' OR '1'='1'
|
||||
```
|
||||
- **修复建议**:
|
||||
```python
|
||||
# 使用参数化查询
|
||||
cursor.execute(
|
||||
"SELECT * FROM users WHERE username=? AND password=?",
|
||||
(username, password)
|
||||
)
|
||||
```
|
||||
- **OWASP分类**:A03:2021 – Injection
|
||||
- **修复时间估算**:30分钟
|
||||
|
||||
**2. SQL注入漏洞 - 搜索功能** (BLOCKER - CWE-89)
|
||||
- **位置**:第21行
|
||||
- **规则**:`python:S3649`
|
||||
- **描述**:搜索参数直接拼接到SQL LIKE子句中
|
||||
- **代码片段**:
|
||||
```python
|
||||
query = f"SELECT * FROM products WHERE name LIKE '%{search}%'"
|
||||
```
|
||||
- **修复建议**:使用参数化查询配合LIKE通配符
|
||||
- **修复时间估算**:20分钟
|
||||
|
||||
**3. SQL注入漏洞 - 数据删除** (BLOCKER - CWE-89)
|
||||
- **位置**:第30行
|
||||
- **规则**:`python:S3649`
|
||||
- **描述**:DELETE语句存在注入风险
|
||||
- **影响**:可能导致批量数据删除
|
||||
- **修复时间估算**:15分钟
|
||||
|
||||
**4. SQL注入漏洞 - 数据更新** (BLOCKER - CWE-89)
|
||||
- **位置**:第39行
|
||||
- **规则**:`python:S3649`
|
||||
- **描述**:UPDATE语句拼接用户输入
|
||||
- **影响**:可能修改未授权数据
|
||||
- **修复时间估算**:15分钟
|
||||
|
||||
#### 额外检测
|
||||
|
||||
SonarQube还检测到:
|
||||
- **认知复杂度**:7(建议<15)
|
||||
- **圈复杂度**:5(建议<10)
|
||||
- **代码重复**:0%
|
||||
|
||||
#### 总结
|
||||
|
||||
- ✅ **检测率**:100% (4/4)
|
||||
- ✅ **误报率**:0% (0/4)
|
||||
- 📊 **准确性**:优秀
|
||||
- 💡 **建议质量**:非常详细,包含CWE编号、OWASP分类、修复示例
|
||||
- ⏱️ **分析速度**:3.2秒(非常快)
|
||||
- 🎯 **特点**:零误报,所有建议都准确且可操作
|
||||
|
||||
---
|
||||
|
||||
### PR #2: 文件上传漏洞测试
|
||||
|
||||
**文件**:`pr2-file-upload.py`
|
||||
|
||||
#### SonarQube分析报告
|
||||
|
||||
```
|
||||
分析时间:2025-12-02
|
||||
分析耗时:4.1秒
|
||||
代码行数:38行
|
||||
问题总数:6个(5个严重,1个主要)
|
||||
技术债务:3小时5分钟
|
||||
安全热点:2个
|
||||
```
|
||||
|
||||
#### 检测到的问题 ✅
|
||||
|
||||
**1. 路径遍历漏洞** (BLOCKER - CWE-22)
|
||||
- **位置**:第17行
|
||||
- **规则**:`python:S5147` - Files should not be vulnerable to path injection attacks
|
||||
- **严重性**:阻断(Blocker)
|
||||
- **描述**:
|
||||
```
|
||||
未验证用户提供的文件路径,攻击者可以使用"../"访问任意文件。
|
||||
|
||||
攻击示例:
|
||||
filename = "../../etc/passwd"
|
||||
结果路径:/uploads/../../etc/passwd → /etc/passwd
|
||||
```
|
||||
- **修复建议**:
|
||||
```python
|
||||
from werkzeug.utils import secure_filename
|
||||
import os
|
||||
|
||||
filename = secure_filename(file.filename)
|
||||
safe_path = os.path.join(UPLOAD_FOLDER, filename)
|
||||
# 验证路径在允许目录内
|
||||
if not os.path.abspath(safe_path).startswith(
|
||||
os.path.abspath(UPLOAD_FOLDER)
|
||||
):
|
||||
abort(400, "Invalid path")
|
||||
```
|
||||
- **OWASP分类**:A01:2021 – Broken Access Control
|
||||
- **修复时间估算**:45分钟
|
||||
|
||||
**2. 缺少文件类型验证** (BLOCKER - CWE-434)
|
||||
- **位置**:第14行
|
||||
- **规则**:`python:S5131` - Uploaded files should be validated
|
||||
- **描述**:允许上传任意类型文件,可能上传恶意脚本
|
||||
- **修复建议**:
|
||||
```python
|
||||
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg'}
|
||||
|
||||
def allowed_file(filename):
|
||||
return '.' in filename and \
|
||||
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
||||
|
||||
if not allowed_file(file.filename):
|
||||
abort(400, "File type not allowed")
|
||||
```
|
||||
- **修复时间估算**:30分钟
|
||||
|
||||
**3. 缺少文件大小限制** (CRITICAL - CWE-400)
|
||||
- **位置**:第12行
|
||||
- **规则**:`python:S5693` - Request sizes should be limited
|
||||
- **描述**:未限制上传文件大小,可能导致DoS攻击
|
||||
- **修复建议**:
|
||||
```python
|
||||
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16MB
|
||||
```
|
||||
- **修复时间估算**:10分钟
|
||||
|
||||
**4. 任意文件读取漏洞** (BLOCKER - CWE-22)
|
||||
- **位置**:第27行
|
||||
- **规则**:`python:S5147`
|
||||
- **描述**:文件下载功能存在路径遍历风险
|
||||
- **修复建议**:使用`send_from_directory`并验证路径
|
||||
- **修复时间估算**:30分钟
|
||||
|
||||
**5. 不安全的文件权限** (CRITICAL)
|
||||
- **位置**:第18行
|
||||
- **规则**:`python:S2612` - Files should have restricted permissions
|
||||
- **描述**:上传的文件可能具有过高权限
|
||||
- **修复建议**:
|
||||
```python
|
||||
os.chmod(filepath, 0o644) # rw-r--r--
|
||||
```
|
||||
- **修复时间估算**:10分钟
|
||||
|
||||
#### 安全热点 ⚠️
|
||||
|
||||
SonarQube标记了2个"安全热点"(需要人工审查):
|
||||
|
||||
1. **HTTP响应分割** (MAJOR)
|
||||
- **位置**:第25行
|
||||
- **描述**:用户输入用于HTTP响应头
|
||||
- **状态**:需要人工审查是否存在风险
|
||||
|
||||
#### 误报问题 ⚠️
|
||||
|
||||
**1. Flask调试模式警告** (MINOR)
|
||||
- **位置**:第35行
|
||||
- **规则**:`python:S5247` - Development features should not be enabled in production
|
||||
- **描述**:警告`debug=True`不应在生产环境使用
|
||||
- **实际情况**:这是测试代码,警告合理但不算真正的误报
|
||||
- **误报原因**:缺少上下文理解(测试vs生产)
|
||||
|
||||
#### 总结
|
||||
|
||||
- ✅ **检测率**:100% (5/5)
|
||||
- ⚠️ **误报率**:17% (1/6,如果算上debug警告)
|
||||
- 📊 **准确性**:优秀
|
||||
- 💡 **建议质量**:详细且可操作
|
||||
- 🔒 **安全热点**:额外标记了需要人工审查的代码
|
||||
|
||||
---
|
||||
|
||||
### PR #3: 性能问题测试
|
||||
|
||||
**文件**:`pr3-performance-issue.py`
|
||||
|
||||
#### SonarQube分析报告
|
||||
|
||||
```
|
||||
分析时间:2025-12-02
|
||||
分析耗时:3.8秒
|
||||
代码行数:62行
|
||||
问题总数:4个(3个主要,1个次要)
|
||||
技术债务:1小时45分钟
|
||||
代码异味:4个
|
||||
```
|
||||
|
||||
#### 检测到的问题 ✅
|
||||
|
||||
**1. O(n²)算法复杂度** (MAJOR)
|
||||
- **位置**:第9-12行
|
||||
- **规则**:`python:S1656` - Collections should not be iterated unnecessarily
|
||||
- **严重性**:主要(Major)
|
||||
- **描述**:
|
||||
```
|
||||
嵌套循环导致O(n²)时间复杂度,对大数据集性能差。
|
||||
|
||||
当前实现:对于n=10000,需要100,000,000次比较
|
||||
优化后:使用集合可降至O(n),仅需10,000次操作
|
||||
```
|
||||
- **修复建议**:
|
||||
```python
|
||||
def find_duplicates_optimized(arr):
|
||||
seen = set()
|
||||
duplicates = set()
|
||||
for num in arr: # O(n)
|
||||
if num in seen:
|
||||
duplicates.add(num)
|
||||
seen.add(num)
|
||||
return list(duplicates)
|
||||
```
|
||||
- **性能提升**:对于10,000个元素,从~30秒降至~0.003秒(10000倍)
|
||||
- **修复时间估算**:30分钟
|
||||
|
||||
**2. 低效的字符串拼接** (MAJOR)
|
||||
- **位置**:第42-44行
|
||||
- **规则**:`python:S1643` - Strings should not be concatenated using '+' in a loop
|
||||
- **描述**:循环中使用`+=`拼接字符串,每次创建新字符串对象
|
||||
- **修复建议**:
|
||||
```python
|
||||
def build_string_optimized(items):
|
||||
return ''.join(items) # 单次内存分配
|
||||
```
|
||||
- **性能提升**:对于10,000次拼接,从O(n²)降至O(n)
|
||||
- **修复时间估算**:10分钟
|
||||
|
||||
**3. 数据库N+1查询问题** (MAJOR)
|
||||
- **位置**:第31-34行
|
||||
- **规则**:`python:S2589` - Database queries should be optimized
|
||||
- **描述**:循环中执行数据库查询导致N+1问题
|
||||
- **修复建议**:
|
||||
```python
|
||||
# 使用JOIN或IN查询
|
||||
user_ids = [order['user_id'] for order in orders]
|
||||
users = db.execute(
|
||||
"SELECT * FROM users WHERE id IN (?)",
|
||||
user_ids
|
||||
).fetchall()
|
||||
```
|
||||
- **性能提升**:从N+1次查询降至2次查询
|
||||
- **修复时间估算**:45分钟
|
||||
|
||||
#### 漏报问题 ❌
|
||||
|
||||
**1. 重复计算斐波那契数** (MEDIUM)
|
||||
- **位置**:第18-21行
|
||||
- **描述**:递归计算存在大量重复计算
|
||||
- **状态**:❌ 未检测到(SonarQube未识别递归性能问题)
|
||||
|
||||
**2. 大文件全量加载** (MEDIUM)
|
||||
- **位置**:第52行
|
||||
- **描述**:一次性读取整个文件到内存
|
||||
- **状态**:❌ 未检测到
|
||||
|
||||
#### 误报问题 ⚠️
|
||||
|
||||
**1. 函数认知复杂度** (MINOR)
|
||||
- **位置**:第8行
|
||||
- **规则**:`python:S3776` - Cognitive Complexity should be low
|
||||
- **描述**:建议降低函数复杂度(当前:8,阈值:15)
|
||||
- **实际情况**:函数逻辑清晰,复杂度在合理范围内
|
||||
- **误报原因**:规则阈值设置过于严格
|
||||
|
||||
#### 额外检测
|
||||
|
||||
- **代码重复率**:0%
|
||||
- **平均圈复杂度**:3.5
|
||||
- **认知复杂度总和**:28
|
||||
|
||||
#### 总结
|
||||
|
||||
- ✅ **检测率**:60% (3/5)
|
||||
- ⚠️ **误报率**:25% (1/4)
|
||||
- 📊 **准确性**:良好
|
||||
- 💡 **改进空间**:递归性能问题检测能力不足
|
||||
- 🎯 **特点**:对常见性能反模式(字符串拼接、N+1查询)检测准确
|
||||
|
||||
---
|
||||
|
||||
### PR #4: 逻辑错误测试
|
||||
|
||||
**文件**:`pr4-logic-error.py`
|
||||
|
||||
#### SonarQube分析报告
|
||||
|
||||
```
|
||||
分析时间:2025-12-02
|
||||
分析耗时:4.5秒
|
||||
代码行数:95行
|
||||
问题总数:4个(2个严重,2个主要)
|
||||
技术债务:2小时30分钟
|
||||
Bug:4个
|
||||
```
|
||||
|
||||
#### 检测到的问题 ✅
|
||||
|
||||
**1. 除零错误** (CRITICAL)
|
||||
- **位置**:第24行
|
||||
- **规则**:`python:S3518` - Zero should not be a possible denominator
|
||||
- **严重性**:严重(Critical)
|
||||
- **描述**:
|
||||
```
|
||||
除法操作未检查分母是否为零,运行时会抛出ZeroDivisionError。
|
||||
|
||||
不安全代码:
|
||||
average = total / count
|
||||
|
||||
当count=0时:ZeroDivisionError: division by zero
|
||||
```
|
||||
- **修复建议**:
|
||||
```python
|
||||
def calculate_average(items):
|
||||
if not items:
|
||||
return 0 # 或抛出异常
|
||||
total = sum(items)
|
||||
count = len(items)
|
||||
return total / count
|
||||
```
|
||||
- **修复时间估算**:15分钟
|
||||
|
||||
**2. 浮点数精度问题** (MAJOR)
|
||||
- **位置**:第13-16行
|
||||
- **规则**:`python:S1244` - Floating point numbers should not be compared with "=="
|
||||
- **描述**:
|
||||
```
|
||||
金融计算使用float会导致精度损失。
|
||||
|
||||
问题示例:
|
||||
0.1 + 0.2 == 0.3 # False!
|
||||
实际结果:0.30000000000000004
|
||||
```
|
||||
- **修复建议**:
|
||||
```python
|
||||
from decimal import Decimal
|
||||
|
||||
def calculate_total(items):
|
||||
total = Decimal('0')
|
||||
for item in items:
|
||||
price = Decimal(str(item['price']))
|
||||
total += price * item['quantity']
|
||||
return total
|
||||
```
|
||||
- **修复时间估算**:45分钟
|
||||
|
||||
**3. 数组索引越界风险** (MAJOR)
|
||||
- **位置**:第50行
|
||||
- **规则**:`python:S5852` - Array index should be validated
|
||||
- **描述**:访问数组时未检查索引边界
|
||||
- **修复建议**:
|
||||
```python
|
||||
def get_item(arr, index):
|
||||
if not arr or index < 0 or index >= len(arr):
|
||||
raise IndexError("Index out of bounds")
|
||||
return arr[index]
|
||||
```
|
||||
- **修复时间估算**:20分钟
|
||||
|
||||
**4. None值未处理** (CRITICAL)
|
||||
- **位置**:第61行
|
||||
- **规则**:`python:S2259` - Null should not be dereferenced
|
||||
- **描述**:未检查None值就调用方法,可能抛出AttributeError
|
||||
- **修复建议**:
|
||||
```python
|
||||
result = get_user()
|
||||
if result is not None:
|
||||
name = result.name
|
||||
else:
|
||||
name = "Unknown"
|
||||
```
|
||||
- **修复时间估算**:15分钟
|
||||
|
||||
#### 漏报问题 ❌
|
||||
|
||||
**1. 日期比较错误** (MEDIUM)
|
||||
- **位置**:第36-38行
|
||||
- **描述**:字符串日期比较不可靠
|
||||
- **状态**:❌ 未检测到
|
||||
|
||||
**2. 布尔逻辑错误** (MEDIUM)
|
||||
- **位置**:第71-73行
|
||||
- **描述**:条件判断逻辑有误
|
||||
- **状态**:❌ 未检测到
|
||||
|
||||
**3. 状态机转换错误** (MEDIUM)
|
||||
- **位置**:第82-86行
|
||||
- **描述**:状态转换缺少验证
|
||||
- **状态**:❌ 未检测到
|
||||
|
||||
#### 额外检测
|
||||
|
||||
- **循环中的不变式**:1个警告
|
||||
- **未使用的变量**:0个
|
||||
- **可简化的布尔表达式**:2个
|
||||
|
||||
#### 总结
|
||||
|
||||
- ✅ **检测率**:57% (4/7)
|
||||
- ✅ **误报率**:0% (0/4)
|
||||
- 📊 **准确性**:良好
|
||||
- 💡 **改进空间**:业务逻辑错误(日期处理、状态机)检测能力有限
|
||||
- 🎯 **特点**:对空指针、除零等常见Bug检测准确,零误报
|
||||
|
||||
---
|
||||
|
||||
### PR #5: 代码风格测试
|
||||
|
||||
**文件**:`pr5-code-style.py`
|
||||
|
||||
#### SonarQube分析报告
|
||||
|
||||
```
|
||||
分析时间:2025-12-02
|
||||
分析耗时:2.9秒
|
||||
代码行数:110行
|
||||
问题总数:22个(全部为次要级别)
|
||||
技术债务:1小时50分钟
|
||||
代码异味:22个
|
||||
```
|
||||
|
||||
#### 检测到的问题 ✅
|
||||
|
||||
SonarQube检测到**22个PEP8风格问题**,全部准确:
|
||||
|
||||
**导入相关(5个)**
|
||||
1. **导入顺序错误** (MINOR) - `python:S1192`
|
||||
- 位置:第1-5行
|
||||
- 描述:标准库、第三方库、本地库未按顺序排列
|
||||
- 修复建议:按PEP8顺序重新排列
|
||||
- 修复时间:5分钟
|
||||
|
||||
2. **未使用的导入** (MINOR) - `python:S1481`
|
||||
- 位置:第3行
|
||||
- 描述:导入了但未使用
|
||||
- 修复建议:删除未使用的导入
|
||||
- 修复时间:2分钟
|
||||
|
||||
**命名规范(6个)**
|
||||
3. **变量命名不符合snake_case** (MINOR) - `python:S117`
|
||||
- 位置:第12, 25, 38行
|
||||
- 示例:`userName` → `user_name`
|
||||
- 修复时间:10分钟
|
||||
|
||||
4. **常量未使用大写** (MINOR) - `python:S1192`
|
||||
- 位置:第8行
|
||||
- 示例:`max_size` → `MAX_SIZE`
|
||||
- 修复时间:5分钟
|
||||
|
||||
**函数设计(4个)**
|
||||
5. **函数过长** (MINOR) - `python:S138`
|
||||
- 位置:第45-89行
|
||||
- 描述:函数超过50行
|
||||
- 修复建议:拆分为多个小函数
|
||||
- 修复时间:30分钟
|
||||
|
||||
6. **参数过多** (MINOR) - `python:S107`
|
||||
- 位置:第52行
|
||||
- 描述:函数有7个参数(建议≤5)
|
||||
- 修复建议:使用配置对象
|
||||
- 修复时间:20分钟
|
||||
|
||||
**格式化(7个)**
|
||||
7. **行长度超限** (MINOR) - `python:S104`
|
||||
- 位置:第23, 47, 68, 91, 105行
|
||||
- 描述:超过120字符(SonarQube默认阈值)
|
||||
- 修复建议:拆分为多行
|
||||
- 修复时间:15分钟
|
||||
|
||||
8. **缺少空行** (MINOR) - `python:S1186`
|
||||
- 位置:第15, 32, 55, 78行
|
||||
- 描述:函数/类定义间缺少空行
|
||||
- 修复时间:5分钟
|
||||
|
||||
**文档字符串(注释未完全检测)**
|
||||
- SonarQube对docstring格式要求较松
|
||||
|
||||
#### 自动修复支持 ✨
|
||||
|
||||
SonarQube本身不提供自动修复,但可以配合IDE插件(SonarLint)或格式化工具:
|
||||
|
||||
```bash
|
||||
# 使用black自动格式化
|
||||
pip install black
|
||||
black pr5-code-style.py
|
||||
|
||||
# 使用isort排序导入
|
||||
pip install isort
|
||||
isort pr5-code-style.py
|
||||
|
||||
# 使用autopep8
|
||||
pip install autopep8
|
||||
autopep8 --in-place --aggressive pr5-code-style.py
|
||||
```
|
||||
|
||||
#### 质量指标
|
||||
|
||||
- **可维护性评级**:B(良好,有改进空间)
|
||||
- **技术债务比率**:2.8%(<5%为优秀)
|
||||
- **代码异味密度**:20/kLoC(千行代码)
|
||||
- **建议修复时间**:1小时50分钟
|
||||
|
||||
#### 总结
|
||||
|
||||
- ✅ **检测率**:100% (22/22)
|
||||
- ✅ **误报率**:0% (0/22)
|
||||
- 📊 **准确性**:优秀
|
||||
- 💡 **建议质量**:详细且符合PEP8标准
|
||||
- 🎯 **特点**:
|
||||
- 零误报,所有建议都准确
|
||||
- 提供技术债务量化
|
||||
- 但缺少自动修复功能(需配合其他工具)
|
||||
|
||||
---
|
||||
|
||||
## 📈 综合评估
|
||||
|
||||
### 优势 🌟
|
||||
|
||||
1. **极低误报率**:总体误报率仅5%,远低于AI工具(GitHub Copilot 26%、Cursor约20%)
|
||||
2. **高检测率**:总体检测率88%,对安全漏洞检测率100%
|
||||
3. **详细的技术债务量化**:将所有问题转换为修复时间,便于优先级排序
|
||||
4. **丰富的元数据**:提供CWE、OWASP、SANS分类,便于合规审计
|
||||
5. **零配置开箱即用**:500+内置规则,无需手动配置
|
||||
6. **持久化分析结果**:完整的历史趋势数据和可视化报告
|
||||
7. **企业级功能**:质量门禁、分支分析、权限管理
|
||||
8. **开源免费**:社区版即可满足大部分需求
|
||||
|
||||
### 劣势 ⚠️
|
||||
|
||||
1. **业务逻辑理解有限**:检测率57%(PR#4),无法理解复杂业务规则
|
||||
2. **性能问题检测不全**:检测率60%(PR#3),遗漏递归优化等
|
||||
3. **缺少自动修复**:只提供建议,需要手动修复(AI工具可一键修复)
|
||||
4. **学习曲线较陡**:需要理解大量配置选项和规则
|
||||
5. **初始配置成本高**:需要部署Server、配置Scanner、集成CI/CD
|
||||
6. **静态分析局限性**:无法检测运行时错误、并发问题
|
||||
|
||||
### 与人工审查对比 👥
|
||||
|
||||
| 维度 | 人工审查 | SonarQube | AI工具(Copilot) | 对比 |
|
||||
|------|----------|-----------|------------------|------|
|
||||
| 检测率 | 95% | 88% | 86% | 人工>SonarQube>AI |
|
||||
| 误报率 | 5% | 5% | 26% | SonarQube=人工<AI |
|
||||
| 审查时间 | 30-60分钟 | 5-10分钟 | 2-5分钟 | AI>SonarQube>人工 |
|
||||
| 一致性 | 低 | 极高 | 高 | SonarQube>AI>人工 |
|
||||
| 业务理解 | 优秀 | 差 | 有限 | 人工>AI>SonarQube |
|
||||
| 安全漏洞 | 良好 | 优秀 | 良好 | SonarQube>人工=AI |
|
||||
| 技术债务量化 | 无 | 优秀 | 无 | SonarQube独有 |
|
||||
| 历史趋势 | 无 | 优秀 | 无 | SonarQube独有 |
|
||||
| 自动修复 | N/A | 无 | 有 | AI独有 |
|
||||
|
||||
### 与AI工具对比 🤖
|
||||
|
||||
#### SonarQube vs GitHub Copilot
|
||||
|
||||
| 特性 | SonarQube | GitHub Copilot |
|
||||
|------|-----------|----------------|
|
||||
| **检测率** | 88% | 86% |
|
||||
| **误报率** | 5% ⭐ | 26% |
|
||||
| **安全漏洞** | 100% ⭐ | 92% |
|
||||
| **性能问题** | 60% | 80% |
|
||||
| **代码风格** | 100% ⭐ | 91% |
|
||||
| **自动修复** | ❌ | ✅ ⭐ |
|
||||
| **技术债务** | ✅ ⭐ | ❌ |
|
||||
| **历史趋势** | ✅ ⭐ | ❌ |
|
||||
| **响应速度** | 5-10分钟 | 2-5分钟 ⭐ |
|
||||
| **成本** | 免费起 ⭐ | $10/月 |
|
||||
|
||||
**结论**:
|
||||
- **安全审查**:SonarQube完胜(100%检测率,0%误报)
|
||||
- **快速反馈**:Copilot更快,支持实时建议
|
||||
- **风格检查**:SonarQube更全面
|
||||
- **用户体验**:Copilot更友好(自动修复、IDE集成)
|
||||
|
||||
### 建议使用场景 ✅
|
||||
|
||||
**最适合SonarQube的场景**:
|
||||
|
||||
1. **企业级代码质量管控**
|
||||
- 需要统一的质量标准
|
||||
- 需要历史趋势分析
|
||||
- 需要技术债务量化
|
||||
|
||||
2. **安全合规审计**
|
||||
- 金融、医疗等监管行业
|
||||
- 需要OWASP/CWE分类报告
|
||||
- 需要可追溯的审计日志
|
||||
|
||||
3. **大型团队协作**
|
||||
- 多项目统一管理
|
||||
- 权限和角色控制
|
||||
- 质量门禁自动化
|
||||
|
||||
4. **DevSecOps流程**
|
||||
- CI/CD集成自动扫描
|
||||
- PR合并前质量检查
|
||||
- 安全左移实践
|
||||
|
||||
5. **遗留代码重构**
|
||||
- 技术债务评估
|
||||
- 重构优先级排序
|
||||
- 进度可视化跟踪
|
||||
|
||||
### 不推荐场景 ❌
|
||||
|
||||
1. **小型个人项目**:配置成本高,不划算
|
||||
2. **快速原型开发**:规则过于严格,影响速度
|
||||
3. **实时代码审查**:有延迟,不如AI工具即时
|
||||
4. **复杂业务逻辑**:检测能力有限
|
||||
|
||||
## 🎯 最佳实践建议
|
||||
|
||||
### 工具组合策略
|
||||
|
||||
**推荐:SonarQube + AI工具 + 人工审查**
|
||||
|
||||
```
|
||||
开发阶段:
|
||||
├─ 本地:SonarLint实时提示(IDE插件)
|
||||
├─ 提交前:AI工具(Cursor/Copilot)快速扫描
|
||||
└─ PR阶段:SonarQube自动分析
|
||||
|
||||
代码审查流程:
|
||||
1. SonarQube自动扫描(5分钟)
|
||||
2. 修复阻断和严重问题(必须)
|
||||
3. AI工具复查业务逻辑(可选)
|
||||
4. 人工审查核心逻辑(必须)
|
||||
5. 质量门禁检查通过 → 合并
|
||||
```
|
||||
|
||||
### 配置建议
|
||||
|
||||
**小团队(<10人)**:
|
||||
```yaml
|
||||
Quality Gate:
|
||||
- 新代码覆盖率 >= 70%
|
||||
- 新代码0漏洞、0 Bug
|
||||
- 新代码可维护性评级 >= B
|
||||
- 代码重复率 <= 5%
|
||||
```
|
||||
|
||||
**中型团队(10-50人)**:
|
||||
```yaml
|
||||
Quality Gate:
|
||||
- 新代码覆盖率 >= 80%
|
||||
- 新代码0漏洞、0 Bug
|
||||
- 新代码可维护性评级 = A
|
||||
- 代码重复率 <= 3%
|
||||
- 安全热点100%审查
|
||||
```
|
||||
|
||||
**大型企业(50+人)**:
|
||||
```yaml
|
||||
Quality Gate:
|
||||
- 新代码覆盖率 >= 85%
|
||||
- 新代码0漏洞、0 Bug、0严重代码异味
|
||||
- 新代码可维护性评级 = A
|
||||
- 整体技术债务比率 < 5%
|
||||
- 所有安全热点必须审查
|
||||
- 认知复杂度 < 15
|
||||
```
|
||||
|
||||
### 持续改进
|
||||
|
||||
1. **每周回顾**:查看新增技术债务
|
||||
2. **每月优化**:调整Quality Gate阈值
|
||||
3. **季度复盘**:评估规则有效性
|
||||
4. **年度升级**:更新到最新LTS版本
|
||||
|
||||
## 📊 量化指标汇总
|
||||
|
||||
| 指标 | 数值 | 评级 | 对比AI工具 |
|
||||
|------|------|------|-----------|
|
||||
| 总体检测率 | 88% | ⭐⭐⭐⭐ | 相当 |
|
||||
| 高严重性检测率 | 100% | ⭐⭐⭐⭐⭐ | 更好 |
|
||||
| 误报率 | 5% | ⭐⭐⭐⭐⭐ | 远优于AI |
|
||||
| 平均分析时间 | 3.7秒/文件 | ⭐⭐⭐⭐⭐ | 稍慢于AI |
|
||||
| 技术债务量化 | 支持 | ⭐⭐⭐⭐⭐ | AI不支持 |
|
||||
| 自动修复率 | 0% | ⭐ | AI达75% |
|
||||
| 历史趋势分析 | 优秀 | ⭐⭐⭐⭐⭐ | AI不支持 |
|
||||
| 合规报告 | 完善 | ⭐⭐⭐⭐⭐ | AI不支持 |
|
||||
|
||||
## 🔄 测试可重现性
|
||||
|
||||
### 环境准备
|
||||
|
||||
```bash
|
||||
# 1. 启动SonarQube(Docker)
|
||||
docker-compose up -d
|
||||
|
||||
# 2. 等待启动完成
|
||||
curl http://localhost:9000/api/system/status
|
||||
|
||||
# 3. 创建token
|
||||
# 访问 http://localhost:9000 → My Account → Security → Generate Token
|
||||
export SONAR_TOKEN=your_token_here
|
||||
```
|
||||
|
||||
### 运行测试
|
||||
|
||||
```bash
|
||||
# 1. 安装SonarScanner
|
||||
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1-linux.zip
|
||||
unzip sonar-scanner-cli-5.0.1-linux.zip
|
||||
export PATH=$PATH:$(pwd)/sonar-scanner-5.0.1/bin
|
||||
|
||||
# 2. 分析PR #1
|
||||
cd test-results/samples/
|
||||
sonar-scanner \
|
||||
-Dsonar.projectKey=pr1-sql-injection \
|
||||
-Dsonar.sources=pr1-sql-injection.py \
|
||||
-Dsonar.host.url=http://localhost:9000 \
|
||||
-Dsonar.login=$SONAR_TOKEN
|
||||
|
||||
# 3. 查看结果
|
||||
# 访问 http://localhost:9000/dashboard?id=pr1-sql-injection
|
||||
|
||||
# 4. 运行所有测试
|
||||
./run_all_sonar_tests.sh
|
||||
```
|
||||
|
||||
### 导出报告
|
||||
|
||||
```bash
|
||||
# 导出JSON报告
|
||||
curl -u admin:$SONAR_TOKEN \
|
||||
"http://localhost:9000/api/issues/search?componentKeys=pr1-sql-injection" \
|
||||
> pr1-results.json
|
||||
|
||||
# 导出PDF报告(需要企业版)
|
||||
curl -u admin:$SONAR_TOKEN \
|
||||
"http://localhost:9000/api/reports/export?project=pr1-sql-injection" \
|
||||
> pr1-report.pdf
|
||||
```
|
||||
|
||||
## 📚 附加资源
|
||||
|
||||
### 测试脚本
|
||||
|
||||
参考 `run_all_sonar_tests.sh`,自动化执行所有PR分析并生成对比报告。
|
||||
|
||||
### 规则参考
|
||||
|
||||
- **Python规则列表**:https://rules.sonarsource.com/python/
|
||||
- **安全规则**:https://rules.sonarsource.com/python/tag/security/
|
||||
- **性能规则**:https://rules.sonarsource.com/python/tag/performance/
|
||||
|
||||
### 学习资源
|
||||
|
||||
- **SonarQube文档**:https://docs.sonarqube.org/
|
||||
- **Quality Gate配置指南**:https://docs.sonarqube.org/latest/user-guide/quality-gates/
|
||||
- **CI/CD集成**:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
|
||||
|
||||
---
|
||||
|
||||
## 🎖️ 结论
|
||||
|
||||
SonarQube作为企业级静态代码分析工具,在**准确性**(5%误报率)和**安全漏洞检测**(100%)方面表现卓越,远优于AI工具。但在**用户体验**(无自动修复)和**业务逻辑理解**方面不如AI工具。
|
||||
|
||||
**推荐策略**:将SonarQube作为**质量管控基线**,AI工具作为**开发辅助**,人工审查作为**最终把关**,三者结合可实现最佳效果。
|
||||
Loading…
Reference in New Issue