用例建模

用例建模

用例建模是UML建模的一部分,它也是UML里最基礎的部分。用例建模的最主要功能就是用來表達系統的功能性需求或行為。

簡介

用例建模Use Case Modeling)是使用用例的方法來描述系統的功能需求的過程,用例模型主要包括以下兩部分內容:

用例圖(Use Case Diagram)
確定系統中所包含的參與者、用例和兩者之間的對應關係,用例圖描述的是關於系統功能的一個概述。

用例規約(Use Case Specification)
針對每一個用例都應該有一個用例規約文檔與之相對應,該文檔描述用例的細節內容。

在用例建模的過程中,我們建議的步聚是先找出參與者,再根據參與者確定每個參與者相關的用例,最後再細化每一個用例的用例規約。

詳細描述

用例描述用來詳細描述用例圖中每個用例,用文本文檔來完成。

一. 用例圖(use case diagram)

用例圖由參與者(Actor)、用例(Use Case)、系統邊界、箭頭組成,用畫圖的方法來完成。

參與者不是特指人,是指系統以外的,在使用系統或與系統互動中所扮演的角色。因此參與者可以是人,可以是事物,也可以是時間或其他系統等等。還有一點要注意的是,參與者不是指人或事物本身,而是表示人或事物當時所扮演的角色。比如小明是圖書館的管理員,他參與圖書館管理系統的互動,這時他既可以作為管理員這個角色參與管理,也可以作為借書者向圖書館借書,在這裡小明扮演了兩個角色,是兩個不同的參與者。參與者在畫圖中用簡筆人物畫來表示,人物下面附上參與者的名稱。

用例建模

用例是對包括變數在內的一組動作序列的描述,系統執行這些動作,並產生傳遞特定參與者的價值的可觀察結果。這是UML對用例的正式定義,對我們初學者可能有點難懂。我們可以這樣去理解,用例是參與者想要系統做的事情。對於對用例的命名,我們可以給用例取一個簡單、描述性的名稱,一般為帶有動作性的詞。用例在畫圖中用橢圓來表示,橢圓下面附上用例的名稱。

用例建模

系統邊界是用來表示正在建模系統的邊界。邊界內表示系統的組成部分,邊界外表示系統外部。系統邊界在畫圖中方框來表示,同時附上系統的名稱,參與者畫在邊界的外面,用例畫在邊界裡面。因為系統邊界的作用有時候不是很明顯,所以我個人理解,在畫圖時可省略。

箭頭用來表示參與者和系統通過相互傳送信號或訊息進行互動的關聯關係。箭頭尾部用來表示啟動互動的一方,箭頭頭部用來表示被啟動的一方,其中用例總是要由參與者來啟動。

二. 用例規約(Use Case Specification)

用例圖只是簡單地用圖描述了一下系統,但對於每個用例,我們還需要有詳細的說明,這樣就可以讓別人對這個系統有一個更加詳細的了解,這時我們就需要寫用例描述。

對於用例描述的內容,一般沒有硬性規定的格式,但一些必須或者重要的內容還是必須要寫進用例描述裡面的。用例描述一般包括:簡要描述(說明)、前置(前提)條件、基本事件流、其他事件流、異常事件流、後置(事後)條件等等。下面說說各個部分的意思:

簡要描述:對用例的角色、目的的簡要描述;
前置條件:執行用例之前系統必須要處於的狀態,或者要滿足的條件;
基本事件流:描述該用??生的事情,沒有任何備選流和異常流,而只有最有可能發生的事件流;
其他事件流:表示這個行為或流程是可選的或備選的,並不是總要總要執行它們;
異常事件流:表示發生了某些非正常的事情所要執行的流程;
後置條件:用例一旦執行後系統所處的狀態;

三. 用例圖和用例描述設計實例

這裡用我開發的一個家教網站來簡單的分析用例圖的畫法和用例描述的寫法。這個網站我用UML完整的分析一下,以下我提取了用例圖和用例描述的部分。這個家教網站分為前台客戶系統和後台管理系統。

前台客戶系統的用例圖如下:

用例建模

後台管理系統用例圖如下:

用例建模

用例
系統邊界

對於用例描述,篇幅有限,我在這裡只列了後台管理系統中的網站公告發布這個用例的描述。如下:

用例名稱:網站公告發布

用例標識號:202

參與者:負責人

簡要說明:

負責人用來填寫和修改家教網站首頁的公告,公告最終顯示在家教網站的首頁上。

前置條件:

負責人已經登入家教網站管理系統

基本事件流:

1.負責人滑鼠點擊“修改公告”按鈕

2.系統出現一個文本框,顯示著原來的公告內容

3.負責人可以在文本框上修改公告,也可以完全刪除,重新寫新的公告

4.負責人編輯完文本框,按“提交”按鈕,首頁公告就被修改

5.用例終止

其他事件流A1

1.在按“提交”按鈕之前,負責人隨時可以按“返回”按鈕,文本框的任何修改內容都不會影響網站首頁的公告

異常事件流:

1.提示錯誤信息,負責人確認

2.返回到管理系統主頁面

