2.1 需求的本質:從模糊意圖到精確規格#
AI 時代最大的誤區#
許多人以為,有了 AI 就不需要做需求分析了。這個誤區很危險,值得在第一節就戳破。
事實是:AI 不懂人類社會的真實痛點、商業目標與組織政治。 AI 是邏輯與語法極強的「執行者」,但它沒有真實的使用者體驗,更無法替商業決策承擔責任。
回顧 1.4 節的結論——AI 無法消滅「需求的模糊性」這本質性困難。因此,需求分析(Requirements Analysis)非但不會消失,反而成為人類工程師最重要的價值所在。 本書第一章指出,工程師的核心能力之一是「定義問題」,這正是需求工程的核心。
需求:軟體工程的起點#
需求(Requirements)是「系統應該做什麼」的描述。它是整個軟體工程的輸入——如果輸入是錯的,後面所有設計、實作、測試都建立在錯誤的基礎上,成本會隨著時間指數膨脹(見 6 章)。
但「需求」這個詞有另一個陷阱:使用者說出來的,往往不是他們真正想要的。 這就是需求工程的精髓——在模糊的自然語言與精確的、可執行的規格之間,搭建一座橋。
需求的分層:從願景到規格#
一個成熟的團隊,會把「需求」拆成幾個層次,每層的抽象程度與負責人不同:
flowchart TD
subgraph V[願景層]
V1[1. 願景 Vision<br/>為什麼做?商業價值<br/>一句話說明產品要解決的問題]
end
subgraph U[需求層]
U1[2. 使用者需求 User Need<br/>使用者要什麼?Use Case<br/>從使用者角度想達成的目標]
F1[3. 功能需求 Functional<br/>系統要做什麼?<br/>明確的系統功能與行為]
end
subgraph N[品質層]
N1[4. 非功能需求 Non-functional<br/>系統要多好?<br/>效能、安全、可用性、可維護性]
end
subgraph S[規格層]
S1[5. 系統/介面規格 Spec<br/>能用什麼格式實現?<br/>API、資料結構、介面契約]
end
V1 --> U1 --> F1 --> N1 --> S1從上到下,抽象程度遞減、精確程度遞增。傳統軟體工程的問題在於:最底下那層(Spec)與最上面那層(願景)之間,隔著巨大的鴻溝,而且中間的轉譯全靠人力、且常常斷裂。
使用者需求 vs 功能需求的區別#
這是需求工程最基本的區別,初學者很容易混淆:
- 使用者需求:以「使用者」為主語,描述使用者想達成的目標。例:「我想要在手機上查看明天餐廳有沒有空位。」
- 功能需求:以「系統」為主語,描述系統必須提供的功能。例:「系統應顯示指定日期、時間的可用桌位數量。」
為什麼要區分?因為同一個使用者需求,可以有多種不同的功能實現方式。釐清「使用者真正要達成什麼」,能避免過早陷入「系統該怎麼做」的細節,保留設計的自由度。
非功能需求:常常被遺忘的關鍵#
功能需求回答「系統做什麼」,非功能需求回答「系統做得好不好」。後者常被忽略,卻往往決定成敗:
- 效能(Performance):回應時間、吞吐量
- 安全性(Security):認證、授權、資料保護
- 可用性(Availability):系統宕機時間上限
- 可維護性(Maintainability):修改的成本
- 可擴展性(Scalability):能承受多大的成長
- 可用性體驗(Usability):使用者多容易上手
一個經典例子:功能需求「系統能處理訂單」很簡單,但非功能需求「系統在購物節高峰期每秒能處理 10000 筆訂單、且 99.99% 時間可用」——這才是真正困難、也真正有價值的需求。非功能需求常常是架構設計(第 3 章)的主要驅動力。
需求的本質:對話與闡明#
需求不是一次訪談就能「收集」到的——這個詞本身有誤導性。更精確的比喻是:需求是被闡明(elicit)出來的,透過反覆的對話、提問、澄清,把模糊的想法一步步變成精確的規格。
這在本質上是人與人之間的溝通,而不是機械的「記錄」。理解使用者沒說出口的隱性需求(例如「倉管員戴手套滑鼠不好用,需要全鍵盤操作」這種現場情境),需要同理心與深入現場,這是 AI 目前無法取代的(見 2.5 節)。
需求變更:一個永恆的常態#
軟體需求幾乎總會變。這就是 1.2 節說的「可變性」本質困難。面對變更,傳統瀑布式流程(一次把需求定死、逐階段進行)往往失敗,因為它假設需求能一次想清楚。後續章節會介紹敏捷與迭代的開發方式(第 12 章),其核心就是在擁抱需求變更的前提下工作。
本章小結#
- 需求分析不會被 AI 取代,反而更加重要
- 需求分五個層次:願景、使用者需求、功能需求、非功能需求、規格
- 使用者需求 ≠ 功能需求,要區分「使用者要達成什麼」與「系統要做什麼」
- 非功能需求常被忽略,卻決定架構與成敗
- 需求是被闡明的,透過反覆對話把模糊變精確
- 需求變更是常態,需要迭代式開發來應對
想一想#
- 用「訂位系統」為例,分別寫出它的「使用者需求」和「功能需求」各 3 條。
- 為什麼同一個使用者需求可以有不同的功能實現?舉例說明。
- 為什麼非功能需求「只在特殊時刻才重要」,卻往往最難實現?