dramaling-app/docs/development/development-workflow.md

796 lines
19 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.

# 開發工作流程
## 概述
建立標準化的開發工作流程,確保團隊協作效率、代碼品質和專案進度控制。
## 敏捷開發框架
### Scrum工作模式
- [ ] **Sprint週期**: 2週一個Sprint
- [ ] **團隊組成**: Product Owner + Scrum Master + 開發團隊
- [ ] **儀式會議**: 每日站會、Sprint計劃、檢討會、回顧會
- [ ] **產出物**: Product Backlog、Sprint Backlog、增量產品
- [ ] **透明度**: 燃盡圖、累積流量圖、速度追蹤
### Sprint工作流程
#### Sprint計劃會議 (每2週一次)
```markdown
## Sprint計劃會議議程 (4小時)
### 第一部分: 什麼要做 (2小時)
- [ ] 檢視Product Backlog優先級
- [ ] 確認Sprint目標和成功標準
- [ ] 選擇要完成的User Stories
- [ ] 確認Definition of Done
### 第二部分: 如何做 (2小時)
- [ ] 將User Stories分解為具體任務
- [ ] 估算任務時間和複雜度
- [ ] 識別依賴關係和風險
- [ ] 確認團隊容量和可用性
### 產出物
- Sprint Backlog
- Sprint目標聲明
- 風險和依賴關係清單
```
#### 每日站會 (15分鐘)
```markdown
## 每日站會格式
每位團隊成員回答三個問題:
1. **昨天完成了什麼?**
- 完成的任務和達成的目標
2. **今天計劃做什麼?**
- 優先處理的任務和預期產出
3. **遇到什麼障礙?**
- 需要協助的技術問題
- 依賴關係阻礙
- 資源不足等問題
## 會後處理
- Scrum Master記錄和跟進障礙排除
- 必要時安排專門討論會議
- 更新燃盡圖和任務狀態
```
## 開發流程管理
### 任務管理系統
#### Jira/Linear工作流程
```yaml
# 故事狀態流程
story_workflow:
- backlog: "產品待辦清單"
- ready: "準備開發 (需求明確、設計完成)"
- in_progress: "開發中"
- code_review: "代碼審查中"
- qa_testing: "QA測試中"
- staging: "Staging環境驗證"
- done: "完成並部署到生產環境"
# 任務優先級
priority_levels:
- critical: "Critical (系統故障、安全問題)"
- high: "High (核心功能、用戶影響大)"
- medium: "Medium (重要功能、效能優化)"
- low: "Low (UI改進、技術債務)"
```
#### User Story撰寫標準
```markdown
## User Story模板
**作為** [角色]
**我希望** [功能/目標]
**以便** [商業價值/原因]
### 接受條件
- [ ] 條件1: 明確的可測試條件
- [ ] 條件2: 邊界條件和錯誤處理
- [ ] 條件3: 效能或安全要求
### 定義完成 (Definition of Done)
- [ ] 功能按接受條件實現
- [ ] 單元測試覆蓋率 >= 80%
- [ ] 代碼審查通過
- [ ] QA測試通過
- [ ] 文檔更新完成
### 技術任務
- [ ] 任務1: API端點開發
- [ ] 任務2: 前端UI實現
- [ ] 任務3: 資料庫遷移
- [ ] 任務4: 測試用例編寫
### 估算
- 故事點數: 5 (基於斐波納契數列: 1,2,3,5,8,13)
- 預估小時數: 16-20小時
```
### 版本控制工作流程
#### Git分支策略
```mermaid
graph LR
A[main] --> B[develop]
B --> C[feature/JIRA-123]
B --> D[feature/JIRA-124]
C --> B
D --> B
B --> E[release/v1.2.0]
E --> A
A --> F[hotfix/critical-bug]
F --> A
F --> B
```
#### 分支管理規則
```bash
# ✅ 分支命名規範
main # 生產環境代碼,永遠可部署
develop # 開發整合分支,最新開發進度
feature/JIRA-123-user-login # 功能開發分支
hotfix/fix-payment-issue # 緊急修復分支
release/v1.2.0 # 發布準備分支
# ✅ 功能開發流程
# 1. 從develop創建feature分支
git checkout develop
git pull origin develop
git checkout -b feature/JIRA-123-dialogue-analysis
# 2. 開發過程中定期提交
git add .
git commit -m "feat(dialogue): implement scoring algorithm"
# 3. 開發完成推送並創建PR
git push origin feature/JIRA-123-dialogue-analysis
# 在GitHub/GitLab創建Pull Request到develop
# 4. Code Review通過後合併
git checkout develop
git pull origin develop
git branch -d feature/JIRA-123-dialogue-analysis
```
### Code Review流程
#### PR創建清單
```markdown
## Pull Request Template
### 變更摘要
簡短描述這個PR的主要變更和目的
### 相關票證
- 修復 #123
- 關閉 JIRA-456
### 變更類型
- [ ] 🚀 新功能 (feature)
- [ ] 🐛 Bug修復 (fix)
- [ ] 📝 文檔更新 (docs)
- [ ] 💄 UI/樣式變更 (style)
- [ ] ♻️ 代碼重構 (refactor)
- [ ] ⚡ 效能優化 (performance)
- [ ] ✅ 測試相關 (test)
- [ ] 🔧 建構/工具變更 (chore)
### 測試
- [ ] 已新增/更新單元測試
- [ ] 已新增/更新整合測試
- [ ] 手動測試已完成
- [ ] 回歸測試已通過
### 檢查清單
- [ ] 代碼遵循團隊規範
- [ ] 自我審查已完成
- [ ] 相關文檔已更新
- [ ] 不會破壞現有功能
```
#### Review要求和流程
```yaml
review_requirements:
minimum_reviewers: 2
required_reviewers:
- tech_lead: "技術負責人 (必須)"
- domain_expert: "相關領域專家 (建議)"
review_criteria:
- functionality: "功能正確性"
- code_quality: "代碼品質和可讀性"
- performance: "效能影響評估"
- security: "安全性檢查"
- testing: "測試覆蓋度"
- documentation: "文檔完整性"
approval_process:
- all_required_approved: true
- ci_checks_passed: true
- conflicts_resolved: true
- final_review_by_tech_lead: true
```
## 品質保證流程
### 自動化測試管道
#### CI/CD Pipeline
```yaml
# .github/workflows/ci.yml
name: Continuous Integration
on:
push:
branches: [ develop, main ]
pull_request:
branches: [ develop ]
jobs:
# 代碼品質檢查
code-quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint check
run: npm run lint
- name: Type check
run: npm run type-check
- name: Format check
run: npm run format:check
# 單元測試和覆蓋率
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run unit tests
run: npm run test:coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
# 整合測試
integration-tests:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run database migrations
run: npm run db:migrate
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test
- name: Run integration tests
run: npm run test:integration
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test
# 建構測試
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build application
run: npm run build
- name: Test build artifacts
run: |
ls -la dist/
node dist/server.js --version
```
### 部署流程
#### Staging部署
```yaml
# 自動部署到Staging環境
staging_deployment:
trigger: "push到develop分支"
steps:
- code_quality_check: "代碼品質檢查通過"
- automated_tests: "所有測試通過"
- build_artifacts: "建構產物生成"
- deploy_to_staging: "部署到Staging環境"
- smoke_tests: "基本功能煙霧測試"
- notification: "通知團隊部署完成"
rollback_conditions:
- smoke_tests_fail: "煙霧測試失敗"
- health_check_fail: "健康檢查失敗"
- error_rate_high: "錯誤率過高"
```
#### Production部署
```yaml
production_deployment:
trigger: "手動觸發或release分支創建"
approval_process:
- qa_sign_off: "QA測試通過確認"
- product_approval: "產品經理批准"
- tech_lead_approval: "技術負責人批准"
deployment_steps:
- pre_deployment_checks: "部署前檢查"
- database_migration: "資料庫遷移 (如需要)"
- blue_green_deployment: "藍綠部署策略"
- health_checks: "健康檢查和監控"
- gradual_traffic_shift: "流量逐漸切換"
- post_deployment_validation: "部署後驗證"
rollback_strategy:
- automatic_rollback_triggers: "自動回滾觸發條件"
- manual_rollback_procedure: "手動回滾程序"
- data_recovery_plan: "資料恢復計劃"
```
## 專案管理工具
### 開發工具整合
#### 必要工具清單
```yaml
project_management:
- tool: "Jira / Linear"
purpose: "需求管理、Sprint規劃、進度追蹤"
- tool: "Confluence / Notion"
purpose: "文檔管理、知識庫、會議記錄"
- tool: "Slack / Microsoft Teams"
purpose: "即時通訊、團隊協作、通知整合"
version_control:
- tool: "GitHub / GitLab"
purpose: "代碼託管、Code Review、CI/CD"
- tool: "Git"
purpose: "版本控制、分支管理"
development:
- tool: "VS Code"
purpose: "統一開發環境、擴展套件"
- tool: "Docker"
purpose: "容器化開發環境"
- tool: "Postman"
purpose: "API測試和文檔"
monitoring:
- tool: "Sentry"
purpose: "錯誤監控和追蹤"
- tool: "DataDog / New Relic"
purpose: "效能監控和分析"
- tool: "LogRocket"
purpose: "前端用戶行為分析"
```
#### 工具整合配置
```json
{
"jira_integration": {
"commit_message_format": "JIRA-123: commit message",
"branch_naming": "feature/JIRA-123-description",
"pr_title_format": "[JIRA-123] PR title",
"auto_transition": "commit觸發狀態轉換"
},
"slack_notifications": {
"pr_created": "#dev-team",
"pr_approved": "#dev-team",
"deployment_success": "#general",
"build_failure": "#dev-alerts",
"critical_errors": "#dev-alerts"
},
"monitoring_alerts": {
"error_rate_threshold": "5% in 5 minutes",
"response_time_threshold": "500ms average",
"downtime_alert": "immediate",
"deployment_monitoring": "30 minutes post-deploy"
}
}
```
### 會議和溝通規範
#### 定期會議安排
```markdown
## 團隊會議時程表
### 每日會議
- **每日站會**: 早上 9:30-9:45 (15分鐘)
- 地點: 會議室 / Zoom
- 參與者: 全體開發團隊
- 目的: 同步進度、識別障礙
### 週會議
- **技術分享會**: 週五 15:00-16:00 (1小時)
- 地點: 會議室
- 參與者: 技術團隊
- 目的: 技術交流、最佳實踐分享
### 雙週會議
- **Sprint計劃會**: Sprint開始第一天 9:00-13:00 (4小時)
- **Sprint檢討會**: Sprint最後一天 14:00-15:00 (1小時)
- **Sprint回顧會**: Sprint最後一天 15:00-16:00 (1小時)
### 月會議
- **架構審查會**: 每月第一個週三 14:00-16:00 (2小時)
- **產品路線圖會**: 每月最後一個週五 10:00-12:00 (2小時)
```
#### 有效會議原則
```markdown
## 會議最佳實踐
### 會議前準備
- [ ] 明確會議目的和議程
- [ ] 提前分享相關資料
- [ ] 確認必要參與者
- [ ] 準備會議室和設備
### 會議進行
- [ ] 準時開始和結束
- [ ] 專注議程不偏題
- [ ] 記錄決議和行動項目
- [ ] 確保每個人都有發言機會
### 會議後續
- [ ] 24小時內分享會議記錄
- [ ] 追蹤行動項目執行
- [ ] 更新相關文檔和票證
- [ ] 安排必要的後續會議
```
## 知識管理和文檔
### 技術文檔管理
#### 文檔類型和負責人
```yaml
documentation_types:
api_documentation:
owner: "後端開發負責人"
tools: "Swagger/OpenAPI, Postman"
update_frequency: "每個Sprint"
architecture_documentation:
owner: "技術架構師"
tools: "Confluence/Notion, Draw.io"
update_frequency: "重大變更時"
user_guides:
owner: "產品經理"
tools: "Confluence/Notion"
update_frequency: "功能發布時"
runbooks:
owner: "DevOps工程師"
tools: "Confluence/Notion"
update_frequency: "部署流程變更時"
```
#### 文檔審查和維護
```markdown
## 文檔生命週期管理
### 創建階段
- [ ] 確定文檔類型和模板
- [ ] 指派文檔負責人
- [ ] 設定審查時程
- [ ] 建立版本控制
### 審查階段
- [ ] 技術準確性審查
- [ ] 可讀性和結構檢查
- [ ] 範例和代碼驗證
- [ ] 相關人員簽字確認
### 維護階段
- [ ] 定期內容更新
- [ ] 過時資訊清理
- [ ] 用戶回饋整合
- [ ] 存取權限管理
### 退役階段
- [ ] 標記過時文檔
- [ ] 建立重導向連結
- [ ] 通知相關使用者
- [ ] 歸檔或刪除處理
```
### 知識分享機制
#### 技術分享會規劃
```markdown
## 月度技術分享主題
### 技術深度分享
- React Native效能優化技巧
- PostgreSQL查詢最佳化實戰
- OpenAI API整合經驗分享
- AWS服務架構設計心得
### 工具和流程分享
- Git工作流程最佳實踐
- 自動化測試策略分享
- 代碼審查技巧和心得
- 監控和告警系統應用
### 外部學習分享
- 技術會議參與心得
- 線上課程學習成果
- 開源專案貢獻經驗
- 行業趨勢和新技術調研
```
## 風險管理和應變
### 常見風險識別
#### 技術風險管控
```yaml
technical_risks:
dependency_vulnerabilities:
monitoring: "Dependabot自動掃描"
response_time: "24小時內評估"
mitigation: "立即更新或尋找替代方案"
performance_degradation:
monitoring: "持續效能監控"
threshold: "API回應時間 > 500ms"
response: "自動告警 + 立即調查"
third_party_service_outage:
monitoring: "服務健康檢查"
backup_plan: "降級模式或替代服務"
communication: "用戶通知和狀態頁面更新"
data_security_breach:
monitoring: "安全性掃描和審計"
response_plan: "安全事件回應流程"
recovery: "資料恢復和系統加固"
```
#### 專案風險應對
```yaml
project_risks:
timeline_delays:
early_warning: "Sprint燃盡圖異常"
response: "資源重新分配或範圍調整"
escalation: "每週向管理層報告"
team_capacity_shortage:
monitoring: "團隊工作負載追蹤"
response: "外包支援或功能優先級調整"
prevention: "提前識別關鍵技能需求"
quality_issues:
monitoring: "代碼品質指標和用戶回饋"
response: "增加測試投入或重構計劃"
prevention: "強化代碼審查和自動化測試"
```
### 緊急事件處理
#### 事件等級分類
```markdown
## 事件嚴重程度分級
### P0 - 緊急 (Critical)
- 描述: 服務完全中斷,影響所有用戶
- 回應時間: 15分鐘內
- 解決時間: 1小時內
- 升級: 立即通知管理層
- 範例: 主要服務完全無法存取
### P1 - 高 (High)
- 描述: 重要功能故障,影響大量用戶
- 回應時間: 30分鐘內
- 解決時間: 4小時內
- 升級: 2小時後升級
- 範例: 支付系統故障
### P2 - 中 (Medium)
- 描述: 部分功能異常,影響部分用戶
- 回應時間: 2小時內
- 解決時間: 24小時內
- 升級: 標準工作時間處理
- 範例: 特定功能性能下降
### P3 - 低 (Low)
- 描述: 輕微問題,不影響核心功能
- 回應時間: 24小時內
- 解決時間: 一週內
- 升級: 正常開發週期處理
- 範例: UI顯示小問題
```
#### 事件處理流程
```mermaid
flowchart TD
A[事件發生] --> B[事件檢測/報告]
B --> C[事件分級]
C --> D[組建事件響應團隊]
D --> E[初步診斷和評估]
E --> F[實施緊急修復]
F --> G[驗證修復效果]
G --> H{問題是否解決?}
H -->|否| I[深入調查]
I --> F
H -->|是| J[事件關閉]
J --> K[事後檢討會議]
K --> L[改進措施實施]
```
---
## 持續改進機制
### 團隊回顧和改進
#### Sprint回顧會模板
```markdown
## Sprint回顧會議 (Retrospective)
### 會議資訊
- Sprint: Sprint #12
- 日期: 2024年9月5日
- 參與者: 全體開發團隊
- 主持人: Scrum Master
### 回顧內容
#### 做得好的方面 (Keep)
- [ ] 項目1: 代碼審查品質提升bug減少30%
- [ ] 項目2: 團隊溝通更順暢,每日站會效率提升
- [ ] 項目3: 自動化測試覆蓋率達到85%
#### 需要改進的方面 (Problem)
- [ ] 問題1: API文檔更新不及時影響前端開發
- [ ] 問題2: 測試環境不穩定影響QA測試進度
- [ ] 問題3: 技術債務積累,需要專門時間清理
#### 改進行動項目 (Try)
- [ ] 行動1: 建立API文檔自動生成流程 (負責人: 後端Lead)
- [ ] 行動2: 升級測試環境硬體配置 (負責人: DevOps)
- [ ] 行動3: 每Sprint分配20%時間處理技術債務 (負責人: 技術Lead)
### 下次檢查
下個Sprint回顧會檢查改進行動的執行情況
```
### 指標追蹤和改善
#### 開發效率指標
```yaml
development_metrics:
velocity_tracking:
measurement: "每Sprint完成的故事點數"
target: "穩定在35-45點之間"
trend: "應該保持穩定或略有增長"
cycle_time:
measurement: "從開發開始到部署完成的時間"
target: "平均5天以內"
trend: "持續降低"
defect_rate:
measurement: "生產環境發現的bug數量"
target: "每Sprint < 3個"
trend: "持續降低"
code_quality:
test_coverage: "> 80%"
code_review_participation: "100%"
technical_debt_ratio: "< 5%"
```
#### 改進策略制定
```markdown
## 持續改進策略
### 月度改進檢討
- [ ] 收集和分析開發效率指標
- [ ] 識別瓶頸和改進機會
- [ ] 制定具體改進行動計劃
- [ ] 分配責任人和時間表
### 季度技術回顧
- [ ] 評估技術架構和工具選擇
- [ ] 檢討開發流程和最佳實踐
- [ ] 規劃技術升級和創新項目
- [ ] 團隊技能發展規劃
### 年度流程優化
- [ ] 全面檢視開發工作流程
- [ ] 對比行業最佳實踐
- [ ] 制定下年度改進路線圖
- [ ] 投資新工具和技術培訓
```
---
## 待完成任務
### 立即執行
1. [ ] 設置專案管理工具 (Jira/Linear) 和工作流程
2. [ ] 建立Git分支策略和保護規則
3. [ ] 設置CI/CD pipeline基礎架構
4. [ ] 制定代碼審查模板和檢查清單
### 短期目標 (2週內)
1. [ ] 完成開發環境標準化設置
2. [ ] 建立自動化測試框架
3. [ ] 設置監控和告警系統
4. [ ] 制定文檔管理規範
### 中期目標 (1個月內)
1. [ ] 建立完整的部署自動化流程
2. [ ] 設置效能和品質指標監控
3. [ ] 建立知識分享和培訓機制
4. [ ] 制定事件回應和處理流程
---
**最後更新**: 2024年9月5日
**負責人**: Scrum Master / 技術Lead
**下次檢討**: 每月月末進行流程檢討和優化