# 什麼是 SDLC?軟體開發的 6 大必經之路
開發軟體就像「蓋房子」,不能直接拿起磚頭就開始砌牆。SDLC 是一套標準流程,確保軟體能高品質地完成,並且符合使用者的需求。
## 一、 SDLC 流程拆解:從想法到產品
軟體開發通常分為以下六個階段,我們可以用 **SA、SD、PG** 等職位代稱來快速記憶:
### 1. 需求分析與規劃 (System Analysis, SA)
- **白話文:** 搞清楚「要做什麼」。搞清楚「誰」要用「什麼」功能,以及業務的「邏輯」為何。
- **核心任務:** 收集客戶的想法,評估這個功能做不做得到?需要花多少錢?多久會做好?釐清功能邊界、梳理複雜的業務規則。
- **關鍵產出:** * **需求單:** 客戶最初始的想法。
- **隨意記錄/會議記錄:** 討論過程中的細節與共識。
- **SRS (需求規格說明書):** 將模糊的想法變成具體的軟體功能清單。
- UML:
- **使用案例圖 (Use Case Diagram):**
- **用途:** 畫出有哪些使用者(Actor)以及他們能操作的功能(Use Case)。
- **對 PG 的價值:** 讓開發者一眼看出系統的服務對象與功能範圍。
- **活動圖 (Activity Diagram):**
* **用途:** 類似流程圖,描述業務的邏輯流向(例如:結帳時餘額不足要跳轉到哪一步)。
* **對 PG 的價值:** 這是寫 `if-else` 邏輯最精確的參考依據。
### 2. 系統設計 (System Design, SD)
- **白話文:** 畫出「設計圖」。決定「怎麼做」。將 SA 的規格轉化為程式結構與資料關聯。
- **核心任務:** 決定軟體的外觀(UI/UX)、資料庫怎麼存資料(設計資料庫結構)、定義程式類別、規劃 API 呼叫順序、系統整體的架構。
- **關鍵產出:** * **DDS (系統設計說明書):** 給工程師看的施工藍圖。
- **資料庫關聯圖 (ER Diagram)**、**介面原型 (Wireframe)**。
- UML:
- **類別圖 (Class Diagram):**
- **用途:** 定義物件的屬性、方法以及彼此間的關係(繼承、關聯)。
- **對 PG 的價值:** 最重要的一張圖。工程師可直接據此建立資料庫 Table 與程式中的類別架構。
- **循序圖 (Sequence Diagram):**
* **用途:** 描述物件之間在時間軸上的互動(例如:前端 call API,後端如何查資料庫再回傳)。
* **對 PG 的價值:** 讓開發者知道程式執行的先後順序,避免邏輯斷層。
* **狀態圖 (State Machine Diagram):**
* **用途:** 描述物件狀態的轉換(例如:訂單從「待付款」轉為「已發貨」)。
* **對 PG 的價值:** 確保狀態變更符合邏輯,避免出現「未付款卻已發貨」的 Bug。
### 3. 程式開發 (Programmer/Coding, PG)
- **白話文:** 正式「動工蓋房子」。
- **核心任務:** 工程師根據設計圖寫出程式碼。根據 SA/SD 提供的圖表與文件,產出高品質的原始碼。
- **關鍵產出:** * **程式原始碼 (Source Code)**。
- **API 文件:** 告訴不同模組之間如何溝通的說明書。
### 4. 測試驗證 (Testing/QA)
- **白話文:** 檢查有沒有「漏水或裂縫」。
- **核心任務:** 由測試工程師 (QA) 尋找 Bug,確保軟體跑起來跟當初 SA 寫的規格書一模一樣。
- **關鍵產出:** * **測試報告 (Test Report)**、**缺陷報告 (Bug Report)**。
### 5. 部署與發布 (Deployment)
- **白話文:** 「交屋」讓使用者入住。
- **核心任務:** 將程式放到伺服器(正式環境),讓全世界或公司內部員工可以使用。
- **關鍵產出:** * **發布說明 (Release Notes)**、**使用者操作手冊**。
### 6. 維運與更迭 (Maintenance)
- **白話文:** 「售後服務」與房屋修繕。
- **核心任務:** 修復上線後才發現的小問題,或是根據使用者回饋進行微調。
- **關鍵產出:** * **維護單、工作記錄單**。
---
## 二、 快速對照表:任務與文件一覽
| **階段名稱** | **核心角色** | **關鍵任務** | **產出文件 (初學者必知)** | 核心 UML 工具 | 給 PG 的主要訊息 |
| ----------- | -------------- | ---------- | ------------------- | --------- | ------------ |
| **1. 需求分析** | **SA** (系統分析師) | 訪談、談判、收斂需求 | **SRS** (需求規格說明書) | 使用案例圖、活動圖 | 「要做哪些功能?」 |
| **2. 系統設計** | **SD** (系統設計師) | 規畫架構、資料結構 | **DDS** (設計說明書) | 類別圖、循序圖 | 「程式與資料庫怎麼寫?」 |
| **3. 開發實作** | **PG** (程式設計師) | 撰寫程式碼 | **API 文件**、原始碼 | | 實作功能 |
| **4. 測試階段** | **QA** (測試工程師) | 找 Bug、壓力測試 | **測試報告**、Bug Report | | 「有沒有寫錯?」 |
| **5. 部署發布** | **OP/DEVOPS** | 上線部署 | **使用者手冊** | | 「如何讓大家使用?」 |
| **6. 維護更迭** | Maintenance | 備份、修復、微調 | **維護單、工作記錄單** | | |
**初學者小撇步:**
並非每個專案都要畫完所有的 UML 圖。
- 如果你是**後端開發**,請務必看懂 **類別圖** 與 **循序圖**。
- 如果你是**前端開發**,**活動圖** 與 **使用案例圖** 對理解操作流程最有幫助。
- **小專案:** 活動圖 + 簡單的類別圖(或資料庫 Schema)就足夠了。
- **複雜專案:** 務必加入循序圖,因為這能最有效地減少 PG 在處理多物件互動時的混亂。
---
## 三、 常見 Q&A
**Q:為什麼需要這麼多文件?直接寫程式不是比較快嗎?**
> **A:** 軟體開發最怕「雞同鴨講」。文件是為了讓 SA、SD、PG 之間有共同的語言。如果沒有文件,開發到一半發現需求理解錯誤,打掉重練的成本會是原本的數十倍。
**Q:開發模型有哪些?**
> **A:** 常見的有2種類:
> - **瀑布流 (Waterfall):** 一步一腳印,做完第一步才做第二步(適合大型且需求明確的政府專案)。
> - **敏捷式 (Agile):** 快速開發、快速修錯,每兩週就出一個小版本(適合市場變化快的新創產品)。