课程PPT笔记

CS146S 第七周笔记总结:Modern Software Support

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 11/3 AI Code Review 代码审查的价值 + AI 如何改变审查 + 局限性(25 slides)
Fri 11/7 🎤 Guest: Tomas Reimers (CPO, Graphite) AI 代码审查工具的实践

第一讲:AI Code Review(11/3)

核心定位

"软件代码审查是你能做的最高杠杆活动之一,既能让自己成为更好的工程师,又能提升团队整体代码质量。"

这一讲从传统代码审查的价值出发,过渡到 AI 如何增强这一流程,最后讨论 AI 审查的局限性。

第一部分:为什么代码审查如此重要

统计数据(来源:Coding Horror / Code Complete):

  • 代码审查的错误检测率:55-60%
  • 对比:单元测试 25%、功能测试 35%、集成测试 45%
  • 引入审查前后:程序错误率从 4.5/100 行 降至 0.82/100 行(减少 80%+)
  • AT&T 研究:引入审查后生产力提升 14%,缺陷减少 90%

📚 课程关联: 这些数据与第六周的 SAST/DAST 形成互补——SAST 检测代码模式漏洞,而代码审查检测逻辑和设计问题。两者组合是多层质量保障的核心。

第二部分:代码审查应该捕获什么

五大审查维度:

维度 示例
逻辑和正确性 业务逻辑错误、边界条件
可读性和可维护性 命名、结构清晰度
性能 不必要的循环、内存使用
安全 用户输入处理、认证、文件操作
最佳实践 代码库惯用法、数据库访问模式

第三部分:什么是好的代码审查

反面:

"This won't work"

正面:

"I see your new method matches the existing style in this file, taking [X] parameters. Having that many parameters hurts readability and implies the function is doing too much. What do you think about refactoring this method and the existing ones in a later pull request to reduce how many parameters they take?"

好的审查标准:

  • 提供具体细节
  • 引用具体代码或问题
  • 建议解决方案
  • 引用证据或解释

代码审查的五大价值(来源:Blake Smith):

  1. 帮助团队成员随系统变化更新心智模型
  2. 确保变更正确解决问题
  3. 开启设计优劣的讨论
  4. 在 Bug 到达生产环境前捕获
  5. 保持代码风格和组织的一致性

第四部分:AI 代码审查工具

当前工具生态:

  • Graphite(本周客座嘉宾)— AI 驱动的 PR 审查平台
  • Greptile — AI 代码审查
  • CodeRabbit — AI PR 审查
  • Claude Code / Codex — 通用 AI 编程助手

第五部分:AI 改变了什么

改变 详细说明
效率 自动化减少审查时间,更早捕获问题
一致性 AI 在所有审查中应用相同标准
知识共享 开发者通过 AI 建议学习最佳实践
降低认知负荷 AI 处理常规检查,人类专注复杂逻辑
持续改进 AI 系统随数据积累而改进
整体理解 现代 AI 工具提供上下文分析和模式识别

第六部分:局限性(关键!)

"代码审查在 AI 编码时代比以往任何时候都更重要。你拥有被合并和发布的代码,不能怪 AI。"

局限性 说明
更多配置/设置 需要明确告诉 AI 不要审查什么
假阳性 必须训练系统 → 持续学习
无法捕获惯用法 还不能理解代码库特有的最佳实践
无法处理复杂业务逻辑 架构决策仍需要人类
安全变更需格外谨慎 用户输入、认证、文件操作、网络请求
经常遗漏边界情况 边界条件检测不可靠

📚 课程关联:

  • "假阳性"问题直接延续第六周的核心发现(Semgrep 实验 86% 假阳性率)
  • "安全变更需格外谨慎"呼应第六周 Copilot RCE 漏洞——AI 审查工具本身也可能忽略安全问题
  • "你拥有被合并的代码"与第四周 Claude Code 的 Human-in-the-Loop 设计一致——AI 是助手,不是决策者

第二讲:Guest Lecture——Tomas Reimers(CPO, Graphite)(11/7)

Graphite 背景

  • 定位: AI 代码审查平台,专注于 GitHub PR 工作流增强
  • 核心产品: Graphite Agent(AI 审查器)、Stacked PRs(分层 PR)、Merge Queue
  • 重要动态: Graphite 正在加入 Cursor,共同重塑软件开发的未来
  • AI 审查引擎内部称为 Diamond

Graphite Agent 核心能力

  • 上下文感知审查: 理解整个代码仓库的上下文,而非孤立分析代码变更
  • RAG 机制: 利用过去的 PR 历史进行检索增强生成,学习项目编码模式
  • 即时反馈: 每个 PR 自动获得 AI 审查,无需等待人类审查者
  • 自定义规则: 团队可用自然语言定义编码标准,AI 自动执行

