游乐游手机版
首页/AI热点日报/热点详情

洞窝AI增量代码自动Review工具探索与实践

类型:热点整理2026-07-08
基于AI大模型构建增量代码自动Review工具,通过gitdiff提取增量代码,调用本地模型生成审查报告,发现空指针、资源泄露等问题。已接入20余服务,累计发现40余个有效问题,单次审查控制在5至10分钟,有效提升代码质量。

探索AI技术在代码质量检测领域的创新应用,洞窝团队的实践值得关注。本教程将带你深入了解如何利用AI大模型构建一个高效的增量代码自动Review工具,从背景、方案到实际应用,逐步拆解整个实践过程。

一、背景介绍

在传统的软件测试体系中,QA人员主要采用接口测试、UI/功能测试、兼容/易用性测试、性能测试等黑/灰盒测试技术手段来保障软件项目质量,涉及代码层面的质量检查包括单元测试、代码Review环节主要由开发人员负责,QA涉及较少或者基本不参与,因此,针对质量至少存在以下局限性:

  • 1、QA重心在于关注功能实现,对内在的代码质量可能存在盲区

    一些隐形bug,对常见的代码错误和安全漏洞,如入参为空导致数据库全表扫描、特定数据返回空导致空指针异常、异常处理、线程安全、资源泄露、代码健壮性、SQL注入/XSS漏洞等问题难以被传统测试手段发现;

  • 2、人工Review代码成本较高,执行过程中落地难度大

    由于人工Review代码,需要耗费大量的时间精力,效率比较低,很多团队因为项目开发任务重、时间紧,往往得不到执行,或者执行大打折扣,这些因素都会导致代码Review落地困难,从而影响质量。

小提示:传统测试方法的盲区是促使我们探索AI辅助的关键驱动力。理解这些痛点,有助于明确新工具的价值定位。

二、实践目标

基于AI大模型的能力,搭建一套能够实现对增量代码自动Review的代码质量检测工具。通过该工具实现自动扫描识别代码的逻辑错误、安全漏洞、代码健壮性等问题,并生成详尽的审查报告和优化建议,从而提升代码Review效率和质量,实现对现有的质量体系进行增强和改进的目标,与QA人员形成互补能力,但是并不能替代QA。

小提示:请牢记目标:工具是增强QA,而非替代。它是一种效率提升和盲区补充的方法。

三、解决方案

经过反复调研和测试,我们利用 git diff 提取被检测项目的目标分支增量代码片段,调用本地API提取该增量代码完整方法体,最后调用AI大模型进行扫描,生成Code Review报告。

整体技术方案一共包括4层:业务接入层、jenkins调度层、API服务层、底层模型层,具体如下:

3.1、模型选取

前提条件

  • 硬件资源条件:公司采用阿里云托管,目前有1块闲置的英伟达V100 32G 显卡
  • 数据安全要求:基于公司对数据安全的要求,需要保证模型能支持私有化部署

基于以上要求,我们在选择用于代码审查(Code Review) 的 AI 大模型时,需要考虑模型是否支持本地化部署、模型能力偏向和审查效果。目前,常见的选择包括 OpenAI 的 GPT 系列、智谱 AI、以及 DeepSeek 等。这些模型具备强大的自然语言处理能力,可分析代码变更并生成审查建议。

我们对Qwen2.5-Coder、DeepSeek-Coder-V2和智谱CodeGeeX4三大模型的代码审查(Code Review)能力进行了全面的调研和测试,他们的主要特性比较如下:

综合来看,Qwen2.5-Coder、DeepSeek-Coder、CodeGeeX4 都具备较强的代码识别和审查能力,且都支持本地部署和具有较高的数据安全性。

结合调研结果加上本地硬件资源(V100 32G),分别对 Qwen2.5-Coder(7B、14B、32B)、DeepSeek-Coder(6.7B、V2 16B)、CodeGeeX4(9B) 在代码审查(Code Review)结果与响应速度上做了验证与对比:

基于模型调研和实际验证结果,目前我们选择智普CodeGeeX4 9B模型作为主要模型,Qwen2.5-Coder 14B和DeepSeek-Coder 16B模型作为备选模型,支持随时切换。

常见问题:如何确保私有化部署下的数据安全?

答案:选择支持本地化部署的模型是关键。像CodeGeeX4、Qwen2.5-Coder和DeepSeek-Coder都支持这种方式。在本方案中,模型部署在内部服务器上,所有代码数据均在本地处理,不会外传,从而满足了严格的数据安全要求。

3.2、核心功能详细介绍

核心功能的实现思路如下图,大致分为五步:

  1. 拉取目标分支增量代码,通过git diff获取差异文件
  2. 提取识别增量方法、解析变更类全量代码和匹配增量方法体
  3. 以Class、Method为单位循环调用本地大模型API接口获取结果
  4. 结果存储与报告生成
  5. 发送钉钉通知审查结果

整体流程如下:

以下对每个步骤进行详细介绍:

1、拉取代码库与git diff生成差异文件

  • Jenkins 任务配置: 定时任务或触发式拉取:配置 Jenkins 任务,定时或通过其他触发方式拉取指定 Git 仓库中的代码,支持 GitHub、GitLab 等代码托管平台。
  • Git 配置: 指定分支、版本、提交信息等,通过配置 Jenkins job 来自动拉取最新的代码。
  • Shell 脚本执行: 使用 shell 脚本执行 Git 拉取操作,可以配置参数如 git pullgit checkout 来确保拉取正确版本的代码。
  • Git Diff 对比: 使用 git diff 比较开发分支与基线分支的差异,提取增量代码。git diff 可以高效地找到相对较小的代码变更,避免全量扫描带来的性能开销。生成 diff 文件,标记出新增或修改的代码行,这些变更即为增量代码。
  • 增量代码识别与存储: 提取出来的增量代码所在方法会存储在一个专门的临时文件夹中,等待后续步骤进一步处理。增量代码可以根据修改的内容分类(如新增、修改、删除),以便后续审查更具针对性。