後置條件:

1.網站首頁的公告信息被修改

注釋:

四、用例建模的步聚

在用例建模的過程中,我們建議的步聚是先找出參與者,再根據參與者確定每個參與者相關的用例,最後再細化每一個用例的用例規約。

1、尋找參與者

所謂的參與者是指所有存在於系統外部並與系統進行互動的人或其他系統。通俗地講,參與者就是我們所要定義系統的使用者。尋找參與者可以從以下問題入手:

系統開發完成之後,有哪些人會使用這個系統?
系統需要從哪些人或其他系統中獲得數據?
系統會為哪些人或其他系統提供數據?
系統會與哪些其他系統相關聯?
系統是由誰來維護和管理的?

這些問題有助於我們抽象出系統的參與者。對於ATM機的例子,回答這些問題可以使我們找到更多的參與者:操作員負責維護和管理ATM機系統、ATM機也需要與後台伺服器進行通訊以獲得有關用戶帳號的相關信息。

用例建模

1.1 系統邊界決定了參與者

參與者是由系統的邊界所決定的,如果我們所要定義的系統邊界僅限於ATM機本身,那么後台伺服器就是一個外部的系統,可以抽象為一個參與者。

用例建模

如果我們所要定義的系統邊界擴大至整個銀行系統,ATM機和後台伺服器都是整個銀行系統的一部分,這時候後台伺服器就不再被抽象成為一個參與者。

用例建模

值得注意的是,用例建模時不要將一些系統的組成結構作為參與者來進行抽象,如在ATM機系統中,印表機只是系統的一個組成部分,不應將它抽象成一個獨立的參與者;在一個MIS管理系統中,資料庫系統往往只作為系統的一個組成部分,一般不將其單獨抽象成一個參與者。

1.2 特殊的參與者――系統時鐘

有時候我們需要在系統內部定時地執行一些操作,如檢測系統資源使用情況、定期地生成統計報表等等。從表面上看,這些操作並不是由外部的人或系統觸發的,應該怎樣用用例方法來表述這一功能需求呢?對於這種情況,我們可以抽象出一個系統時鐘或定時器參與者,利用該參與者來觸發這一類定時操作。從邏輯上,這一參與??提供的用例對話。

用例建模

2、確定用例

找到參與者之後,我們就可以根據參與者來確定系統的用例,主要是看各參與者需要系統提供什麼樣的服務,或者說參與者是如何使用系統的。尋找用例可以從以下問題入手(針對每一個參與者):

參與者為什麼要使用該系統?
參與者是否會在系統中創建、修改、刪除、訪問、存儲數據?如果是的話,參與者又是如何來完成這些操作的?
參與者是否會將外部的某些事件通知給該系統?
系統是否會將內部的某些事件通知該參與者?
綜合以上所述,ATM系統的用例圖可表示如下,

用例建模

在用例的抽取過程中,必須注意:用例必須是由某一個主角觸發而產生的活動,即每個用例至少應該涉及一個主角。如果存在與主角不進行互動的用例,就可以考慮將其併入其他用例;或者是檢查該用例相對應的參與者是否被遺漏,如果是,則補上該參與者。反之,每個參與者也必須至少涉及到一個用例,如果發現有不與任何用例相關聯的參與者存在,就應該考慮該參與者是如何與系統發生對話的,或者由參與者確定一個新的用例,或者該參與者是一個多餘的模型元素,應該將其刪除。

可視化建模的主要目的之一就是要增強團隊的溝通,用例模型必須是易於理解的。用例建模往往是一個團隊開發的過程,系統分析員在建模過程中必須注意參與者和用例的名稱應該符合一定的命名約定,這樣整個用例模型才能夠符合一定的風格。如參與者的名稱一般都是名詞,用例名稱一般都是動賓詞組等。

對於同一個系統,不同的人對於 參與者和用例都可能有不同的抽象結果,因而得到不同的用例模型。我們需要在多個用例模型方案中選擇一種"最佳"(或"較佳")的結果,一個好的用例模型應該能夠容易被不同的涉眾所理解,並且不同的涉眾對於同一用例模型的理解應該是一致的。

3、描述用例規約

應該避免這樣一種誤解――認為由參與者和用例構成的用例圖就是用例模型,用例圖只是在總體上大致描述了系統所能提供的各種服務,讓我們對於系統的功能有一個總體的認識。除此之外,我們還需要描述每一個有例的詳細信息,這些信息包含在用例規約中,用例模型是由用例圖和每一個用例的詳細描述――用例規約所組成的。RUP中提供了用例規約的模板,每一個用例的用例規約都應該包含以下內容:

簡要說明 (Brief Description)
簡要介紹該用例的作用和目的。

事件流 (Flow of Event)
包括基本流和備選流,事件流應該表示出所有的場景。

用例場景 (Use-Case Scenario)
包括成功場景和失敗場景,場景主要是由基本流和備選流組合而成的。
特殊需求 (Special Requirement)
描述與該用例相關的非功能性需求(包括性能、可靠性、可用性和可擴展性等)和設計約束(所使用的作業系統、開發工具等)。