Graphite 的质量评估体系

基于用户真实行为的三个核心指标:

指标 含义
Acceptance Rate 开发者看到评论后提交了建议的修改 → 反馈准确且有价值
Upvote Rate 开发者明确标记评论为有价值(即使未立即实施)
Downvote Rate 开发者标记评论为低质量 → 识别问题反馈模式

Stacked PRs 理念

将大型变更拆分为更小、有序的 PR 序列 → 加速审查、保持团队流动。这与 Blake Smith 的"手术刀开发"(scalpel-driven development)理念一致——"宁愿用手术刀做许多小而精确的切口,也不要用砍刀一刀切"。

AI 代码审查工具准确率

Graphite 指南提到:AI 代码审查工具在常见问题(语法错误、风格违规、基本安全漏洞)上准确率为 70-90%,但准确率因问题复杂性和具体工具而异。

📚 课程关联:

  • Graphite 加入 Cursor = 第三周(AI IDE)+ 第七周(AI Code Review)的融合——审查能力直接嵌入 IDE
  • Stacked PRs 与第四周 Claude Code 的 subagent(隔离任务)思路一致——小的、可管理的变更单元
  • Acceptance/Upvote/Downvote 指标体系是第六周"如何评估 AI 安全工具"问题的回答

🔗 两讲之间的联系

维度 第一讲(Mihail) 第二讲(Tomas/Graphite)
视角 代码审查的原则和价值 代码审查的工具和实践
层次 五大审查维度 + 好审查标准 AI 审查的具体实现(RAG + 自定义规则)
局限性 假阳性、无法捕获惯用法 用 acceptance/downvote 指标持续改进
核心观点 "代码审查比以往更重要" "AI 增强审查,不替代人类判断"

📚 第七周阅读材料速览

# 材料 核心主题
1 Code Reviews: Just Do It (Coding Horror) 代码审查的量化价值
2 How to Review Code Effectively (GitHub Staff Engineer) 7000+ PR 审查经验总结
3 AI-Assisted Assessment of Coding Practices (Google, arXiv) AutoCommenter 系统
4 AI Code Review Implementation Best Practices (Graphite) AI 审查工具实施指南
5 Code Review Essentials for Software Teams (Blake Smith) 心智模型对齐 + 手术刀开发
6 Lessons from millions of AI code reviews (Graphite YouTube) Graphite 大规模 AI 审查实践

🛠️ 第七周作业

Code Review Reps — 代码审查练习

阅读材料笔记

CS146S 第七周阅读材料笔记总结

Stanford University · Fall 2025 · 讲师:Mihail Eric


阅读材料一览

# 材料 类型 核心主题 获取质量
1 Code Reviews: Just Do It (Coding Horror) 经典博客 代码审查的量化价值 ✅ 完整获取
2 How to Review Code Effectively (GitHub) 工程实践 Staff Engineer 的审查哲学 ✅ 搜索获取
3 AI-Assisted Assessment (Google, arXiv) 学术论文 AutoCommenter 工业级部署 ✅ 搜索获取
4 AI Code Review Best Practices (Graphite) 技术指南 AI 审查工具实施方法 ✅ 搜索获取
5 Code Review Essentials (Blake Smith) 工程博客 心智模型对齐 + PR 策略 ✅ 搜索获取
6 Lessons from millions of AI code reviews (YouTube) 视频 Graphite 大规模实践 📺 视频资源

📖 阅读 1:Code Reviews: Just Do It (Jeff Atwood / Coding Horror, 2006)

来源: Coding Horror

🔗 课堂关联: 第一讲 Slide 6 直接引用了此文的统计数据。

核心论点

"Peer code reviews are the single biggest thing you can do to improve your code."

Jeff Atwood 引用 McConnell 的《Code Complete》数据:

  • 软件测试本身效果有限——单元测试平均检测率仅 25%,功能测试 35%,集成测试 45%
  • 设计和代码审查的平均有效率:55-60%

关键案例

案例 结果
维护组织引入审查 单行修改错误率从 55% → 2%
11 个程序对照 无审查 4.5 errors/100 lines → 有审查 0.82 errors/100 lines
Aetna 保险 通过审查发现 82% 错误,开发资源减少 20%
IBM Orbit 项目(50万行) 11 级审查,提前交付,错误仅为预期的约 1%
AT&T 200+ 人组织 生产力提升 14%,缺陷减少 90%
JPL(喷气推进实验室) 每次审查节省约 $25,000

