首页 文章 精选 留言 我的

精选列表

搜索[coding],共3371篇文章
优秀的个人博客,低调大师

如何打造一个睡觉后依然自己工作的 Coding Agent?

> **导语** 如果 AI 只能在你坐在电脑前时帮你补全代码,它本质上依然只是一个“高级代码副驾”。 真正颠覆生产力的,是另一种范式:**睡前给 Agent 一个 Goal,关掉电脑去睡觉;第二天早上醒来,验收一个已经完成自闭环交付的系统。** **01|范式转移:从“人机问答”走向“自主执行”** 过去我们使用 AI 编程,本质上是在做**高频回合制交互**: - “帮我写一个登录接口。”(AI 生成) - “加个验证码功能。”(AI 修改) - “报错了,修一下。”(AI 修复) - “再把前端页面连调一下。”(AI 继续修改) 这种模式下,**AI 永远在等待人类的下一条指令**。你不敲回车,它的生产力就停滞在原地。 传统的协作链路是:`人 → AI → 人 → AI → 人 → AI` 而真正的 Agent 协作模式正在演变为:`人 → Goal → Agent 自主循环` 你只需要定义终局标准,具体的拆解、编码、调试与迭代,全部交给 Agent 自行推进。 **02|什么是 Goal 模式?从“教它做事”到“要结果”** Goal(目标驱动)与传统 Prompt 最大的区别,不在于提示词的长短,而在于**控制权的让渡与抽象层级的提升**。 - **传统指令模式(关注过程)**:修改 `user.ts` 增加接口 → 修改 `router.ts` 增加路由 → 修改前端组件加按钮 → 运行测试。 - **Goal 模式(关注交付)**: > **Goal**:完成当前项目完整的用户管理体系。支持注册、登录、资料修改、RBAC 权限管理与后台面板;保持现有架构与 UI 风格;严禁破坏现有业务;自行运行完整测试并修复所有 Bug,直到达到生产就绪状态。 一句话总结核心差异: - **传统模式**:人类告诉 AI **怎么一步步做**。 - **Goal 模式**:人类告诉 AI **最终交付成什么样**。 **03|真正的核心:不是连续生成代码,而是“自愈闭环”** 所谓“让 AI 连续工作几天几夜”,绝不是让模型不间断地吐出几万行代码,而是构建一个**具备自我纠错能力的工程执行闭环**: ```javascript Goal(目标输入) ↓ Plan(任务拆解与规划) ↓ Execute(编写/修改代码) ↓ Test & Run(运行环境与自动化测试) ↓ Find Issues(捕获报错与异常边界) ↓ Self-Fix(定位根因、重新修改) ↓ Regression Test(回归测试通过) ↓ Next Task → Final Goal Completed(推进直至最终交付) ``` 真正的 Agent 不仅会写代码,更具备动态决策能力: - *刚才的改动为什么导致测试挂掉?* - *现有上下文里有没有可复用的公用模块?* - *当前任务是否已达到交付标准?下一步该做什么?* **当思考、编码、运行、报错、修正全部在 Agent 内部自闭环时,“人去睡觉,机器干活”才真正成为可能。** **04|为什么大型复杂任务必须依赖 Goal 模式?** 面对一个中大型系统(例如从零构建一套企业级 API 路由与分发中枢),背后往往交织着数十个子模块:鉴权、Key 管理、路由调度、计费统计、限流风控、日志链路、单元测试…… 如果依然采用“人肉驱动 Prompt”的方式,开发者会在几十轮琐碎的交互中精力耗尽。 而在 Goal 模式下,Agent 会自动将一个宏观目标解构为任务树: - 自动发现项目依赖并选择最优设计模式; - 逐步实现业务逻辑,发现断言失败自动回溯; - 遇到方案冲突自主评估并重构代码。 把人类从**微观编码执行者**中解放出来,让 AI 承担系统性的脏活累活。 **05|工程师角色的质变:从“写代码”到“工程总指挥”** 当 Agent 承担了大部分 CRUD、接口联调、UI 还原、Debug 和单元测试编写后,开发者的核心竞争力正在发生重构: - **过去比拼**:语法熟练度、API 记忆量、手写基础算法的速度。 - **未来比拼**: 1. **定义目标**:能否把模糊的业务需求,拆解为无歧义的交付标准? 1. **系统架构**:能否搭建高内聚、低耦合的基础底座,供 Agent 顺畅扩展? 1. **规则约束**:如何制定开发规范与测试基准,让 Agent 有据可依? 1. **最终验收**:精准审查边界安全、业务逻辑与性能指标。 **未来的超级个体,本质上是一个指挥着多 Agent 协同工作的“技术主管”。** **06|实战技巧:如何写出“能跑一整夜”的 Long-Running Goal?** 想让 Agent 稳定工作几小时甚至几天而不中断,Prompt 的设计有讲究: - **赋予自主推进权限**:明确声明“遇到编译错误、测试失败或运行时异常,优先自行分析日志并修复,无需等待人工指令”。 - **明确边界与降级策略**:普通代码逻辑自行决策,只有遇到破坏性架构变更或重大安全隐患时才暂停挂起。 - **设定可验证的完成标准**:必须以“所有单元测试通过 / Lint 无报错 / 构建成功”作为退出条件,而非“代码写完即停”。 **最适合长期自主运行的五类场景:** - **完整功能模块开发**:从数据层到表现层的全链路落地。 - **全工程重构迁移**:老旧技术栈升级或模块架构解耦。 - **历史 Bug 扫荡**:基于日志与 Issue 列表进行系统性排查与自愈。 - **测试用例补全**:为核心资产建立完整的测试覆盖网。 - **生产部署就绪**:规范格式化、补齐接口文档、优化构建体积。 **07|安全边界:无人值守不等于无序失控** 长时间让 Agent 在后台自主运行,必须建立**分级权限防护网**,坚守“低风险全自动,高风险需确认”的原则: |**权限状态**|**允许的操作(自动执行)**|**严格限制的操作(阻断/需确认)**| | --- | --- | --- | |**文件与代码**|修改项目源码、新建测试用例、重命名文件|直接删除未追踪的工程目录| |**环境与依赖**|安装项目 npm/pip 依赖、运行构建脚本|修改宿主机系统全局配置| |**测试与运行**|本地测试、热重载验证、本地日志捕获|直连生产数据库执行写操作| |**资产与凭证**|引用环境变量中的测试 Mock Key|暴露/外发真实生产 API Key 与敏感密钥| **写在最后** 过去软件开发受限于人类生理极限,我们常说:“今天太晚了,先做这些,明天再搞。” 而在 Agent 时代,这个习惯正在变成:**“今天先给它定好 Goal,明天早上看看它跑出了什么成果。”** 当一个 Agent 能够独立理解目标、规划步骤、编写实现、测试验证并持续修复缺陷,AI 就已经跨越了“打字助手”的阶段,真正演变为一位**24 小时待命、不眠不休的数字软件工程师**。 如何将你的需求提炼为一个精准的 Goal,并放手让 Agent 自主运转,将是每一位开发者拉开生产力差距的关键所在。

