# 代码审查标准与质量评级规范 v3.0

**文档版本**: v3.0
**生成日期**: 2026-04-08
**适用范围**: User Management System (UMS) 项目
**审查专家**: 代码审查专家
**目标**: 生产级软件质量标准

---

## 修订说明

v3.0 版本针对"生产上线"要求进行全面升级：

| 维度 | v2.0 | v3.0 | 差距 |
|------|------|------|------|
| 代码质量 | 9.7/10 | **7.5/10** | 测试覆盖率仅32.1%，严重不足 |
| 安全强度 | 9.7/10 | **6.0/10** | 无gosec扫描、占位JWT密钥、缺渗透测试 |
| 部署简单性 | 8.0/10 | **5.0/10** | docker-compose简陋、无K8s、无健康检查 |
| 运维可靠性 | 7.0/10 | **4.0/10** | 无备份自动化、无灾备方案、监控薄弱 |
| 文档规范性 | 7.0/10 | **5.0/10** | 缺OpenAPI、缺Runbook、缺应急响应 |

**综合评分（v3.0真实评估）**: **5.9/10 ⚠️ 不合格**

---

## 一、生产级质量标准（v3.0）

### 1.1 五维评估体系

| 维度 | 权重 | 生产标准 | 当前差距 |
|------|------|----------|----------|
| **代码质量** | 25% | 覆盖率≥80%，无技术债 | 覆盖率32.1%，差距48% |
| **安全强度** | 30% | 渗透测试、gosec合格、合规 | 无扫描工具、占位密钥 |
| **部署简单性** | 15% | 一键部署、配置分离、不可变 | docker-compose简陋 |
| **运维可靠性** | 20% | 监控完善、告警到位、备份自动化 | 监控基础、告警未验证 |
| **文档规范性** | 10% | OpenAPI、Runbook、应急响应 | 文档残缺 |

### 1.2 生产合并门禁（必须全部通过）

```yaml
# 生产级 PR 合并门禁
pre_merge_checks:
  # 代码质量
  - name: 后端覆盖率
    command: go test -coverprofile coverage.out ./...
    threshold: 80%
    critical_paths: 90%
  - name: 前端覆盖率
    command: npm test -- --coverage
    threshold: 80%
    
  # 安全
  - name: Go安全扫描
    command: gosec ./...
    critical: high/critical must be 0
  - name: 前端安全扫描
    command: npm audit
    critical: 0 vulnerabilities
  - name: 依赖漏洞扫描
    command: govulncheck ./...
    critical: 0 findings
    
  # 构建
  - name: 后端编译
    command: go build ./cmd/server
  - name: 前端构建
    command: npm run build
    
  # 测试
  - name: 后端测试
    command: go test ./... -count=1 -race
  - name: 前端测试
    command: npm test -- --coverage
  - name: E2E测试
    command: npm run e2e:full:win
```

### 1.3 问题分级（生产级）

| 级别 | 标识 | 定义 | 合并影响 |
|------|------|------|----------|
| **P0 阻塞** | 🔴 | 安全漏洞、数据丢失风险、生产不可用 | **必须修复** |
| **P1 严重** | 🟠 | 功能错误、性能严重劣化、合规风险 | **必须修复** |
| **P2 高** | 🟡 | 测试覆盖率不足、技术债积累、文档缺失 | **72小时内修复** |
| **P3 中** | 🔵 | 代码风格、轻微优化、文档完善 | **本周修复** |
| **P4 低** | 💭 | 挑剔级改进、愿望清单 | 可延迟 |

---

## 二、代码质量审查清单

### 2.1 测试覆盖率要求

```yaml
coverage_requirements:
  backend:
    overall: 80%
    critical_paths:
      auth_handler: 90%
      jwt: 95%
      password: 95%
      repository: 70%
    excluded:
      - cmd/server/main.go  # 可豁免
      - docs/              # 文档包
      - testdb/           # 测试数据库
      - testutil/         # 测试工具
      
  frontend:
    overall: 80%
    critical_paths:
      auth: 90%
      http_client: 90%
      router: 100%
      guards: 100%
```

### 2.2 单元测试审查

```
□ 每个公开函数有单元测试
□ 边界条件被测试（空值、极大值、特殊字符）
□ 错误路径被测试
□ 并发安全被测试（go test -race）
□ 无 mock 滥用（真实依赖优先）
□ 测试命名规范：Test[函数名][场景]
□ 单元测试不依赖外部状态
```

### 2.3 集成测试审查

```
□ 数据库操作有集成测试
□ API 端点有集成测试
□ 认证流程有集成测试
□ 测试使用隔离数据库（不污染开发数据）
```

