拓展阅读

AI软件工程

需求、实现、测试、审查与长期交付

阶段 1113 项展开讲义正文全部展开

沿着对象与状态理解本章

先写出要守住的行为,再用会失败的反例证明确实需要修改。测试通过必须绑定被测代码版本;之后再改文件,旧绿色结果不再证明当前交付。

下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。

动态图解 · F34

测试是找反例,不是给代码盖绿章

为什么“测试都通过”仍可能交付错东西?

测试只能验证它实际检查的行为和版本。一条只断言“不报错”的测试无法证明排除规则正确。好的测试围绕需求构造能击中错误的输入;代码修改以后,旧绿色结果也不再自动属于新版本。

反例能让错误实现暴露问题的具体输入。
回归修改破坏了本来成立的行为。
交付证据当前版本对应的检查命令、结果与范围。

输入与适用条件:构造的文件筛选任务;通配符语义须由需求明确,不在动画里偷偷改变“匹配文件名”与“匹配完整路径”的规则。

1 / 6 · 明确需求

第1步,共6步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

测试是找反例,不是给代码盖绿章:明确需求明确需求排除*.tmp,但保留其余文件构造小反例a.py、b.tmp、nested/c.tmp先看原始失败确认旧代码确实没有正确排除实施最小修改修复匹配语义,不改无关API测试针对行为检查保留、排除、嵌套和空规则绑定版本交付绿色结果属于当前代码,而非旧文件教学流程;高亮表示当前步骤,不表示真实耗时比例。

不先说匹配对象与目录语义,无法判断哪个输出才正确。

本步状态由图形与说明共同给出。

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

为什么需要

减少返工和虚假完成,而非让审查循环无限增长。

怎样实现

围绕可观察行为、反例和当前版本组织验证。

可能的代价与误解

测试与实现共用同一错误假设、只测顺利路径、频繁审查无实际修复。

如何判断是否做对

故意引入一处已知错误,测试应失败;恢复后再通过。

先定义可验证的完成

AI软件工程不是生成尽可能多的代码,而是让需求、实现与证据对齐。SWE-agent研究操作接口,长期Harness研究跨会话推进,传统测试与Review提供质量基础,三者不能互相替代。[S130][S132][S133]

原创exclude完成标准:嵌套路径有效,旧顶层行为不变,非法配置明确报错,相关测试通过,没有无关接口变化。“看起来专业”容易奖励抽象堆叠;“所有测试通过”若测试太弱,也可能是假完成。

最小充分修改

理解目标→找证据→复现→确定边界→修改→验证→交付,是实用思路而非固定审批制度。简单任务可连续完成,复杂任务在证据不足时展开。最小充分不是机械最少行数,而是满足目标且风险合理的改动。[S136][S137]

原创例子:路径基准不一致,可以调用前规范化,也可以匹配器内部规范化。选择取决于职责、调用者和兼容性,不是为了统一而新建全局框架。减少无关格式调整有助于审查,但真正阻碍正确性的结构问题不能回避。

测试行为,不迎合实现

单元测试便于定位,集成测试验证边界,端到端测试验证用户路径。测试金字塔是成本与反馈原则,不是固定数量配方。[S138]

对exclude,单元测规范化,集成测配置和文件列表,端到端测产物。还要验证不应排除的文件,避免“全部过滤”通过片面断言。测试记录需关联代码版本;补丁A通过后加B,旧结果不自动覆盖新版本。

CI稳定执行检查与反馈,不证明所有未测行为正确。Agent不应为绿色状态删除不理解的测试,除非需求确实改变且证据充分。[S139]

Review不追求无穷完美

Google标准强调改善整体代码健康度,并区分重要问题与个人偏好。Review应关注设计、功能、复杂性和测试,而非无限阻止不完美但合理的进展。[S136][S137]

原创流程可以允许审查者直接修正小而明确的问题,再验证;跨模块或目标歧义再交回处理。独立Review的价值在于发现新重要问题,不在于多一次角色名称。没有新证据的反复审查可能只增加延迟。

长任务需要交接产物

