我用 AI Coding做了一套"三阶段递进式"项目质控平台,28 个问题闭环率 100%

57 阅读10分钟

我用 AI 做了一套"三阶段递进式"项目质控平台,28 个问题闭环率 100%

标签:AI 代码质量 DevOps 自动化测试


前言:每次上线都是在赌运气吗?

相信不少工程师都经历过这种场景:

周五下午五点,产品催着上线。你 Code Review 了两遍,CI 绿了,手动点了几个核心功能,本地跑了一遍——感觉没问题。然后发版。

周一早上九点,你收到第一条报警……

不是你不够仔细,而是人工质检有天然的盲区:

  • 精力有限,覆盖不全(功能边界/接口契约/安全漏洞)
  • 经验偏差,同一个人容易忽视同一类问题
  • 时间压力,往往只检查"最担心的那部分"
  • 多人协作,没有统一的质量标准

传统 CI 工具(Lint、单元测试、SonarQube)解决了一部分,但它们各自孤立、缺乏全局视角,更没有"动脑子"去思考逻辑漏洞或架构演进风险。

这就是我做 LandingQC 的动机——一套 AI 驱动的项目质控平台,把"上线前的最后一道门"做成真正意义上的质量闸口。


整体设计:三阶段递进式流水线

传统的质控流程是线性的:跑完 A 等 A,再跑 B 等 B。LandingQC 的核心思路是分层并行 + 递进深度

┌─────────────────────────────────────────────────────────┐
                   LandingQC Pipeline                    
                                                         
  Phase 1: 自动化扫描(全并行,6 维度同时开跑)           
    ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐          
    │代码│  QA  │E2E  │静态│ │依赖│ │性能│          
    │质量│ │功能│ │接口│ │审查│ │安全│ │基线│          
    └────┘ └────┘ └────┘ └────┘ └────┘ └────┘          
                                                        
  Phase 2: 专家深度审计(4 AI 专家并行)                  
    ┌──────────┐ ┌──────┐ ┌──────┐ ┌──────────┐        
    │全栈审计   │红队   │逻辑   │架构              
    │(30%)      │攻防   │漏洞   │可演进性          
               │(30%)  │(20%)  │(20%)             
    └──────────┘ └──────┘ └──────┘ └──────────┘        
                                                        
  Phase 3: 分级自动修复 + 回归验证                        
    P0(致命)→ 立即修复  回到 Phase 2 重新审计          
    P1(高危)→ 自动修复  回归验证                       
    P2(中危)→ 自动修复  回归验证                       
                                                        
               最终评分报告 + 通过/阻塞                   
└─────────────────────────────────────────────────────────┘

三个阶段的关系不是简单的串联,而是有反馈回路的——P0 问题修完后会触发 Phase 2 重跑,确保修复没有引入新问题。


Phase 1:自动化扫描——用宽度换覆盖

第一阶段的目标是快速、全面地建立基线,6 个维度全并行,通常在 2-3 分钟内完成。

# 伪代码:Phase 1 并行扫描调度
async def phase1_scan(project_root: str) -> ScanResult:
    tasks = [
        scan_code_quality(project_root),    # 代码规范/复杂度/重复率
        scan_qa_functions(project_root),     # 核心功能冒烟测试
        scan_e2e_contracts(project_root),    # API 接口契约验证
        scan_static_analysis(project_root),  # AST 级静态分析
        scan_dependency_security(project_root), # CVE 依赖漏洞
        scan_performance_baseline(project_root) # 响应时间/内存/包体积
    ]
    results = await asyncio.gather(*tasks)  # 全并行
    return merge_results(results)

为什么要并行而不是串联?

串联扫描的问题是:如果你在等代码质量扫描的同时,依赖安全扫描也可以跑,你在浪费时间。并行架构让 Phase 1 的效率提升了约 3-5 倍。更重要的是,6 个维度相互独立,没有依赖关系,天然适合并行。

Phase 1 结束后,系统会汇总一份问题初筛报告,决定是否有足够的"原材料"进入 Phase 2 深度分析。如果基础扫描就发现了 P0 致命问题,可以直接快路径触发修复,不必等 Phase 2 完成。


