AI 團隊於 軟體專案(含Legacy)中的概念與實作

AI 團隊於 軟體專案(含Legacy)中的概念與實作

當你的 AI 助手看不懂你的 Legacy Code 時

你有沒有想過,為什麼 AI 可以寫出漂亮的 Hello World,卻搞不定你那個跑了五年的舊專案?

不是 AI 不夠聰明。是因為你的 Legacy 專案裡,藏著十幾個離職工程師的靈魂、三種不同的架構風格、還有一堆「當時為什麼要這樣寫」的謎題。

這就像你請了一個新人,然後丟給他一個沒有文件的專案,說「去修 Bug」。他能做什麼?到處翻程式碼、猜測原始設計者的意圖、小心翼翼地改一點點東西,然後祈禱不要炸掉整個系統。

AI 也一樣。它需要 context。更精確地說,它需要專案特定的 context

但這裡有個更深層的問題:假設你把所有 context 都給了 AI,它就能自己工作了嗎?不行。因為你還沒告訴它「什麼叫做品質」。

問題的根源:技能需要 Context,品質需要意識

Generic AI Agent 很強大,但它不知道你的專案「正常」長什麼樣。

假設你有一個電商網站的 Legacy 專案: – 訂單系統用 Stored Procedure – 庫存系統用 ORM – 支付系統直接寫 SQL – 三種風格並存,但都能動

Generic Agent 會怎麼做?它可能統一成一種風格——這聽起來很好,但你確定現在要重構整個資料存取層嗎?

第一個決策點:Generic Team vs Dedicated Team

類型適用情境優點缺點
Generic Team新專案、實驗性任務快速啟動、不需準備不懂專案特性
Dedicated TeamLegacy 專案、產品開發理解專案脈絡需要建置 context

對於 Legacy 專案,你幾乎必然需要 Dedicated Team——但這代表你要先教會 AI 你的專案

而更關鍵的是:你還要教會 AI 什麼叫做「好」

品質意識的三層世界

在傳統開發流程中,品質意識存在三個層次:

第一層:工程師的品質意識

第二層:PM 的品質意識

第三層:客戶的品質意識

三層之間常常衝突。工程師想重構,PM 想趕進度,客戶想省錢。

那麼 AI 呢?AI 的品質意識是什麼?

答案是:沒有。除非你教會它。

如何教 AI 品質意識:Workflow 文件化

假設你的團隊處理 Bug 的標準流程是:

1. 確認 Bug 可重現
2. 寫單元測試 cover 這個 Bug
3. 修改程式碼讓測試通過
4. 確認沒有 regression 5. Code Review 後才能 merge

這些在你腦中是常識,但 AI 不知道。它可能直接改程式碼、跳過測試、甚至製造新的 Bug。

所以你需要把品質意識寫進 Workflow:

## Bug 修復流程

### 前置條件
– 確認 Bug 在 staging 環境可重現
– 確認 Issue Tracker 有完整描述

### 執行步驟
1. 建立 feature branch (格式: bugfix/TICKET-123)
2. 新增測試案例 (失敗狀態)
3. 修改程式碼讓測試通過
4. 執行完整測試套件
5. 本地驗證修復結果
6. 提交 Pull Request 並標註 Reviewer

### 品質標準
– 測試覆蓋率 ≥ 80%
– 沒有 console.log 殘留
– 符合專案 Coding Style
– 沒有引入新的 dependency

### 禁止行為
– 直接改 production database
– 跳過測試
– 硬編碼敏感資訊

這不是寫給人看的文件。寫給 AI 的行為準則

當你把這些寫清楚,AI 才知道「在這個專案裡,什麼叫做做得好」。

實作流程:從 Legacy Code 到 AI Team

基於 A-Team 專案(reference:參考一個製作團隊的團隊專案: A-Team Framework)的概念,以下是建立 AI 團隊的六步驟實作流程:

1. 盤點 Codebase 並產生 Documents

假設你有一個三年前的 .NET 專案,第一步是讓 AI 理解它:

# 生成專案結構文件
tree src/ > docs/structure.md

# 提取 API 端點清單
grep -r “Route\|HttpGet\|HttpPost” src/ > docs/api-endpoints.md

# 列出資料庫 Schema
# (從 Migration 檔案或實際 DB)

# 整理 README、Wiki、任何現有文件

你需要回答這些問題: – 這個專案的核心功能是什麼?
– 有哪些關鍵的技術決策?(例如為什麼用 Stored Procedure)
– 有哪些已知的坑?(例如某個 API 的 timeout 要設 60 秒)
– 測試策略是什麼?(有整合測試嗎?假資料怎麼處理?)

這些資訊會成為 AI Team 的「專案記憶」。

2. 需求/願景 → Skills + Context = Team

定義需求清單與對應 Skills:

需求清單: – 修 Bug – 重構某個模組 – 加新功能 X

對應 Skills:

skills:
  – name: legacy-bug-fixer
    description: 修復 Bug 並確保測試覆蓋
    context:
      – docs/structure.md
      – docs/known-issues.md
      – workflows/bug-fixing.md

  – name: module-refactor
    description: 重構特定模組並保持向下相容
    context:
      – docs/architecture.md
      – docs/refactor-guidelines.md

  – name: feature-developer
    description: 開發新功能並整合到現有系統
    context:
      – docs/api-design.md
      – docs/database-schema.md

每個 Skill 都綁定特定的 context。像你給不同的工程師分配任務,並附上相關文件。

3. 決策:這個專案適合 Generic Team 嗎?

檢查清單:
– [ ] 專案架構是否標準?(例如典型的 MVC)
– [ ] 程式碼風格是否一致?
– [ ] 測試是否完整?
– [ ] 文件是否充足?
– [ ] 部署流程是否自動化?

