1. 程式人生 > >連載:面向物件葵花寶典:思想、技巧與實踐(18)

連載:面向物件葵花寶典:思想、技巧與實踐(18)

很多人在分析需求的時候,採用的是東扯葫蘆西扯瓢的方式,列出了很多的需求點,但當你看完後,你還是不知道到底要幹嘛!!  ---- 寫在前面

用例,英文名稱Use Case,英文和中文都是很好理解,因為大家都這麼用,我們暫且不去追究名稱上的問題,只要知道“用例是用來描述需求的流程”,即:描述5W1H中的How

看起來用例應該很好寫,因為用例是描述需求的流程的,而需求的流程一般都是客戶根據自己的業務總結出來,然後告訴我們的。我們只要將客戶描述的內容記錄下來即可,既簡單又輕鬆!

但現實與理想總是有差距的,你可能會遇到一個對業務並不十分熟悉的客戶,又或者和你交流的人員是客戶的臨時工,還有可能和你交流的人馬上要休婚假了,他巴不得趕快了結這個無聊的事。。。。。。總之,各種各樣的情況都可能出現,就是完美的情況不會出現!

這種情況下,我們如何才能做到完善的分析呢?我們怎麼知道我們的分析是否正確,是否有遺漏,是否足夠了

一般的情況下,公司裡負責需求分析得人員都是資深的員工,對領域、對系統有一定的積累和經驗,即使面對這些情況,也可以通過自己的經驗來彌補。

但對於一個菜鳥,遇到這種情況應該怎麼辦呢?難道菜鳥就不能做需求分析了麼?

別慌,菜鳥雖然沒有經驗,但只要掌握正確的方法,一樣可以做出很好的需求分析,這就是我總結的用例三部曲方法,又或叫做NEA方法

我總結出的用例方法三段法(NEA方法):

1) 正常處理(Normal):通過和客戶溝通,分析需求的正常流程;

2) 異常處理(Exception):在正常處理流程的步驟上,分析每一步的各種異常情況和對應的處理;

3) 替代處理(Alternative):在正常處理流程的步驟上,分析每一步是否有其它替代方法,以及替代方法如何做;

經過這簡單三步後,How可以說分析得八九不離十了。

【用例的具體寫法】

前面我們學習了518需求分析方法,而一個完整的用例,正好體現了518需求分析方法中涉及的內容。

一個完整的用例應該包含如下幾個部分:

【用例名稱】

一般情況下,用例的名稱即需求的名稱。

【場景】

場景即用例發生的環境,正好對應5W中的3個W:Who、Where、When

【用例描述】

描述詳細的用例內容,對應5W中的What和How,即使用者應該怎樣做,以及每個步驟中的輸出。但並不要求每個步驟都一定有輸出,可以有也可以沒有,也可以有多個。

【用例價值】

描述用例對應的客戶價值,對應5W中的Why。

【約束和限制】

即整個需求流程中相關的約束和限制條件,對應518方法中的8C。

我們來看一個簡單的樣例:POS機。

【第一步:正常處理】

【用例名稱】

買單

【場景】

Who:顧客、收銀員

Where:商店的收銀臺

When:營業時間

【用例描述】

1. 顧客攜帶選擇好的商品到收銀臺;

2. 收銀員逐一掃描商品條形碼,系統根據條形碼查詢商品資訊;

3. 掃描完畢,系統顯示商品總額,收銀員告訴顧客商品總額;

4. 顧客將錢交給收銀員;

5. 收銀員清點錢數,輸入收到的款額,系統給出找零的數目;

6. 收銀員將找零的錢還給顧客,並列印小票;

7. 買單完成,顧客攜帶商品和小票離開;

【用例價值】

顧客買完單以後,就可以攜帶商品離開,而超市也將得到收入;

【約束和限制】

1. POS機必須符合國標XXX;

2. 鍵盤使用中文,因為收銀員都是中國人;

3. 一次買單數額不能超過99999RMB;

4. POS機要非常穩定,至少一天內不要出現故障;

【第二步:異常處理】

在第一步的基礎上,我們增加相關步驟的異常情況說明和處理,例如如下的黑體字:

【用例名稱】

買單

【場景】

Who:顧客、收銀員

Where:商店的收銀臺

When:營業時間

【用例描述】

1. 顧客攜帶選擇好的商品到收銀臺;

(這一步沒有異常)

2. 收銀員逐一掃描商品條形碼,系統根據條形碼查詢商品資訊;

2.1 掃描器壞了,必須支援手工輸入條形碼;

2.2 商品的條形碼無法掃描,必須支援手工輸入條形碼;

2.3 條形碼能夠掃描,但查詢不到資訊,需要收銀員和顧客溝通,放棄購買此產品

3. 掃描完畢,系統顯示商品總額,收銀員告訴顧客商品總額;

(這一步沒有異常)

4. 顧客將錢交給收銀員;

4.1 顧客的錢不夠,顧客和收銀員溝通,刪除某商品

4.2 顧客的錢不夠,顧客和收銀員溝通,刪除某類商品中的一個或幾個(例如買了5包煙,去掉兩包)

4.3 顧客覺得某個商品價格太高,要求刪除某商品;

5. 收銀員清點錢數,輸入收到的款額,系統給出找零的數目;