---

## 三、安全强度审查清单

### 3.1 自动化安全扫描（必须集成CI）

```yaml
security_automation:
  gosec:
    schedule: daily
    fail_on: high/critical
    exclusions: documented
    
  npm_audit:
    schedule: daily
    fail_on: moderate/high
    audit_level: moderate
    
  govulncheck:
    schedule: weekly
    fail_on: any
    
  owasp_dependency_check:
    schedule: weekly
    report: required
```

### 3.2 安全审查清单

#### 认证安全
```
□ 密码使用 Argon2id（已验证 ✅）
□ Token 使用 crypto/rand（已验证 ✅）
□ JTI 防枚举（已验证 ✅）
□ Token 滚动轮换（已验证 ✅）
□ 登录速率限制（已验证 ✅）
□ 异常登录检测（已验证 ✅）
□ 退出登录清理状态（已验证 ✅）
```

#### 数据安全
```
□ 敏感数据不写入日志
□ 敏感数据不返回 API
□ 数据库使用参数化查询
□ 密码不硬编码
□ 密钥从环境变量/密钥管理器读取
```

#### 传输安全
```
□ HTTPS 强制
□ HSTS 配置
□ CSRF 保护
□ CORS 非 wildcard
```

#### 依赖安全
```
□ 无已知 CVE 漏洞
□ 无弃用依赖
□ 最小权限依赖原则
```

### 3.3 渗透测试要求

```yaml
penetration_testing:
  schedule: quarterly
  scope:
    - SQL注入测试
    - XSS测试
    - CSRF测试
    - 认证绕过测试
    - 会话管理测试
    - 敏感数据泄露测试
  report: required
  responsible: external_security_team
```

---

## 四、部署简单性审查清单

### 4.1 Docker 部署标准

```yaml
docker_requirements:
  # 镜像构建
  multi_stage: true          # 使用多阶段构建减小镜像
  non_root_user: true       # 非 root 用户运行
  scratch_base: preferred    # 最小基础镜像
  
  # 健康检查
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:8080/health/ready"]
    interval: 30s
    timeout: 10s
    retries: 3
    
  # 资源限制
  resources:
    memory: 512Mi
    cpu: "500m"
    
  # 重启策略
  restart: unless-stopped
  restart_max_attempts: 5
```

### 4.2 Kubernetes 部署要求

```
□ 有 Helm Chart 或 Kustomize 配置
□ 有 Deployment/StatefulSet
□ 有 Service 配置
□ 有 Ingress 配置
□ 有 ConfigMap/Secret 管理配置
□ 有 HPA（水平自动扩缩容）
□ 有 PodDisruptionBudget
□ 有资源请求/限制
□ 有健康检查（liveness/readiness）
□ 有安全上下文
□ 有网络策略
```

### 4.3 部署配置管理

```
□ 环境变量与配置分离
□ 敏感配置使用 Secret
□ 配置有版本控制
□ 支持多环境部署（dev/staging/prod）
□ 部署脚本幂等
□ 回滚方案可用
```

---

## 五、运维可靠性审查清单

### 5.1 监控要求

```yaml
monitoring_requirements:
  # 基础设施监控
  infrastructure:
    - CPU使用率
    - 内存使用率
    - 磁盘使用率
    - 网络IO
    
  # 应用监控
  application:
    - 请求延迟（P50/P95/P99）
    - 错误率
    - QPS
    - 活跃连接数
    
  # 业务监控
  business:
    - 登录成功率
    - 注册成功率
    - API 调用成功率
    - Token 刷新成功率
    
  # 数据库监控
  database:
    - 连接池使用率
    - 查询延迟
    - 慢查询数量
    - 复制延迟（如果有）
```

### 5.2 告警要求

```yaml
alerting_requirements:
  # 关键告警
  critical:
    - 服务不可用
    - 错误率 > 5%
    - P99延迟 > 1s
    - 数据库连接池耗尽
    
  # 警告告警
  warning:
    - 错误率 > 1%
    - P95延迟 > 500ms
    - 磁盘使用率 > 80%
    - 内存使用率 > 85%
    
  # 通知渠道
  channels:
    - email: on_call_team
    - slack: ops-alerts
    - sms: critical_only
    
  # 告警升级
  escalation:
    - 5分钟未响应 → 升级
    - 15分钟未响应 → 升级到 manager
```

### 5.3 日志要求

```
□ 结构化日志（JSON）
□ 日志级别配置
□ 日志轮转配置
□ 敏感信息脱敏
□ 日志保留期配置（默认30天）
□ 集中式日志收集
□ 日志查询支持
```

