SDLC 軟體開發生命週期總覽

是什麼?

SDLC(Software Development Life Cycle,軟體開發生命週期)是一套描述「軟體從構想到下線」全過程的結構化框架。它把混沌的開發工作切成可管理、可交接、可量測的階段,讓團隊對「現在在哪、產出什麼、誰負責」有共同語言。

身為資深 C# 開發者,你可能已經在 Visual Studio 裡按過無數次 F5,但 SDLC 關注的不是某一行程式碼,而是「整個交付流程」。它的價值在於:

ℹ️SDLC 不等於某個方法論

SDLC 是「階段的抽象骨架」;Waterfall、Agile、Scrum 是「跑這套骨架的不同節奏與順序」。同一組階段,瀑布是一次走完,敏捷是每個衝刺都迷你地走一輪。別把 SDLC 跟某個特定流程畫上等號。

六大階段詳解

每個階段都有明確的「輸入 → 活動 → 產出 → 負責角色」。理解這四個面向,才能在任何專案中辨認自己身處哪一階段。

階段輸入主要活動產出物主要負責角色
1. 需求 Requirement商業目標、客戶痛點、市場調查訪談、釐清、優先排序、可行性評估需求規格(SRS)、User Story、驗收條件BA/PO、需求分析師
2. 設計 Design已確認的需求架構決策、資料模型、API 合約、UI 線框架構設計文件、ERD、介面規格、ADR架構師、技術主管、UX
3. 開發 Implementation設計文件、技術規格寫程式、Code Review、版本控制、單元測試原始碼、可建置的成品、單元測試開發工程師
4. 測試 Testing可測試的成品、測試計畫整合測試、系統測試、UAT、回歸測試測試報告、缺陷清單、通過的測試套件QA/測試工程師
5. 部署 Deployment通過測試的版本、發佈計畫環境佈署、CI/CD、設定管理、灰度發佈上線的系統、發佈說明、回滾方案DevOps、SRE
6. 維運 Maintenance線上系統、使用者回饋、監控告警修 Bug、效能調校、安全修補、小幅增強修正版本、監控儀表板、新需求維運團隊、開發、SRE

各階段的實務重點

需求階段:四個活動怎麼做

產出物(SRS、User Story、驗收條件)的完整內容與寫法,詳見本主題第 2 課《需求工程與 User Story》。

設計階段:四種產出物的內容與產出方式

產出物內容是什麼怎麼產出
架構設計文件元件、分層、部署拓樸、技術選型、跨切面策略常用 C4 模型(Context → Container → Component → Code 四層由粗到細)
ERD(實體關係圖)資料表、欄位、主鍵外鍵、表間關係從領域名詞抽實體 → 定關係 → 正規化(通常到 3NF)
介面規格API 端點、HTTP 動詞、請求/回應 schema、錯誤碼、認證OpenAPI/Swagger 寫成合約,前後端依此並行開發
ADR(架構決策紀錄)記錄「為什麼這樣決定」的一頁文件固定格式,存進 repo 的 docs/adr/

ADR 範本(每個重大決策一個檔案):

markdown
# ADR-007: 訂單查詢採用 Dapper 而非 EF Core
 
## Status
Accepted(2026-06)
 
## Context
訂單報表有大量複雜 SQL,EF Core 產生的查詢效能不佳且難調校。
 
## Decision
查詢路徑改用 Dapper 手寫 SQL;寫入路徑仍用 EF Core。
 
## Consequences
+ 報表查詢效能大幅提升、SQL 完全可控
- 團隊需同時維護兩套資料存取方式

ADR 是最被低估的工具:半年後有人問「為什麼這樣設計?」,ADR 就是答案,避免決策被反覆推翻。

設計階段常聽到的技術名詞

csharp
// 一段程式碼如何貫穿各階段的「可追溯性」示意
// 需求: US-142「使用者下單後應收到 Email 通知」
// 設計: 採用事件驅動,OrderPlaced 事件觸發通知服務
public sealed class OrderPlacedHandler : INotificationHandler<OrderPlaced>
{
    private readonly IEmailSender _email; // 設計階段定義的介面合約
 
    public OrderPlacedHandler(IEmailSender email) => _email = email;
 
    // 開發階段實作;測試階段對應 TC-142 驗收條件
    public async Task Handle(OrderPlaced e, CancellationToken ct)
    {
        await _email.SendAsync(e.CustomerEmail, "您的訂單已成立", ct);
    }
}

常見誤區

⚠️把 SDLC 當成只能線性走一次

最常見的誤解是「需求一旦定稿就不能改」。現實是需求會演化、市場會變、使用者用了才知道自己要什麼。把 SDLC 想成單行道,會讓團隊抗拒變更、累積技術債,最後做出沒人要的產品。

⚠️跳過或壓縮需求與設計階段

「先寫了再說」在 Demo 階段很爽,但需求模糊導致的返工,成本會在後期指數級放大。研究普遍指出:需求階段發現的缺陷修復成本約為 1 倍,設計階段約 5 倍,開發階段 10 倍,測試階段 15 倍以上,而上線後(維運階段)可高達 30 至 100 倍。愈晚發現,愈貴。

⚠️把測試當成開發完才開始的獨立關卡