Phase 2:专家深度审计——用深度换洞察

Phase 1 是"宽网捞鱼",Phase 2 是"潜水摸底"。

四个 AI 专家角色分工明确,但都能看到彼此的发现,通过交叉验证提升置信度:

专家角色权重核心职责
全栈审计30%全链路逻辑正确性、数据流完整性
红队攻防30%安全漏洞挖掘、注入/越权/SSRF 等
逻辑漏洞20%边界条件、并发竞争、状态机正确性
架构可演进性20%模块解耦、扩展点设计、技术债务

为什么安全审计权重这么高(30%)?

因为安全问题的修复成本远高于功能 Bug。一个 SQL 注入漏洞上线后,修复成本不只是改代码,还包括:数据泄露评估、用户通知、监管合规、品牌声誉——这些是无法量化的沉没成本。把安全权重拉到与全栈审计持平,是一种风险定价的正确性

# 四专家并行 + 交叉验证伪逻辑
results = parallel_run([
    expert_fullstack(code, phase1_findings),
    expert_redteam(code, phase1_findings),
    expert_logic(code, phase1_findings),
    expert_evolution(code, phase1_findings)
])

# 交叉验证:同一问题被多个专家发现 → 置信度提升
validated = cross_validate(results)
# 置信度高的问题优先级上调
validated = priority_boost(validated, threshold=2)

交叉验证去重的价值

如果红队专家和逻辑漏洞专家都发现了"用户 ID 可被枚举遍历"这个问题,系统会将其合并为一条,但置信度标记为 HIGH(2 个独立专家确认)。这比单一专家的判断更可靠,也帮助修复时优先处理高置信度问题。


量化评分体系:不让平均分掩盖短板

最终评分用加权平均,但加了两个特殊门控:

最终得分 = 全栈审计 × 30% + 安全攻防 × 30%
          + 逻辑健壮 × 20% + 可演进性 × 20%

通过条件:
  ✅ 最终得分 ≥ 80
  ✅ 任意单项得分 ≥ 50(单项否决线)

阻塞条件(任一触发即阻塞):
  🚫 最终得分 < 60
  🚫 任一维度得分 < 50

为什么需要单项否决?

假设安全审计得 45 分(严重漏洞),但其他三项都是 90 分,加权平均会算出 72.5 分——感觉还不错?但这个项目有严重安全漏洞,绝对不应该上线。

单项否决机制确保:一个致命短板不会被其他维度的高分平滑掉。这是工程判断,不是数学问题。

场景加权平均单项否决最终结论
安全 45 / 其余 90+72.5安全 < 50 触发阻塞
安全 60 / 其余 75+70+无触发通过(有警告)
四项均 85+85无触发通过

Phase 3:分级修复 + 止血回路

发现问题只是开始,修完问题并验证没有引入新问题才是闭环。

P0(致命级 — 服务崩溃/数据丢失/严重安全漏洞)
  → 立即自动修复
  → 回到 Phase 2 重新深度审计(修复可能改变代码逻辑)
  → 二次审计通过后继续 P1

P1(高危级 — 功能错误/高危安全问题)
  → 自动修复
  → 针对性回归验证(只验证变更影响范围)

P2(中危级 — 性能劣化/代码规范/可维护性)
  → 自动修复
  → 轻量回归验证

P0 止血回路的设计逻辑

P0 问题往往是改动量最大的——修一个空指针可能要重构一个模块,修一个 SQL 注入可能要重写整个查询层。这种级别的修改本身就可能引入新问题

所以 P0 修完后必须回到 Phase 2 重跑,而不是直接进入 P1 修复。这个看起来"浪费时间"的回路,实际上是在保证修复质量


技术栈自适应:零配置识别

LandingQC 能自动识别项目使用的技术栈,无需手动配置:

# 自动探测逻辑(伪配置)
detection:
  node:
    signals: [package.json, node_modules/, .nvmrc]
    scanners: [eslint, jest, npm-audit]
  python:
    signals: [requirements.txt, pyproject.toml, setup.py]
    scanners: [pylint, pytest, bandit, safety]
  go:
    signals: [go.mod, go.sum]
    scanners: [golint, go test, govulncheck]
  docker:
    signals: [Dockerfile, docker-compose.yml]
    scanners: [hadolint, trivy, dive]
  # 支持混合技术栈(monorepo 场景)
  mixed: true

这个设计解决了"质控工具本身就需要配置"的悖论。如果引入一个新工具还要先花半天配置,那它的推广阻力就已经注定了。


与传统工具的对比

能力维度传统 CI(Lint+测试)SonarQubeLandingQC
代码规范检查
安全漏洞挖掘部分✅(红队模式)
逻辑漏洞检测
架构演进分析
自动修复❌(只报告)✅(P0-P2)
修复后验证✅(回归闭环)
量化评分有(但单维度)✅(四维加权)
技术栈自适应需配置需配置✅(零配置)
并行执行部分部分✅(全并行)

实战效果:6 轮审查,28 个问题,闭环率 100%

LandingQC 在实际项目中经历了 6 轮 0Bug 审查,累计发现并修复 28 个问题,问题分布大致如下:

P0 致命级:3 个(空指针 panic / 数据竞争 / 未授权接口)
P1 高危级:9 个(SQL 注入风险 / 越权逻辑 / 错误未处理)
P2 中危级:16 个(性能劣化 / 代码重复 / 缺少输入校验)

闭环率:28/28 = 100%

几个印象深刻的发现:

  1. 一个"绝对不会被攻击"的内部接口,被红队专家发现可以通过参数篡改越权访问其他用户数据。开发者认为"这个接口只有内部用,没人知道 URL"——经典的安全默剧。

  2. 一个性能基线异常,实际上是数据库连接池配置错误导致高并发时连接泄漏。这个问题在低负载环境完全无感知,但上线后会在流量峰值时崩溃。

  3. 架构专家发现了一个隐藏的循环依赖——模块 A 依赖模块 B,模块 B 的某个工具函数又引用了模块 A 的常量。当时没有问题,但这个结构导致后续无法独立部署 A 和 B。

这些问题用传统工具都不会被发现。


设计哲学:质控是工程文化,不是流程障碍

LandingQC 的设计有一个核心前提:质控工具如果让开发者觉得是负担,它就会被绕过

所以它的几个反直觉设计:

  • 自动修复而非只报告:报告 28 个问题,让开发者逐一去改,很可能被直接关掉。自动修复 + 回归验证,降低了修复的摩擦力。
  • 评分而非只通过/失败:70 分和 55 分都"没通过",但意义完全不同。量化分数让团队能追踪质量趋势,而不只是"这次失败了"。
  • 用户反馈驱动进化:系统内置了对误报/漏报的标记机制,这些标记会持续优化专家的判断权重。质控平台本身也需要迭代。

总结

LandingQC 的核心理念可以用一句话概括:

用 AI 的深度替代人工的宽度,用并行的效率替代串行的等待,用闭环的验证替代一次性的扫描。

三阶段递进确保了覆盖广度和分析深度不互相妥协;四维加权 + 单项否决确保了评分的工程合理性;P0 止血回路确保了修复质量;技术栈自适应确保了零接入成本。

这套体系不是银弹,但它把"上线前的质量把关"从依赖个人经验和运气,变成了可复现、可量化、可追踪的工程流程。


讨论区互动

你们项目现在用什么做上线前的质控?有没有遇到过那种"CI 全绿、上线即崩"的离谱经历?

另外想问一个有点哲学的问题:你认为 AI 审计专家能完全替代人工 Code Review 吗? 还是两者各有不可替代的价值域?

欢迎在评论区分享你的看法,或者描述你踩过的最"刻骨铭心"的上线前质量漏网鱼——说不定 LandingQC 的下一个检测维度就来自你的故事。


作者:热衷于把工程经验系统化的全栈工程师。如果这篇文章对你有启发,欢迎点赞收藏,你的支持是继续输出深度内容的动力。