基于美团技术团队的代码变更风险可视化系统设计思想,专为 Go 语言项目打造的风险分析与可视化工具。通过静态分析、调用链追踪和风险评估模型,帮助开发者在代码 Review 阶段精确识别潜在风险。
本系统旨在解决 Go 项目在快速迭代中面临的代码变更风险问题。通过自动化分析代码变更(Diff),结合 AST 语法树解析和调用关系图(Call Graph),量化评估变更带来的潜在影响,并提供直观的可视化报告。
- 变更感知: 自动识别 Git 提交中的文件、函数及代码行变更。
- 深度分析: 基于 SSA 的静态调用链分析,精准追踪变更影响范围。
- 风险评估: 多维度评分模型(圈复杂度、影响面、历史风险、代码特征)。
- 可视化: 提供调用链路图、风险热力图及详细的分析报告。
| 模块 | 功能描述 |
|---|---|
| 代码变更感知 | 集成 Git,支持分支对比、历史版本回溯,精确识别变更函数。 |
| Go 静态分析 | 解析 AST,构建符号表,识别接口实现、包依赖关系。 |
| 特征风险检测 | 内置多种检测器:Goroutine 泄漏、并发竞争、错误忽略、反射使用等。 |
| 风险评估引擎 | 综合计算复杂度(圈复杂度/认知复杂度)、影响范围和历史数据,生成风险评分。 |
| 图数据库存储 | 使用 Neo4j 存储代码结构图,支持高效的复杂关系查询。 |
| Web 可视化 | 提供交互式的前端界面,展示变更影响树和风险详情。 |
- Go: 1.21+
- Docker & Docker Compose: 用于运行数据库和完整环境
- Node.js: 18+ (仅前端开发需要)
最简单的部署方式,自动启动 Neo4j 数据库和后端服务。
# 1. 启动服务
docker-compose up -d
# 2. 访问 Web 界面
# 浏览器打开 http://localhost:8080适用于需要调试代码的场景。
-
启动 Neo4j (依赖 Docker):
docker run -d \ --name neo4j \ -p 7474:7474 -p 7687:7687 \ -e NEO4J_AUTH=neo4j/password \ neo4j:5.15.0
-
运行后端服务:
# 安装依赖 go mod download # 启动服务 make run
-
运行前端 (可选): 如果需要修改前端代码:
cd web npm install npm run dev
系统配置文件位于 configs/config.yaml。主要配置项包括:
- Server: 监听端口和模式。
- Neo4j: 数据库连接地址、用户名和密码。
- Git: 仓库分析的临时存储路径。
- Analyzer: 分析器的并发数和超时设置。
server:
port: 8080
mode: debug
neo4j:
uri: "bolt://localhost:7687"
username: "neo4j"
password: "password"┌─────────────────────────────────────────────────────────┐
│ 应用层 (Web UI) │
│ • 风险分析报告 • 影响面评估 • 调用链路可视化 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 核心分析层 (Core Analyzer) │
│ • Git变更提取 • AST/SSA解析 • 风险特征识别 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 数据存储层 (Infrastructure) │
│ • Neo4j (图数据) • Git (代码库) • Cache (缓存) │
└─────────────────────────────────────────────────────────┘
欢迎提交 Issue 和 Pull Request 来改进本项目!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
本项目暂无特定许可证,仅供学习和交流使用。