代码审查是软件开发中的一道“质检关卡”——就像老师批改学生作业,逐行检查哪里有错、哪里有隐患。但人工审一遍,慢且累:一份几百行的变更就得花上半小时,审到后面眼睛发花,反而漏掉了最危险的地方。于是很多团队请来了一位“AI助教”:它读过海量的开源代码,几秒钟就能把整个 Pull Request 扫一遍,用红笔圈出可疑的写法、漏掉的边界判断,还有藏得比较深的逻辑漏洞。这篇内容就围绕这个“AI助教”展开——它凭什么会批改?市面上哪几款助教值得选?怎么把它排进团队的日常流程?它批错了怎么办?怎么给它定制“批改手册”?以及如何让这套机制越用越准。

岗位关联

掌握 AI Code Review 的落地方法,意味着你不再被重复性的低级审查消耗精力,可以把人力集中在架构和业务逻辑的高价值评审上——这是从“代码搬运工”走向“团队质量负责人”的必修课。

目录
  1. 可视化演示
  2. 审查原理:AI助教凭什么会批改
  3. 主流工具:选一款合适的助教
  4. 流程融入:把助教排进课表
  5. 误报处理:助教也有看走眼时
  6. 规则制定:给助教一本批改手册
  7. 质量保障:让助教越用越顺手
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示AI代码审查流水线(提交→PR→AI分析→问题检测→评审)与四类问题检测(SEC安全/STY风格/BUG缺陷/PRF性能),以及多工具质量指标(P/R/F1)对比与误报过滤。

本节配有交互动效(进入视口后自动加载,约 3KB)。

AI代码审查流水线 提交(CMT)→PR→AI六边形分析节点,逐行扫描代码 检测(DET)四类问题:SEC安全/STY风格/BUG缺陷/PRF性能 评审(REV): 内联评论CMT标注,人工确认后合并 CMT → PR → AI分析 → DET(SEC+STY+BUG+PRF) → REV → Merge

审查原理:AI助教凭什么会批改

班上来了位新助教小审,第一节自习课就亮相。它不需要倒时差,也不用喝咖啡,直接把一百多本作业“扫”了一遍——先看封面学号是否一致,再抽查几道典型题目的解题步骤,五分钟内就圈出了十几处“漏了单位”“没写答”的低级错误。AI 代码审查给人的第一印象总是如此:快得惊人,而且结论非常具体,像极了一位经验老到的批改老师。

快,是因为它做的事本质上分成三类能力。第一是静态结构分析:源代码被解析成一棵“抽象语法树”(AST),相当于把作文按章、节、句子拆开,审查器能准确知道“第 3 行属于哪个函数、这个函数从哪里被调用”。第二是规则引擎:团队可以把规范写成显式的检测规则,逐条比对源码,这就像批改手册上的白纸黑字,命中就打勾。第三是 LLM 语义理解:模型经过海量代码语料训练,读代码像读自然语言一样,能察觉“这里虽然不报错,但并发场景下会出问题”这种微妙隐患。

这三类能力经常组合使用——规则引擎提供确定性,LLM 提供泛化性,AST 负责精确的上下文定位。一条代码经过三层裁决后,审查器会为每处可疑点计算一个“严重分”:

回到比喻:小审的“会批改”并不神秘——它只是把批改经验拆成一张张评分表,再用一个快速的机器大脑去套用。有过学生时代经验的人都明白:这种批改方式找拼写错误特别准,但要判断作文立意是否深远,就得请老师亲自来看。代码审查也一样,AI 负责把“低级错误”地毯式扫干净,把深水区的判断留给人类。

S=∑i=1nwimi(mi∈{0,1})\displaystyle S=\sum_{i=1}^{n} w_i m_i \qquad (m_i \in \{0,1\})
综合分等于所有命中规则的加权求和,权重越高代表这类问题越严重。只有超过阈值的问题才会被标记为“需要人工复核”,避免小噪音干扰团队。
  1. 规则命中信号每一类规则就是一个“检查项”。如果代码片段命中了第 i 类规则,信号取 1,否则取 0。
    mi∈{0,1}\displaystyle m_i \in \{0,1\}
  2. 加权求和每个检查项在团队心中的分量不同——“存在 SQL 注入风险”的权重远高于“建议把变量名改得更清晰”。把各信号与权重相乘后总和起来,就得到综合严重分。
    S=∑i=1nwimi\displaystyle S=\sum_{i=1}^{n} w_i m_i
  3. 阈值判定如果综合分超过预先定好的阈值,审查器就把它标成“待人工复核”;没超过的只在报告里提一句。
    flag=1 if S≥θ\displaystyle \text{flag}=1\ \text{if}\ S\geq\theta