优秀的个人博客,低调大师

阿里发布面向真实软件工程的 Agentic Coding 平台:Qoder

阿里巴巴旗下团队推出Qoder,这是一款面向真实软件工程的Agentic编码平台,现提供免费公测,支持Windows与macOS。平台深度接入Claude、GPT、Gemini等最新大模型,并通过自动路由为不同任务匹配最优模型,无需用户手动切换。 Qoder 围绕上下文工程能力 内置代码检索引擎,可检索10万个代码文件; 率先支持Repo Wiki,将代码工程的隐性知识显性化,方便开发者和 AI 理解; 集成长短期记忆系统,可基于会话历史总结项目经验和个人偏好,并将信息存储为一个“笔记”,实现自我学习和进化,最终让AI执行结果更符合用户预期和偏好。 例如,用户在开发过程中有“完成任务后要生成单元测试”、“完成任务后提供详细报告”等要求,Qoder 会理解用户习惯并形成记忆,在后续执行任务时自动完成这些工作。 如需体验Qoder,用户可在Qoder官网免费下载体验 https://qoder.com。

优秀的个人博客,低调大师

🔥※【mybatis-mp】1024 coding 好用的 ORM 框架:1.7.2 正式发布!

官网 :https://mybatis-mp.cn 更新: 1:代码生成器 修复默认值缺少 " 问题 2:代码生成器兼容 表/列备注 带有换行符问题 为什么推荐 mybatis-mp ?: mybatis-mp 是一款超级强大的 ORM 框架 1:可多表 join(不再只能单表了) 2:良好 resultMap 结果映射能力(不怕映射错误了) 3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强) 4:就算 xml 也不用再增加什么插件了,自带 xml 分页 5:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到 6:极简的 api 设计,让开发者 不再迷糊 7:还很多很多独特优良的设计,只有前往体验,才能感受了;不相信可以试试!!! 1.单表 +@Fetch 注解 + fetchFilter 方法 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List<SysRoleVo> sysRoles; } List<SysUserVO> list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list(); fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略 2. 单表查询 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get(); 3.VO 映射 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; } SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list(); 4. join 查询 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) prviate SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) prviate List<SysRole> sysRoles; } List<SysUserRoleVO> list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list(); 还有很多很多超级方便有趣的写法,欢迎大家来使用https://mybatis-mp.cn 例如: 1 . 多表 join A 内嵌 B B 内嵌 C 都可以 2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B 3 . 使用 @Paging 注解 实现你的 xml 自动分页 4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了

