一、需求詳解
對軟體專案來說,需求就是專案最一開始的輸入。
- 需求:對客戶來說有價值的事情。
- 功能:系統為了滿足客戶價值而提供的能力。
區別是需求還是功能的方式很簡單,只要判斷是否對客戶有價值。
舉例來說:影像處理軟體:「顯示影像」是需求,「讀取檔案」、「取得影像長寬」、「取得色彩位元」等是功能。
二、需求的重要性
很多專案開發都不怎麼重視需求!
一般可以經常看到這樣的場景:
- 業務人員和客戶溝通,把客戶的要求簡單整理後,就交給研發人員了。
- 專案時程比較緊湊,那就減少需求分析的階段吧。
- 產品人員提出一個簡單的需求,為了能夠快速完成,沒有怎麼做分析就開始設計程式。
雖然看起來專案進度加快了,然而大多數的結果都是令人失望的;根據統計,有接近 1/3 的專案失敗或陷入困境,都是由於需求分析階段沒執行到位所導致。
如果最開始的輸入錯誤,不管中間的過程完成度再高,最終都會輸出垃圾產品,「Garbage in, garbage out」。
而且,修復需求錯誤的成本非常地高;假設在撰寫程式階段,發現和修復一個錯誤的人力是 1 個單位,那麼在測試階段修復需求錯誤的成本是 5 ~ 10個單位。
在維護階段 (產品正式上線後),修復需求錯誤的成本是 20 個單位;但如果在需求階段修復需求錯誤的話,成本只需要 0.1 ~ 0.2 個單位即可。
如果需求分析有錯,那麼幾乎要把軟體專案重做一次,因此修復成本非常昂貴。
三、需求分析
客戶會說他們的「需求」,但在大部份情況下都不會告知「需求」背後的問題。
需求分析的目的就是要「挖掘客戶的問題,然後實現客戶價值」;只有提供的東西能夠解決客戶的問題,客戶才會滿意。
客戶不會直接告訴我們「問題在哪」,例如客戶不會告訴我們「他想要顯示照片」,因為這是他的問題,不是他的需求。
「我需要一個影像處理軟體」才是需求,只是這個需求是用來解決客戶的問題的。
由於大部份客戶都會根據自己的經驗、知識、閱歷等,設計一個解決方案,然後作為需求提出來,因此深入了解客戶問題,才有助於更完善地實現需求。
需求分析有三重境界:「記錄員」、「分析員」、「引導員」。
- 記錄員:記錄客戶的需求。
- 分析員:和客戶一起分析問題,完善需求。
- 引導員:能夠引導客戶的需求。
要能發現客戶的問題,並引導客戶將需求調整為更合理的要求。
若想要做好「需求分析」,必須隨時抓住「客戶的問題和價值」這個指導原則。
四、需求分析的方法
在大多數公司裡,需求分析都是由經驗豐富的資深人員或是對系統很熟悉的資深開發人員擔任。
實際上只要掌握正確的方法,大部分的人都能做好「需求分析」。
總結起來就是 5W 1H 8C:
- 5W:When, Where, Who, What, Why
- 1H:How
- 8C:8個 Constraint, 效能 (Performance)、成本 (Cost)、時間(Time)、可靠性(Reliability)、安全性(Security)、合規性(Compliance)、技術性(Technology)及相容性 (Compatibility)