主流工具:选一款合适的助教

市面上的助教产品不少,功能各有侧重。有的擅长英语作文批注,有的精于数学解题步骤检查,还有的专攻历史小论文——选错了,用起来就浑身别扭。AI 代码审查工具也是同样的道理,目前主流有四条路线。

第一条是“平台内置型”,以 GitHub 官方推出的 Copilot Code Review 为代表:它直接在仓库的 PR 页面挂一个机器评委,提交即触发,与现有开发体验无缝融合。第二条是“专业审查型”,比如 CodeRabbit——这类工具把整个 PR 的上下文交给大模型,输出结构化审阅报告,自动生成摘要和修改建议,适合对审查体验有更高要求的团队。第三条是“私有化部署型”:用开源模型在团队内网搭一套审查服务,代码完全不出域,适合金融、政企等对数据安全极其敏感的机构。第四条是“IDE 内嵌型”:在 VS Code 等编辑器里随写随查,作为开发者本地自纠的辅助。

选型到底看什么?核心是四个维度:能不能对接团队现有的代码托管平台、代码数据是否允许出域、支持的语言和框架是否匹配技术栈、误报控制与调优能力是否够用。团队规模也影响决策——小团队用免费额度就足够,大团队则要评估百万行级代码的审查吞吐和并发能力。这里有一个衡量工具“查错广度”的核心指标——覆盖率:

选助教不像选明星,不是越贵越好,而是讲究“班级情况”匹配:你用的是 GitHub 还是 GitLab?仓库在云上还是内网?主力语言是 Java 还是 Python?这些答案会自然筛选出最合适的那一款。工具对比时把候选方案的覆盖率、误报率、接入成本列成一张表,决策就清晰了。

Coverage=∣Ffound∩Ftotal∣∣Ftotal∣\displaystyle \text{Coverage}=\frac{|F_{\text{found}}\cap F_{\text{total}}|}{|F_{\text{total}}|}
覆盖率等于“工具有效命中缺陷数”除以“真实缺陷总数”,反映 AI 助教在多大程度上接住了本该被 review 发现的问题。
  1. 定义真实缺陷全集人工评审最终确认的问题集合,就是这次批改的“标准答案”。
    Ftotal={人工确认的全部缺陷}\displaystyle F_{\text{total}}=\{\text{人工确认的全部缺陷}\}
  2. 求有效命中工具发现并最终确认有效的问题集合,与真实缺陷全集取交集,两者重合的部分才是真正有用的命中。
    Ffound∩Ftotal\displaystyle F_{\text{found}}\cap F_{\text{total}}
  3. 计算覆盖率用有效命中数除以真实缺陷总数,得到 0 到 1 之间的比值,越接近 1 说明工具查得越全。
    Coverage=∣Ffound∩Ftotal∣∣Ftotal∣\displaystyle \text{Coverage}=\frac{|F_{\text{found}}\cap F_{\text{total}}|}{|F_{\text{total}}|}

流程融入:把助教排进课表

助教小审能力再强,如果只在期末才出现一次,教学效果依然有限。真正让团队受益的做法,是把它排在“每次交作业”的环节里:作业一交上来,助教先批一遍。代码评审的流程设计也遵循同样的原则——AI 审查必须嵌进日常的合并请求(Pull Request,简称 PR)工作流,而不是当成一个偶尔跑一次的外挂。

现代主流做法是在代码托管平台上配置“提交触发”:开发者创建 PR 或推送新 commit 时,CI 流水线自动拉起 AI 审查任务,三五分钟后返回审查意见。AI 负责初筛,人类 Reviewer 拿到的是已经分好级的结果——标红的必须认真看,标黄的顺带看,标灰的可以忽略。人类复核仍然是最终关口:AI 给出建议,但并不直接拥有合并权限。

日常 PR 多用增量审查,只审这一次变更涉及的 diff,吞吐高、噪音低;遇到大版本合并或核心模块重构,则切换成全量审查,把整个文件乃至关联模块喂给模型,避免“只见树木不见森林”。前后两种模式节省了多少人力,可以用提效比来量化:

课表安排的智慧在于:助教挡在前面,主讲老师的时间被释放出来,去处理真正需要人判断的问题——架构选型、业务逻辑、团队风格的争执。AI 审查不是把评审环节变没了,而是把评审从“从头看到尾”变成“只盯最关键的部分”。

η=Tmanual−TAITmanual\displaystyle \eta=\frac{T_{\text{manual}}-T_{\text{AI}}}{T_{\text{manual}}}
提效比表示 AI 辅助后节省的人工耗时占纯人工耗时的比例。如果 η 是 0.4,就相当于省下了四成评审时间。
  1. 纯人工耗时包括阅读变更、逐行找问题、来回评论沟通、等待返工的全部时间成本。
    Tmanual=Treview+Tcommunicate\displaystyle T_{\text{manual}}=T_{\text{review}}+T_{\text{communicate}}
  2. AI 辅助耗时AI 初筛时间加上人类只看高风险项的终审时间,通常远小于纯人工耗时。
    TAI=Tai_scan+Thuman_gate\displaystyle T_{\text{AI}}=T_{\text{ai\_scan}}+T_{\text{human\_gate}}
  3. 计算提效比用两者的差除以纯人工耗时,得到 0 到 1 之间的值;η 越大代表流程提效越明显。
    η=Tmanual−TAITmanual\displaystyle \eta=\frac{T_{\text{manual}}-T_{\text{AI}}}{T_{\text{manual}}}

误报处理:助教也有看走眼时

小审第一次上岗就闹了笑话:把一份完全合规的代码标成“存在 SQL 注入风险”,原因只是有个变量名里带了"sql"两个字且拼了字符串。开发者哭笑不得地解释了半小时。与此同时,它还漏掉了一个真正的空指针隐患——这个事故让团队明白,再聪明的助教也有看走眼的时候。

误报(False Positive)指 AI 标出了实际不存在的问题,就像老师把对的答案划了红杠;漏报(False Negative)指真实问题被放过,就像老师没发现学生抄了同桌的答案。两者此消彼长,是审查器固有的折中:阈值定得严,误报变少但漏报增多;阈值定得松,漏报变少但噪音变大。团队要做的不是消灭误报,而是把误报率控制在“团队愿意天天看”的范围内。

处理误报有一个有效的“分级反馈”机制:把 AI 建议按置信度分成高、中、低三档,高风险问题自动阻塞合并,低风险只提示不打扰;同时建立噪声过滤黑名单,对连续误报超过 N 次的规则降权或关闭;再通过反馈循环持续调优。误报率的定义如下:

把误报看作助教的“批改误差”就好理解了。一位负责任的老师会定期翻看自己判过的作业,把判错的标准修正过来。AI 助教也需要同样的复盘机制,而这一切都建立在“记录 + 反馈”的数据闭环上。误报不可怕,可怕的是没有处理误报的机制。

FPR=FPFP+TN\displaystyle FPR=\frac{FP}{FP+TN}
误报率是“假阳性”占所有“预测没问题”样本的比例,衡量 AI 批改时“冤枉好人”的频率。
  1. 明确四类结果预测有问题且真有问题叫真正例 TP;预测有问题但实际没问题叫假正例 FP;预测没问题且真没问题叫真负例 TN;预测没问题但有问题的叫假负例 FN。
    TPFPTNFN\displaystyle TP \quad FP \quad TN \quad FN
  2. 误报率计算误报率等于假阳性除以假阳性与真阴性之和,本质上就是“没有问题却被报成问题”的概率。
    FPR=FPFP+TN\displaystyle FPR=\frac{FP}{FP+TN}
  3. 降噪手段针对误报率高的规则,可以做阈值调整、规则降权、黑名单过滤,甚至用历史误报样本微调模型。
    wi←wi⋅(1−Noisei)\displaystyle w_i \leftarrow w_i \cdot (1-\text{Noise}_i)

规则制定:给助教一本批改手册

如果全校统一发一份批改手册,全世界的助教都照着同一套标准打勾——听起来很公平,但未必合理。支付系统会把“金额精度丢失”列为最高严重级,而一个内部工具项目更在意代码可维护性。AI 审查同样需要“因材施教”:团队必须给 AI 一本自己的批改手册。

