采用這種方法來描述系統需求,非常容易混淆需求和設計的界限,這樣的表述實際上已經包含了部分的設計在內。由此常常導致這樣的迷惑:系統需求應該詳細到何種程度?一個極端就是需求可以詳細到概要設計,因為這樣的需求表述既包含了外部需求也包含了內部設計。在有些公司的開發流程中,這種需求被稱為"內部需求",而對應于用戶的原始要求則被稱之為"外部需求"。
功能分解方法的另一個缺點是這種方法分割了各項系統功能的應用環境,從各項功能項入手,你很難了解到這些功能項是如何相互關聯來實現一個完成的系統服務的。所以在傳統的SRS文檔中,我們往往需要另外一些章節來描述系統的整體結構及各部分之間的相互關聯,這些內容使得SRS需求更象是一個設計文檔。
1.1 參與者和用例
從用戶的角度來看,他們并不想了解系統的內部結構和設計,他們所關心的是系統所能提供的服務,也就是被開發出來的系統將是如何被使用的,這就用例方法的基本思想。用例模型主要由以下模型元素構成:
這大三種模型元素在UML中的表述如下圖所示。
以銀行自動提款機(ATM)為例,它的主要功能可以由下面的用例圖來表示。ATM的主要使用者是銀行客戶,客戶主要使用自動提款機來進行銀行帳戶的查詢、提款和轉帳交易。
通訊關聯表示的是參與者和用例之間的關系,箭頭表示在這一關系中哪一方是對話的主動發起者,箭頭所指方是對話的被動接受者;如果你不想強調對話中的主動與被動關系,可以使用不帶箭頭的關聯實線。在參與者和用例之間的信息流不是由通訊關聯來表示的,該信息流是缺省存在的(用例本身描述的就是參與者和系統之間的對話),并且信息流向是雙向的,它與通訊關聯箭頭所指的方向亳無關系。
1.2 用例的內容
用例圖使我們對系統的功能有了一個整體的認知,我們可以知道有哪些參與者會與系統發生交互,每一個參與者需要系統為它提供什么樣的服務。用例描述的是參與者與系統之間的對話,但是這個對話的細節并沒有在用例圖中表述出來,針對每一個用例我們可以用事件流來描述這一對話的細節內容。如在ATM系統中的"提款"用例可以用事件流表述如下:
提款-基本事件流
1. 用戶插入信用卡
2. 輸入密碼
3. 輸入提款金額
4. 提取現金
5. 退出系統,取回信用卡
但是這只描述了提款用例中最順利的一種情況,作為一個實用的系統,我們還必須考慮可能發生的各種其他情況,如信用卡無效、輸入密碼錯、用戶帳號中的現金余額不夠等,所有這些可能發生的各種情況(包括正常的和異常的)被稱之為用例的場景(Scenario),場景也被稱作是用例的實例(Instance)。在用例的各種場景中,最常見的場景是用基本流(Basic Flow)來描述的,其他的場景則是用備選流(Alternative Flow)來描述。對于ATM系統中的"提款"用例,我們可以得到如下一些備選流:
原文轉自:http://www.anti-gravitydesign.com