如果五個問題有三個以上答「否」,你需要 Dedicated Team。

為什麼?

因為 Generic Team 假設「最佳實踐」,但你的 Legacy 專案可能根本不是最佳實踐。它可能是: – 「當年我們人手不足,先求有再求好」 – 「這個 Workaround 是為了繞過某個 bug」 – 「這段程式碼不要動,動了會炸」

這些潛規則,只有 Dedicated Team(帶著專案特定的 context)才能理解。

4. 設計團隊:Generic vs Dedicated 的實際結構

Generic Team 範例 (適合新專案):

Team: web-app-generic
  ├── Coordinator (project-manager)
  ├── Backend Developer (generic)
  ├── Frontend Developer (generic)
  └── QA Engineer (generic)

Context: 無(依賴 AI 的預訓練知識)

Dedicated Team 範例 (適合 Legacy 專案):

Team: legacy-ecommerce-team
  ├── Coordinator (team-lead)
  ├── Order-System-Specialist
  │   └── Context: docs/order-system.md, workflows/order-bug-fix.md
  ├── Payment-Specialist
  │   └── Context: docs/payment-integration.md, docs/pci-compliance.md
  └── Inventory-Refactor
       └── Context: docs/inventory-schema.md, docs/refactor-plan.md

Context: 專案特定文件 + Workflows

Dedicated Team 的每個角色都有明確的職責範圍context 邊界。Order-System-Specialist 不會去動 Payment 的程式碼,因為它的 context 裡沒有支付系統的資訊。

這種隔離很重要。它模擬了真實團隊中的「我不熟那塊,還是找負責的人來改」。

5. Workflow 文件化:定義品質標準

把「怎樣算做好」寫下來。

Bug 修復 Workflow:

## 輸入
– Bug Report (Jira Ticket)
– 重現步驟

## 輸出
– Fixed Code + Unit Test + Integration Test (if needed)
– Pull Request with description

## 品質標準
– 測試覆蓋率 ≥ 80%
– 沒有 console.log 或 Debug code
– 沒有引入新的 dependency (除非經過批准)
– Commit message 格式: “fix(module): description”

## 禁止行為
– 直接改 production database
– 跳過測試
– 硬編碼敏感資訊

Refactoring Workflow:

## 輸入
– 目標模組
– 重構目標 (可讀性/效能/架構)

## 輸出
– Refactored Code (保持 API 相容)
– 更新的測試
– 效能比較報告 (如果是效能重構)

## 品質標準
– 所有測試必須通過
– API 向下相容 (或提供 Migration Guide)
– 複雜度降低 (Cyclomatic Complexity < 10)
– 程式碼行數減少 ≥ 20% (如果可能)

## 禁止行為
– 改變公開 API 而不通知
– 刪除測試
– 引入 breaking change

這些 Workflow 會被嵌入到每個 Skill 的定義中。當 AI Agent 執行任務時,它會遵循這些規則。

6. 建立虛擬團隊 Retro 機制

就像真實團隊會開 Retrospective 會議,AI Team 也需要反饋迴圈。

建立 Retro Log:

## Retro: 2026-02-10

### 完成任務
– Fixed Bug #123 (Order calculation)
– Refactored Inventory module

### 遇到的問題
– Bug #123 的測試案例不足,花了額外時間補測試
– Inventory 重構時發現 undocumented dependency on Payment module

### 改善建議
– 更新 workflows/bug-fixing.md: 明確要求「每個 Bug 至少兩個測試案例」
– 更新 docs/inventory-schema.md: 加入與 Payment 的關聯說明

### Context 更新
– 新增 docs/cross-module-dependencies.md

這個 Retro Log 會被加回 context,讓 AI Team 下次遇到類似情況時更聰明。

真正的「學習」機制。

人類角色的轉變:從執行者到管理者

當你建立了 AI Team,你的角色會改變。

過去:你是工程師

現在:你是 Team Lead

但你必須更懂技術。

因為你要能判斷: – AI 產生的程式碼是否符合專案標準? – 這個重構是改善還是製造新問題? – 測試覆蓋是否充分? – 有沒有引入安全風險?

你從「寫程式碼的人」變成「教 AI 怎麼寫好程式碼的人」。

這個轉變不容易。有些人會覺得「我還是自己寫比較快」。也許在短期是這樣,但當你的 AI Team 建立起來、context 完善、workflows 明確之後,它可以處理的事情會越來越多。

而你可以專注在更高層次的問題: – 這個架構該往哪個方向演進? – 這個技術債要不要還? – 下一季的 Roadmap 是什麼?

你的選擇

所以,回到一開始的問題:當你的 AI 助手看不懂你的 Legacy Code 時,你要怎麼辦?

你有三個選擇:

  1. 短期有效,長期累死
  2. 硬做 — 可能做出來,但品質堪憂
  3. 前期投資時間,後期加速開發

如果你選擇第三條路,你會發現:教 AI 理解你的專案,本質上是在強迫自己把隱性知識顯性化

那些「只有資深工程師知道」的眉角、那些「不知道為什麼但就是要這樣做」的慣例、那些「文件上沒寫但大家都知道」的規則——你必須全部寫下來。

這個過程很痛苦,但也很有價值。

因為最後,你得到的不只是一個 AI Team。你還得到了一份完整的專案文件、一套明確的開發流程、一個可以傳承的知識體系。

即使哪天你決定不用 AI 了,這些東西還是有價值的。


參考一個製作團隊的團隊專案: A-Team Framework

標籤: #AI開發 #LegacyCode #團隊管理 #軟體工程 #技術管理

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *