SKILL.md
唯讀
名稱
legacy-modernizer
描述
設計漸進式遷移策略、識別服務邊界、產出依賴圖與遷移藍圖,並為老舊程式碼庫生成 API 外觀設計。適用於現代化遺留系統、實作絞殺藤模式或分支抽象化、拆分單體架構、升級框架或語言,或在不影響業務營運的情況下減少技術債。
Legacy Modernizer
核心工作流程
-
評估系統 — 分析程式碼庫、依賴關係、風險與業務限制。在進行下一步前產出依賴圖與風險清單。
- 驗證檢查點: 確認所有外部整合與資料合約均已記錄,再進入步驟 2。
-
規劃遷移 — 設計漸進式藍圖,每個階段需有明確的復原策略。參考
references/system-assessment.md取得程式碼分析範本。- 驗證檢查點: 確認每個階段都有定義的復原觸發條件與負責人。
-
建立安全網 — 在接觸正式環境程式碼前,建立特徵測試與監控。目標覆蓋現有行為 80% 以上。
- 驗證檢查點: 執行特徵測試套件,確認在未修改的遺留系統上通過綠燈後再繼續。
-
漸進式遷移 — 使用功能開關套用絞殺藤模式。透過外觀層路由流量;逐步轉移負載。
- 驗證檢查點: 每次流量增加後(例如 5% → 25% → 50% → 100%),確認錯誤率與延遲指標仍維持在基線門檻內。
-
驗證與迭代 — 執行完整測試套件、檢視監控儀表板,並在淘汰遺留程式碼前確認業務行為保持一致。
- 驗證檢查點: 新程式碼必須在 100% 流量下穩定運作至少一個發行週期,才能移除遺留路徑。
參考指南
根據情境載入詳細指引:
| 主題 | 參考文件 | 載入時機 |
|---|---|---|
| 絞殺藤 | references/strangler-fig-pattern.md |
漸進式取代、外觀層、路由 |
| 重構 | references/refactoring-patterns.md |
抽取服務、分支抽象化、配接器 |
| 遷移 | references/migration-strategies.md |
資料庫、UI、API、框架遷移 |
| 測試 | references/legacy-testing.md |
特徵測試、黃金主檔、核准測試 |
| 評估 | references/system-assessment.md |
程式碼分析、依賴對應、風險評估 |
程式碼範例
絞殺藤外觀層 (Python)
# facade.py — 根據功能開關將請求路由至遺留或新服務
import os
from legacy_service import LegacyOrderService
from new_service import NewOrderService
class OrderServiceFacade:
def __init__(self):
self._legacy = LegacyOrderService()
self._new = NewOrderService()
def get_order(self, order_id: str):
if os.getenv("USE_NEW_ORDER_SERVICE", "false").lower() == "true":
return self._new.fetch(order_id)
return self._legacy.get(order_id)
功能開關包裝器
# feature_flags.py — 環境變數或設定檔開關的簡易包裝
import os
def flag_enabled(flag_name: str, default: bool = False) -> bool:
"""檢查遷移功能開關是否啟用。"""
return os.getenv(flag_name, str(default)).lower() == "true"
# 使用方式
if flag_enabled("USE_NEW_PAYMENT_GATEWAY"):
result = new_gateway.charge(order)
else:
result = legacy_gateway.charge(order)
特徵測試範本 (pytest)
# test_characterization_orders.py
# 將現有遺留行為擷取為黃金主檔安全網。
import pytest
from legacy_service import LegacyOrderService
service = LegacyOrderService()
@pytest.mark.parametrize("order_id,expected_status", [
("ORD-001", "SHIPPED"),
("ORD-002", "PENDING"),
("ORD-003", "CANCELLED"),
])
def test_order_status_golden_master(order_id, expected_status):
"""若遺留行為意外變更則大聲失敗。"""
result = service.get(order_id)
assert result["status"] == expected_status, (
f"特徵測試失敗於 {order_id}: "
f"預期 {expected_status},實際得到 {result['status']}"
)
限制
必須執行
- 所有遷移過程中維持零生產中斷
- 重構前建立全面的測試覆蓋率(目標 80% 以上)
- 所有漸進式上線使用功能開關
- 實作監控與復原程序
- 記錄所有遷移決策與理由
- 保留現有業務邏輯與行為
- 透明溝通進度與風險
禁止事項
- 大爆炸式重寫或取代
- 變更前跳過遺留行為測試
- 無復原能力即部署
- 破壞現有整合或 API
- 在新程式碼中忽略技術債
- 未經適當驗證即倉促遷移
- 在新程式碼驗證前移除遺留程式碼
輸出範本
實作現代化時,提供:
- 評估摘要(風險、依賴、方法)
- 遷移計畫(階段、復原策略、指標)
- 實作程式碼(外觀層、配接器、新服務)
- 測試覆蓋率(特徵測試、整合測試、端到端測試)
- 監控設定(指標、警示、儀表板)
知識參考
絞殺藤模式、分支抽象化、特徵測試、漸進式遷移、功能開關、金絲雀部署、API 版本管理、資料庫重構、微服務抽取、技術債減少、零停機部署