这本手册分两层构建。显式规则层:通过 Semgrep、ESLint 等规则引擎配置团队规范,比如命名约定、禁止调用的 API、必须处理的异常类型,每一类规则都有明确的匹配模式。提示词层:在自研 Agent 或工具的自定义指令中告诉大模型“本团队审查时特别关注缓存一致性”“涉及订单状态变更时必须校验权限”,让 LLM 的审查风格贴进团队语境。

规则不是越多越好,越多噪音越大,团队很快就会对告警麻木。制定规则时,要按下面这个公式给每条规则打分排序,优先级低的直接砍掉:

批改手册的价值不在厚,而在准。给助教十条掷地有声的规定,好过一百条连它自己也拿不准的细则。而且手册要跟随项目演进定期修订——每季度清理低价值规则,补充新发现的坑,用灰度发布的方式逐步放开新规则,正如教学大纲每年都要更新。

P=α⋅Sev+β⋅Freq−γ⋅Noise\displaystyle P=\alpha \cdot \text{Sev}+\beta \cdot \text{Freq}-\gamma \cdot \text{Noise}
规则的优先级等于“严重度与频率的加权和”减去“历史误报率的惩罚项”。分数越高的规则越值得保留。
  1. 严重度评估Sev 是团队对这类问题的主观价值判断,比如“硬编码密钥”严重度是 9,“命名不规范”是 2。
    Sev∈{1,2,…,10}\displaystyle \text{Sev} \in \{1,2,\dots,10\}
  2. 频率统计Freq 表示这类问题在过去代码中出现的次数,出现越频繁越值得用一条规则管住。
    Freq=count(issue)÷period\displaystyle \text{Freq}=\text{count}(\text{issue}) \div \text{period}
  3. 噪声惩罚Noise 由该规则的历史误报率估算,误报越多惩罚越大,防止一条“狼来了”的规则毁掉团队的信任。
    P=α⋅Sev+β⋅Freq−γ⋅Noise\displaystyle P=\alpha \cdot \text{Sev}+\beta \cdot \text{Freq}-\gamma \cdot \text{Noise}

质量保障:让助教越用越顺手

一学期结束,教研主任问:小审这个助教到底干得怎么样?光凭感觉不行,得翻出这学期的批改记录——它判对了多少、判错了多少、漏过了多少。AI 代码审查同样需要“教学复盘”,这就是质量保障体系的价值:它不是某个单点的功能,而是一整套让审查效果持续变好的机制。

核心是建立三组指标。覆盖率:AI 能抓出多少真实问题;误报率:AI 的告警里有多少是噪音;缺陷逃逸率:被 AI 放过、最终流入线上并被用户撞见的问题数。三组指标放进质量仪表盘,每周看趋势:覆盖率有没有提升?误报率有没有收敛?逃逸率有没有下降?如果连续两周逃逸率上升,说明规则库出现了盲区,必须立刻排查。

审查报告也是重要的沉淀物:本次 PR 的风险分布、规则命中的 Top 排行榜、历史同类问题趋势。这些报告积累下来,就是团队的代码知识库。反过来,知识库中的典型案例会被提炼成新规则或微调数据,喂回 AI 模型,从而形成“审查—反馈—改进—再审查”的闭环。这个闭环的综合效果可以用一个加权质量分来衡量:

就像教研组定期集体备课,AI 助教也在一次次的反馈中被“喂”得更准。最终,团队不再依赖某一位明星工程师的火眼金睛,而是拥有了一套可以持续改进的机器化质量保障体系——这才是 AI 代码审查最值钱的地方:它把“质量靠人盯”变成了“质量靠流程”。

Score=wc⋅Coverage−wf⋅FPR\displaystyle \text{Score}=w_{c}\cdot \text{Coverage}-w_{f}\cdot FPR
质量分等于“覆盖率加权”减去“误报率加权”。它是一个综合了查错广度与噪音成本的数字,适合放进团队周报做趋势对比。
  1. 覆盖率加权覆盖率越高,说明 AI 抓问题的能力越强,这一项对质量分贡献为正。
    wc⋅Coverage\displaystyle w_{c}\cdot \text{Coverage}
  2. 误报率惩罚误报率越高,团队每天要处理的噪音越多,耐心消耗越大,这一项在质量分中是减分项。
    wf⋅FPR\displaystyle w_{f}\cdot FPR
  3. 综合评分两项加权后相减,得到综合分数;持续记录每周的 Score,就能画出 AI 审查的效果曲线。
    Score=wc⋅Coverage−wf⋅FPR\displaystyle \text{Score}=w_{c}\cdot \text{Coverage}-w_{f}\cdot FPR

AI 应用场景

场景一:研发团队的质量门禁

阶段:CI/CD 合并门禁阶段

解决的问题:传统人工评审排队耗时,低级问题反复出现在 PR 中,reviewer 看多了会疲劳漏检。AI 在 PR 提交后先做初筛,将高风险问题在合并前直接拦截,让“进主干的代码”天然多了一道保险。

具体案例:某 50 人研发团队在 GitHub 上配置了 Copilot Code Review,PR 创建后平均 3 分钟返回审查意见。开发者在等 CI 的间隙顺手修复低级问题,人工 review 时间从平均 45 分钟降到 20 分钟,缺陷逃逸率在一个季度内下降了约三成。

场景二:安全团队的敏感信息防线

阶段:代码提交与上线前检查阶段

解决的问题:硬编码密钥、数据库账号、内部接口地址等问题,靠人工抽查漏检率极高。AI 审查结合规则引擎与语义识别,能在代码合并前发现“看起来像密钥”的字符串,并在告警中直接指向文件行号和提交人,简化追责成本。

具体案例:某金融科技团队私有化部署了 AI 审查服务,配置了密钥泄漏、SQL 注入、反序列化风险等 12 条高危规则。上线 3 个月拦截了 8 次敏感信息提交,其中一次是一条真实的云厂商 AccessKey,被拦下后安全团队对当事人做了专项培训。

场景三:新人成长的 AI 导师

阶段:开发人员技能培养阶段

解决的问题:新人不熟悉团队代码规范,反复在老 Reviewer 那里碰壁,既打击信心又消耗 mentor 精力。AI 审查在提交前就给出具体修改建议,把“规范教育”从人肉完成变成机器即时反馈,新人边写边学。

具体案例:某公司新人训练营要求每周提交的代码先过 AI 审查,按报告修改后再请导师评审。三个月后统计,新人代码规范达成时间从平均 3 个月缩短到 1 个月,导师评审中“低级规范问题”占比显著下降。

Python 演示

python68 行
"""AI代码审查模拟器演示用法: python ai_reviewer.py 目标文件.py"""import reimport sys  class AIReviewer:    """极简AI代码审查器: 规则引擎 + 严重度评分"""     def __init__(self):        # 规则库: (规则名, 正则, 严重度, 建议)        self.rules = [            ("硬编码密钥", r"(?i)(api[_-]?key|secret|password)\s*=\s*['\"][^'\"]+['\"]", 9,             "密钥应放入环境变量或密钥管理服务"),            ("SQL拼接", r"['\"]\s*\+\s*['\"].{0,40}(select|insert|update|delete)", 10,             "请改用参数化查询"),            ("危险函数", r"\b(eval|pickle\.loads|md5)\s*\(", 7,             "该函数存在安全或性能风险, 建议更换实现"),            ("调试残留", r"\b(console\.log|debugger|print)\s*\(", 2,             "调试代码应移除或替换为logger"),            ("空异常捕获", r"except\s*:\s*pass", 6,             "空except会吞掉异常, 应记录日志或精确捕获"),        ]        self.hits = []  # 收集到的审查结果     def review_line(self, lineno, line):        """对单行代码执行全部规则匹配"""        for name, pattern, sev, advice in self.rules:            if re.search(pattern, line):                self.hits.append({                    "line": lineno,                    "rule": name,                    "severity": sev,                    "advice": advice,                })     def review_file(self, path):        """读取并审查整个文件"""        try:            with open(path, "r", encoding="utf-8") as fh:                for idx, line in enumerate(fh, 1):                    self.review_line(idx, line.rstrip())        except OSError as exc:            print("无法读取文件: {}".format(exc))            return        self.report()     def report(self):        """按严重度降序输出审查报告"""        if not self.hits:            print("OK: 未发现明显问题, 可进入人工评审.")            return        self.hits.sort(key=lambda h: h["severity"], reverse=True)        print("发现 {} 处问题:".format(len(self.hits)))        for h in self.hits:            bar = "#" * h["severity"]            print("  第{}行 [{}] 严重度={} {}"                  .format(h["line"], h["rule"], h["severity"], bar))            print("    建议: {}".format(h["advice"]))  if __name__ == "__main__":    if len(sys.argv) < 2:        print("用法: python ai_reviewer.py 目标文件.py")        sys.exit(1)    AIReviewer().review_file(sys.argv[1])
目的:实现一个极简的 AI 代码审查模拟器,用规则引擎对代码文件逐行扫描,按严重度输出带修改建议的审查报告,演示正文中“批改手册 + 加权评分”的核心机制。
  1. self.rules = [...]规则库就是 AI 助教的“批改手册”,每条规则包含正则、严重度、建议三要素
  2. re.search(pattern, line)在单行代码上做模式匹配,相当于助教对照手册逐条打勾
  3. self.hits.append({...})命中的问题被记录成一条结构化审查结果,保留行号、规则名和严重度
  4. self.hits.sort(key=lambda h: h["severity"], reverse=True)按严重度降序排列,保证最危险的问题排在最前面
  5. with open(path, "r", encoding="utf-8") as fh:安全地读取待审查文件,逐行交给规则引擎
  6. if len(sys.argv) < 2:校验命令行参数,没给文件路径时打印用法并退出

