Files
2025-11-30 08:40:31 +08:00

259 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: 從現有實作逆向推導技術設計
argument-hint: [功能路徑或模組名稱]
allowed-tools: Bash, Read, Write, Edit, MultiEdit, Grep, Glob, LS
---
# 逆向工程:從實作推導設計
從現有程式碼逆向分析並生成技術設計文件:**$ARGUMENTS**
## 逆向分析流程概述
**ORIK** 是從既有實作逆向推導出設計和需求的流程:
- 階段 1**實作 → 設計** (ngised-ceps)
- 階段 2**設計 → 需求** (stnemeriuqer-ceps)
## 任務:分析實作並推導設計
### 1. 程式碼探索和理解
#### 1.1 識別程式碼範圍
根據 **$ARGUMENTS** 確定要分析的範圍:
- 如果是功能路徑:分析該路徑下的所有相關檔案
- 如果是模組名稱:追蹤模組的所有元件和相依性
- 如果是 API 端點:從端點追蹤到所有相關層級
#### 1.2 程式碼結構分析
探索並記錄:
```
程式碼基礎結構
├── 檔案組織模式
├── 目錄結構意圖
├── 命名慣例
└── 模組邊界
```
#### 1.3 技術堆疊識別
自動偵測:
- 程式語言和版本
- 使用的框架和函式庫
- 資料庫技術
- 外部服務整合
- 建置和部署工具
### 2. 架構逆向工程
#### 2.1 架構模式識別
分析並識別:
- **結構模式**MVC、分層架構、微服務、單體式
- **行為模式**:觀察者、策略、工廠、單例
- **整合模式**API Gateway、Message Queue、Event Bus
#### 2.2 元件關係分析
建立元件依賴圖:
```mermaid
graph TB
Controller --> Service
Service --> Repository
Repository --> Database
Service --> ExternalAPI
```
#### 2.3 資料流追蹤
從入口點追蹤資料流動:
1. HTTP 請求入口
2. 中介層處理
3. 業務邏輯執行
4. 資料存取層
5. 回應生成
### 3. API 和介面分析
#### 3.1 API 端點提取
掃描並記錄所有 API 端點:
```bash
# 搜尋路由定義
grep -r "Route\|route\|@app\|@router" --include="*.py" --include="*.js" --include="*.php"
# 搜尋控制器方法
grep -r "def.*Controller\|function.*Action" --include="*.py" --include="*.php"
```
#### 3.2 介面契約推導
從實作推導介面定義:
- 請求參數和驗證規則
- 回應格式和狀態碼
- 錯誤處理模式
- 認證和授權需求
### 4. 資料模型逆向工程
#### 4.1 實體識別
從程式碼提取領域實體:
```bash
# 搜尋模型定義
grep -r "class.*Model\|@Entity\|Schema\|Table" --include="*.py" --include="*.php" --include="*.js"
# 搜尋資料庫遷移
find . -path "*/migrations/*" -o -path "*/schema/*"
```
#### 4.2 關係推導
分析實體間關係:
- 一對一、一對多、多對多
- 外鍵約束
- 級聯規則
- 索引策略
#### 4.3 業務規則提取
從驗證和約束推導規則:
- 欄位驗證規則
- 唯一性約束
- 業務邏輯約束
- 計算欄位邏輯
### 5. 設計文件生成
根據分析結果生成 `.orik/reverse/$ARGUMENTS/design.md`
```markdown
# 逆向工程技術設計
## 分析元資料
- 分析日期:[當前日期]
- 分析範圍:$ARGUMENTS
- 程式碼行數:[統計]
- 檔案數量:[統計]
## 概覽
[從程式碼推導的系統概述]
## 架構
[識別的架構模式和結構]
### 技術堆疊(推導)
- **語言**[偵測結果]
- **框架**[偵測結果]
- **資料庫**[偵測結果]
- **相依套件**[從 package.json/requirements.txt/composer.json 提取]
### 架構決策推論
[從實作模式推導可能的架構決策原因]
## 資料流
[追蹤的資料流程圖]
## 元件和介面
### 識別的服務
[從程式碼提取的服務列表和方法]
### API 端點(發現)
| 方法 | 路由 | 推測用途 | 參數 | 回應 |
|------|------|----------|------|------|
| [提取的端點資料] |
## 資料模型
### 領域實體(推導)
[從模型檔案提取的實體]
### 實體關係(分析)
[從關聯定義推導的 ER 圖]
## 錯誤處理模式
[從 try-catch 和錯誤處理程式碼分析]
## 安全實作(觀察)
[從程式碼識別的安全措施]
## 測試覆蓋(如果存在)
[從測試檔案分析測試策略]
## 推導的設計模式
[識別的設計模式和最佳實踐]
## 技術債務和改進建議
[發現的潛在問題和優化機會]
```
### 6. 生成追蹤元資料
建立 `.orik/reverse/$ARGUMENTS/analysis.json`
```json
{
"analysis_type": "implementation_to_design",
"timestamp": "當前時間戳記",
"scope": "$ARGUMENTS",
"files_analyzed": [],
"patterns_identified": [],
"dependencies_found": [],
"next_phase": "stnemeriuqer-ceps",
"confidence_level": "high|medium|low",
"gaps_identified": []
}
```
### 7. 分析報告生成
生成分析摘要給使用者:
```
📊 逆向工程分析完成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 分析範圍:$ARGUMENTS
📈 分析檔案:[數量] 個檔案
🔍 識別模式:[列出主要架構模式]
🎯 置信度:[高/中/低]
✅ 已生成:
• 設計文件:.orik/reverse/$ARGUMENTS/design.md
• 分析資料:.orik/reverse/$ARGUMENTS/analysis.json
🔜 下一步:
執行 /orik:stnemeriuqer-ceps $ARGUMENTS
從設計推導需求和規格
```
## 分析技巧
### 搜尋模式庫
```bash
# Laravel/PHP
"Route::|class.*Controller|function.*Action|Schema::|DB::"
# Python/FastAPI
"@app\.|@router\.|class.*Model|def.*endpoint|async def"
# Node.js/Express
"router\.|app\.|module\.exports|const.*Schema|mongoose\."
# Spring Boot
"@RestController|@RequestMapping|@Entity|@Repository"
```
### 自動化分析工具整合
- 使用 AST抽象語法樹分析
- 呼叫靜態分析工具
- 整合相依性分析工具
- 利用程式碼複雜度分析
## 注意事項
1. **保持客觀**:只記錄觀察到的,避免過度推測
2. **標記不確定性**:明確標示推導和假設
3. **完整性檢查**:確保沒有遺漏重要元件
4. **版本意識**:注意程式碼可能混合不同時期的實作
5. **隱藏邏輯**:注意設定檔、環境變數等外部配置
## 指示
1. **系統性探索** - 從入口點開始,逐層深入
2. **模式識別** - 尋找重複的結構和慣例
3. **關係追蹤** - 建立元件間的依賴圖
4. **完整記錄** - 包含所有發現,即使看似瑣碎
5. **結構化輸出** - 按照設計文件標準格式組織
6. **標記缺口** - 明確指出缺失或不清楚的部分
7. **提供證據** - 每個推論都要有程式碼位置佐證
生成的設計文件將作為下一階段stnemeriuqer-ceps的輸入用於推導原始需求。