## 連載:面向對象葵花寶典:思想、技巧與實踐(17) - 需求分析518方法
對于大部分人來說,可能并沒有機會進行需求分析,因為在大部分的公司里面,需求分析都是有很多工作經驗的資深人員,或者是對系統很熟悉的老的開發人員。
?
所以,很多人都會對需求分析有一種景仰的心態,認為既然做需求的人要求這么高,那么需求分析一定很復雜、很難、很高級了。而且很多需求分析人員動不動就會教訓“你要站在客戶的角度”、“你要全面的分析”等,然后再拋出幾個需求建模之類的玩意嚇嚇你。。。。。。
?
但其實做需求分析一點都不高深,只要掌握正確的方法,大部分人都能夠做需求分析,而且可以做的很好!
?
而且這個正確的方法掌握起來很簡單,不需要你另外再去買一本書刻苦閱讀,也不需要你花費大量的時間去實踐,去探索。
?
下面我們就來看,這個簡單的正確方法究竟是什么。
?
我總結起來就是“**需求分析518方法**”,簡稱“我要發”,具體來說就是5W1H8C!!
5:5W,即When、Where、Who、What、Why
1:1H,即How
8:8C,即8個Constraint,包括性能Performance、成本Cost、時間Time、可靠性Reliability、安全性Security、合規性Compliance、技術性Technology、兼容性Compatibility
?
下面我們來詳細分析這幾個點。
#### 【5W】
5W:5W作為一組,首先是它們都以W開頭,但這不是最關鍵,最關鍵的在于這些是一個需求產生的環境,或者說上下文(英文Context)。
為什么我們要關注需求產生的環境?很簡單:環境影響需求。
?
舉個很簡單的例子:同樣是垃圾桶,放在巴西貧民窟的要求和放在紐約帝國大廈肯定不一樣。貧民窟可能有很多頑皮的小孩,將垃圾桶作為玩具,或者作為足球的射門目標;而帝國大廈都是文質彬彬的白領金領,對美學可能有特別的要求;因此,兩個不同地方的垃圾桶,需求是完全不一樣的。
?
有人會說,客戶難道不是最明白他們需求的環境么?為什么他們不直接告訴我們?
?
前面我們提到,客戶往往基于自己的經驗、理解、學識等,給出一個解決方案,然后他們跟你說這是他們的需求。理想的情況,當然是客戶非常在行,最好就是軟件分析師出身的;但現實卻往往不妙,很多客戶對軟件的理解可能僅僅停留在Windows甚至QQ上,甚至有客戶會認為你會變魔法,只要他說一個簡單需求,你就能變出他想要的!
?
客戶當然不會是軟件分析師,我們也不是魔法師,因此,我們必須親自出馬,弄清需求產生的環境。
?
==When==
這是和時間相關的環境信息,常見的時間信息有:
1)?季節信息:春夏秋冬等
2)?日期信息:節日、假日等
3)?作息事件:白天、晚上、凌晨、早晨、上午、下午、晚上、深夜等
?
一個簡單的例子:我在以前公司做通訊設備的時候,如果是做數據倒換工具,都要求非常智能,最好是一鍵式操作?為什么呢,因為數據倒換都是在晚上凌晨2~4點進行,此時操作人員最困,思維最遲鈍,如果你做的數據倒換工具需要操作七七四十九大步,九九八十一小步,而只要一步出錯就全部重來,那么誰敢去操作?
?
==Where==
這個事和地點相關的環境信息,常見的地點信息有:
1)?國家、地區:不同的國家和地區有不同的文化、風俗、制度等;
2)?室內、室外、街道;
3)?建筑物
?
一個簡單的例子:一個垃圾桶,放在室內就可能要求美觀小巧(不占地方);而放在室外就可能要求防曬、防雨、防風、防瘋子,而且要求比較大。
?
==Who==
這是和參與者相關的,注意我這里用的是“參與者”來描述的,而不是說“人”,為什么呢?
因為很多外部參與者不一定是“人”,例如外系統、動物等都可以算作Who里面的。
常見的參與者信息有:
1)?投資者、管理者
2)?使用者、維護者
3)?監督者、評估者:例如政府機構、監管機構等
4)?其它系統
?
一個簡單例子,銀行的ATM機,參與者有如下幾類:
顧客:使用ATM機器取款、存款;
銀行維護人員:每天將錢放進ATM機器;
質檢機構:根據XX法律對ATM機進行檢查;
?
==What==
這個就是客戶最終想要的輸出。例如一個文檔、一份報告、一個圖片、一個系統等。
一般情況下,這也是我們看到的最原始的需求。
?
==Why==
這個就是客戶遇到的問題、困難、阻礙等,也是客戶提出需求的驅動力。
只要是客戶覺得不爽的地方都是Why的范圍。
?
?
【一個長頸鹿的實例:5W】
有一個建筑公司的需求分析人員收到了一個客戶需求“給我建一棟很大的房子”,于是建筑公司就建了房子,房子是歐式風格,又大又寬敞,全套宜家家居,全木地板,進口電器。。。。。簡直是應有盡有,結果客戶來收房子的時候說了一句話,讓建筑公司吐血,你知道是什么話么?
客戶說:“先生們,我是要一棟房子給我們的長頸鹿住!”
?
因此即使是簡單的一句話需求,我們也需要詳細分析。例如:
Who:這套房子的購買者是動物園、管理者是動物園的飼養員、使用者是長頸鹿、評估者可能是動物管理協會、衛生局等政府部門”
When:這個可能要求一年四季了,如果長頸鹿知識運來展覽一下,那么就是展覽的這幾個月。”
Where:這個房子要建在動物園,而不是其它居民小區,那么動物園肯定有一些相關的規定”
What:要求一套房子,但不是簡單意義上的房子,而是長頸鹿住的房子,這就需要考慮高度、圍欄等”
Why:?這個就可能動物園要臨時展覽,也可能要引進長頸鹿,也有可能是原來的長頸鹿房子破舊了”
?
雖然我們前面講的時候,5W都是一視同仁的,但實際上有一個W是非常關鍵的,如果這個W錯了,那么即使其它4W全部正確,也可能導致最后沒有滿足客戶需求,客戶不滿意。
?
這個最關鍵的W就是Why,因為只有真正了解了客戶的需求驅動力,才能解決客戶的問題,而只有解決了客戶的問題,那么客戶才會真正的滿意。這也是我們前面提到的需求分析的終極目的是“挖掘客戶的問題,實現客戶價值”!
?
如下圖形象的描繪了5W的關系:
?
?
#### 【1H】
H代表How,但具體是指什么How呢?
?
很多人常犯的一個錯誤是在需求分析階段分析了需求如何實現,這樣做是不正確的。需求分析階段的How不是指如何實現需求,而是指需求本身的流程,如何實現需求那是設計階段的事情!
?
你可能會有疑問:“需求本身還有什么流程”?
?
需求又簡單和復雜之分,有的需求可能很簡單,客戶想要的東西也很明確;但有的需求比較復雜,涉及到多次交互,或者多個狀態變化等,這種情況就要把需求的流程描述清楚。
舉個例子吧,取款是一個需求,但取款本身包含多次交互,要插卡、輸入密碼、輸入金額、打印賬單、取錢這些步驟,How就是用來描述這整個流程是如何運行的。
?
說起來How很簡單,但實際上這是需求分析工作量最大的一部分,How分析的結果是需求分析的主要輸出,而且How分析的質量直接影響最后需求實現的質量。
?
在前面進行5W分析的時候,我們沒有什么具體的指導方法,分析時主要靠分析人員的經驗、水平,而How則不一樣,進行How分析時有一套成熟的方法,這就是“用例方法”!我們將在后續章節詳細介紹用例方法。
?
#### 【8C】
8C指的是8個約束和限制(Constraintes),具體如下:
| 性能Performance
性能是指系統提供相應服務的效率。一般而言,性能主要包括響應時間、吞吐量。
性能是很多系統架構設計的關鍵約束條件之一。例如,同樣一個Web網站,雖然都是提供信息給用戶流浪,但一個日訪問量1萬的網站,和日訪問量10億的網站,兩者的設計是完全不一樣的。
?
l?成本Cost
成本指為了實現系統而需要付出的代價。
成本也是很多系統架構設計的關鍵約束之一。例如,客戶只愿意出100萬來買這個系統,最后我們卻設計了一個耗費1000萬的系統,要么客戶不愿買,要么我們自己虧損。無論哪種情況,最后都是我們賠本了。
?
l?時間Time
指客戶要求什么時候交付。
?
?
l?可靠性Reliability
指系統長時間正確運行的能力,銀行、證券、電信這些公司,對宕機時間要求很嚴格的
?
l?安全性Security
指對信息安全的保護能力,涉及到錢、身份證、社會保險號等需求對這個要求很高
?
l?合規性Compliance
指滿足各種行業標準、法律法規、規范等,例如3C、SOX、3GPP、ITUT等
?
l?技術性Technology
有的客戶可能要求我們采用某種技術,例如客戶現在都是Windows的機器,那么就可能要求我們基于Windows平臺開發
?
l?兼容性Compatibility
指我們的產品與系統與客戶其它已有的產品或者系統的兼容能力,要知道現在很少有產品是孤立運行的,特別是在大企業、大公司中,多個系統都是互相交互、互相配合的。新的系統必須能夠和已有的系統配合,否則將無法運行。
?
為什么我們要將這8個C單獨列出來呢?
?
需求分為功能屬性和質量屬性,前面的5W+1H是屬于功能屬性,而8C是屬于質量屬性,一個需求最終是否被正確的實現了,既要看功能屬性是否正確,也要看質量屬性是否正確,兩者缺一不可!?
?
例如,你做了一個超牛逼的系統,功能超級強大,但一個操作需要10分鐘,你覺得這樣的系統客戶有耐心用么?
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版