常见误区

误区装上 AI 审查工具之后,Reviewer 就能下班了,机器会帮我们把所有 bug 都找出来。每次 AI 说没问题,我就直接点合并。

正解AI 审查更像是“助教初筛”,它擅长捕捉模式化问题——格式错误、已知反模式、安全风险。但对业务语义、架构权衡、设计取舍等高层问题,它的判断能力依然有限,而且会误报、会漏报。人工审查者仍需聚焦逻辑正确性、可维护性和业务匹配度。“AI 说没问题所以没问题”是把助教当成了主讲老师。

为何常见:看到 AI 能精准抓出几个典型错误后,人们容易高估它的泛化能力,以为它能像人一样理解“这个功能为什么要这样设计”。

误区AI 审查老报一些没用的东西,误报率做不到 0 就是不合格,说明这个工具不行。我们要等它能 100% 判准了再全面铺开。

正解审查告警本身是“宁可错杀,不可放过”的代价权衡。真正该追求的是把严重问题的漏报率压到最低,同时通过噪声分级、规则调整把误报率控制在团队愿意每天看告警的水平。零误报通常意味着审查器变得极其保守,漏掉的真问题也会同步增多。

为何常见:日常生活中的“准确率 100%”直觉被迁移到了审查场景,忽略了审查本质上是一个在误报和漏报之间取平衡的决策问题。

误区规则加上去,AI 报得越多,说明审查越严,代码质量肯定会变高。于是团队把能想到的规则全开了,每天产生几百条告警。

正解过多过严的规则会制造大量噪音。团队对告警麻木后,会出现“狼来了”效应——反正大部分告警都没用,干脆一条都不看,真正的高危问题反而被淹没。规则应该按“严重度 × 频率 − 误报率”排序,只保留对团队真实最有价值的少数关键规则,并定期修剪。

为何常见:人们容易把“质量”简单等同于“被机器抓到的数量”,忽略了告警的可信度和团队的处理带宽才是决定有效性的关键。

误区AI 审查只把这次改动的几十行代码扫一遍就行,代码库那么大它也不可能看完。反正 diff 之外的代码又没改。

正解现代 AI 审查可以拉取整个文件、相邻模块甚至仓库的概要信息,在上下文充分的情况下,语义缺陷的检出率会显著提升。增量 diff 的定位是“快速反馈”,适合日常小 PR;但对于核心模块重构、跨函数数据流变更,仍需要全量或扩展上下文的深度审查,否则很容易漏掉“这次改动破坏了另一处隐性依赖”的问题。

为何常见:早期审查看工具只扫描 diff,形成了一种刻板印象——其实那是算力和成本的限制,而不是 AI 能力的边界。

面试题

Q1. AI 代码审查中,“误报”指的是什么?

单选题 · easy

  • A.AI 把一个实际存在的问题标记出来
  • B.AI 把不存在的问题标记出来← 正确答案
  • C.AI 故意放过了存在的问题
  • D.AI 无法读取某类语言的代码

答案:B。误报即假阳性(FP),指预测有问题但实际没问题,就像助教把对的答案划了红杠。A 是正确检出,C 是漏报,D 与误报定义无关。

Q2. 以下哪个公式用于衡量 AI 审查的覆盖率?

