<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>系統化開發 on Tarragon</title><link>https://tarrragon.github.io/blog/tags/%E7%B3%BB%E7%B5%B1%E5%8C%96%E9%96%8B%E7%99%BC/</link><description>Recent content in 系統化開發 on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 26 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/%E7%B3%BB%E7%B5%B1%E5%8C%96%E9%96%8B%E7%99%BC/index.xml" rel="self" type="application/rss+xml"/><item><title>系統化除錯方法論</title><link>https://tarrragon.github.io/blog/record/%E7%B3%BB%E7%B5%B1%E5%8C%96%E9%99%A4%E9%8C%AF%E6%96%B9%E6%B3%95%E8%AB%96/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/record/%E7%B3%BB%E7%B5%B1%E5%8C%96%E9%99%A4%E9%8C%AF%E6%96%B9%E6%B3%95%E8%AB%96/</guid><description>&lt;h2 id="為什麼需要系統化除錯方法論">為什麼需要系統化除錯方法論&lt;/h2>
&lt;p>除錯不是試錯過程，是品質提升的系統性工程。隨機修復會產生隨機品質。系統化除錯產生一致的架構改善。&lt;/p></description><content:encoded><![CDATA[<h2 id="為什麼需要系統化除錯方法論">為什麼需要系統化除錯方法論</h2>
<p>除錯不是試錯過程，是品質提升的系統性工程。隨機修復會產生隨機品質。系統化除錯產生一致的架構改善。</p>
<p>當AI協作處理複雜程式問題時，系統化除錯方法論成為唯一的執行準則。模糊的修復策略會產生模糊的結果。明確的除錯方法論產生一致的品質改善。</p>
<h2 id="系統化除錯的本質">系統化除錯的本質</h2>
<h3 id="系統化除錯不是什麼">系統化除錯不是什麼</h3>
<p>系統化除錯不是：</p>
<ul>
<li><strong>症狀修復</strong>：不掩蓋警告，只找根本原因</li>
<li><strong>批量處理</strong>：不自動修復，只精確分析</li>
<li><strong>簡單先行</strong>：不從容易修的開始，只按風險優先級</li>
<li><strong>表面清理</strong>：不只消除警告，只完成未完成的設計</li>
</ul>
<h3 id="系統化除錯是什麼">系統化除錯是什麼</h3>
<p>系統化除錯是：</p>
<ul>
<li><strong>根因分析</strong>：明確區分未完成實作vs過度設計</li>
<li><strong>風險導向</strong>：按業務風險和架構影響排序修復</li>
<li><strong>主從分工</strong>：主線程管控進度，代理人執行修復</li>
<li><strong>品質提升</strong>：每次修復都強化程式設計完整性</li>
</ul>
<h2 id="除錯的第一原則根因分析優先">除錯的第一原則：根因分析優先</h2>
<h3 id="問題本質分類">問題本質分類</h3>
<p>每個unused警告都屬於以下三類之一：</p>
<h4 id="未完成實作">未完成實作</h4>
<ul>
<li><strong>識別</strong>：功能設計完整但驗證邏輯缺失</li>
<li><strong>處理</strong>：補完實作而非移除程式碼</li>
<li><strong>範例</strong>：測試中建立了secondImport變數但未驗證重複匯入行為</li>
</ul>
<h4 id="過度設計">過度設計</h4>
<ul>
<li><strong>識別</strong>：功能已完成但包含不必要的複雜性</li>
<li><strong>處理</strong>：移除多餘程式碼保持精簡設計</li>
<li><strong>範例</strong>：建立獨立服務實例但架構採用單例模式</li>
</ul>
<h4 id="程式碼風格問題">程式碼風格問題</h4>
<ul>
<li><strong>識別</strong>：邏輯正確但命名或結構不一致</li>
<li><strong>處理</strong>：重構改善可讀性和一致性</li>
<li><strong>範例</strong>：使用File物件但混用path字串操作</li>
</ul>
<h3 id="分析判斷標準">分析判斷標準</h3>
<ul>
<li>變數有明確的業務意圖 → 未完成實作</li>
<li>變數創建後立即被丟棄 → 過度設計</li>
<li>變數使用方式不一致 → 程式碼風格問題</li>
</ul>
<p>不存在「可能是」的情況。如果無法明確分類，則需要更深入的程式碼分析。</p>
<h3 id="範例完整的根因分析">範例：完整的根因分析</h3>
<h4 id="情境test檔案中unused變數-initialmemory">情境：test檔案中unused變數 &lsquo;initialMemory&rsquo;</h4>
<h5 id="錯誤分析">錯誤分析</h5>
<p>「這個變數沒用到，直接刪掉。」</p>
<h5 id="正確分析過程">正確分析過程</h5>
<ol>
<li><strong>變數意圖</strong>：記憶體效率測試的基線測量</li>
<li><strong>使用模式</strong>：建立但未在驗證邏輯中引用</li>
<li><strong>分類判斷</strong>：未完成實作（測試設計完整但驗證缺失）</li>
<li><strong>修復策略</strong>：補完基線比較邏輯而非移除變數</li>
</ol>
<h2 id="除錯的第二原則風險導向排序">除錯的第二原則：風險導向排序</h2>
<h3 id="檔案風險等級">檔案風險等級</h3>
<p>檔案修復必須按風險等級執行：</p>
<h4 id="高風險檔案立即修復">高風險檔案（立即修復）</h4>
<ul>
<li><strong>核心業務邏輯</strong>：Domain層實作檔案</li>
<li><strong>基礎設施元件</strong>：Database、Service、Repository</li>
<li><strong>關鍵測試</strong>：端到端測試、整合測試</li>
</ul>
<h4 id="中風險檔案計畫修復">中風險檔案（計畫修復）</h4>
<ul>
<li><strong>輔助功能</strong>：Utility、Helper類別</li>
<li><strong>測試工具</strong>：Mock、TestData產生器</li>
<li><strong>配置檔案</strong>：Configuration、Environment設定</li>
</ul>
<h4 id="低風險檔案可延後修復">低風險檔案（可延後修復）</h4>
<ul>
<li><strong>單元測試變數</strong>：純測試輔助變數</li>
<li><strong>範例程式碼</strong>：Demo、Sample實作</li>
<li><strong>文件產生器</strong>：Documentation工具</li>
</ul>
<h3 id="風險評估標準">風險評估標準</h3>
<ul>
<li>影響核心功能 → 高風險</li>
<li>影響開發效率 → 中風險</li>
<li>純粹警告清理 → 低風險</li>
</ul>
<p>每個檔案只能歸類到一個風險等級。無法分類表示需要進一步的架構分析。</p>
<h3 id="修復優先序執行規則">修復優先序執行規則</h3>
<ul>
<li>高風險檔案：立即修復，不考慮複雜度</li>
<li>中風險檔案：當前Sprint完成</li>
<li>低風險檔案：下個版本或維護期處理</li>
</ul>
<h2 id="除錯的第三原則主從分工模式">除錯的第三原則：主從分工模式</h2>
<h3 id="角色定義">角色定義</h3>
<p>系統化除錯採用明確的角色分工：</p>
<h4 id="主線程職責">主線程職責</h4>
<ul>
<li><strong>進度管控</strong>：追蹤修復狀態和整體進展</li>
<li><strong>策略決策</strong>：確定修復優先序和資源配置</li>
<li><strong>品質檢查</strong>：驗證修復結果符合品質要求</li>
<li><strong>工作記錄</strong>：更新工作日誌避免遺漏</li>
</ul>
<h4 id="代理人職責">代理人職責</h4>
<ul>
<li><strong>詳細分析</strong>：深入檢查程式碼設計意圖</li>
<li><strong>修復執行</strong>：實際編寫和修改程式碼</li>
<li><strong>測試驗證</strong>：確保修復後功能正常</li>
<li><strong>技術回報</strong>：提供修復細節和影響評估</li>
</ul>
<h3 id="協作執行規則">協作執行規則</h3>
<ul>
<li>主線程永不直接修復程式碼</li>
<li>代理人永不決定修復優先序</li>
<li>每修復一個檔案都必須更新工作日誌</li>
<li>所有修復決策都必須通過主線程確認</li>
</ul>
<h3 id="範例完整的協作流程">範例：完整的協作流程</h3>
<h4 id="情境發現5個檔案有unused警告">情境：發現5個檔案有unused警告</h4>
<h5 id="主線程執行">主線程執行</h5>
<ol>
<li><strong>風險評估</strong>：將5個檔案按業務風險分類</li>
<li><strong>優先排序</strong>：確定高風險檔案的修復順序</li>
<li><strong>委託分析</strong>：要求代理人分析第一個檔案</li>
<li><strong>進度追蹤</strong>：更新TodoList標記當前處理檔案</li>
</ol>
<h5 id="代理人執行">代理人執行</h5>
<ol>
<li><strong>根因分析</strong>：判斷unused變數屬於未完成實作vs過度設計</li>
<li><strong>修復實施</strong>：根據分析結果執行對應的修復策略</li>
<li><strong>結果驗證</strong>：執行靜態分析工具確認警告消除</li>
<li><strong>影響報告</strong>：回報修復內容和對整體架構的影響</li>
</ol>
<h5 id="主線程確認">主線程確認</h5>
<ol>
<li><strong>驗證結果</strong>：檢查靜態分析工具輸出確認修復成功</li>
<li><strong>更新記錄</strong>：在工作日誌中記錄修復成果</li>
<li><strong>繼續協作</strong>：標記完成並委託下一個檔案分析</li>
</ol>
<h2 id="品質標準">品質標準</h2>
<h3 id="修復完成的判斷標準">修復完成的判斷標準</h3>
<p>每個檔案修復完成必須滿足：</p>
<ul>
<li><strong>警告消除</strong>：靜態分析工具不再顯示該檔案的unused警告</li>
<li><strong>功能完整</strong>：所有測試通過，不引入新的錯誤</li>
<li><strong>架構一致</strong>：修復符合Clean Architecture分層原則</li>
<li><strong>文件更新</strong>：工作日誌記錄修復內容和影響</li>
</ul>
<h3 id="整體品質提升指標">整體品質提升指標</h3>
<ul>
<li><strong>警告減少率</strong>：unused警告數量持續下降</li>
<li><strong>功能完整性</strong>：修復過程中完成更多未完成的實作</li>
<li><strong>架構一致性</strong>：程式碼風格和設計模式更加統一</li>
<li><strong>可維護性</strong>：程式碼可讀性和邏輯清晰度提升</li>
</ul>
<h3 id="品質驗證機制">品質驗證機制</h3>
<ul>
<li>每個檔案修復後立即執行靜態分析工具驗證</li>
<li>定期檢查整體警告數量變化趨勢</li>
<li>記錄修復過程中發現的架構改善機會</li>
<li>確認每次修復都強化而非弱化程式品質</li>
</ul>
<h2 id="執行流程">執行流程</h2>
<h3 id="標準修復流程">標準修復流程</h3>
<ol>
<li>
<p><strong>問題評估</strong>
執行靜態分析工具識別所有unused警告</p>
</li>
<li>
<p><strong>風險分析</strong>
將含有警告的檔案按風險等級分類</p>
</li>
<li>
<p><strong>優先排序</strong>
確定高風險檔案的修復順序</p>
</li>
<li>
<p><strong>逐檔修復</strong>
按優先序對每個檔案執行：</p>
<ul>
<li>委託代理人詳細分析</li>
<li>根因判斷(未完成實作vs過度設計vs程式碼風格)</li>
<li>執行對應修復策略</li>
<li>驗證修復結果</li>
<li>更新工作記錄</li>
</ul>
</li>
<li>
<p><strong>整體驗證</strong>
確認警告總數下降且無新錯誤引入</p>
</li>
</ol>
<h3 id="修復策略對應表">修復策略對應表</h3>
<table>
  <thead>
      <tr>
          <th>根因類型</th>
          <th>修復策略</th>
          <th>驗證標準</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>未完成實作</td>
          <td>補完功能實作</td>
          <td>變數在邏輯中被正確使用</td>
      </tr>
      <tr>
          <td>過度設計</td>
          <td>移除多餘程式碼</td>
          <td>功能完整但程式碼更簡潔</td>
      </tr>
      <tr>
          <td>程式碼風格</td>
          <td>重構改善一致性</td>
          <td>邏輯不變但可讀性提升</td>
      </tr>
  </tbody>
</table>
<h3 id="例外處理原則">例外處理原則</h3>
<ul>
<li><strong>分析器誤報</strong>：確認變數確實被使用後保持現狀</li>
<li><strong>架構衝突</strong>：優先解決架構問題後再處理警告</li>
<li><strong>測試失敗</strong>：立即修復測試問題，暫停警告修復</li>
<li><strong>複雜邊界</strong>：分解為更小的問題單位處理</li>
</ul>
<h2 id="成果評估">成果評估</h2>
<h3 id="量化指標">量化指標</h3>
<ul>
<li><strong>警告消除數量</strong>：已修復的unused警告總數</li>
<li><strong>警告減少率</strong>：相對於初始狀態的改善百分比</li>
<li><strong>檔案修復數量</strong>：完成修復的檔案總數</li>
<li><strong>架構改善項目</strong>：修復過程中完成的設計改善</li>
</ul>
<h3 id="質化評估">質化評估</h3>
<ul>
<li><strong>根因解決率</strong>：真正解決問題vs僅消除警告的比例</li>
<li><strong>架構一致性</strong>：程式碼風格和設計模式統一程度</li>
<li><strong>功能完整性</strong>：修復過程中完成的未完成實作數量</li>
<li><strong>可維護性提升</strong>：程式碼清晰度和邏輯簡潔性改善</li>
</ul>
<h3 id="實戰案例v0819成果">實戰案例：v0.8.19成果</h3>
<p><strong>量化成果</strong>：</p>
<ul>
<li>初始警告：49個</li>
<li>最終警告：25個</li>
<li>改善率：49.0%</li>
<li>修復檔案：7個高風險檔案</li>
</ul>
<p><strong>質化成果</strong>：</p>
<ul>
<li>補完3個未完成的功能實作</li>
<li>移除4處過度設計的複雜程式碼</li>
<li>統一5個檔案的程式碼風格</li>
<li>解決2個架構不一致問題</li>
</ul>
<h2 id="持續改進">持續改進</h2>
<h3 id="方法論優化">方法論優化</h3>
<p>系統化除錯方法論必須持續優化：</p>
<ul>
<li><strong>記錄邊界案例</strong>：遇到的特殊情況和處理方式</li>
<li><strong>更新風險分類</strong>：基於實戰經驗調整風險評估標準</li>
<li><strong>改進協作模式</strong>：優化主線程和代理人的分工效率</li>
<li><strong>補充修復策略</strong>：新增針對特定問題類型的處理方法</li>
</ul>
<h3 id="知識累積">知識累積</h3>
<p>每次系統化除錯的經驗都必須沉澱為方法論改進：</p>
<ul>
<li>成功的修復策略納入標準流程</li>
<li>失效的方法從規範中移除</li>
<li>新發現的問題模式補充到分類標準</li>
<li>協作過程中的效率改善點持續優化</li>
</ul>
<h2 id="結論">結論</h2>
<p>系統化除錯方法論是品質提升的執行標準。它的價值在精確，它的目的是完成設計。</p>
<p>每個修復都是一次架構改善。每個分析都是一次設計檢視。每個協作都是一次品質提升。</p>
<p>執行系統化除錯就是執行品質標準。遵循這個方法論，我們能持續強化程式架構完整性和設計一致性。</p>
<p>這是工程規範，確保每次除錯都提升而非妥協專案品質。</p>
<h2 id="延伸套用到-linux-系統除錯">延伸：套用到 Linux 系統除錯</h2>
<p>這套方法論是語言與領域無關的通則。把它落到 Linux 系統除錯這個具體領域——「讀權威狀態而非肉眼猜表象」的紀律、症狀到情境的分流、逐層定位——見 <a href="/blog/linux/debug/diagnosis-read-authoritative-state/" data-link-title="診斷心法：讀權威狀態，不靠肉眼猜表象" data-link-desc="Linux 上一個現象看起來像 A 卻可能是 B、想建立一套先讀權威狀態再下判斷的除錯紀律、避免看畫面就猜而猜錯時回來讀">Linux 除錯與診斷：診斷心法</a>。那裡用實機案例（把鎖屏誤判兩次的教訓）展示同一套系統化紀律在 Linux 現場長什麼樣。</p>]]></content:encoded></item></channel></rss>