2、 提取识别增量方法、解析变更类全量代码和匹配增量方法体

  • Python 逻辑处理: 解析 git diff 输出,分析出增量代码中的类、方法、函数等模块。通过 Python 脚本解析差异文件,提取新增或修改的函数、类,将识别出的方法和类将被归类,存储为一个 JSON 格式的结构,包含方法名称、类名等信息。
  • 全量代码解析: 使用 Ja vaParser 解析整个代码库(包括新增和历史版本的代码),通过解析构建方法体的映射表。Ja vaParser 可以生成抽象语法树(AST),帮助更准确地理解方法和类的结构。通过解析后的 AST,提取出代码中的方法名、类名及其对应的实现。这一过程为后续增量代码与全量代码的匹配提供了基础数据。
  • 方法体匹配与上下文提取: 将增量代码中的方法名与全量代码中的方法体进行匹配,找出增量代码的完整上下文(如方法的调用和逻辑实现)。通过这种方式,可以确保审查的是完整的业务逻辑而不仅仅是部分代码。增量方法和上下文通过映射关系进行归档,便于后续审查模块访问。

小提示:Python脚本是核心处理环节,负责解析diff文件并生成结构化的增量代码信息。Ja vaParser在解析完整代码库时作用关键,能精准定位方法体。

3、 调用本地大模型接口

  • Ollama 模型微调: 使用 Ollama 作为基础的 AI 模型,进行微调,能显著提高模型的审查准确度,实现输出样式最优化。
  • 建议修改: 提供针对问题的修复建议,帮助开发人员理解和修复问题。
  • 智能审查扩展: 可以根据具体需求调整模型,增加或修改审查的规则,比如在模型的输入中加入更多的上下文信息,或者使用外部工具提供的静态分析结果进行补充。

常见问题:为什么选择Ollama进行微调,而不是直接使用标准模型?

答案:微调是提升审查效果的关键步骤。标准的大模型可能审查粒度不够或输出格式不统一。通过Ollama微调,我们可以根据代码审查的特定任务调整模型参数,使其能更精准地识别代码问题、生成结构化的审查报告(例如:问题类型、严重级别、修复建议),从而提升工具的实用性和开发人员的采纳率。

4、 结果存储与报告生成

  • MySQL 数据库: 审查结果存储在 MySQL 数据库中,设计审查结果表来保存以下信息:
    • 报告id:查询唯一值
    • 文件路径:类所在文件路径
    • 方法名:增量代码方法名称
    • 代码片段:问题所在的代码行及相关代码。
    • 修复建议:基于模型输出的修复建议,帮助开发人员快速定位问题并解决。
  • fastjson 报告生成: 利用 fastjson 实现,将数据库中存储的审查结果提取出来,生成 HTML 格式的报告。以Class为单位输出报告,示例如下:

5. 钉钉通知审查结果

  • 钉钉机器人 API: 使用钉钉机器人的 Webhook 接口,将审查报告和关键问题摘要自动推送到指定的钉钉群。
  • 消息内容包括:
    • 审查报告链接:提供报告的下载链接,供开发人员查看详细的审查内容。
    • 被测分支:方便查阅
  • 配置灵活性: 可以根据需要配置不同的通知频率和内容摘要,例如仅推送高危漏洞,或者根据问题的严重性级别推送不同的通知。

3.3、使用场景

包括提测前、bug fixed后、代码合并后等场景,支持手工和自动运行,目前大部分由QA手动触发执行。

四、实践结果

4.1、使用情况及效率提升

目前已接入4条业务线,接入服务20+,试用近一个月,累计发现的有效问题40+(包括空指针校验、入参为空导致数据库查全表、线程安全、异常处理不规范、资源泄露、代码安全漏洞等问题),单次生成Review报告的时间基本控制在5-10min以内。

4.2、应用案例

案例1:入参未校验,导致查全表,已修复

优化前后代码对比:

案例2:缺少对参数的判空,存在潜在的空指针异常

优化前后代码对比:

小提示:自动代码Review工具虽然可以帮助我们发现问题,是否要修复,还要结合具体的业务场景、上下文进行判断,不能一概而论,做到具体问题具体分析,确保每一个可疑问题都能得到恰当的评估与处理。

五、后续规划

目前主要实现对ja va工程相关代码的自动化Review,取得一定的效果,后续计划包括:

  • 1、接入更多项目
    • A、支持android、ios客户端代码接入,实现自动Review
    • B、支持前端vue、js、css代码接入,实现自动Review
  • 2、报告生成与结果展示优化
    • A、提供易于理解,问题更加精准的审查报告,帮助开发人员快速识别和修复问题
    • B、增量代码标识精确到行,方便快速判断是新增代码问题,还是历史问题

六、总结

在当前竞争日益激烈的软件领域,降本、增效、提质一直是各团队不懈追求的目标。基于AI大模型的增量代码自动Review工具,正是顺应这一趋势做出的尝试。通过该工具可以帮助QA团队增强和改进质量,但仍存在较大的优化空间,后续将持续改进优化,争取使该工具成为我们的得力助手,在质量保障提升的道路上注入更多活力与价值。

来源:https://www.53ai.com/news/LargeLanguageModel/2025042610369.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。