1968 年 NATO 會議首次提出「軟體工程」概念,針對:
軟體工程 = 將工程原理 (科學、數學、管理) 應用於軟體開發全生命週期,目標:高品質、可控成本、按時交付、可持續演進。
| 活動群 | 關鍵任務 | 產出物 |
|---|---|---|
| 需求工程 | 問題分析 → 需求獲取 → 需求分析 → 需求規格 (SRS) → 需求驗證 | SRS、用例圖、原型、驗收標準 |
| 設計 | 架構設計 (概要) → 詳細設計 (類別、介面、資料、演算法) → 設計評審 | ADD (架構設計描述)、DDD (詳細設計)、介面控制文件 (ICD) |
| 實現/編碼 | 程式碼撰寫 → 靜態分析 → 單元測試 → 程式碼審查 → 持續整合 | 原始碼、單元測試報告、靜態分析報告、建構制品 |
| 驗證與確認 (V&V) | 整合測試 → 系統測試 → 驗收測試 (UAT) → 回歸測試 → 性能/安全測試 | 測試計劃/報告、缺陷報告、測試追溯矩陣 (RTM) |
| 維護 | 修正性 (修 Bug) → 適應性 (環境變化) → 完善性 (增功能) → 預防性 (重構/技術債償還) | 變更請求 (CR)、發布說明、遷移指南、技術債務登記 |
| 支援過程 | 配置管理 (版本/基線/發布) → 品質保證 (QA) → 專案管理 (計劃/追蹤/風險) → 文檔管理 → 過程改進 (CMMI/ISO/IEC 12207) | CM 計劃、審計報告、專案儀表板、過程資產庫 |
| 經典原則 | 現代工程實踐 | 工具/標準 |
|---|---|---|
| 模組化 / 高內聚低耦合 | 微服務架構、模組化單體、Clean Architecture、Hexagonal Architecture | Spring Boot、.NET Core、Go kit、Docker、Kubernetes |
| 資訊隱藏 / 介面契約 | API First、OpenAPI/Swagger、gRPC Protobuf、GraphQL Schema | Postman、Stoplight、Buf、Spectral |
| 漸進式精化 / 迭代增量 | 敏捷開發 (Scrum/Kanban)、雙週 Sprint、MVP (最小可行產品) | Jira、Azure Boards、GitLab、GitHub Projects |
| 驗證與確認 (V&V) | 測試金字塔 (單元/整合/契約/E2E)、契約測試、混沌工程 | JUnit/TestNG、pytest、Cypress、Playwright、Pact、Gremlin |
| 配置管理 / 版本控制 | Git (Trunk-Based / GitFlow)、語義化版本、Conventional Commits | GitHub/GitLab/Bitbucket、Dependabot、Renovate |
| 度量與改進 | DORA 四大指標 (部署頻率、前置時間、變更失敗率、恢復時間)、SPC、價值流圖 | Prometheus/Grafana、Datadog、LinearB、Haystack |
結語:軟體工程是應對複雜性、不確定性、變更性的系統性學科。從 1968 年危機應對到今日 DevOps/平台工程/內建品質,核心精神不變:用科學方法建構可信賴的軟體系統。每位開發者、架構師、管理者,都是這門工程的實踐者與傳承者。