前置條件 (Pre-Condition)
執行用例之前系統必須所處的狀態。

後置條件 (Post-Condition)
用例執行完畢後系統可能處於的一組狀態。

用例規約基本上是用文本方式來表述的,為了更加清晰地描述事件流,也可以選擇使用狀態圖活動圖序列圖來輔助說明。只要有助於表達的簡潔明了,就可以在用例中任意貼上用戶界面和流程的圖形化顯示方式,或是其他圖形。如活動圖有助於描述複雜的決策流程,狀態轉移圖有助於描述與狀態相關的系統行為,序列圖適合於描述基於時間順序的訊息傳遞。

3.1 基本流

基本流描述的是該用例最正常的一種場景,在基本流中系統執行一系列活動步驟來回響參與者提出的服務請求。我們建議用以下格式來描述基本流:

(1) 每一個步驟都需要用數字編號以清楚地標明步驟的先後順序。

(2) 用一句簡短的標題來概括每一步驟的主要內容,這樣閱讀者可以通過瀏覽標題來快速地了解用例的主要步驟。在用例建模的早期,我們也只需要描述到事件流步驟標題這一層,以免過早地陷入到用例描述的細節中去。

(3) 當整個用例模型基本穩定之後,我們再針對每一步驟詳細描述參與者和系統之間所發生的互動。建議採用雙向(roundtrip)描述法來保證描述的完整性,即每一步驟都需要從正反兩個方面來描述:(1)參與者向系統提交了什麼信息;(2)對此系統有什麼樣的回響。具體例子請參見附錄。

在描述參與者和系統之間的信息交換時,需指出來回傳遞的具體信息??,最好明確地說參與者輸入了客戶姓名和地址。通常可以利用辭彙表讓用例的複雜性保持在可控範圍內,可以在辭彙表中定義客戶信息等內容,使用例不至於陷入過多的細節。

3.2 備選流

備選流負責描述用例執行過程中異常的或偶爾發生的一些情況,備選流和基本流的組合應該能夠覆蓋該用例所有可能發生的場景。在描述備選流時,應該包括以下幾個要素:

(1) 起點:該備選流從事件流的哪一步開始;

(2) 條件:在什麼條件下會觸發該備選流;

(3) 動作:系統在該備選流下會採取哪些動作;

(4) 恢復:該備選流結束之後,該用例應如何繼續執行。

備選流的描述格式可以與基本流的格式一致,也需要編號並以標題概述其內容,編號前可以加以字母前綴A(Alternative)以示與基本流步驟相區別。

3.3 用例場景

用例在實際執行的時候會有很多的不同情況發生,稱之為用例場景;也可以說場景是用例的實例,我們在描述用例的時候要覆蓋所有的用例場景,否則就有可能導致需求的遺漏。在用例規約中,場景的描述可以由基本流和備選流的組合來表示。場景既可以幫助我們防止需求的遺漏,同時也可以對後續的開發工作起到很大的幫助:開發人員必須實現所有的場景、測試人員可以根據用例場景來設計測試用例

3.4 特殊需求

特殊需求通常是非功能性需求,它為一個用例所專有,但不適合在用例的事件流文本中進行說明。特殊需求的例子包括法律或法規方面的需求、套用程式標準和所構建系統的質量屬性(包括可用性、可靠性、性能或支持性需求等)。此外,其他一些設計約束,如作業系統及環境、兼容性需求等,也可以在此節中記錄。

需要注意的是,這裡記錄的是專屬於該用例的特殊需求;對於一些全局的非功能性需求和設計約束,它們並不是該用例所專有的,應把它們記錄在《補充規約》中。

3.5 前置和後置條件

前置條件是執行用例之前必須存在的系統狀態,後置條件是用例一執行完畢後系統可能處於的一組狀態。

4、檢查用例模型

用例模型完成之後,可以對用例模型進行檢查,看看是否有遺漏或錯誤之處。主要可以從以下幾個方面來進行檢查:

功能需求的完備性
現有的用例模型是否完整地描述了系統功能,這也是我們判斷用例建模工作是否結束的標誌。如果發現還有系統功能沒有被記錄在現有的用例模型中,那么我們就需要抽象一些新的用例來記錄這些需求,或是將他們歸納在一些現有的用例之中。

模型是否易於理解
用例模型最大的優點就在於它應該易於被不同的涉眾所理解,因而用例建模最主要的指導原則就是它的可理解性。用例的粒度、個數以及模型元素之間的關係複雜程度都應該由該指導原則決定。

是否存在不一致性
系統的用例模型是由多個系統分析員協同完成的,模型本身也是由多個工件所組成的,所以我們要特別注意不同工件之前是否存在前後矛盾或衝突的地方,避免在模型內部產生不一致性。不一致性會直接影響到需求定義的準確性。

避免二義性語義
好的需求定義應該是無二義性的,即不同的人對於同一需求的理解應該是一致的。在用例規約的描述中,應該避免定義含義模糊的需求,即無二義性。

摘自《用例建模指南》作者:傅純一 來源:IBM

相關詞條

相關搜尋

熱門詞條

聯絡我們