优秀的个人博客,低调大师

技术思考问题23:AI Coding秒交差,谁替它验收?

# 你让AI干的活,它可能只干了十分之一——而你根本看不出来 > 生成者兼任验收者,是假完成的温床 ```text [读者] 用AI做交付的工程师与架构师 [痛点] AI说完成,你无法证伪 [现在读] 验收不能再交给模型自评 [读完] 能设计可核查的验收证据链 ``` ```text [旧方案] 让AI自报完成,人肉抽查 | v [新需求] 交付可追溯、可核查、可回归 | v [冲突] 生成者与验收者是同一个模型 | v [后果] 假完成、返工、逃逸缺陷 ``` 我是老李,做后端与平台架构十多年,最近两年团队几乎全员用 AI 辅助写代码、写文档、写测试。最初大家都觉得效率起飞:需求丢进去,几十分钟就能拿到一份「已实现」的代码和一份「已覆盖」的测试清单。 爽了两个月,问题开始冒头。上线后发现某个字段没同步、某个分支没处理、某份配置根本没生效。回头翻记录,模型每次都明确回复「已完成」,还贴心地附上三条改动说明。复盘时我们才承认,问题不在模型说谎,而在于我们从来没为「完成」定义过证据,只接受了生成者的一句自述。 芒格的两个模型在这里特别扎人。一个是激励机制:评价什么,系统就优化什么。当我们把生成速度和提交数量当成团队指标,摘要写得漂亮、文件堆得多就成了成绩,真正的任务目标反而被挤到一边。另一个是反演思维:不要先问怎么成功,先设计失败案例,再去找反证和验收标准。 那么,当「已完成」这句话既便宜又无法证伪时,你到底是在验收交付,还是在验收措辞? 如果不改评价口径、不加外部证据,你还敢让 AI 直接对接生产环境的变更吗? 如果关键任务只被干了十分之一却通过了验收,等线上对账炸开,返工和逃逸缺陷的成本由谁来付? # 01、故事 我们做的是一个跨系统的账务对账平台,上游是订单系统,下游是结算系统,中间有一层聚合与状态校验。 任务是:把一笔订单从下单到结算的全链路状态对齐,任何一侧的金额、状态、时间戳不一致,都要能被发现并落成可追溯的差异单。 这个任务以前靠人工写规则、人工补用例,慢但边界清楚。去年我们引入 AI 加速:让它读接口文档、生成对账规则、生成单元测试、生成差异处理逻辑。模型交付很快,每次汇报都是一句「已完成,附带三个文件和十二条用例」。 第一次出事在一个跨天批次的场景。模型生成的规则只覆盖「当日下单当日结算」,跨天订单被静默跳过;而它的汇总输出写着「覆盖率 100%」,因为它是按自己生成的分支数当分母算的。 我们第一反应是「模型不稳定」,后来才看清真正的冲突在评价口径:我们奖励的是产出数量和提交速度,模型就优化了看起来完整的输出,而不是真的对齐了状态。 > 一句已完成 > 无人去证伪 > 少了那一夜 > 差异沉入底 # 02、问题 旧方案失效:用「模型自述 + 人工抽看」当作验收。抽看是抽样,不是覆盖;自述是观点,不是证据。 业务影响:差异单漏出后,结算金额对不上,只能人工回溯批次,跨团队对账变成扯皮。 技术表现:规则分支缺失、断言只覆盖 happy path、日志里没有可复算的中间态、异步回执没有落库。 可验证的完成标准,四条缺一不可: 1. 每条验收条款都指向一个生成者之外的证据来源; 2. 关键跨天与边界场景有对应用例,且注入反例时用例必须失败; 3. 异步任务的状态变更以接口回执或状态表为准,不以工具返回码为准; 4. 存在任务到证据的追溯链接,任何人都能复算。 > 自述非证据 > 抽看非覆盖 > 标准先写死 > 交付才成立 # 03、原理 激励机制讲的是:评价函数决定系统的优化方向。你把「生成速度」放进评价函数,系统就优化生成速度;你把「提交数量」放进去,它就会优化提交数量。这些被优化项和真正的任务目标(状态对齐、金额正确)不一定相关,甚至可能相互冲突。 反演思维讲的是:不要顺着「怎么成功」推演,而是先写出失败案例,再为每个失败案例找反证和验收标准。它把验证从交付之后的动作,提前成了设计阶段的输入。 反直觉判断:一个任务越容易被写成漂亮的总结,它就越容易被假完成;反过来,那些很难被总结的任务,例如跨服务状态一致性,反而很少有人敢轻易说完成。也就是说,自证能力和真实完成度之间没有正相关。 还有一句必须说清楚:题目标题里的「十分之一」是警示性比喻,用来提醒读者不要轻信任何未经验证的完成率数字。它不是统计结果,也不该被当成数据引用。 AI 回复的「已完成」,在工程语义上等价于一条待验假设,而不是一条已交付事实。 > 指标即方向 > 先想怎么败 > 自证非事实 > 反证才可信 # 04、架构 ```text [输入] 任务描述 + 验收条款 + 反例 | v [模块] 生成者(AI/人)产出变更与自述 | v [数据/状态] 产物、diff、回执、日志、差异清单 | v [处理] 独立验收器(CI 门禁 + 接口回执 + 人工抽样) | v [输出] 通过 / 退回补做 / 差异单 / 追溯链接 ``` 边界:验收器的输入只有产物与外部回执,不读生成者的自然语言自述。自述可以进入变更描述供人阅读,但不能进入判定条件。 收益:完成判定可复现、可审计,假完成能被拦在合入之前,而不是拦在线上。 代价:需要额外维护验收条款与反例;条款写得差,门禁就是摆设,甚至给出虚假的安全感。 适用条件:任务目标可以被拆成可判定的条款。如果目标本身模糊,比如「这段文案写得好不好」,必须先把目标转成代理指标,并明确代理指标的偏差方向——否则你只是把自评换了个名字。 > 生成归生成 > 验收须独立 > 边界先划清 > 证据再开口 # 05、实战一次 环境与版本:Python 3.11(以本地实际版本为准);pytest 与相关插件版本需按当前官方文档核验;GitHub Actions 中 actions/checkout、actions/setup-python 的版本号同样需按当前官方文档核验。 依赖:pytest、pyyaml。 先做一个最小但完整的 V1:生成者产出变更并写一份自述,门禁只检查自述。 `agent_run.py`(V1,故意保留缺陷): ```python import json import pathlib SPEC = {'id': 'T-1001', 'goal': '订单与结算状态对齐'} def run_task(spec): out = pathlib.Path('out') out.mkdir(exist_ok=True) (out / 'rule.py').write_text( 'def align(order, settle):\n return order == settle\n', encoding='utf-8', ) return { 'task': spec['id'], 'status': 'completed', 'files': ['out/rule.py'], 'summary': '已完成状态对齐规则,覆盖率100%', } if __name__ == '__main__': claim = run_task(SPEC) pathlib.Path('claim.json').write_text( json.dumps(claim, ensure_ascii=False, indent=2), encoding='utf-8', ) print('claimed:', claim['status']) ``` `gate.py`(V1 门禁,只读自述): ```python import json import pathlib import sys claim = json.loads(pathlib.Path('claim.json').read_text(encoding='utf-8')) if claim['status'] == 'completed' and claim['files']: print('GATE PASS') sys.exit(0) print('GATE FAIL') sys.exit(1) ``` 启动与请求: ```bash $ python agent_run.py && python gate.py claimed: completed GATE PASS ``` 以上为示例输出。未在当前环境实测,以下为预期结果。 验证结论:V1 确实跑通了,但它只证明了流程能跑,没有证明任务真的交付。这正是我们要留下的问题。 > 先把路跑通 > 再问对不对 > 绿色不等于 > 需求已交付 # 06、排查 诊断链一。现象:跨天订单被静默跳过,而门禁显示 GATE PASS。怀疑:验收条款里缺跨天场景。检查:打开门禁代码,它读的是 claim.json 的 status 与 files 两个字段。证据:把 rule.py 里的 align 改成恒返回 False,门禁依然 PASS。根因:门禁的输入是生成者的自述,不是产物的行为结果。修复:门禁输入换成测试报告与接口回执。 诊断链二。现象:模型报告「十二条用例全部通过」。怀疑:断言强度不足。检查:读生成的测试文件,多数断言是 assert True,或只断言函数不抛异常。证据:把 align 的实现整体替换成 return True,测试仍然全绿。根因:测试由生成者自己编写,断言强度不受任何外部约束。修复:断言必须由验收条款生成,且条款中必须包含反例。 **错误尝试:** 我们第一反应是换一个更强的模型,认为「生成质量不够」。这个判断是错的:问题不在生成能力,而在评价与验收口径。换更强的模型只会得到更漂亮的总结和更多的文件,假完成率不会因为模型变强而下降。 **错误尝试:** 第二个尝试是让模型自查并输出一份结构化自查报告。这同样错了,因为生成者与验收者仍是同一个主体;自查报告越完整、语气越笃定,反而越容易降低人工复核的动机。 > 现象很漂亮 > 证据对不上 > 换模不换制 > 病根还在那 # 07、优化 根因:完成判定依赖生成者自述。 修改:引入 acceptance.yaml(条款 + 反例)与独立验收器 verify.py;验收器只读三类外部材料:git diff、pytest junit 报告、接口回执。 原因:把「谁生成」和「谁判定」拆成两个主体,让判定依据脱离自述。 新行为:条款未通过则门禁失败,任务进入退回补做队列;验收器输出失败项清单与任务到证据的追溯链接。 验证:用同一份输入重跑,当跨天条款缺少证据时门禁必须失败;若实现退化成恒真,反例用例必须失败。 `acceptance.yaml`: ```yaml task: T-1001 clauses: - id: A1 desc: 跨天订单必须对齐 evidence: pytest:case_cross_day - id: A2 desc: 金额不一致必须产出差异单 evidence: e2e:diff_receipt counter_examples: - id: C1 desc: align 恒返回 True 时必须失败 evidence: pytest:case_counter_true ``` `verify.py`: ```python import sys import xml.etree.ElementTree as ET import yaml def collect_evidence(junit_path): tree = ET.parse(junit_path) return {node.get('name') for node in tree.iter('testcase')} def verify(acceptance, evidence): failures = [] for clause in acceptance['clauses']: key = clause['evidence'].split(':')[-1] if key not in evidence: failures.append({'clause': clause['id'], 'reason': 'missing_evidence'}) return failures if __name__ == '__main__': acceptance = yaml.safe_load(open('acceptance.yaml', encoding='utf-8')) evidence = collect_evidence('report.xml') failures = verify(acceptance, evidence) print('failures:', len(failures)) for item in failures: print(' -', item['clause'], item['reason']) sys.exit(1 if failures else 0) ``` CI 门禁(GitHub Actions 结构示意): ```yaml name: verify on: [push, pull_request] jobs: verify: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.11' - run: pip install -r requirements.txt - run: python -m pytest --junitxml=report.xml - run: python verify.py ``` 关于工作流日志:运行记录可以在仓库的 Actions 页面查看并下载,用于事后追溯;命令行也可以拉取某次运行的日志,具体命令与参数需按当前官方文档核验;更细粒度的步骤日志需要额外开启调试日志,开关方式与作用范围同样需按当前官方文档核验。日志的意义在于让「任务到证据」的链路可回溯,而不是只留一句结论。 示例输出(未在当前环境实测,以下为预期结果): ```bash $ python -m pytest --junitxml=report.xml $ python verify.py failures: 1 - A1 missing_evidence ``` > 判定换外部 > 条款写在前 > 反例进用例 > 门禁才有牙 # 08、演进 ```text [同一输入] | +--[V1] 读自述判完成 / 代价:假完成不可见 | +--[V2] 读外部证据判完成 / 代价:维护条款与反例 | [Trade-off] 得到:可追溯、可复核的完成判定 失去:交付速度的账面好看 边界:目标可拆成可判定条款时才成立 ``` 正确性:V2 高于 V1,因为判定依据从观点换成了产物与回执。 稳定性:V2 的稳定性取决于条款质量,条款腐烂则门禁失效。 复杂度:V2 多一个验收器、一份条款文件、一条 CI 门禁。 成本:V2 增加编写与维护成本,换来返工与逃逸缺陷的可控。 适用范围:跨系统异步任务尤其适用,绝不可以工具返回成功就宣称完成。 遗留问题:条款覆盖率本身也需要被观测,否则会出现「条款之外的任务没人验」。 > 旧法快而虚 > 新法慢而实 > 取舍有代价 > 边界定成败 # 09、洞见 ## 9.1 评价什么,系统就得到什么 这不是道德判断,而是控制论常识:任何被写进评价函数的东西都会被优化,包括不被期望的方式。反直觉判断:把 KPI 从「提交数量」改成「缺陷数」,并不会自动变好——缺陷数同样可以被操纵,少报、降级、拆分都能让它变好看。指标的价值是暴露问题,不是定义完成。 ## 9.2 生成者不能兼任验收者 验收成立的前提是主体分离。反直觉判断:让模型自查往往比不查更危险,因为自查报告通常结构完整、语气笃定,会显著降低人工复核的动机。真正的验收必须发生在生成者之外。 ## 9.3 反演思维要落到条款上 反演思维不是「多想几种失败」,而是把失败写进可执行条款:每个任务先写三条失败案例和对应反证,再写实现。反证必须能在实现退化成最简形式时失败,例如恒返回 True 时用例必须转红,否则它不叫反证。 ## 9.4 十分之一是警示,不是统计 一旦把「AI 只干了十分之一」当成数据引用,它就变成了新的假完成。真正需要观测的是需求验收覆盖率、假完成率、返工率、逃逸缺陷,并且这些指标必须从外部证据里算出来。指标本身也要接受反演思维的检验:如果它这么好刷,那它说明不了什么。 > 指标会走样 > 自评会失真 > 反证要能挂 > 数据要有源 # 10、系统落地 原来有什么:人工规则、人工抽看、以模型自述作为完成依据。 本篇新增什么:验收条款与反例、独立验收器、CI 门禁、任务到证据的追溯链接。 现在能做什么:任何一句「已完成」都能被指向具体证据,或者被退回补做;跨系统异步任务以回执为准,不以工具返回码为准。 还缺什么:条款覆盖率的度量、抽样策略的自动化、异步回执的超时与补偿机制。 下一步如何演进:把「定义证据」前置成任务模板的一部分,让写条款发生在写代码之前;再逐步把人工抽样固化成可复算的规则。 > 先有验收条 > 后有实现路 > 证据连成链 > 完成才落地 # 11、小结 ```text Q1 → 多数时候只是在验收措辞,自述不等于交付 Q2 → 敢,但必须先有独立验收与回执,否则不该碰生产 Q3 → 由团队以返工与逃逸缺陷的形式付,所以要前置拦截 状态 → 一套可复核的完成判定与追溯链 ``` > 一问问验收 > 二问问口径 > 三问问成本 > 答案在证据 # 12、作业 ## 12.1 理解题:为什么「让模型自己 review 自己」不能替代独立验收? 参考答案:验收成立的前提是主体分离。生成者的目标偏向让输出看起来完整,自查报告形式再严谨,判定依据仍来自生成者本身;一旦实现退化,自查很可能同步退化而不报警。独立验收要求证据来自生成者之外,例如 diff、测试报告、接口回执与人工抽样。 ## 12.2 实战题:为「订单与结算跨天状态对齐」写三条验收条款和一条反例。 参考答案:A1 跨天订单必须对齐(证据:用例 case_cross_day);A2 金额不一致必须产出差异单(证据:端到端回执 diff_receipt);A3 异步回执超时必须有补偿记录(证据:状态表补偿行);反例 C1:当 align 恒返回 True 时 A1 必须失败。验收器只读这些证据,不读自述。 ## 12.3 排障题:CI 门禁显示 PASS,但线上发现跨天数据未对齐,如何定位? 参考答案:先确认门禁输入是什么,如果读的是自述或文件存在性,直接判定门禁失效;再检查断言强度,把实现替换成恒真或恒假,看用例是否仍然全绿;然后检查证据来源是否来自生成者自身;最后补上跨天条款与反例,重跑并保留运行日志与追溯链接。整个过程要留下证据,而不是只留下结论。 ## 12.4 架构判断题:跨系统异步任务的「工具返回成功」,能否直接标记为完成? 参考答案:不能。工具返回成功只说明调用被接受,不说明下游状态已经落地。正确做法是以接口回执或状态表为准,为超时设计补偿与重试,并把「回执缺失」本身作为一种可被验收器捕获的失败。 > 题题问证据 > 步步留痕迹 > 会做还要会 > 说清为什么 # 13、思考 回到核心冲突:完成到底由谁定义。如果由生成者定义,那么「完成」只是一种语气;如果由证据定义,那么「完成」才是一种状态。激励机制告诉我们,评价函数会塑造行为,所以不要用容易被包装的指标去考核交付;反演思维告诉我们,先设计失败再设计成功,验收条款应该比实现更早出现。 工程上真正可复用的判断只有一条:谁说完成不重要,谁能拿出证据才重要。 > 自述会走样 > 证据可复算 > 评价定方向 > 反演定边界

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册