早期长任务Harness案例使用初始化与增量开发职责,配合进度、功能清单和版本历史。后续实验探索规划、生成、评估组合,并随模型能力调整上下文重置策略。这些都是有条件案例,不是每个项目必须用同样文件名和角色。[S130][S131][S142]

原创最小交接包括当前可运行状态、已完成与未完成需求、决策理由、验证证据和下一步。一个小Bug不需要先建数百条验收项。多Agent编译器案例值得学习任务切分与测试,不应从代码规模推断任意场景可无人管理。[S134]

质量下降也可能来自Harness

Anthropic在2026-04-23复盘了产品层变化,包括推理努力、旧推理处理和冗长度约束对质量的影响。它区分受影响产品层与当时API层的情况,不是所有质量波动的统一解释。[S141]

原创启发:版本化模型、Prompt、工具、裁剪和环境,测试长会话与恢复场景,做消融定位。只测新建短会话可能漏掉状态相关故障。

决策记录与交付

ADR记录背景、选择和后果,适合重要且可能被重新质疑的决策,不必为每个变量写文档。交付应说明实际修改、验证结果、未验证部分和风险,而非笼统“全部完成”。[S140][S135]

自检:测试通过就无需审查?不一定,取决于未覆盖风险。Review越多越好?不是,应看边际缺陷发现与返工成本。

逐项中文讲义

保留拓展阅读目录编号与A/B/C优先级;每项包括机制解释、边界与原创练习。

A11.1 · 跨上下文持续开发

对应资料:Effective Harnesses for Long-Running Agents

长期Harness文章研究如何让Agent跨多个上下文持续推进应用开发,通过初始化、增量任务与交接记录保持进展。它针对特定实验,不是所有项目都必须复制的文件和角色清单。

长对话不是唯一持久状态。需求、代码版本、测试结果与下一步应能在新会话中重新确认,避免反复从零开始。

运行示例 · R11-01

新上下文如何接着修复而不重做

输入与条件。上一阶段已写v8,测试未运行,原文日志外置。

步骤与对象内部动作中间结果 / 新状态
1交接目标、v8、未测、禁止提交明确当前状态。
2恢复先确认磁盘确为v8避免拿旧检查点继续。
3下一步运行必要测试不重新应用已完成补丁。

把过程连起来。跨窗口连续性依赖可核查状态,不是让模型记得全部聊天。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:完成一半功能后清空会话,只保留简短交接和原始证据位置,让后续过程恢复任务。

完成标准是不重复已完成动作、不把未验证状态当成通过,并能识别环境后来发生的变化。

拓展阅读目录事实依据 [S130] · 练习与工程推导为本书独立编写。

A11.2 · 长应用开发的反馈结构

对应资料:Harness Design for Long-Running Application Development

长应用开发Harness探索规划、生成与评价之间的反馈组织,尤其关注完整应用的质量。模型能力变化可能使某些旧约束不再必要,因此方案需要重新评估。

复杂应用需要外部验收与状态管理,简单修复却可能不值得同样编排。不能把一个成功案例升级成固定多阶段制度。

运行示例 · R11-02

长应用开发按可验证功能推进

输入与条件。待实现登录、搜索、导出三功能。

步骤与对象内部动作中间结果 / 新状态
1定义每项有具体验收输入不只列“完成登录”。
2增量先做登录并运行测试再进入依赖它的功能。
3汇总组合路径重新验证三项各自通过不保证整应用可用。

把过程连起来。小步完成与集成验证共同控制长任务漂移。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:对小功能与完整应用分别列出必要反馈,比较是否真的需要独立规划者和评估者。

完成标准是根据任务风险和证据决定深度,不把流程长度当作专业程度。

拓展阅读目录事实依据 [S131] · 练习与工程推导为本书独立编写。

A11.3 · 面向Agent的计算机接口

对应资料:SWE-agent

SWE-agent研究面向Agent的计算机交互接口如何影响自动软件工程。搜索、读取、编辑和测试工具的设计会影响模型能否有效行动。

相同模型使用不同工具界面可能表现不同。工具输出过大、编辑反馈模糊或错误信息缺失,都会增加失败概率。

运行示例 · R11-03

