<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>想法与洞见 – Autotomy</title><description>探索 AI 优先开发、编码护栏和可处置架构。</description><link>https://autotomy.dev/</link><language>zh-hans</language><item><title>你的 main 分支挂了，要从 200 个 commit 里找出元凶</title><link>https://autotomy.dev/zh-hans/blog/git-bisect-binary-search-commit/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/git-bisect-binary-search-commit/</guid><description>Git bisect 把手动翻 commit 变成了自动二分查找。以下是如何在不逐个 checkout 的情况下，精确定位引入 bug 的 commit。</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate></item><item><title>你的错误追踪器知道崩溃发生在哪里，但这无法帮你复现它</title><link>https://autotomy.dev/zh-hans/blog/production-crash-capture-replay/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/production-crash-capture-replay/</guid><description>堆栈追踪告诉你崩溃发生的位置，而不是原因。以下是一种捕获-复现模式，能把生产环境崩溃转化为本地可调试的测试用例。</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Symbolic Execution 发现了我 94% 测试覆盖率都遗漏的整数溢出</title><link>https://autotomy.dev/zh-hans/blog/symbolic-execution-integer-overflow-coverage/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/symbolic-execution-integer-overflow-coverage/</guid><description>你的单元测试只检查特定输入，而 symbolic execution 检查所有可能的输入。以下是它的工作原理、成本以及从何入手。</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>你的日志正在泄露 PII，而 grep 救不了你</title><link>https://autotomy.dev/zh-hans/blog/pii-tracking-code-pipeline/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/pii-tracking-code-pipeline/</guid><description>大多数团队是在客户投诉后才发现 PII 泄露。以下是如何从源头到输出全程追踪敏感数据，并附上了今天就能用的代码示例。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>你的 API 在生产环境崩溃，是因为 CI 在测代码，而不是 contracts</title><link>https://autotomy.dev/zh-hans/blog/api-contract-testing-ci/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/api-contract-testing-ci/</guid><description>大多数 CI 流水线能捕获语法错误和逻辑 bug，却漏掉了真正拖垮生产环境的 API contract 破坏。以下是修复方法。</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Crash Correlation 会说谎。以下是如何让它们指向真正的 Bug。</title><link>https://autotomy.dev/zh-hans/blog/crash-correlation-triangulation/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/crash-correlation-triangulation/</guid><description>Statistical debugging 找到与崩溃相关的 predicates，但相关性不是文件和行号。以下是如何通过排序、过滤和三角测量，从相关性分数找到实际的 bug 位置。</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Sentry 的 Seer 能读懂你的 Traces。但这并不意味着它总能找到根因。</title><link>https://autotomy.dev/zh-hans/blog/sentry-seer-trace-root-cause/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/sentry-seer-trace-root-cause/</guid><description>Seer 摄取 trace tree、关联的错误和性能分析数据来诊断分布式问题。以下是它的实际工作原理、擅长之处以及仍然需要人工帮助的地方。</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Statistical debugging 本应终结 printf 调试时代。但大多数团队从未让它真正运转起来。</title><link>https://autotomy.dev/zh-hans/blog/statistical-debugging-adoption-challenges/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/statistical-debugging-adoption-challenges/</guid><description>Statistical debugging 承诺通过将程序行为与故障相关联来精确定位 bug。以下是为什么这个想法从未从研究论文跨越到生产系统。</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate></item><item><title>你的测试通过了。但你的数据仍然是错的。</title><link>https://autotomy.dev/zh-hans/blog/statistical-debugging-production-data-anomalies/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/statistical-debugging-production-data-anomalies/</guid><description>Statistical debugging 将你的生产数据视为信号，将 bug 视为信号中的异常。以下是如何在不添加任何 unit test 的情况下发现数据损坏、off-by-one 错误和静默故障。</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Metamorphic testing 发现了 147 个编译器 bug 和一个自动驾驶汽车缺陷。它是这样工作的。</title><link>https://autotomy.dev/zh-hans/blog/metamorphic-testing-production-bugs-compiler/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/metamorphic-testing-production-bugs-compiler/</guid><description>Metamorphic testing 在 GCC、LLVM、Vulkan shader 编译器和 ADAS 模拟器中发现了真实 bug。本文用可运行的代码解释这项技术，并说明它在你 test suite 中的定位。</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate></item><item><title>大语言模型能建议 Metamorphic Relations，但它们无法保证正确性</title><link>https://autotomy.dev/zh-hans/blog/llm-metamorphic-relations-brainstorming/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-metamorphic-relations-brainstorming/</guid><description>大语言模型在发现 test oracles 时是个不错的头脑风暴伙伴，但它们会产生幻觉性质，并遗漏领域约束。以下是如何在不发布虚假测试的前提下使用它们。</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate></item><item><title>大多数 Metamorphic Relations 都是摆设。以下是如何挑出真正有用的。</title><link>https://autotomy.dev/zh-hans/blog/metamorphic-relation-quality/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/metamorphic-relation-quality/</guid><description>并非所有 metamorphic relations 都能捕获 bug。弱关系给你虚假信心，强关系才能发现真正的缺陷。以下是如何区分两者，并构建一组真正有效的关系。</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate></item><item><title>正确答案未知时，我该如何测试代码？</title><link>https://autotomy.dev/zh-hans/blog/metamorphic-testing-oracle-problem/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/metamorphic-testing-oracle-problem/</guid><description>Metamorphic testing 让你无需知道确切的预期输出就能验证代码正确性。本文介绍它的工作原理、局限性以及如何开始使用。</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate></item><item><title>TypeScript 不会让你发出那次调用：在类型系统中编码协议状态</title><link>https://autotomy.dev/zh-hans/blog/typescript-phantom-types-protocol-state/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-phantom-types-protocol-state/</guid><description>如何使用 phantom types 和 `this` 参数，将非法的协议转换从运行时 bug 变成编译期错误。</description><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate></item><item><title>OpenAPI 给了你词汇表，Session Types 需要的是语法</title><link>https://autotomy.dev/zh-hans/blog/openapi-session-types-protocol-gap/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/openapi-session-types-protocol-gap/</guid><description>OpenAPI 规范描述了请求和响应的 schema，但并未规定合法的消息序列。本文介绍你能从中提取什么，以及哪些地方仍需手动补全。</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate></item><item><title>会话类型是有效的。大多数语言只是拒绝实现它们。</title><link>https://autotomy.dev/zh-hans/blog/session-types-research-to-production/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/session-types-research-to-production/</guid><description>会话类型将通信协议编码到类型系统中，将运行时协议错误转化为编译时错误。以下是它们为何在论文中停留三十年才被生产代码采用的原因。</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate></item><item><title>会话类型如何将死锁转化为编译器错误</title><link>https://autotomy.dev/zh-hans/blog/session-types-deadlock-compiler-errors/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/session-types-deadlock-compiler-errors/</guid><description>会话类型将通信协议编码到你的类型系统中，在代码运行之前将消息传递不匹配转化为编译器错误。</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate></item><item><title>抽象诠释听起来像博士学位的要求。现在已经不是了</title><link>https://autotomy.dev/zh-hans/blog/infer-abstract-interpretation-ci/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/infer-abstract-interpretation-ci/</guid><description>如何使用Infer在CI管道中运行形式化静态分析，包含可工作的配置和现实权衡。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate></item><item><title>LLM可以为你的静态分析警告排序。只是无法解释原因。</title><link>https://autotomy.dev/zh-hans/blog/llm-static-analysis-triage/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-static-analysis-triage/</guid><description>大语言模型可以帮助分流静态分析中的误报，但它们无法像抽象解释那样理解程序语义。以下是如何将两者结合。</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Facebook用抽象诠释实现了Android并行化。以下是它的工作原理。</title><link>https://autotomy.dev/zh-hans/blog/facebook-android-abstract-interpretation-races/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/facebook-android-abstract-interpretation-races/</guid><description>Facebook如何利用抽象诠释和有意的不完整性，在数百万行Android代码中大规模发现竞态条件。</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Meta用从不运行程序的静态分析器在投产代码中发现了10万个缺陷</title><link>https://autotomy.dev/zh-hans/blog/meta-infer-100000-bugs-static-analysis/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/meta-infer-100000-bugs-static-analysis/</guid><description>Meta的Infer利用抽象解释和双向推理，通过推理代码结构而非执行来发现空指针解引用、内存泄漏和竞态条件。以下是它的工作原理以及如何在您自己的代码库中使用它。</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item><item><title>静态分析无法证明你的飞机不会坠毁。但它能证明一些更有用的东西。</title><link>https://autotomy.dev/zh-hans/blog/static-analysis-aviation-abstract-interpretation/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/static-analysis-aviation-abstract-interpretation/</guid><description>抽象解释会对每一种可能的程序状态进行过度近似。如果除零错误在抽象中不可达，那它在真实代码中就不可达。以下是它的工作原理以及它的局限性。</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate></item><item><title>如何证明你的代码没有运行时错误（以及为什么你很可能会放弃尝试）</title><link>https://autotomy.dev/zh-hans/blog/abstract-interpretation-runtime-error-proof/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/abstract-interpretation-runtime-error-proof/</guid><description>抽象解释让你在执行之前就证明运行时错误不可能发生。以下是它的实际工作原理、难点所在，以及它在你的工具链中的定位。</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate></item><item><title>你的 C 代码无需全面 rewrite 即可在 capability 硬件上运行</title><link>https://autotomy.dev/zh-hans/blog/cheri-c-porting-hybrid-abi/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/cheri-c-porting-hybrid-abi/</guid><description>CHERI 的 hybrid ABI 让你可以逐步将 C 代码移植到 capability 硬件上。本文介绍如何编译、哪些代码会出问题，以及如何在不 rewrite 整个 codebase 的情况下修复它们。</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>权能硬件没有失败。它只是提前 40 年到来。</title><link>https://autotomy.dev/zh-hans/blog/capability-hardware-cheri-history/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/capability-hardware-cheri-history/</guid><description>自 1970 年代以来，硬件层面的内存安全性就已可行。以下是权能架构为何一直败给扁平内存模型，以及为什么 CHERI 终于正在改变这一等式。</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate></item><item><title>你的 C 依赖库可能让整个进程崩溃。WebAssembly 可以阻止它。</title><link>https://autotomy.dev/zh-hans/blog/c-library-wasm-sandbox/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/c-library-wasm-sandbox/</guid><description>用容器来隔离单个 C 库未免小题大做。将其编译为 WebAssembly，在 WASI 沙箱中运行，即可实现内存安全、基于权能的文件系统访问和崩溃隔离，无需 Docker。</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate></item><item><title>你的手机已经拥有能检测内存损坏的硬件</title><link>https://autotomy.dev/zh-hans/blog/mobile-memory-tagging-extension/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/mobile-memory-tagging-extension/</guid><description>ARM Memory Tagging Extension 和 GWP-ASan 让现代移动设备在生产环境中检测内存安全成为可能。本文介绍它们的工作原理和权衡取舍。</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate></item><item><title>缓冲区溢出之所以反复发生，是因为我们在软件层面修复它</title><link>https://autotomy.dev/zh-hans/blog/cheri-hardware-buffer-overflow-prevention/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/cheri-hardware-buffer-overflow-prevention/</guid><description>CHERI是一种硬件扩展，它将每个指针转变为带有边界的权能。本文介绍它如何在CPU层面阻止缓冲区溢出、代价几何，以及如何在真实硬件上试用。</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate></item><item><title>LLM 无法证明你的代码正确，但它们可以撰写实现证明的样板代码</title><link>https://autotomy.dev/zh-hans/blog/llm-cleanroom-proof-obligation-automation/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-cleanroom-proof-obligation-automation/</guid><description>净室验证需要生成并消解证明义务。以下介绍 LLM 如何自动化注解和验证条件生成，让你可以专注于真正困难的证明。</description><pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Cleanroom 实现每千行 0.1 个缺陷。你不需要全盘照搬也能达到这个目标。</title><link>https://autotomy.dev/zh-hans/blog/cleanroom-pragmatic-subset/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/cleanroom-pragmatic-subset/</guid><description>Cleanroom software engineering 将 defect rate 降低 100 倍，但全面采用需要独立的 test team 和 formal proof。这里介绍一种 pragmatic subset，无需 overhead 即可捕获大部分收益。</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate></item><item><title>IBM 的 Zero-Defect Process 实现了每 KLOC 0.1 个 Bug。行业还是抛弃了它。</title><link>https://autotomy.dev/zh-hans/blog/ibm-cleanroom-zero-defects-disappearance/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ibm-cleanroom-zero-defects-disappearance/</guid><description>IBM 的 Cleanroom engineering 达到了比行业平均水平好 100 倍的 defect rate，然后消失在历史中。它的消失与是否有效毫无关系。</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate></item><item><title>真的有人验证了 1 万行代码零缺陷吗？IBM 做到了，而且方法比结果更离奇。</title><link>https://autotomy.dev/zh-hans/blog/ibm-cleanroom-10000-lines-zero-defects/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ibm-cleanroom-10000-lines-zero-defects/</guid><description>Cleanroom software engineering 承诺通过 mathematical verification 而非 debugging 实现零缺陷增量。我们查看 IBM 的实际项目数据，看看这一说法是否成立。</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate></item><item><title>你的模块有三层。你可能只写了一层。</title><link>https://autotomy.dev/zh-hans/blog/cleanroom-box-structure-three-layers/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/cleanroom-box-structure-three-layers/</guid><description>Box Structure 强制你将模块的行为、记忆的状态和实现方式定义为三个独立且可验证的层。以下是 Cleanroom 如何利用它们消除调试。</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate></item><item><title>IBM 禁止开发者运行自己的代码，从而交付了每千行代码 0.1 个缺陷的软件</title><link>https://autotomy.dev/zh-hans/blog/ibm-cleanroom-01-defects-per-kloc/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ibm-cleanroom-01-defects-per-kloc/</guid><description>IBM 的 Cleanroom 工程流程通过预防而非发现缺陷，实现了比行业平均水平好 100 倍的缺陷率。以下是它的工作原理、为何几乎无人使用，以及你今天可以借鉴什么。</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate></item><item><title>你的文学化程序在 CI 能无需你参与就完成 tangle 之前都是坏的</title><link>https://autotomy.dev/zh-hans/blog/ci-literate-programming-tangle/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ci-literate-programming-tangle/</guid><description>Literate programming 承诺单一事实来源，但手动的 weave 和 tangle 步骤会破坏 CI/CD 流水线。以下是如何自动化提取和文档生成，使 Markdown 文件保持规范。</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate></item><item><title>先向LLM解释代码，让我的缺陷率降低了85%</title><link>https://autotomy.dev/zh-hans/blog/llm-rubber-ducking-bug-rate/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-rubber-ducking-bug-rate/</guid><description>我花了30天时间，在向LLM索要代码之前先撰写设计说明。结果改变了我对rubber-ducking的看法。</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate></item><item><title>我把测试、代码和散文都放在一个 Markdown 文件里，再也不用往文档里复制代码了</title><link>https://autotomy.dev/zh-hans/blog/literate-programming-markdown-python/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/literate-programming-markdown-python/</guid><description>Literate programming 将 Markdown 文件作为单一事实来源，使文档、测试和实现保持同步。以下是如何用三十行 Python 实现它。</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate></item><item><title>你的 Claude 对话已经是文档了。只是它会在 12 小时后消失。</title><link>https://autotomy.dev/zh-hans/blog/claude-thread-to-documentation/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/claude-thread-to-documentation/</guid><description>LLM 对话包含意图、被拒绝的替代方案以及可运行的代码。这正是文档应该包含的内容。以下是将 ephemeral chat 转换为持久、可搜索的文档，同时不丢失叙事的方法。</description><pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate></item><item><title>文本编辑器让你写无效代码。树编辑器不会</title><link>https://autotomy.dev/zh-hans/blog/structured-editing-ast-text-editors/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/structured-editing-ast-text-editors/</guid><description>每个编译器都将你的代码视为树，但你的编辑器让你编辑原始文本。以下是结构化编辑的实际样子、为什么它没有占领市场，以及如何在不更换工具的情况下借用其优势。</description><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Donald Knuth希望程序读起来像文学作品。编译器另有打算。</title><link>https://autotomy.dev/zh-hans/blog/knuth-literate-programming-history/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/knuth-literate-programming-history/</guid><description>Literate programming承诺代码应该首先为人类编写，其次才是为机器。四十年后，几乎没有人这样写。以下是软件文档化中最优雅的理念为何未能改变我们工作方式的原因。</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate></item><item><title>修复缺陷是容易的部分。弄清楚它为什么存在才是重要的</title><link>https://autotomy.dev/zh-hans/blog/fagan-causal-analysis-defects/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/fagan-causal-analysis-defects/</guid><description>大多数团队修复缺陷后就继续前进。同样的缺陷反复出现。以下是如何在费根审查内部运行因果分析，从而停止两次编写同样的缺陷。</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Pull Request 审查能发现 15-30% 的缺陷。数据 50 年前就已给出答案。</title><link>https://autotomy.dev/zh-hans/blog/pr-reviews-catch-15-to-30-percent-defects/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/pr-reviews-catch-15-to-30-percent-defects/</guid><description>IBM、AT&amp;T、HP 和 Microsoft 的多项研究均证实，非正式代码审查大约能发现四分之一的缺陷。以下是数据实际说明的内容、该比例偏低的原因以及解决方法。</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate></item><item><title>通用检查清单什么都抓不到。结构化检查清单能发现60%的缺陷。</title><link>https://autotomy.dev/zh-hans/blog/fagan-structured-checklist-defect-detection/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/fagan-structured-checklist-defect-detection/</guid><description>大多数审查检查清单都是复制粘贴的良好愿望列表。Fagan inspection风格的结构化检查清单基于实际缺陷数据构建，针对特定工件类型，并在个人准备阶段使用。以下是如何构建一个有效的检查清单。</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate></item><item><title>大语言模型可以预先审查你的代码，但它无法主持会议</title><link>https://autotomy.dev/zh-hans/blog/llm-fagan-inspection-preparation/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-fagan-inspection-preparation/</guid><description>费根审查需要四到六个人、两小时才能审完250行代码。大语言模型可以通过承担准备工作和检查清单的执行来削减这部分成本，但它无法取代人类角色去发现最昂贵的缺陷。</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Fagan Inspections 在测试前发现90%的缺陷。然后我们不再使用它。</title><link>https://autotomy.dev/zh-hans/blog/fagan-inspections-disappearance-ibm/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/fagan-inspections-disappearance-ibm/</guid><description>Michael Fagan 在 IBM 设计的结构化审查流程，能在代码进入编译器之前捕获几乎全部缺陷。但它也消耗了项目总工时的15%–20%。本文解释软件史上最有效的审查方法为何消失，以及团队究竟失去了什么。</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>你最优秀的审查员也会遗漏大多数缺陷。Fagan 于1976年在IBM测量了这一点。</title><link>https://autotomy.dev/zh-hans/blog/fagan-reviewer-defect-detection-variance/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/fagan-reviewer-defect-detection-variance/</guid><description>即使是高级工程师，在非结构化审查中也只能发现一小部分缺陷。Michael Fagan 在IBM的研究揭示了原因，并构建了结构化审查流程来解决这一问题。</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate></item><item><title>大多数代码审查只能发现20%的缺陷。Fagan Inspection能发现90%。</title><link>https://autotomy.dev/zh-hans/blog/fagan-inspections-90-percent-defects/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/fagan-inspections-90-percent-defects/</guid><description>非正式的代码审查只能发现15%到30%的缺陷。Fagan Inspection是一种有50年历史的结构化流程，持续报告60%到90%的缺陷移除率。以下是它的工作原理、团队回避它的原因，以及如何运行轻量级版本。</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate></item><item><title>AutoVerus将40小时的证明编写变成3次LLM调用。诀窍在于知道何时放弃。</title><link>https://autotomy.dev/zh-hans/blog/autoverus-llm-rust-verification/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/autoverus-llm-rust-verification/</guid><description>AutoVerus利用LLM智能体网络为Rust代码生成Verus正确性证明，通过由SMT求解器反馈驱动的生成-修复-消除循环，自动化超过90%的证明义务。</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate></item><item><title>LLM可以生成Rust代码，但形式化证明完全是另一回事。</title><link>https://autotomy.dev/zh-hans/blog/llm-rust-formal-proofs-hallucination/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-rust-formal-proofs-hallucination/</guid><description>大语言模型能写出质量惊人的Rust代码，但当你要求形式化证明时，它们会幻觉出不变量，并编造出没有任何验证器接受的语法。本文介绍它们真正做对了什么、在哪里崩溃，以及如何善用它们。</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate></item><item><title>干等 race condition 是最烂的测试策略</title><link>https://autotomy.dev/zh-hans/blog/model-checking-race-conditions/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/model-checking-race-conditions/</guid><description>model checking 如何在数秒内碾压你在生产环境跑几天才能发现 concurrency bug 的做法，以及如何把它用在自己的代码上。</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate></item><item><title>无需学习时序逻辑即可对代码进行模型检验</title><link>https://autotomy.dev/zh-hans/blog/is-there-a-model-checker-that-doesnt-require-learning-temporal-logic/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/is-there-a-model-checker-that-doesnt-require-learning-temporal-logic/</guid><description>像Kani这样的有界模型检验器和像Alloy这样的关系模型查找器允许你用普通的断言和约束来验证性质。你放弃了活性证明，换来的是以小时而非周为单位的学习曲线。</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate></item><item><title>不写一行证明也能证明 Rust 代码正确，但状态空间就是代价</title><link>https://autotomy.dev/zh-hans/blog/rust-model-checking-kani-state-space/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/rust-model-checking-kani-state-space/</guid><description>像 Kani 这样的模型检验工具让你可以用断言代替形式化证明来验证 Rust 性质。棘手之处在于，当你的循环没有小的边界时会发生什么。</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate></item><item><title>无法对分布式协议做单元测试，但可以做模型检验</title><link>https://autotomy.dev/zh-hans/blog/distributed-protocol-model-checking-tla/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/distributed-protocol-model-checking-tla/</guid><description>分布式缺陷在部署后修复成本高昂。模型检验能让你在写下第一行实现代码之前就发现它们。以下是如何使用 TLA+ 做到这一点。</description><pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate></item><item><title>跨环境复制 `.env` 文件不是配置策略</title><link>https://autotomy.dev/zh-hans/blog/infrastructure-config-dsl-per-context/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/infrastructure-config-dsl-per-context/</guid><description>基础设施团队如何使用按上下文划分的 DSL 来管理 dev、staging 和 production 之间的配置，使环境差异显式且类型安全。</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate></item><item><title>语法约束解码: 让每个 token 都强制 LLM 输出有效语法</title><link>https://autotomy.dev/zh-hans/blog/grammar-constrained-decoding-llm/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/grammar-constrained-decoding-llm/</guid><description>LLM 会对语法产生幻觉，因为它们以概率方式采样 token。语法约束解码在每一步过滤词表，只输出保持语法有效性的 token。</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate></item><item><title>从英语翻译到主题很容易。使其具备确定性才是真正的问题。</title><link>https://autotomy.dev/zh-hans/blog/english-to-theme-deterministic-design-tokens/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/english-to-theme-deterministic-design-tokens/</guid><description>你可以从简单的英语描述中生成设计令牌，但前提是将该描述视为带有模式契约和快照测试的限界上下文DSL。</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate></item><item><title>丢掉语法文件：用纯 TypeScript 写你的 DSL 解析器</title><link>https://autotomy.dev/zh-hans/blog/typescript-parser-combinators-dsl/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-parser-combinators-dsl/</guid><description>对于大多数 bounded-context 的 DSL 来说，解析器生成器是大材小用。解析器组合子让你可以用与应用相同的语言构建可用的解析器，无需生成代码，也无需构建步骤。</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate></item><item><title>运行时配置错误是你选择允许的生产故障</title><link>https://autotomy.dev/zh-hans/blog/config-validation-build-time/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/config-validation-build-time/</guid><description>如何使用模式验证和构建时检查，在应用程序开始处理流量之前捕获配置错误。</description><pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的依赖能读取环境变量。JavaScript允许它们这么做</title><link>https://autotomy.dev/zh-hans/blog/javascript-capability-security-lockdown/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/javascript-capability-security-lockdown/</guid><description>Ambient Authority意味着Node.js进程中的任何代码都能触碰文件系统、网络和运行环境。本文将讲解如何通过lockdown、compartment和显式capability传递来剥除它。</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate></item><item><title>网络邻近性不等于身份：服务如何在不依赖环境权威的情况下完成认证</title><link>https://autotomy.dev/zh-hans/blog/service-authentication-without-ambient-authority/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/service-authentication-without-ambient-authority/</guid><description>大多数服务间信任来自网络位置，而非密码学证明。本文介绍能力令牌、mTLS 和 SPIFFE 如何让服务在不依赖环境权威的前提下完成认证，以及为何这做起来比想象中困难。</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的依赖可以读取磁盘上的任何文件。cap-std 让它们先请求权限。</title><link>https://autotomy.dev/zh-hans/blog/rust-cap-std-capability-filesystem/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/rust-cap-std-capability-filesystem/</guid><description>Rust 的标准库向每个依赖授予隐式的文件系统权限。cap-std 将其替换为基于权能的 API，强制代码在打开路径之前证明它有权访问该路径。</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的服务在不知不觉中成了帮凶：Confused Deputy 攻击是如何运作的</title><link>https://autotomy.dev/zh-hans/blog/whats-a-confused-deputy-attack-and-how-do-i-prevent-it/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/whats-a-confused-deputy-attack-and-how-do-i-prevent-it/</guid><description>Confused deputy 攻击会诱骗一个拥有特权的服务，让它利用自己的权限攻击自己。以下是攻击者如何利用隐式信任发起攻击，以及为什么 capability-based security 才是解决方案。</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的权限检查正在欺骗你</title><link>https://autotomy.dev/zh-hans/blog/typescript-capability-based-security/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-capability-based-security/</guid><description>基于能力的安全模型用不可伪造的权限令牌取代零散的角色检查。以下是如何在 TypeScript 中实现它，同时不让代码变得难以阅读。</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate></item><item><title>如果每个函数都必须获得许可，而不是默认拥有，会怎样？</title><link>https://autotomy.dev/zh-hans/blog/capability-based-security-permissions/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/capability-based-security-permissions/</guid><description>大多数代码运行在 ambient authority 之下：每个函数都能触碰一切。Capability-based security 翻转了这一范式，强制函数只能接收显式、受限定范围的权限。</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate></item><item><title>别再抛出你的类型检查器看不见的错误</title><link>https://autotomy.dev/zh-hans/blog/should-i-stop-throwing-errors-and-start-returning-them/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/should-i-stop-throwing-errors-and-start-returning-them/</guid><description>抛出的异常会把失败路径从你的类型系统中隐藏起来。下面解释为什么显式返回错误能让代码更诚实，以及如何在不折磨自己的情况下采用这一模式。</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Rust newtype 在编译期让非法状态无法表示，且零开销</title><link>https://autotomy.dev/zh-hans/blog/rust-newtypes-zero-cost-safety/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/rust-newtypes-zero-cost-safety/</guid><description>一个单字段包装结构体就能在编译期捕获单位混淆和类型错用，不增加哪怕一个字节的开销。</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Switch 语句让 bug 逃过编译期检查</title><link>https://autotomy.dev/zh-hans/blog/is-there-a-better-way-than-switch-statements-for-type-safe-matching/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/is-there-a-better-way-than-switch-statements-for-type-safe-matching/</guid><description>TypeScript 的 switch 语句会悄无声息地让你遗漏分支。下面介绍如何用穷尽性检查模式来替代它，让构建阶段而非运行时暴露错误。</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate></item><item><title>编译器应该捕获遗漏的状态分支，而不是你的 QA 团队</title><link>https://autotomy.dev/zh-hans/blog/typescript-exhaustiveness-state-machines/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-exhaustiveness-state-machines/</guid><description>给状态机添加新状态很容易。记住更新每一个 switch 语句却不然。下面介绍如何让 TypeScript 在你遗忘某个 case 时拒绝编译。</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate></item><item><title>可以，但你的类型系统需要先知道什么是美元</title><link>https://autotomy.dev/zh-hans/blog/typescript-currency-types/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-currency-types/</guid><description>TypeScript 把所有数字视为同一个东西。下面介绍如何让它区分 USD 和 EUR，使编译器在代码上线前就能拦截货币转换相关的 bug。</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate></item><item><title>数字不只是数字：如何让编译器在编译期捕获单位错误</title><link>https://autotomy.dev/zh-hans/blog/typescript-unit-types-compile-time/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-unit-types-compile-time/</guid><description>该传秒的地方传了毫秒，这种 bug 能躲过所有测试。下面介绍如何将单位直接编码进 TypeScript 的类型系统，让混用在编译阶段就报错，且运行时零开销。</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate></item><item><title>TypeScript 允许我在需要订单 ID 的位置传入用户 ID</title><link>https://autotomy.dev/zh-hans/blog/typescript-branded-types-newtypes/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-branded-types-newtypes/</guid><description>TypeScript 中的类型别名不会创建独立的类型。Branded types 可以，而且它们能在编译时帮你避免混淆标识符。</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate></item><item><title>差分测试无需形式化证明也能奏效，但共模故障才是隐患</title><link>https://autotomy.dev/zh-hans/blog/differential-testing-common-mode-failures/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/differential-testing-common-mode-failures/</guid><description>差分测试让你无需知道正确答案就能发现 bug。问题在于，相关的错误看起来像是达成一致。以下是如何发现盲点。</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate></item><item><title>测试无法证明两个函数等价。以下方法才能真正做到。</title><link>https://autotomy.dev/zh-hans/blog/function-equivalence-smt-solvers/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/function-equivalence-smt-solvers/</guid><description>N-version programming 假设你的实现结果一致。我们来看为什么测试远远不够，SMT solvers 如何真正证明等价性，以及如何在‘足够好’和形式化验证之间取舍。</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate></item><item><title>如果我的 LLM 变体意见不一致，哪个才是对的？</title><link>https://autotomy.dev/zh-hans/blog/llm-variant-disagreement-resolution/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-variant-disagreement-resolution/</guid><description>并行运行多个 LLM 能够捕捉到任何单一模型都会自信地交付的错误。以下是如何构建一个真正有效的分歧解决系统。</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate></item><item><title>五种实现却没有多数派：如何真正选出最佳方案</title><link>https://autotomy.dev/zh-hans/blog/n-version-implementation-selection/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/n-version-implementation-selection/</guid><description>N-version programming 听起来很简单：运行多种实现，然后挑出最佳答案。但在实践中，&apos;最佳&apos;远比&apos;最常见&apos;更难定义。</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate></item><item><title>同一个 LLM 可以写出五个版本的函数。下面介绍如何让它们真正不同。</title><link>https://autotomy.dev/zh-hans/blog/llm-n-version-diverse-implementations/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/llm-n-version-diverse-implementations/</guid><description>基于 LLM 的 N 版本编程不需要多个模型。通过变化提示词、角色设定和推理约束，你可以从单个模型中提取多样化且正确的实现。</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate></item><item><title>NASA 同时运行了 27 份相同的程序。Bug 们抱团投票。</title><link>https://autotomy.dev/zh-hans/blog/nasa-n-version-programming-knight-leveson/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/nasa-n-version-programming-knight-leveson/</guid><description>N-version programming 曾承诺独立团队会犯独立的错误。Knight 和 Leveson 在 1986 年的实验证明了相反的事实，NASA 悄然放弃了这条路线。</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你有一半的 Cucumber 场景被跳过了。这就是那个状态在欺骗你的原因。</title><link>https://autotomy.dev/zh-hans/blog/cucumber-skipped-scenarios-diagnosis/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/cucumber-skipped-scenarios-diagnosis/</guid><description>Cucumber 的 &apos;skipped&apos; 状态隐藏了三种完全不同的问题。以下是如何诊断是哪一种在侵蚀你的测试套件，以及如何阻止它。</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的 Gherkin 规格说明正在对你撒谎</title><link>https://autotomy.dev/zh-hans/blog/gherkin-specs-automated-sync/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/gherkin-specs-automated-sync/</guid><description>一旦你指望人工手动维护，Gherkin 规格说明就会立刻与现实脱节。本文介绍如何通过自动化检查，让 feature 文件始终如实反映系统行为。</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>编译器检查语法，测试应该检查架构。</title><link>https://autotomy.dev/zh-hans/blog/architecture-tests-ci-enforcement/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/architecture-tests-ci-enforcement/</guid><description>大多数团队把架构规则写在维基里。这里介绍如何把它们写成可执行的测试，当你的依赖图发生漂移时让 CI 挂掉。</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的领域层引用了 Postgres。你的 CI 却视而不见。</title><link>https://autotomy.dev/zh-hans/blog/clean-architecture-domain-infrastructure-ci/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/clean-architecture-domain-infrastructure-ci/</guid><description>整洁架构的图在白板上看着很美。本文介绍如何在构建流水线中强制执行依赖方向，让领域代码永远无法触及基础设施。</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的架构图早就是谎言了</title><link>https://autotomy.dev/zh-hans/blog/architecture-docs-code-generated-diagrams/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/architecture-docs-code-generated-diagrams/</guid><description>架构文档在你保存的那一刻就开始腐烂。以下是如何利用代码生成图表、ADR 和自动化架构测试来保持文档的诚实。</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的重试循环假设第一次请求失败了。大概率并没有。</title><link>https://autotomy.dev/zh-hans/blog/idempotency-keys-api-retries/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/idempotency-keys-api-retries/</guid><description>超时或崩溃并不意味着你的 API 请求已经丢失。本文介绍幂等键（idempotency key）如何让重试变得安全，以及真正防止重复请求的数据库存储模式。</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate></item><item><title>比进程更长寿的锁：分布式租约的真实工作原理</title><link>https://autotomy.dev/zh-hans/blog/distributed-leases-fencing-tokens/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/distributed-leases-fencing-tokens/</guid><description>内存中的互斥锁在服务器重启后随即消失。本文介绍带有 fencing token 和 TTL 的分布式租约如何防止崩溃后的重复执行，以及它们在哪里仍然会失效。</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate></item><item><title>无 goroutine、无定时器、无后台开销的熔断器</title><link>https://autotomy.dev/zh-hans/blog/circuit-breaker-lazy-recovery-no-goroutines/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/circuit-breaker-lazy-recovery-no-goroutines/</guid><description>大多数熔断器库都会启动后台线程来探测恢复。你根本不需要它们。本文介绍一种请求驱动的设计，在消除所有后台开销的同时，不牺牲正确性。</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>你的 Web 服务有一条优雅关闭路径。这就是 Bug。</title><link>https://autotomy.dev/zh-hans/blog/crash-only-software-web-services/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/crash-only-software-web-services/</guid><description>Crash-only 软件将每一次失败视为崩溃，将每一次启动视为恢复。对于 Web 服务来说，这意味着删除你的关闭逻辑，并设计出能在 kill -9 下存活的状态。</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>看不懂突变改了什么，怎么写测试杀死它？</title><link>https://autotomy.dev/zh-hans/blog/killing-surviving-mutants/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/killing-surviving-mutants/</guid><description>mutation testing 发现了一个 survivor，但你根本不知道这个 mutation 做了什么。这里有一个分步方法，让你不用先理解 mutant 也能写出正确的测试。</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate></item><item><title>认证代码需要 90% 的变异覆盖率。你的字符串工具函数不需要。</title><link>https://autotomy.dev/zh-hans/blog/mutation-score-per-module-risk/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/mutation-score-per-module-risk/</guid><description>为什么在整个代码库强制执行单一变异分数是错误的，以及如何根据实际风险设置按模块划分的阈值。</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate></item><item><title>你的测试全过了。变异得分只有40%。以下是你该从存活变异体中读到的东西。</title><link>https://autotomy.dev/zh-hans/blog/my-tests-pass-but-my-mutation-score-is-40-whats-a-surviving-mutant/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/my-tests-pass-but-my-mutation-score-is-40-whats-a-surviving-mutant/</guid><description>代码覆盖率告诉你很安全。变异测试告诉你，你的测试大多只是摆设。以下是存活变异体如何暴露这一鸿沟，以及如何弥合它。</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate></item><item><title>Rust 的变异测试确实能用，但你的编译时间会恨你</title><link>https://autotomy.dev/zh-hans/blog/rust-mutation-testing-cargo-mutants/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/rust-mutation-testing-cargo-mutants/</guid><description>cargo-mutants 能找出那些只是假装在验证代码的测试。本文介绍变异测试在 Rust 中的工作原理、它能捕捉什么问题，以及编译时间成本是否值得。</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>验证光谱：为什么 AI 编写后端代码最出色</title><link>https://autotomy.dev/zh-hans/blog/ai-coding-validation-spectrum-backend-web-mobile/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ai-coding-validation-spectrum-backend-web-mobile/</guid><description>AI 编码遵循一条验证梯度：后端在毫秒内确定性地验证，Web 需要分钟级的视觉回归，移动端受限于物理现实需要数小时。验证速度和确定性沿着这条光谱递减，反馈循环直接决定了 AI 编码在哪里能发挥作用、在哪里会碰壁，决定了AI编码的可行边界。</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>猴子、机关枪、aimbot：给编程团队的 AI 治理方案</title><link>https://autotomy.dev/zh-hans/blog/monkey-machine-gun-aimbot/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/monkey-machine-gun-aimbot/</guid><description>AI 代码治理不是要从初级开发者和 AI 代理手中夺走工具，而是要安装guardrails，让每一发子弹都命中目标而不会造成附带损害。</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>变异测试需要跑4小时。团队到底怎么在CI里用它？</title><link>https://autotomy.dev/zh-hans/blog/mutation-testing-takes-4-hours-how-do-teams-actually-use-it-in-ci/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/mutation-testing-takes-4-hours-how-do-teams-actually-use-it-in-ci/</guid><description>大多数团队不会每次提交都跑完整的变异测试套件。以下是工程团队如何在不破坏构建流水线的情况下，真正把变异测试集成进CI的做法。</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>单元测试全绿，但你的数据照样消失</title><link>https://autotomy.dev/zh-hans/blog/database-persistence-testing-mocks/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/database-persistence-testing-mocks/</guid><description>Mock 数据库测试验证的是 SQL 语法，而不是数据行能否在崩溃、并发写入或 schema 不匹配时存活。下面介绍如何真实地测试持久化。</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate></item><item><title>恐惧 vs. 碾压：AI 编程的两种现实</title><link>https://autotomy.dev/zh-hans/blog/fear-vs-steamroll-ai-coding-divide/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/fear-vs-steamroll-ai-coding-divide/</guid><description>AI 编程对能够从任何混乱中恢复的精英团队有效。其他人则只能面对恐惧、失败的 CI 和被放弃的实验。差距不在模型本身。</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate></item><item><title>不被 mock action 淹没地测试 Redux</title><link>https://autotomy.dev/zh-hans/blog/redux-testing-real-state-transitions/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/redux-testing-real-state-transitions/</guid><description>为每个 Redux action 写 mock 会让你的测试变成 changelog 校验器。下面介绍如何用真实的状态流转来测试 store。</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate></item><item><title>AI 编程落地生产环境：为什么大多数团队半途而废</title><link>https://autotomy.dev/zh-hans/blog/ai-coding-in-production-autotomy-framework/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ai-coding-in-production-autotomy-framework/</guid><description>大多数团队尝试 AI 编程，代码上线后被 QA 驳回，然后放弃。问题不在于模型——而在于缺少让 AI 输出变得可信任的护栏。</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate></item><item><title>100 次测试运行是个谎言：如何真正确定你的 Property-Based Tests 规模</title><link>https://autotomy.dev/zh-hans/blog/property-based-testing-run-count/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/property-based-testing-run-count/</guid><description>Property-based testing 中默认的 100 个 example 是一种社会妥协，而非统计策略。以下是如何选择与你的信心需求和 CI 预算相匹配的运行次数。</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate></item><item><title>Fuck-u-code：你的 AI 流水线遗忘的确定性质量关卡</title><link>https://autotomy.dev/zh-hans/blog/fuck-u-code-deterministic-quality-gate-ai-pipeline/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/fuck-u-code-deterministic-quality-gate-ai-pipeline/</guid><description>你已经有类型检查、代码风格审查和架构规则。但你的确定性栈对复杂度、重复代码和命名灾难视而不见。以下是零成本的解决方案。</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate></item><item><title>Rust 中的 property-based tests 能找到单元测试漏掉的 bug</title><link>https://autotomy.dev/zh-hans/blog/rust-property-based-testing-quickcheck/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/rust-property-based-testing-quickcheck/</guid><description>基于示例的测试只覆盖你想得到的输入。property-based testing 生成随机数据，检查 invariants，并将失败 shrink 到最小反例。</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate></item><item><title>为什么第一版从来不是问题：AI 编程与长期维护</title><link>https://autotomy.dev/zh-hans/blog/ai-coding-why-version-one-is-never-the-problem/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ai-coding-why-version-one-is-never-the-problem/</guid><description>AI 编程工具擅长生成第一版。真正的工程挑战始于第四版——当团队需要改动某些东西而不破坏其他一切时。</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>AI 生成代码与可替换性原则</title><link>https://autotomy.dev/zh-hans/blog/ai-generated-code-replaceability-principle/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ai-generated-code-replaceability-principle/</guid><description>衡量 AI 生成代码质量的真正标准不是它在第一天能否运行，而是在第三十天你能否在不 rewrite 其他所有内容的情况下替换它。</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>AI Codebase 的确定性护栏</title><link>https://autotomy.dev/zh-hans/blog/deterministic-guardrails-ai-codebases/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/deterministic-guardrails-ai-codebases/</guid><description>人工审查不一致，AI 审查更不可靠。AI 生成 codebase 唯一可扩展的防线是确定性 enforcement：让构建失败的规则，而非被忽视的建议。</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>你的单元测试通过了，但生产代码仍然是坏的</title><link>https://autotomy.dev/zh-hans/blog/i-write-unit-tests-why-do-bugs-still-slip-through/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/i-write-unit-tests-why-do-bugs-still-slip-through/</guid><description>代码覆盖率指标制造了一种虚假的安全感。以下是单元测试为何漏掉那些让你夜不能寐的 bug，以及你应该测什么。</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>Rust 的 Runtime Contracts 可以在 Release 构建中零开销，但编译器不会替你实现</title><link>https://autotomy.dev/zh-hans/blog/rust-zero-cost-runtime-contracts/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/rust-zero-cost-runtime-contracts/</guid><description>Rust 会自动剥离 debug assertions，但真正的 design-by-contract 需要的远不止 debug_assert!。本文介绍如何在 Release 二进制文件中实现零成本的 runtime contracts，并让它们彻底消失。</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate></item><item><title>零个、一个还是十二个：生产函数到底需要多少个断言</title><link>https://autotomy.dev/zh-hans/blog/production-assertion-decision-framework/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/production-assertion-decision-framework/</guid><description>开发者要么像撒彩纸一样到处抛撒断言，要么完全避之不及。这个决策框架能帮你区分有用的 invariants 和生产环境崩溃的触发器。</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>你的验证层比业务逻辑还庞大</title><link>https://autotomy.dev/zh-hans/blog/declarative-runtime-contracts-validation/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/declarative-runtime-contracts-validation/</guid><description>手动验证会让 codebase 膨胀不堪，却依然遗漏边界情况。下面介绍如何通过声明式 schemas 强制执行 runtime contracts，同时让它们不碍你的事。</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate></item><item><title>TypeScript strictNullChecks 是编译时守卫，而非运行时盾牌</title><link>https://autotomy.dev/zh-hans/blog/typescript-strictnullchecks-runtime-nulls/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/typescript-strictnullchecks-runtime-nulls/</guid><description>严格模式能捕获你写出来的 null，却无法捕获来自 API、DOM 查询和 JSON.parse 在运行时抵达的 null。类型系统止步之处，正是你的防御开始之时。</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>在 AI 时代，代码评审会变成规格评审</title><link>https://autotomy.dev/zh-hans/blog/code-review-becomes-specification-review/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/code-review-becomes-specification-review/</guid><description>当 AI 能从规格生成实现、测试和 contracts 时，人类最有杠杆效应的工作会前移到上游。最需要被严格审视的，是规格本身。</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate></item><item><title>AI 安全栈: types、contracts、property tests 与 mutation gates</title><link>https://autotomy.dev/zh-hans/blog/ai-safety-stack-types-contracts-property-tests-mutation/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ai-safety-stack-types-contracts-property-tests-mutation/</guid><description>如果你想让 AI-generated code 能在生产环境里站得住，光靠 code review 不够。你需要一套从 type constraints 到 mutation testing 与 runtime containment 的分层安全栈。</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>陨石开发真的存在。你的代码库不必跟着一起塌</title><link>https://autotomy.dev/zh-hans/blog/meteor-development-is-real/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/meteor-development-is-real/</guid><description>这个梗好笑，是因为很多团队确实活在“陨石开发”里：不断变化的目标、固定期限和半成型范围一起砸下来。Autotomy 不能修复幻想式规划，但它可以让开发继续往前走。</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>Stanford CS146S 对 AI coding 的判断是对的。缺的课程是架构</title><link>https://autotomy.dev/zh-hans/blog/stanford-cs146s-ai-architecture-gap/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/stanford-cs146s-ai-architecture-gap/</guid><description>这篇对 Stanford CS146S 的评析认为，它准确看到了 AI coding 的转向，但真正决定长期质量的仍是 AI architecture：系统是否可替换、可约束、可持续演进。</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>为什么很多优秀的工程策略直到 AI 出现才真正变得划算</title><link>https://autotomy.dev/zh-hans/blog/engineering-ideas-ai-economics/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/engineering-ideas-ai-economics/</guid><description>Design by contract、property-based testing、mutation testing、model checking 从来不是坏思路。真正的问题是它们长期需要太多专业判断才能维持，而 AI 正在改变这笔账。</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate></item><item><title>为什么 AI 生成的代码需要护栏</title><link>https://autotomy.dev/zh-hans/blog/ai-react-native-guardrails-scaling/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/ai-react-native-guardrails-scaling/</guid><description>AI 可以很快把你的 React Native MVP 推到线上，但如果没有 guardrails，每一个小改动都可能打坏无关 flow。下面解释 declarative constraints 如何避免速度直接变成脆弱性。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>Vibe coder 的 React Native App Lifecycle 指南</title><link>https://autotomy.dev/zh-hans/blog/app-lifecycle-resume-status/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/app-lifecycle-resume-status/</guid><description>你的应用在 dev 里一切正常，但用户午休后回来却看到白屏。这里是正确处理原生 lifecycle 的 resume status 模式。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>为什么你的 Vibe-coded React Native app 会在启动时崩掉</title><link>https://autotomy.dev/zh-hans/blog/dependency-tiers-hard-soft-optional/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/dependency-tiers-hard-soft-optional/</guid><description>如果 optional SDK 按照 core infrastructure 的方式初始化，它们完全可以在启动时把 app 一起带崩。下面解释这套 dependency tier system 如何避免非关键工具拖垮 production。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>为什么 Cursor + NativeWind 的 Vibe coding 会在规模上把 React Native app 拖垮</title><link>https://autotomy.dev/zh-hans/blog/nativewind-vs-stylesheet-contract/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/nativewind-vs-stylesheet-contract/</guid><description>你用 Cursor 一个周末就做出了 MVP，但现在改一个 brand color 都会波及 47 个文件。这里是能止血的 styling contract。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>为什么不该让 Claude Code 审你的代码（以及该用什么替代）</title><link>https://autotomy.dev/zh-hans/blog/o1-guards-vs-llm-reviews/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/o1-guards-vs-llm-reviews/</guid><description>LLM code review 既不确定、又慢，还会漏掉架构违规。这套 O(1) guard stack 才真的能让你的代码保持干净。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>通过替换来重构：一种新的思维模型</title><link>https://autotomy.dev/zh-hans/blog/refactor-by-replacement/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/refactor-by-replacement/</guid><description>别再执着于保留旧代码。开始为删除而设计。Autotomy 模式如何让模块安全可替换。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>Cursor 和 Claude Code 是怎么毁掉你的 React Native architecture 的</title><link>https://autotomy.dev/zh-hans/blog/service-boundaries-composition-root/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/service-boundaries-composition-root/</guid><description>AI 生成的 auth 看起来没问题，直到一个新 feature 把手伸进了错误的 service。下面解释这套 interface-driven architecture 如何避免 vendor swap 和功能迭代把 login 一起打坏。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>为什么 deep link 会让 Vibe-coded React Native app 直接 crash</title><link>https://autotomy.dev/zh-hans/blog/url-validation-expo-router/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/url-validation-expo-router/</guid><description>deep link、push payload、shared URL 全都是 untrusted input。下面解释如何在 Expo Router boundary 就把它们 validate 掉，别让坏 params 进入 screen。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>useSyncExternalStore：把你的 Vibe-coded app 从 state bug 里救出来的 React Hook</title><link>https://autotomy.dev/zh-hans/blog/useSyncExternalStore-pattern/</link><guid isPermaLink="true">https://autotomy.dev/zh-hans/blog/useSyncExternalStore-pattern/</guid><description>别再写那些会 memory leak、会漏掉 state update 的 useEffect subscription 了。这里是构建 bulletproof external state 的 React 18 pattern。</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item></channel></rss>