(這一步沒有異常)

6. 收銀員將找零的錢還給顧客,並列印小票;

7. 買單完成,顧客攜帶商品和小票離開;

【用例價值】

顧客買完單以後,就可以攜帶商品離開,而超市也將得到收入;

【約束和限制】

1. POS機必須符合國標XXX;

2. 鍵盤使用中文,因為收銀員都是中國人;

3. 一次買單數額不能超過99999RMB;

4. POS機要非常穩定,至少一天內不要出現故障;

有的人可能會認為第3、第5、第6步都應該有異常,例如系統壞了應該怎麼處理。

但實際上我們沒有必要這麼寫,因為用例分析的目的是為了詳細分析為了實現客戶價值,系統應該怎麼做,如果系統本身都壞了,這個就不是用例關注的內容了。

需要注意的是:用例分析中的“異常”是指流程的異常情況,而不包含系統本身的的異常

【第三步:替代處理】

在第二步的基礎上,我們增加替代處理。即:有的步驟可以換一種方式來實現。例如如下用例中的付款方式,可以有信用卡支付、會員卡支付、購物卡支付等。

【用例名稱】

買單

【場景】

Who:顧客、收銀員

Where:商店的收銀臺

When:營業時間

【用例描述】

1. 顧客攜帶選擇好的商品到收銀臺;

(這一步沒有異常)

2. 收銀員逐一掃描商品條形碼,系統根據條形碼查詢商品資訊;

2.1 掃描器壞了,必須支援手工輸入條形碼;

2.2 商品的條形碼無法掃描,必須支援手工輸入條形碼;

2.3 條形碼能夠掃描,但查詢不到資訊,需要收銀員和顧客溝通,放棄購買此產品

3. 掃描完畢,系統顯示商品總額,收銀員告訴顧客商品總額;

(這一步沒有異常)

4. 顧客將錢交給收銀員;

4.1 顧客的錢不夠,顧客和收銀員溝通,刪除某商品;

4.2 顧客的錢不夠,顧客和收銀員溝通,刪除某類商品中的一個或幾個(例如買了5包煙,去掉兩包)

4.3 顧客覺得某個商品價格太高,要求刪除某商品;

4-A:顧客使用信用卡支付

4-A.1 信用卡支付流程(請讀者自行思考完善,可以寫在這裡,如果太多,也可以另外寫一個子用例)

4-B:顧客使用購物卡支付

        4-B.1 購物卡支付流程

4-C:顧客使用會員卡積分支付

        4-C.1 會員卡積分支付流程

5. 收銀員清點錢數,輸入收到的款額,系統給出找零的數目;

(這一步沒有異常)

6. 收銀員將找零的錢還給顧客,並列印小票;

7. 買單完成,顧客攜帶商品和小票離開;

【用例價值】

顧客買完單以後,就可以攜帶商品離開,而超市也將得到收入;

【約束和限制】

1. POS機必須符合國標XXX;

2. 鍵盤使用中文,因為收銀員都是中國人;

3. 一次買單數額不能超過99999RMB;

4. POS機要非常穩定,至少一天內不要出現故障;

經過上面步步為營,逐步細化和求精,我們已經得到了一個比較完善的需求了,這個過程中並沒有高深的技巧,也沒有涉及需要豐富的經驗。

有的讀者可能會有疑問:我怎麼知道第4步有那些異常、那些替代方案呢? 

其實很簡單:問你的客戶!客戶是最清楚了,但如果你不問,嘿嘿,客戶倒不一定會告訴你:)

但只要我們掌握了NEA用例分析方法,即使客戶忘記了,或者沒有意識到,我們也會將需求挖出來,這樣需求就不會遺漏。

【要畫圖麼?】

大家可以看到,我們在前面進行用例分析的時候,並沒有看到任何圖,而是純文字!

對於那些UML狂熱分子來說,這可能是難以接受的,怎麼能沒有圖呢?UML中的用例圖不就是用來分析需求的麼?

我們當然不懷疑UML的權威性,但任何東西都有侷限性,UML也不例外。UML的侷限就在於UML是一個建模的語言,就像漢語、英語一樣,只是一種表達形式,而不是一種分析和創作方式。

比如說你會漢語,但並不代表你就能寫小說,你會畫UML用例圖,但並不代表你就能做需求分析。相反,必須是有了需求和用例之後,才有用例圖,說白了,用例圖是用例的圖形化描述,但是它並不能取代用例。

除了UML本身的侷限性外,還有另外一個更重要的原因:用例是客戶和公司關於產品的一個共同認識!一般情況下,市場人員和客戶溝通交流,瞭解客戶的需求,然後和客戶一一確認,最後形成需求文件。在這個過程中,主要是客戶和市場人員參與,而沒有研發的人員參與。

對於客戶來說,他肯定是以自然語言,而不會用UML來描述需求;對於市場人員來說也一樣,他可能對UML一竅不通,甚至他以前可能都是賣醫療器械,甚至有可能是狗皮膏藥的,他還管你什麼軟體工程,什麼UML?

所以,採用用例方法分析需求的時候,我們都是採用純文字來描述需求的,而不會採用用例圖來分析需求

================================================ 
轉載請註明出處:http://blog.csdn.net/yunhua_lee/article/details/21372929
================================================