工具接口保留行号怎样帮助补丁准确定位

输入与条件。文件很长,只返回匹配行文本但无路径/行号。

步骤与对象内部动作中间结果 / 新状态
1缺信息模型知道关键词但不知道改哪里可能重新大范围搜索。
2补接口返回路径、范围、版本与上下文支持定点读取。
3写入仍按当前文件核对行号过期时不能盲套。

把过程连起来。面向Agent的接口应提供可行动、可恢复的证据。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:比较只返回文件名与返回相关片段的搜索工具,统计为定位同一Bug需要多少轮读取。

完成标准是把工具设计当作可评测的工程变量,而不是所有失败都通过换模型解决。

拓展阅读目录事实依据 [S132] · 练习与工程推导为本书独立编写。

A11.4 · 代码审查的目的与流程

对应资料:Google Engineering Practices Code Review

Google代码审查实践关注设计、功能、复杂性、测试和可维护性等方面。审查应改善代码健康度,而不是无依据地阻止任何不完美修改。

AI可以协助发现问题,但必须结合补丁、上下文和验证。只读作者解释容易共享同一个错误前提。

运行示例 · R11-04

审查发现小命名问题,如何避免重走设计

输入与条件。功能与测试正确,仅局部变量名误导。

步骤与对象内部动作中间结果 / 新状态
1分类不影响架构选择无需重新设计方案。
2处理直接局部修正保持原验收目标。
3验证按实际影响补检查完成后合并,不无限延长审查。

把过程连起来。Review应改善代码健康度,不把所有问题升级为流程阻塞。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:审查一个能通过目标测试但破坏默认行为的补丁,指出需要额外读取与验证的地方。

完成标准是提出具体、可行动且有依据的问题,不用大量风格意见制造“审查很深入”的印象。

拓展阅读目录事实依据 [S133] · 练习与工程推导为本书独立编写。

B11.5 · 并行Agent构建编译器案例

对应资料:Building a C Compiler

并行Agent构建编译器的案例展示任务分工、测试基础设施与协调的结合。它是特定项目经验,不保证任意复杂软件都可完全无人管理。

代码规模与任务正确性不同。编译器需要语言语义、测试覆盖、平台行为等多方面验证,生成很多文件只是过程指标。

运行示例 · R11-05

并行写编译器的模块接口要一致

输入与条件。Agent A写词法Token,B写解析器,双方对token.type命名不同。

步骤与对象内部动作中间结果 / 新状态
1各自通过A自己的测试、B自己的mock都绿接口不一致被隐藏。
2集成真实Token进入解析器字段不匹配失败。
3修复明确共享接口与组合测试不是只再加两个独立审查者。

把过程连起来。大规模并行需要真实集成反馈;本例不是已发表项目的原始实验数据。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:把词法分析、解析和代码生成之间的接口画清,说明哪些可并行、哪些需要先稳定约定。

完成标准是学习可分解边界与验证机制,不把案例中的投入或成绩外推成自己的预算承诺。

拓展阅读目录事实依据 [S134] · 练习与工程推导为本书独立编写。

B11.6 · 使用Agent进行代码审查

对应资料:Copilot Agentic Code Review

Copilot的Agent代码审查功能提供发现和处理问题的产品入口,但不能代替项目验收。支持方式与权限应按具体CLI版本核查。

审查结果需要区分实际缺陷、风险提示和风格建议。模型提出的问题也可能错误,应以源码、规范和测试验证。

运行示例 · R11-06

Agent审查不能只复述diff

输入与条件。补丁把>=改>,用户需求在边界等值仍应允许。

步骤与对象内部动作中间结果 / 新状态
1diff说明“比较更严格”只是描述。
2需求核验等值输入应允许新行为违反契约。
3审查证据构造相等测试并失败形成可验证发现。

把过程连起来。有效Review要连接需求、变化和反例,而非点评代码风格。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:给一个含真实边界Bug及无害风格差异的补丁,检查审查是否正确排序重要性。

完成标准是减少有效缺陷与返工,而不是追求评论数量或强迫每次审查都有发现。

