课程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):
- 帮助团队成员随系统变化更新心智模型
- 确保变更正确解决问题
- 开启设计优劣的讨论
- 在 Bug 到达生产环境前捕获
- 保持代码风格和组织的一致性
第四部分: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 代码审查的六大收益
- 效率 — 自动化减少审查时间
- 一致性 — 所有审查统一标准
- 知识共享 — 通过 AI 建议学习
- 降低认知负荷 — AI 处理常规检查
- 持续改进 — 系统随时间改进
- 全面理解 — 上下文分析和模式识别
这六大收益与第一讲 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 需要修改这个子系统时,她的心智模型已经是最新的——花更少时间阅读代码,更多时间思考高层抽象和设计。
代码审查的层级价值
- 方向对齐 — 保持每个团队成员朝正确方向前进(最重要)
- 正确性验证 — 确保变更正确解决问题
- 设计讨论 — 开启优劣势讨论
- Bug 预防 — 在到达生产环境前捕获
- 风格一致 — 保持代码风格和组织一致
手术刀开发法(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 审查检测逻辑/设计问题 = 多层质量保障体系
思维导图
本周暂未提供思维导图。
知识图谱
本周暂未提供知识图谱。