Bug 修掉不等於學會:Regression Capital 與 QA 記憶
系列: AI 時代的創作、選擇與人類復古系列
篇次: 第 8 篇
版本: v0.1
性質: 理論論文/QA 資本模型/公開版
摘要
軟體、遊戲與複雜數位產品在長期開發中必然會出現 Bug。然而,真正區分成熟開發流程與一次性修補流程的,不是「有沒有 Bug」,而是錯誤是否被轉化成未來不再重犯的永久知識。
本篇提出:
Fixing a Bug=Learning from a Bug
單純修復:
Bug→Fix
只能改變當前版本。
真正的組織學習應該形成:
Bug→Fix→RegressionTest→PermanentQAAsset
本篇正式定義 Regression Capital(回歸資本):一個團隊從過去錯誤、失敗案例、玩家回報、事故、相容性問題與設計缺陷中,累積出的可重用測試、風險模型、檢查表、硬體矩陣、再現條件、資料集與 release gate。
Regression Capital 的核心不是「記得以前出過什麼 Bug」,而是:
Past Failure→Future Constraint
在 AI 與 Agent 時代,過去極其昂貴的人工作業——重跑舊流程、排列硬體矩陣、反覆載入舊 save、重測相同 UI、搜尋跨版本同類 defect——開始可以被大量自動化。因此,一人團隊與小型團隊第一次可以低成本建立接近大型組織的長期 QA 記憶。
本篇主張:未來真正成熟的開發資產,不應只有 Code Capital 與 Art Capital,也應包括:
Regression Capital
而一個做到第四、第五、第十個產品的團隊,其 QA 能力理論上應該滿足:
QAn+1⊃QAn
而不是每個新作都重新踩一次曾經踩過的雷。
關鍵詞
Regression Capital、QA Memory、Bug Class、Regression Testing、AI QA、Agent QA、Release Gate、Organizational Learning、Failure Memory、Software Quality
1. 有 Bug 不等於不成熟
任何足夠複雜的系統:
S
都可能存在:
B(S)>0
其中:
B(S)
代表 defect 數量。
因此:
BugExistence=EngineeringFailure
真正值得分析的是:
團隊如何處理 Bug?
2. 第一層:Bug 被發現
最基本流程:
Bug→Report
來源可能是:
- 開發者;
- QA;
- 玩家;
- telemetry;
- crash log;
- Agent;
- 自動測試。
此時團隊只知道:
某件事壞了。
3. 第二層:Bug 被修掉
接著:
Report→Fix
此時:
CurrentBuild
可能恢復正常。
這是必要的。
但它仍然只回答:
How do we stop this exact failure now?
4. 第三層:Bug 被理解
更高階:
Fix→CauseModel
即:
為什麼會發生?
例如:
- refresh rate;
- async race;
- null state;
- stale cache;
- save migration;
- wrong-side formula;
- state machine leak;
- missing permission;
- duplicated event。
這一步把:
Symptom
轉成:
Failure Mechanism
5. 第四層:Bug 被類型化
一個 Bug 不應只被記成:
滑鼠抖動。
更成熟的記法是:
Input / Display Timing Compatibility Class
因為下一次可能不是:
同一個游標抖動。
而是:
- cursor lag;
- click delay;
- frame pacing mismatch;
- external display issue;
- fullscreen-only jitter。
症狀不同,但:
Failure Class
相同。
6. Exact Bug 與 Bug Class 必須分開
定義:
bi=Exact Bug Instance
C(bi)=Bug Class
若:
C(bi)=C(bj)
則即使:
bi=bj
兩者仍可能來自相同風險域。
因此:
No Exact Recurrence=No Regression
7. Bug 修掉不等於風險消失
假設:
b1
在版本一被修掉。
如果團隊只保留:
Patch1
沒有保留:
- reproduction;
- test;
- matrix;
- cause;
- risk tag;
那麼版本二仍可能出現:
b2
其中:
C(b2)=C(b1)
所以:
Patch Memory=Risk Memory
8. Regression Capital 的正式定義
本篇定義:
RC=Regression Capital
它包含:
RC=T+M+D+L+G
其中:
- T:Regression Tests;
- M:Failure Models;
- D:Reproduction Data;
- L:Risk / Bug Ledger;
- G:Release Gates。
9. Regression Test 只是 Regression Capital 的一部分
很多人把:
Regression
只理解成:
自動測試。
但真正 QA 記憶還包含:
- 哪些硬體曾出問題;
- 哪些狀態組合危險;
- 哪些 UI 行為容易 regression;
- 哪些使用者路徑高風險;
- 哪些 migration 容易破壞;
- 哪些系統互動脆弱。
所以:
RegressionCapital>AutomatedTests
10. Failure Memory
定義:
MF=Failure Memory
一個成熟 failure record 應至少包含:
(Symptom,Environment,Trigger,Cause,Fix,RiskClass,RegressionTest)
這樣一次失敗才能變成:
Reusable Knowledge
11. Bug → Permanent QA Asset
完整流程:
Bug→Reproduce→Diagnose→Fix→Test→Classify→Retain
最後:
Failure→Asset
這就是 Regression Capital 的核心轉換。
12. 為什麼「修好了」非常容易造成假完成感
開發者修掉 Bug 後:
CurrentFailure=0
會自然產生:
完成。
但真正問題是:
P(FutureRecurrence)
有沒有下降?
如果沒有建立:
Persistent Constraint
那麼:
P(FutureRecurrence)
可能只下降很少。
13. Fixing vs Learning
可以定義:
F=Fix Quality
L=Learning Quality
一個 bugfix 可能:
F=1,L=0
也就是:
今天好了。
但組織:
沒學到。
所以:
Fix Success⇒Learning Success
14. Regression Test 是「未來約束」
一旦:
Bugi
被轉成:
Testi
那麼所有未來版本:
vt+1,vt+2,…
都受到:
Testi(v)=Pass
約束。
因此:
Past Failure→Future Constraint
不是比喻,而是真正工程結構。
15. QA 應該具有單調累積性
理想上:
QA1
包含第一作學到的東西。
第二作:
QA2
應該:
QA2⊃QA1
第三作:
QA3⊃QA2
因此:
QAn+1⊃QAn
16. 新作不代表 QA 歸零
即使:
過去的:
Risk Knowledge
仍然可以保留。
例如:
我以前曾在 fullscreen / refresh rate 出過問題。
即使 engine 完全不同,
仍然可以保留:
Display/Input Regression Matrix
17. 這就是「Bug Class Memory」
若舊作出現:
Ci
則新作 release gate 應保留:
Check(Ci)
即使:
Implementationnew=Implementationold
風險域仍值得重測。
18. QA Memory 不應被綁死在程式碼
若 QA 只存在於:
OldCodebase
新專案 fork 或重寫後:
QA→0
這是很大的問題。
真正成熟 QA 應獨立保存:
- tests;
- scenarios;
- bug classes;
- release checklists;
- hardware matrices;
- known-risk models。
因此:
QA Knowledge=Code Branch Only
19. Branch Fork 會造成 Fix 遺失
假設:
Main→BranchA
以及:
Main→BranchB
若:
FixA
只進入:
BranchA
則:
BranchB
仍然可能保留舊 defect。
所以:
Shared Ancestry=Shared Fix State
20. Regression Capital 可以抵抗 Branch Drift
如果 fix 同時生成:
Testglobal
那麼即使新專案:
只要重新跑:
Testglobal
就能檢查:
這類風險是否重新出現?
21. Hardware Matrix 是 Regression Capital
對遊戲與桌面軟體而言:
HardwareMatrix
本身就是資產。
例如:
- fullscreen;
- windowed;
- borderless;
- 60Hz;
- 120Hz;
- 144Hz;
- multi-monitor;
- DPI scaling;
- GPU family;
- alt-tab;
- resolution switch。
一旦某個組合出過問題,
它就應被永久提升 priority。
22. Release Regression Matrix
可以表示為:
R=Mode×RefreshRate×DPI×Monitor×Input
人類不可能每版手工完整遍歷。
但 Agent 與自動化可以。
23. AI / Agent 讓 Regression Capital 的成本下降
以前:
Cost(Repeat Test)
很高。
現在:
Costagent(Repeat)≪Costhuman(Repeat)
這改變了 QA 的經濟性。
24. Agent 最適合的就是「無聊但重要」
例如:
- 每版跑 20 次存讀檔;
- 每版測 12 種解析度;
- 每版跑 30 個 mission order;
- 每版比較 100 種 build;
- 每版確認舊 bug 沒回來。
這些工作:
Low Novelty+High Repetition+High Value
非常適合 Agent。
25. Regression Keeper Agent
可以專門配置:
Regression Keeper
它負責:
- 讀舊 Bug;
- 分類;
- 找可測 invariant;
- 生成 test;
- 每版重跑;
- 升級 recurrence。
這是一個:
QA Memory Agent
26. Bug Ledger
每個 issue 可以記:
Bi=(ID,Class,Trigger,Environment,Severity,Fix,Regression,Status)
例如:
Class=InputDisplayTiming
比只寫:
Mouse shaking fixed.
更有長期價值。
27. Severity 與 Recurrence Risk 必須分開
一個 Bug 當下可能:
Severity=Medium
但如果:
RecurrenceRisk=High
它仍值得永久 gate。
所以:
Priority=f(Severity,Frequency,RecurrenceRisk,BlastRadius)
28. Bug Class 可以跨症狀
同一個:
State Synchronization Failure
可能表現成:
- UI 沒更新;
- save 讀錯;
- duplicate event;
- wrong ending;
- stale value。
因此 Regression Capital 必須能:
Generalize
而不是只匹配字串。
29. AI 很適合做 Bug-Class Clustering
給 AI:
{B1,B2,…,Bn}
可以找:
Latent Failure Classes
例如:
過去 17 個 bug 其實都和 save-state ordering 有關。
這比單純 issue list 更有價值。
30. Bug Clustering 可以產生 Risk Map
形成:
R={C1,C2,…,Cm}
並標:
- 發生次數;
- 最新版本;
- 系統範圍;
- severity;
- regression coverage。
這就是:
Historical Risk Map
31. 新 Feature 應該查詢 Risk Map
新增:
Fnew
時,
AI 應問:
WhichPastRiskClasses(Fnew)?
例如:
修改 resolution manager。
系統立即回:
過去有 InputDisplayTiming 類問題,重跑相關 matrix。
32. 這叫 Risk-Aware Development
不是等:
Bug
再發生。
而是:
Change→Historical Risk Lookup→Targeted Regression
33. Release Gate 應讀 Regression Capital
Release Candidate:
RCi
不能只測:
新功能。
還要讀:
Rhistorical
即歷史高風險集合。
所以:
ReleaseGate=CurrentTests+HistoricalRegression
34. RC Phase 的真正用途
RC 不應再持續:
加功能。
而應:
Freeze→Replay History→Attack Integration
也就是:
用整個過去累積的失敗知識攻擊這個版本。
35. Regression Capital 不只測 Bug
它也可以保存:
- balance failure;
- economy collapse;
- tutorial confusion;
- dominant strategy;
- narrative dead branch;
- UX misunderstanding。
因此:
Regression
不只屬於:
Code
也屬於:
Design
36. Design Regression
例如某次 patch 修好:
後期錢沒用。
之後加入新免費獎勵,
可能又讓:
MarginalUtility(Money)→0
這不是程式 Bug,
但仍是:
Design Regression
37. Narrative Regression
例如某次更新加入新任務,
卻讓 ending:
- 不再讀某 flag;
- branch 被跳過;
- 某角色狀態失效。
這是:
Narrative Regression
38. Semantic Regression
更一般地:
Semantic Regression
指:
程式仍能跑,但產品原有語義被破壞。
例如:
- 說明和公式失配;
- 選擇不再有後果;
- 系統角色被稀釋;
- 資源失去約束。
這類問題非常適合 AI 做全域審查。
39. Regression Capital 與 Integration Capital 互相增強
第五篇定義:
IntegrationCapital
第八篇定義:
RegressionCapital
兩者關係:
RC→IC↑
因為越多歷史測試,就越知道哪些跨系統關係不能被破壞。
40. Regression Capital 與 Organizational Memory
一個團隊若:
- 人走了;
- 專案換了;
- branch 換了;
- engine 換了;
但:
RC
仍存在,
那組織仍保留:
Failure Knowledge
這就是:
Organizational Memory
41. 沒有 Regression Capital 的團隊會反覆「重新發現」
同一類問題:
Ci
可能每隔幾年重新出現。
每次都:
啊,原來這裡有問題。
這代表:
Observation Repeats
但:
Learning Does Not Accumulate
42. 重複踩雷的真正成本不是一次 Bug
單次 Bug 成本:
Cb
但若重複:
n
次,
總成本:
nCb
更重要的是:
Trust Loss
也會累積。
因此:
RepeatedBugClass
對品牌的傷害通常高於第一次。
43. 玩家會把 Bug Class 記成品牌記憶
玩家不一定知道 root cause。
但會記:
這家又有這種問題。
因此:
Technical Recurrence→Brand Recurrence
這會形成:
Trust Debt
44. QA Capital 也是品牌資本
若一個團隊長期:
- release 穩;
- save 不壞;
- 更新少 regression;
- 舊問題不重犯;
玩家會形成:
Reliability Expectation
因此:
RegressionCapital→TrustCapital
45. 一人團隊尤其需要 Externalized QA Memory
Solo developer 的人腦:
MH
有限。
而專案可能跨:
5 years
甚至更久。
因此不能依賴:
我記得以前出過這個。
應該:
Externalize
到:
- test;
- issue;
- matrix;
- checklist;
- Agent memory store;
- repo。
46. 人腦記得「故事」,系統要記得「條件」
人可能記得:
以前滑鼠好像有問題。
但 QA 系統應記:
Fullscreen×RefreshRate×ExternalMonitor×CursorStop
也就是:
到底怎麼重現。
這才是可執行記憶。
47. Executable Memory
本篇提出:
Executable Memory
也就是:
記憶不是描述,而是可以被重新執行。
例如:
- test script;
- replay;
- save fixture;
- seed;
- input sequence。
因此:
Memory→ActionableTest
48. AI 時代最重要的 QA 轉變:記憶可執行
以前:
QA Knowledge
大量存在於:
未來可以轉成:
Agent-Executable Regression
即:
Agent 讀到舊 issue,自己重跑一次。
49. Failure-to-Test Conversion Rate
可以定義:
FTR=Nresolved failuresNfailures converted to regression
如果:
FTR≈0
代表團隊:
修很多。
但:
學得很少。
50. Regression Coverage
可以定義:
RCov=Nknown high-risk classesNhigh-risk classes covered
這比單純:
有 1000 個 test。
更有意義。
因為 test 數量不等於風險覆蓋。
51. Regression Capital 不應無限膨脹
不是每個小 Bug 都值得永久高頻測。
否則:
TestSuite→∞
導致:
Cost→∞
所以還需要:
Regression Portfolio Management
52. Regression Portfolio
可以按:
Priorityi=Severityi×Recurrencei×BlastRadiusi×Likelihoodi
排序。
高 priority:
Every Release
中:
Major RC
低:
Periodic / Targeted
53. AI 可以自動調整 Regression Portfolio
若新 change:
ci
碰到某 risk class,
則該 class:
Priority↑
測試自動被拉入:
Current Regression Set
這是:
Dynamic Regression Routing
54. Regression Capital 和 Agentic Development 的接點
第七篇建立:
1 Human+N Agents
第八篇則給這個組織一個最重要的長期記憶器官:
Regression Keeper
因此 Agentic Team 不只是:
當下更會做。
而是:
跨時間更會記得。
55. AI QA 最終目標不是抓更多 Bug
真正目標是:
Reduce Repeated Ignorance
也就是:
同一類知識,不要每隔幾年重新花一次代價才能學會。
56. 成熟團隊的 QA 應該是歷史函數
可以寫:
QAt=f(QAt−1,Failurest,Testst,RiskModelst)
因此:
QAt
不是只取決於:
今天多少 QA。
而取決於:
以前所有失敗有多少被保存。
57. QA 資本的複利
若每次失敗都轉成資產:
RC(t+1)=RC(t)+ΔRt
則長期:
RC↑
而:
P(known-class recurrence)↓
這就是:
QA Compounding
58. 「第四款作品」真正應該多的是什麼
做到第四款時,理論上不只:
CodeCapital↑
ArtCapital↑
還應:
RegressionCapital↑
ReleaseDiscipline↑
RiskAwareness↑
否則只是:
生產資產在累積。
但:
學習資產沒有累積。
59. Regression Capital 也是 AI Capital
因為未來 AI 可以讀:
- issue history;
- test history;
- crash logs;
- user reports;
- release notes;
建立:
Project Failure Model
所以:
RegressionCapital⊂AICapital
當資料被結構化後,Agent 可以自動使用它。
60. 從 QA 到組織學習
本篇最終其實不只是 QA。
它在回答:
一個組織怎麼證明自己真的有學習?
答案不是:
我們記得。
而是:
Past Failure Changes Future Behavior
如果過去失敗沒有改變未來流程,
那麼:
Memory Exists
但:
Learning Does Not
61. 系列中的位置
第七篇處理:
Agentic Development
第八篇補上:
Agentic Memory
也就是讓 Agent 團隊不只多視角、多角色、多並行,
還能:
跨版本累積失敗知識。
下一篇將把資產概念再向外擴張:
《從作品資產到流程資產:AI Capital 的重新定義》
62. 結論
Bug 出現不是最嚴重的問題。
真正嚴重的是:
同一類 Bug 一再出現,而每次都像第一次認識它。
因此:
Fixing a Bug=Learning from a Bug
成熟的流程必須:
Bug→Fix→RegressionTest→PermanentQAAsset
並進一步:
Failure→RiskClass→ReleaseConstraint
這才代表:
團隊真的從錯誤中學習。
AI 與 Agent 的出現讓這件事尤其重要,因為過去很昂貴的「永遠重跑舊測試」,正在快速變便宜。
因此,一人團隊未來不再只能說:
我記得以前好像出過這個問題。
而可以建立:
Executable Organizational Memory
讓過去的每一次失敗,都變成未來版本的一道防線。
所以真正成熟的第四款、第五款、第十款作品,不應只是:
圖更多。
程式更多。
功能更多。
而應該:
更少重新犯自己已經付過學費的錯。
這就是 Regression Capital。