拓展阅读目录事实依据 [S135] · 练习与工程推导为本书独立编写。

A11.7 · 审查标准与非完美交付

对应资料:The Standard of Code Review

代码审查标准强调当修改改善整体代码健康度时,不应因尚未完美而无限阻塞。重要质量问题与个人偏好需要区分。

这并不意味着降低正确性要求。关键缺陷、兼容性和安全问题仍应解决;只是避免把所有小建议都升级为重大返工。

运行示例 · R11-07

不完美但改善代码与阻塞缺陷分开

输入与条件。补丁修复数据丢失,仍有一个不影响功能的小注释措辞。

步骤与对象内部动作中间结果 / 新状态
1关键问题数据丢失已被反例与回归验证核心价值明确。
2非阻塞项注释措辞可直接修或后续记录不必否定整个方案。
3阻塞条件若仍有可触发丢失更新不能以“整体改善”掩盖重大缺陷。

把过程连起来。审查标准允许渐进改善,但不等于忽略实际风险。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:将审查意见分为必须修复、可直接顺手修复和非阻塞建议,逐条写出具体后果。

完成标准是让Review的成本与实际风险匹配,而不是形成设计—审查—重设计的无休止循环。

拓展阅读目录事实依据 [S136] · 练习与工程推导为本书独立编写。

A11.8 · 设计、功能、复杂度与测试

对应资料:What to Look for in a Code Review

审查检查内容覆盖设计、功能、复杂度、测试、命名和文档等,但不同修改需要不同重点。一个配置修复不应自动触发完整架构重构。

测试存在不代表测试有效,注释丰富也不代表解释准确。审查应检查它们是否支持实际行为与维护。

运行示例 · R11-08

设计、复杂度与测试一起判断

输入与条件。为了排除一个目录,引入三层插件和一张数据库表。

步骤与对象内部动作中间结果 / 新状态
1必要性简单边界判断已经覆盖目标额外组件尚无失败模式对应。
2成本增加配置、迁移和维护可能大于收益。
3验证用实际扩展需求证明抽象必要否则保留小实现。

把过程连起来。工程合理性不是组件越多越资深。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:阅读一个只有正向断言的过滤测试,增加“不应排除其他文件”的反例,解释遗漏的风险。

完成标准是从目标和失败模式出发选择检查项,而不是机械完成一张与任务无关的长表。

拓展阅读目录事实依据 [S137] · 练习与工程推导为本书独立编写。

A11.9 · 测试金字塔

对应资料:The Practical Test Pyramid

测试金字塔说明不同层次测试在范围、速度和维护成本上的差异。单元、集成与端到端测试互补,不存在适用于所有项目的固定数量比例。

测试应验证行为而非锁死实现细节。过度依赖内部结构会让合理重构频繁破坏测试,过度只测最终界面又可能难以定位故障。

运行示例 · R11-09

三层测试分别抓哪类错

输入与条件。路径判断、配置读取、真实构建流程三个层次。

步骤与对象内部动作中间结果 / 新状态
1单元测a/a-x/ab边界快速定位逻辑。
2集成读取配置并调用判断抓接线、默认值问题。
3端到端真实构建结果保留/排除目录验证完整行为,但成本更高。

把过程连起来。层次互补,不是把所有测试都堆到最慢的端到端。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:为exclude设计匹配函数、配置集成和最终构建产物三个层次测试,说明每层独有的价值。

完成标准是用较低成本覆盖关键风险,而不是用测试数量代替覆盖质量。

拓展阅读目录事实依据 [S138] · 练习与工程推导为本书独立编写。

B11.10 · 持续集成与反馈速度

对应资料:Continuous Integration

持续集成强调频繁整合与自动反馈,尽早发现变化之间的冲突。CI绿色状态只说明已配置检查通过,不证明所有需求和缺陷都被覆盖。

Agent修改后应记录验证对应的版本。之后继续改代码,旧测试通过记录不能自动证明最新代码正确。

运行示例 · R11-10

持续集成测试必须针对合并结果

输入与条件。分支A/B各自基于v7测试通过,合并后产生v9。