单选题 · easy

  • A.有效命中占全部缺陷的占比← 正确答案
  • B.误报占全部告警的占比
  • C.告警数占代码行数的占比
  • D.审阅文件占全部文件的占比

答案:A。覆盖率等于有效命中缺陷数除以真实缺陷总数。B 是误报占比,C 是告警密度,D 是文件覆盖度,它们都与“抓出多少真实缺陷”无关。

Q3. 在 PR 流程中,AI 审查最适合放在哪个环节?

单选题 · mid

  • A.代码提交前由开发者本地运行
  • B.PR 创建时自动触发再人工终审← 正确答案
  • C.PR 合并之后每周做巡检
  • D.仅在发布失败时回查

答案:B。PR 创建时自动触发,能在代码合并前给出最快反馈,人类 Reviewer 聚焦高风险项即可。A 缺少团队级统一覆盖,C 和 D 都太晚,问题已经污染了主干。

Q4. 下列哪些方式能降低 AI 代码审查的误报率?

多选题 · mid

  • A.调低噪声规则的权重阈值← 正确答案
  • B.关闭历史高误报规则← 正确答案
  • C.用审查记录微调模型← 正确答案
  • D.添加更多检测规则

答案:ABC。调低权重、关闭高误报规则、用反馈微调模型都是标准降噪手段。D 不一定,盲目加规则可能引入更多噪音,让误报率不降反升。

Q5. 全量审查相比增量审查的优势是?

单选题 · mid

  • A.耗时更短反馈更快
  • B.能发现跨函数的深层问题← 正确答案
  • C.不需要大模型参与
  • D.完全消除所有误报

答案:B。全量审查覆盖整个文件甚至关联模块,模型能看到跨函数、跨文件的数据流和依赖关系,更容易发现“改了 A 破坏 B”这类深层问题。A 是增量审查的特点,C、D 本身不成立。

Q6. 规则评分公式 P=α·Sev+β·Freq−γ·Noise 中,哪个因素应该被减掉?

单选题 · mid

  • A.问题严重度级别 Sev
  • B.问题出现频率 Freq
  • C.历史误报率 Noise← 正确答案
  • D.规则覆盖范围 Cover

答案:C。Noise 是规则的历史误报率,误报越多说明这条规则越不可信,所以要作为惩罚项减掉。Sev 和 Freq 是正向价值,Cover 不在该公式中。

Q7. 关于 AI 代码审查工具选型,要考虑哪些维度?

多选题 · hard

  • A.是否与代码托管平台集成← 正确答案
  • B.数据是否符合安全合规要求← 正确答案
  • C.支持的语言和框架覆盖← 正确答案
  • D.办公室的装修风格如何

答案:ABC。集成度决定好不好接进现有流程,数据合规决定了代码能否出域,语言覆盖决定了工具对团队技术栈是否实用。装修风格与审查能力毫无关系。

Q8. 一个 AI 审查缺陷被合并后逃逸到线上,最合理的处理方式是?

单选题 · hard

  • A.立即卸载掉 AI 审查工具
  • B.分析漏报原因并补规则← 正确答案
  • C.降低全部规则的阈值
  • D.从此不再信任审查结果

答案:B。缺陷逃逸说明规则库或模型存在盲区,正确做法是复盘案例、补充对应的规则或更新提示词,让助教记住这次的教训。A、D 是因噎废食,C 会放大误报噪音。

Q9. 为什么说 AI 审查是“助教”而不是“主讲老师”?

单选题 · easy

  • A.它只能批改作业不能讲课
  • B.模式识别强但需人工判断← 正确答案
  • C.它的运行速度实在太慢
  • D.它只擅长处理纯文本文档

答案:B。AI 擅长识别规则化和模式化的问题,安全风险、常见反模式都是它的强项;但架构取舍、业务语义等非结构化判断仍需人工把关。“速度慢”“只能批作业”都不符合模型能力强但需要人终审的本质。

Q10. 把 AI 审查纳入团队质量闭环后,适合跟踪哪些指标?

多选题 · hard

  • A.缺陷逃逸率的变化趋势← 正确答案
  • B.误报率的变化趋势← 正确答案
  • C.覆盖率的变化趋势← 正确答案
  • D.AI 回复的礼貌程度

答案:ABC。缺陷逃逸率反映漏掉的真问题,误报率反映噪音水平,覆盖率反映查错广度,三者共同构成质量闭环的核心仪表盘。AI 回复是否礼貌不是质量指标。