測試若集中在尾端,會變成時程被擠壓時第一個被犧牲的環節。正確做法是「測試左移」:需求階段就寫驗收條件,開發階段就寫單元測試,讓品質內建而非事後檢查。

流程/步驟

下圖以循序方式呈現六大階段。請記得:在敏捷實務中,這六步是「每個衝刺迷你跑一輪」,而非整個專案只跑一次。

1

需求 Requirement

釐清商業目標與使用者需求,產出需求規格與驗收條件

2

設計 Design

做架構與資料模型決策,產出設計文件與介面合約

3

開發 Implementation

撰寫程式碼、Code Review、單元測試,產出可建置成品

4

測試 Testing

整合、系統、UAT、回歸測試,產出測試報告與缺陷清單

5

部署 Deployment

透過 CI/CD 佈署到正式環境,準備回滾方案

6

維運 Maintenance

監控、修補、調校,並蒐集回饋形成新需求

SDLC 模型比較

同一組階段,可以用不同節奏來跑。下表是四種經典模型的一句話精華:

模型一句話特性適用情境主要風險
Waterfall(瀑布)階段一次走完、嚴格前後相依,文件驅動需求極穩定、合規嚴格(如政府、醫療)後期才發現問題,返工昂貴
Iterative/Incremental(迭代漸進)分多輪交付,每輪都做完整六階段的一小塊需求大致清楚但可分批需要良好的版本與整合管理
Spiral(螺旋)每一圈都先做風險分析再開發,重風險控管大型、高風險、高成本專案流程重、成本高,小專案過度
Agile(敏捷)短週期迭代交付,擁抱變更,主流選擇需求多變、需快速回饋的產品開發缺紀律時易失控、文件不足

ℹ️如何選模型

判斷關鍵是「需求的穩定度」與「變更的成本」。需求愈穩定、變更愈昂貴(如嵌入式、合約制),愈偏向瀑布;需求愈多變、愈需要市場回饋,愈偏向敏捷。多數現代網路與企業應用團隊選擇敏捷(Scrum/Kanban),這也是面試最常被問到的方向。

架構圖/概念圖

下圖呈現 SDLC 的迭代循環本質:維運階段蒐集到的回饋與新需求,會重新流回需求階段,啟動下一輪循環。這正是「它不是一次走完的瀑布」的核心。

需求 Requirement
需求規格
設計 Design
設計文件
開發 Implementation
可建置成品
測試 Testing
通過版本
部署 Deployment
上線系統
維運 Maintenance

注意從「維運」回到「需求」那條邊:它把整個流程閉合成一個循環。每一次循環,產品都應該比上一輪更貼近使用者真正需要的東西。

實戰補充(Q&A)

Q:身為資深 C# 開發者,我每天都在寫程式(開發階段),為什麼還要懂整條 SDLC? A:因為你寫的程式碼會被前後階段牽動。需求沒講清楚,你寫得再漂亮也是白工;設計階段的架構決策,決定你之後是輕鬆擴充還是天天救火;不懂部署與維運,你會寫出在本機跑得很好、上線就爆炸的程式。理解全局,你才能在 Code Review 與設計討論中提出真正有價值的意見,也才是 Senior 跟 Junior 的差別。

Q:敏捷團隊還需要設計階段嗎?看起來大家都直接開衝刺? A:需要,但形式不同。敏捷不是「不設計」,而是「即時且足夠(Just Enough, Just In Time)的設計」。重大架構決策仍會用 ADR(Architecture Decision Record)記錄,只是不再寫幾百頁的前期設計文件,而是隨衝刺漸進演化。

Q:維運階段為什麼會「產出新需求」?感覺很反直覺。 A:因為使用者只有真正用了系統,才知道哪裡不順、還缺什麼。監控數據會揭露效能瓶頸,客服工單會揭露痛點,這些都會被整理成新的 User Story,重新進入需求階段。這就是 SDLC 是循環而非直線的最佳證明。

Q:DevOps、CI/CD 是不是取代了 SDLC? A:不是取代,是「加速並自動化」其中的部署與部分測試階段。SDLC 描述「做什麼階段」,DevOps 描述「如何讓這些階段流動得更快更可靠」。兩者是不同層次,互補而非互斥。

理解測驗

🤔 在 SDLC 中,缺陷在哪一個階段被發現時,修復成本通常最低?

🤔 關於 SDLC 的迭代本質,下列何者最正確?

🤔 某團隊開發一套需求極度穩定、且受嚴格法規約束的醫療設備韌體,變更成本非常高。最適合的 SDLC 模型最可能是?

重點整理

💡一句話記住

SDLC 是「需求→設計→開發→測試→部署→維運」六階段的循環骨架——愈早把事情想清楚愈便宜,而維運的回饋會餵出新需求,讓整個流程不斷迭代轉動,而不是一條走完就結束的直線。

重點一句話總結
六大階段需求 → 設計 → 開發 → 測試 → 部署 → 維運
核心心法它是循環,不是一次性瀑布
成本鐵律缺陷愈晚發現,修復成本愈貴(最高可達數十至上百倍)
模型選擇需求穩定選瀑布、需求多變選敏捷
維運真相最長、成本最高,且會源源不絕產出新需求
對開發者的意義懂全局,才能在設計與評審中提出有價值的判斷

你可能也想看

需求工程與 User Story

按 ← → 鍵切換課程