步骤与对象内部动作中间结果 / 新状态
1各分支只证明各自状态不证明组合。
2合并对象v9可能有交互冲突应触发必要集成验证。
3发布只使用对应版本验证结果避免错用旧流水线绿灯。

把过程连起来。CI的价值在频繁且版本对齐的反馈。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:让补丁A通过测试后再应用补丁B,检查交付说明是否准确区分已验证与待验证部分。

完成标准是把验证嵌入实际交付流程,同时保持反馈速度,避免所有小改动都运行无关且昂贵的检查。

拓展阅读目录事实依据 [S139] · 练习与工程推导为本书独立编写。

B11.11 · 记录架构决策及其条件

对应资料:Architecture Decision Records

ADR记录重要架构决策的背景、选择与后果,帮助未来维护者理解当时约束。它不是为每个变量或小修复创建文档的要求。

有价值的记录应说明替代方案和取舍,而不是只写“提高可维护性”。条件变化后,旧决定可以被新决定替代,但历史理由仍可保留。

运行示例 · R11-11

架构决策记录需要包含放弃条件

输入与条件。决定暂用关键词检索,不建向量库。

步骤与对象内部动作中间结果 / 新状态
1理由符号查询占多数且精确搜索有效绑定当前场景。
2限制自然语言跨模块发现较弱明确已知边界。
3复议触发相关任务持续漏召回并有测评证据到时再升级,而非永久教条。

把过程连起来。有用ADR记录为什么及何时重新考虑,不只记录选了什么。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:为“在匹配器入口统一路径”写一段简短决策,包含调用者约定、兼容风险和失效条件。

完成标准是让未来Agent能判断是否仍适用,而不是把旧决策当成永远不能改变的规则。

拓展阅读目录事实依据 [S140] · 练习与工程推导为本书独立编写。

A11.12 · 编码Agent质量回退复盘

对应资料:An Update on Recent Claude Code Quality Reports

2026年4月的Claude Code质量复盘指出部分变化来自产品层的推理配置、历史处理与提示调整,不能把最终产品质量等同于底层模型能力。

同一模型在不同Harness配置下可能表现不同。尤其长会话、恢复与上下文清理相关缺陷,未必能被短任务测试发现。

运行示例 · R11-12

产品质量回退先拆模型与Harness

输入与条件。模型版本没变,工具结果裁剪策略改变。

步骤与对象内部动作中间结果 / 新状态
1现象任务更常遗漏关键报错可能来自裁剪。
2对照同日志保持模型相同,只恢复输出范围检查问题是否消失。
3结论只有受控证据支持时归因不凭用户感觉宣称模型“变笨”。

把过程连起来。此为故障诊断构造,不冒充厂商事故细节或内部原因。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:固定模型,分别改变推理预算、历史裁剪和输出要求,设计消融测试以定位回归。

完成标准是保存可比较版本与执行证据,不把用户感知的质量下降简单解释成“模型变笨了”。

拓展阅读目录事实依据 [S141] · 练习与工程推导为本书独立编写。

B11.13 · 推理与执行环境解耦

对应资料:Scaling Managed Agents

Managed Agents文章讨论把模型运行、会话状态和执行环境解耦。这样可以减少单一容器或进程故障对整个任务连续性的影响,但也增加边界设计需求。

持久日志应区分意图与已执行事实。重放任务历史不应自动重放全部外部副作用。

运行示例 · R11-13

模型进程中断,外部任务仍可能运行

输入与条件。远端构建启动后模型会话断开。

步骤与对象内部动作中间结果 / 新状态
1模型侧无法继续生成不是构建被取消的证明。
2执行侧构建服务有独立job_id可以继续运行。
3恢复按job_id查询状态并接回任务不直接再启动一份构建。

把过程连起来。推理与执行生命周期解耦必须配套任务身份与恢复。

边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

原创练习:在文件修改完成但Harness重启的情境下,设计如何恢复状态并检查版本,而不是再次盲目应用补丁。

小型本地工具未必需要立即服务化。应先保持职责清晰,再随真实恢复与规模需求演进。

拓展阅读目录事实依据 [S142] · 练习与工程推导为本书独立编写。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。