📚 课程关联: 这篇 2006 年的文章今天读来依然重要——因为 AI 时代代码审查不是要被取代,而是要被增强。第一讲 Slide 24 的核心观点"代码审查比以往更重要"正是建立在这些数据基础上。


📖 阅读 2:How to Review Code Effectively (Sarah Vessels, GitHub Staff Engineer)

来源: GitHub Blog(2024)

作者背景

Sarah Vessels,GitHub Staff Engineer,8 年审查了 7,000+ PR

核心哲学

"当同事有 PR 等待审查时,我更愿意放下自己正在做的分支去审查他们的代码——毕竟他们的 PR 已经通过了 CI,比我进行中的工作更接近可发布状态。"

关键实践

① 自我审查优先(Self-Review)

  • 在请别人审查前,先自己审查一遍
  • 在非明显的变更上内联留言
  • 自我审查也能帮助判断 PR 是否太大、需要拆分

② PR 作为对话的开始

  • 一个 PR 是作者说:"我认为这改善了我们现有的东西"
  • 审查者的工作:通过提问、质疑假设、作为第二双眼睛来改进代码

③ 即使已合并也欢迎审查

  • 如果 PR 在别人审查前就合并了,仍然欢迎审查
  • 如果出了问题,PR 上的评论留下了面包屑式的调查线索

📚 课程关联: "自我审查"在 AI 时代尤为关键——当 AI 生成代码时,开发者的第一道防线就是自己的审查能力。这与第一讲 Slide 24 "你拥有合并和发布的代码"形成完美呼应。


📖 阅读 3:AI-Assisted Assessment of Coding Practices in Modern Code Review (Google)

