<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TDD on @metavige</title><link>https://metavige.github.io/tags/TDD/</link><description>Recent content in TDD on @metavige</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Sat, 22 Aug 2026 21:59:31 +0800</lastBuildDate><atom:link href="https://metavige.github.io/tags/TDD/atom.xml" rel="self" type="application/rss+xml"/><item><title>LLM 開發下，TDD 好像開始出現新的問題</title><link>https://metavige.github.io/2026/08/22/tdd-in-the-llm-era/</link><pubDate>Sat, 22 Aug 2026 21:59:31 +0800</pubDate><guid>https://metavige.github.io/2026/08/22/tdd-in-the-llm-era/</guid><description>&lt;p&gt;最近在使用 LLM 做開發時，我開始重新思考一件以前覺得已經很理所當然的事情：&lt;strong&gt;TDD 到底應該放在什麼位置？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我原本使用的流程其實滿直覺的。&lt;/p&gt;
&lt;p&gt;我們有一份使用者提供的 SRS，先把需求拆成比較細的 Specification，接著使用 TDD 開發：&lt;/p&gt;
&lt;p&gt;





&lt;figure&gt;
 
 








 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;picture class="mx-auto my-0 rounded-md" &gt;
 &lt;img
 src="https://metavige.github.io/2026/08/22/tdd-in-the-llm-era/tdd-flow.svg"
 width="720"
 height="150"
 class="mx-auto my-0 rounded-md"
 alt="原本的開發流程：SRS → Spec → TDD → Coding → Verify"
 loading="lazy" decoding="async"
 /&gt;
 &lt;/picture&gt;
 


&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;這個流程在一開始其實非常好用。&lt;/p&gt;
&lt;p&gt;尤其現在有 LLM 幫忙寫 Test，TDD 的成本比以前低很多。Specification 拆出來之後，可以很快建立 Test，再讓 Agent 根據 Test 實作。&lt;/p&gt;
&lt;p&gt;問題是，最近實際做了一些需求變動比較大的系統後，我開始發現一件奇怪的事情。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;每次需求修改之後，Code 好像只會越來越多。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一開始我以為是錯覺。直到回頭翻了幾次 change 的 diff，才發現新增的行數遠多於刪除，而且很多舊邏輯只是被條件包起來，並沒有真的離開系統。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="需求其實不是一直增加" class="relative group"&gt;需求其實不是一直增加 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e9%9c%80%e6%b1%82%e5%85%b6%e5%af%a6%e4%b8%8d%e6%98%af%e4%b8%80%e7%9b%b4%e5%a2%9e%e5%8a%a0" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;原本我直覺上會把需求修改理解成：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Spec v1 + New Requirement = Spec v2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;所以 Code 自然就是：&lt;/p&gt;</description></item></channel></rss>