### 5.4 备份与恢复

```yaml
backup_requirements:
  # 数据库备份
  database:
    frequency: daily
    retention: 30days
    verification: weekly
    encrypted: true
    offsite: true
    
  # 配置备份
  config:
    frequency: on_change
    storage: git
    
  # 文件备份
  files:
    frequency: weekly
    scope: uploads/
    
  # 恢复测试
  recovery_test:
    frequency: quarterly
    documented: true
```

---

## 六、文档规范性审查清单

### 6.1 API 文档

```yaml
api_documentation:
  # OpenAPI 规范
  openapi:
    version: "3.0.0"
    required: true
    generation: automated
    
  # 文档内容
  content:
    - 所有端点有描述
    - 所有参数有说明
    - 所有响应有示例
    - 错误码有说明
    - 认证方式有说明
    
  # 文档位置
  location:
    - swagger_ui: /swagger/index.html
    - openapi_json: /swagger/doc.json
    - redoc: /docs
```

### 6.2 部署文档

```
□ 部署前置条件清单
□ 部署步骤（分环境）
□ 环境变量说明
□ 依赖服务说明
□ 验证步骤
□ 回滚步骤
□ 常见问题与解决方案
```

### 6.3 运维文档

```
□ 系统架构图
□ 组件说明
□ 监控指标说明
□ 告警处理手册
□ 日志说明
□ 备份恢复手册
□ 扩容指南
□ 故障排查手册
□ 应急响应流程
```

### 6.4 Runbook 要求

```yaml
runbook_requirements:
  # 必需 Runbook
  required:
    - service_startup: 服务启动
    - service_shutdown: 服务停止
    - config_update: 配置更新
    - log_analysis: 日志分析
    - backup_restore: 备份恢复
    - incident_response: 事件响应
    - security_incident: 安全事件响应
    - scaling: 扩缩容
    - database_migration: 数据库迁移
    
  # Runbook 格式
  format:
    - 触发条件明确
    - 步骤清晰可执行
    - 验证步骤明确
    - 回滚步骤存在
    - 联系人明确
```

---

## 七、差距分析与行动计划

### 7.1 当前差距评估

| 维度 | 当前状态 | 目标状态 | 差距 | 优先级 |
|------|----------|----------|------|--------|
| 后端测试覆盖率 | 32.1% | 80% | -47.9% | 🔴 P0 |
| 前端测试覆盖率 | ~70% | 80% | -10% | 🟠 P1 |
| gosec 集成 | 未安装 | 集成CI | N/A | 🔴 P0 |
| JWT密钥占位符 | config.yaml | 环境变量 | N/A | 🔴 P0 |
| Docker健康检查 | 无 | 必须 | N/A | 🟠 P1 |
| K8s配置 | 无 | 必需 | N/A | 🟡 P2 |
| 备份自动化 | 手动 | 自动 | N/A | 🟠 P1 |
| 监控完善 | 基础 | 完整 | N/A | 🟡 P2 |
| Runbook | 缺失 | 必需 | N/A | 🟡 P2 |
| 渗透测试 | 无 | 季度 | N/A | 🟠 P1 |

### 7.2 修复行动计划

#### 🔴 P0 - 必须立即修复（本周）

| # | 任务 | 影响 | 工作量 |
|---|------|------|--------|
| 1 | 安装 gosec 并集成 CI | 安全扫描 | 2h |
| 2 | 移除 config.yaml 占位密钥，改为环境变量 | 生产安全 | 1h |
| 3 | 提升后端测试覆盖率至 60% | 代码质量 | 8h |
| 4 | Docker 添加 healthcheck | 部署可靠性 | 1h |

#### 🟠 P1 - 本周内完成

| # | 任务 | 影响 | 工作量 |
|---|------|------|--------|
| 5 | 后端覆盖率提升至 80% | 代码质量 | 16h |
| 6 | 前端覆盖率提升至 80% | 代码质量 | 8h |
| 7 | Docker 添加资源限制 | 运维可靠性 | 1h |
| 8 | 备份脚本自动化 | 运维可靠性 | 4h |
| 9 | 季度渗透测试计划 | 安全合规 | 2h |

#### 🟡 P2 - 本月完成

| # | 任务 | 影响 | 工作量 |
|---|------|------|--------|
| 10 | K8s Helm Chart | 部署简单性 | 16h |
| 11 | 完善监控指标 | 运维可靠性 | 8h |
| 12 | 告警配置验证 | 运维可靠性 | 4h |
| 13 | 核心 Runbook | 运维可靠性 | 8h |
| 14 | OpenAPI 规范完善 | 文档规范性 | 4h |