来源: arXiv 2405.13565(2024, AIware '24 会议) 作者: Manushree Vijayvergiya 等 13 人(Google)

AutoCommenter 系统

Google 开发的 LLM 驱动的自动代码审查系统,自动学习和执行编码最佳实践。

覆盖语言: C++、Java、Python、Go

核心问题

代码审查中,一些最佳实践可以自动验证(如格式规则),但另一些需要人类判断:

  • 可自动化: 格式规则、lint 规则
  • 部分可自动化: 命名约定(有例外情况,如遗留代码中的合理偏离)
  • 无法用精确规则捕获: 代码注释的清晰度和具体性 → 依赖人类判断和集体知识

AutoCommenter 的定位

端到端的"学习并执行编码最佳实践"系统是可行的,并对开发者工作流产生积极影响

在 Google 的大规模工业环境中评估后证实可行性。

📚 课程关联:

  • 验证了第一讲 Slide 20 的六大改变(效率、一致性、知识共享等)在工业级规模下成立
  • AutoCommenter 处理"可自动化"和"部分可自动化"的规则,而复杂业务逻辑和架构决策仍留给人类——与 Slide 24 的局限性完全一致
  • Google 的规模(数千工程师、数百万行代码)为 AI 代码审查的可扩展性提供了有力证据

📖 阅读 4:AI Code Review Implementation Best Practices (Graphite)

来源: Graphite

AI 代码审查的六大收益

  1. 效率 — 自动化减少审查时间
  2. 一致性 — 所有审查统一标准
  3. 知识共享 — 通过 AI 建议学习
  4. 降低认知负荷 — AI 处理常规检查
  5. 持续改进 — 系统随时间改进
  6. 全面理解 — 上下文分析和模式识别

这六大收益与第一讲 Slide 20 完全对应——Mihail 直接将 Graphite 的框架用作教学内容。

工具选型考量

工具 特点
Graphite Agent 即时反馈 + 上下文代码分析 + PR 自动化
GitHub Copilot 编码时实时建议
SonarQube + AI 传统静态分析 + AI
DeepCode 专注安全漏洞

实施最佳实践

① 持续改进循环

  • 追踪哪些 AI 建议被接受 vs 被拒绝
  • 定期审查假阳性和假阴性
  • 根据发现更新审查配置
  • 跨团队共享洞见

② 安全优先

  • 验证 AI 建议不引入新漏洞
  • 对处理以下内容的 AI 生成代码格外谨慎:用户输入、认证、文件操作、网络请求

③ 准确率

  • 常见问题(语法、风格、基本安全):70-90%
  • 复杂问题:准确率显著下降

📚 课程关联: "安全优先"原则直接连接第六周——CVE-2025-53773(Copilot RCE)就是 AI 引入安全漏洞的真实案例。70-90% 准确率与第六周 Semgrep 评估的 14-18% 真阳性率形成有趣对比——代码审查(格式/风格/简单逻辑)比安全漏洞发现(跨文件污点追踪)容易得多。


📖 阅读 5:Code Review Essentials for Software Teams (Blake Smith, 2015)

来源: Blake Smith

🔗 课堂关联: 第一讲 Slide 17 直接引用了此文。

核心观点:心智模型对齐

"代码审查最重要的功能是保持团队的集体心智模型良好对齐。"

当 Bob 提交会计子系统的 PR 时,Amy 在审查过程中更新了她对该系统的心智模型。一个月后 Amy 需要修改这个子系统时,她的心智模型已经是最新的——花更少时间阅读代码,更多时间思考高层抽象和设计。

代码审查的层级价值

  1. 方向对齐 — 保持每个团队成员朝正确方向前进(最重要)
  2. 正确性验证 — 确保变更正确解决问题
  3. 设计讨论 — 开启优劣势讨论
  4. Bug 预防 — 在到达生产环境前捕获
  5. 风格一致 — 保持代码风格和组织一致

手术刀开发法(Scalpel-Driven Development)

"宁愿用手术刀做许多小而精确的切口,也不要用砍刀一刀切。砍刀留给删除大块死代码的时候。"

实操建议:

  • 提交前问自己:"这是正确的工作优先级吗?"和"团队已经同意这个变更方向了吗?"
  • 考虑如何将工作拆分为小块并测试每一块
  • 写好组织良好的 PR 描述——不要让队友做多余的心智劳动

好 vs 差的 PR 描述

差:

Title: Fix uninitialized memory bug Description: This is the bug Bob and I talked about earlier. I had trouble with the compiler but managed to make this work.

好: 解释为什么做了这些变更、如何做的、以及审查者需要知道的任何仅从代码本身看不出来的信息。

📚 课程关联:

  • "手术刀开发"与 Graphite 的 Stacked PRs 理念完美对齐——小的、有序的变更序列
  • "心智模型对齐"与第四周 CLAUDE.md/AGENTS.md 的理念相通——都是为了让协作者(无论是人还是 AI)理解项目上下文

📖 阅读 6:Lessons from Millions of AI Code Reviews (Graphite YouTube)

来源: YouTube(视频资源)

🔗 课堂关联: 第一讲 Slide 22 直接引用了此视频。

基于 Graphite 从百万级 AI 代码审查中获得的经验教训,在课堂上进行了现场演示(Slide 23: "Let's See AI Code Review in Action")。


🔗 六篇阅读材料的交叉主题

主题 1:代码审查是团队能力,不仅仅是质量检查

Coding Horror (2006): "Peer code review is the single biggest thing"
    ↓
Blake Smith (2015): "最重要的是心智模型对齐"
    ↓
Sarah Vessels (2024): "PR 是对话的开始"
    ↓
Mihail (2025): "代码审查比以往任何时候都更重要"

从 2006 到 2025,核心观点一脉相承:代码审查的价值不仅在于捕获 bug,更在于团队学习、知识传递和心智模型同步。AI 时代放大了这一点——当 AI 生成大量代码时,人类审查者的理解和判断能力比以往更关键。

主题 2:AI 审查的"甜蜜区"

擅长(70-90% 准确率) 不擅长
语法错误 代码库特有惯用法
风格违规 复杂业务逻辑
基本安全漏洞 架构决策
一致性检查 边界情况
常见模式匹配 跨文件深层安全问题

结论: AI 处理"常规检查"(routine checks),人类专注"复杂判断"(complex logic)——分工而非替代

主题 3:从个人实践到工业规模

Blake Smith: 团队级最佳实践(手术刀开发、好的 PR 描述)
    ↓
Sarah Vessels: 个人级哲学(7000+ PR、自我审查优先)
    ↓
Google AutoCommenter: 公司级自动化(C++/Java/Python/Go, 数千工程师)
    ↓
Graphite: 产品级 AI 审查(百万级 PR、RAG + 自定义规则)

🔗 课程脉络: 第一周 LLM 基础 → 第二周 Agent + MCP → 第三周 IDE + Specs → 第四周 Agent Manager → 第五周 产品设计 + Terminal → 第六周 安全与测试 → 第七周 代码审查

课程从"构建"(W1-5)→ "防护"(W6)→ "审查"(W7)的三段式进程。第七周是质量保障链的最后一环——在代码合并前的最后一道人类防线。

关键连接:

  • 第三周 Cursor 的 AI IDE → 第七周 Graphite 加入 Cursor = AI 编写 + AI 审查的闭环
  • 第四周 CLAUDE.md 定义项目规则 → 第七周 Graphite 自定义规则 = 同一理念的不同实现
  • 第六周 SAST 检测安全漏洞 → 第七周 AI 审查检测逻辑/设计问题 = 多层质量保障体系

思维导图

本周暂未提供思维导图。

知识图谱

本周暂未提供知识图谱。