---

## 八、审查流程（v3.0）

### 8.1 PR 审查流程

```
┌─────────────────────────────────────────────────────────────────────┐
│                        PR 创建                                      │
└─────────────────────────────────┬───────────────────────────────────┘
                                  ▼
┌─────────────────────────────────────────────────────────────────────┐
│  1. CI 门禁（自动）                                                  │
│     □ go vet / npm run lint                                          │
│     □ go build / npm run build                                       │
│     □ go test / npm test                                             │
│     □ 覆盖率检查（≥80%）                                              │
│     □ gosec / npm audit（安全扫描）                                   │
│     ⚠️ 任一失败 → PR Blocked                                        │
└─────────────────────────────────┬───────────────────────────────────┘
                                  ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. 人工审查（审查者）                                                │
│     □ 业务逻辑审查                                                    │
│     □ 安全审查                                                        │
│     □ 性能审查                                                        │
│     □ 可维护性审查                                                    │
│     □ 文档审查                                                        │
└─────────────────────────────────┬───────────────────────────────────┘
                                  ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. 问题修复（作者）                                                  │
│     🔴 P0 → 必须修复后重新审查                                        │
│     🟠 P1 → 必须修复后重新审查                                        │
│     🟡 P2 → 72小时内修复                                             │
│     🔵 P3 → 本周修复                                                 │
└─────────────────────────────────┬───────────────────────────────────┘
                                  ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. 审查确认（审查者）                                                │
│     □ 所有 🔴🟠 已修复                                               │
│     □ 覆盖率达标                                                      │
│     □ 安全扫描通过                                                    │
│     □ Approve                                                          │
└─────────────────────────────────┬───────────────────────────────────┘
                                  ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. 生产合并前检查                                                    │
│     □ E2E 测试通过                                                    │
│     □ 部署文档更新                                                    │
│     □ 变更日志记录                                                    │
│     □ 监控指标验证                                                    │
└─────────────────────────────────┴───────────────────────────────────┘
```

### 8.2 审查时效

| PR 类型 | 首次审查 | 问题修复复核 | 总时限 |
|---------|----------|------------|--------|
| 紧急修复 | 1小时 | 30分钟 | 4小时 |
| 常规功能 | 4小时 | 2小时 | 24小时 |
| 重构/优化 | 8小时 | 4小时 | 48小时 |
| P0修复 | 30分钟 | 15分钟 | 2小时 |

---

## 九、合规要求

### 9.1 安全合规

```yaml
security_compliance:
  # 数据保护
  data_protection:
    - GDPR合规（如果适用）
    - 数据加密存储
    - 数据传输加密
    - 数据访问审计
    
  # 访问控制
  access_control:
    - 最小权限原则
    - 密钥轮换
    - 多因素认证
    - 访问审计日志
    
  # 漏洞管理
  vulnerability_management:
    - 依赖扫描（每日）
    - 渗透测试（季度）
    - 漏洞修复 SLA（严重24h，高危7天）
```

### 9.2 运营合规

```yaml
operational_compliance:
  # 可用性
  availability:
    - SLO定义（99.9%）
    - SLA承诺（99.5%）
    - 错误预算监控
    
  # 备份
  backup:
    - 备份策略文档
    - 恢复测试记录
    - 备份保留策略
    
  # 事件管理
  incident_management:
    - 事件分级标准
    - 升级流程
    - 事后复盘要求
```

---

## 十、附录

### 10.1 快速检查命令

```bash
# 完整门禁检查（生产合并前必须）
#!/bin/bash
set -e

echo "=== 代码质量检查 ==="
go test ./... -count=1 -race
go tool cover -func coverage.out | grep total | awk '{print "Coverage:", $3}'

echo "=== 安全扫描 ==="
gosec ./...
npm audit
govulncheck ./...

echo "=== 构建检查 ==="
go build ./cmd/server
npm run build

echo "=== E2E 测试 ==="
npm run e2e:full:win

echo "=== 所有检查通过 ==="
```

### 10.2 评分计算器

```
综合评分 = 代码质量×0.25 + 安全强度×0.30 + 部署简单性×0.15 + 运维可靠性×0.20 + 文档规范性×0.10

生产标准：
- ≥9.0：卓越，可随时发布
- 8.0-8.9：优秀，可发布
- 7.0-7.9：良好，修复P2后发布
- 6.0-6.9：需要改进，修复P1后发布
- <6.0：不合格，修复P0后重新评估
```

---

*本文档由代码审查专家 Agent 生成*
*版本: v3.0*
*最后更新: 2026-04-08*
*下次审查: 2026-04-15*
