- UML基礎(chǔ)與Rose建模實(shí)用教程(第三版)
- 謝星星 周新國(guó)編著
- 2666字
- 2020-11-23 15:05:26
5.2.3 用例
1.用例的概念
用例(Use case)是參與者(角色)可以感受到的系統(tǒng)服務(wù)或功能單元。它定義了系統(tǒng)如何被參與者使用,描述了參與者為了使用系統(tǒng)所提供的某一完整功能而與系統(tǒng)之間發(fā)生的一段交互作用。用例最大的優(yōu)點(diǎn)就是站在用戶的角度上(從系統(tǒng)的外部)來描述系統(tǒng)的功能。它把系統(tǒng)當(dāng)作一個(gè)黑箱子,并不關(guān)心系統(tǒng)內(nèi)部是如何完成它所提供的功能,只表達(dá)整個(gè)系統(tǒng)對(duì)外部用戶可見的行為。
UML中通常以一個(gè)橢圓圖符來表示用例,用例名稱書寫在橢圓下方,如圖5-9所示。
每個(gè)用例在其所屬的包里都有唯一的名字,該名字是一個(gè)字符串,包括簡(jiǎn)單名和路徑名。用例的路徑名就是在用例名前面加上用例所屬的包的名字,如圖5-10所示為帶路徑名的用例。用例名可以包括任意數(shù)目的字母、數(shù)字和除冒號(hào)以外的大多數(shù)標(biāo)點(diǎn)符號(hào)。用例的名字可以換行,但應(yīng)易于理解,往往是一個(gè)能準(zhǔn)確描述功能的動(dòng)詞短語(yǔ)或者動(dòng)名詞詞組。

圖5-9 用例

圖5-10 帶路徑名的用例
用例和參與者之間的關(guān)系屬于關(guān)聯(lián)關(guān)系(Association),又稱作通信關(guān)聯(lián)(Communication Association)。關(guān)聯(lián)關(guān)系是雙向的一對(duì)一的關(guān)系,這種關(guān)系表明了哪個(gè)參與者與用例通信。
需要注意用例的一些特征。首先,用例必須由某一個(gè)參與者觸發(fā)激活后才能執(zhí)行,即每個(gè)用例至少應(yīng)該涉及一個(gè)參與者。如果存在沒有參與者的用例,就可以考慮將這個(gè)用例并入其他用例之中。
其次用例也是一個(gè)類,而不是某個(gè)具體的實(shí)例。用例所描述的是它代表的功能的各個(gè)方面,包含了用例執(zhí)行期間可能發(fā)生的各種情況。例如,從ATM系統(tǒng)中取款這個(gè)用例,張三持銀行卡去取錢,系統(tǒng)收到消息后將錢送出的過程就是一個(gè)實(shí)例。而李四持銀行卡取錢,系統(tǒng)收到消息后因?yàn)殄X已經(jīng)取完而將銀行卡退給李四也是一個(gè)實(shí)例。
注意,用例是一個(gè)完整的描述。一個(gè)用例在編程實(shí)現(xiàn)的時(shí)候往往會(huì)被分解成多個(gè)小用例(函數(shù)),這些小用例的執(zhí)行會(huì)有先后之分,其中任何一個(gè)小用例的完成都不能代表整個(gè)用例的完成。只有當(dāng)所有的小用例都完成,并最終產(chǎn)生了返回給參與者的結(jié)果,才能代表整個(gè)用例的完成。
2.識(shí)別用例
任何用例都不能在缺少參與者的情況下獨(dú)立存在。同樣,任何參與者也必須要有與之關(guān)聯(lián)的用例。所以識(shí)別用例的最好方法就是從分析系統(tǒng)參與者開始,在這個(gè)過程中往往會(huì)發(fā)現(xiàn)新的參與者。當(dāng)找到參與者之后,我們就可以根據(jù)參與者來確定系統(tǒng)的用例,主要是看各參與者如何使用系統(tǒng),需要系統(tǒng)提供什么樣的服務(wù)。可以通過以下問題來尋找用例:
- 參與者希望系統(tǒng)提供什么功能?
- 參與者是否會(huì)讀取、創(chuàng)建、修改、刪除、存儲(chǔ)系統(tǒng)的某種信息?如果是的話,參與者又是如何完成這些操作的呢?
- 參與者是否會(huì)將外部的某些事件通知給系統(tǒng)?
- 系統(tǒng)中發(fā)生的事件是否通知參與者?
- 是否存在影響系統(tǒng)的外部事件?
除了通過與參與者有關(guān)的問題來發(fā)現(xiàn)用例,還可以通過一些與參與者無關(guān)的問題來發(fā)現(xiàn)用例,例如系統(tǒng)需要解決什么樣的問題,系統(tǒng)的輸入輸出信息有哪些。
需要注意的是,用例圖的主要目就是幫助人們了解系統(tǒng)的功能,便于開發(fā)人員與用戶之間的溝通,所以確定用例的一個(gè)很重要的標(biāo)準(zhǔn)就是用例應(yīng)當(dāng)易于理解。對(duì)于同一個(gè)系統(tǒng),不同的人對(duì)于參與者和用例可能會(huì)有不同的抽象,這就要求我們?cè)诙喾N方案中選出最好的一個(gè)。對(duì)于這個(gè)被選出的用例模型,不僅要做到易于理解,還要做到不同的人群對(duì)它的理解是一致的。
3.用例的粒度
用例的粒度指的是用例所包含的系統(tǒng)服務(wù)或功能單元的數(shù)量。用例的粒度越大,用例包含的功能就越多,反之則包含的功能就越少。
對(duì)同一個(gè)系統(tǒng)的描述,不同的人可能會(huì)產(chǎn)生不同的用例模型。如果用例數(shù)量過多,就會(huì)造成用例模型過大和引入設(shè)計(jì)的困難大大提高。如果用例數(shù)量過少,就會(huì)造成用例的粒度太大,又不便于進(jìn)一步的充分分析。
如圖5-11所示為學(xué)生管理系統(tǒng)中的學(xué)生信息維護(hù)用例,管理員需要添加、修改、刪除學(xué)生信息等操作。還可以根據(jù)具體的操作把它抽象成3個(gè)用例,如圖5-12所示,它展示的系統(tǒng)需求和單個(gè)用例是完全一樣的。

圖5-11 學(xué)生管理系統(tǒng)

圖5-12 細(xì)化后的學(xué)生管理系統(tǒng)
當(dāng)大致確定用例數(shù)量后,就可以輕松確定用例粒度的大小。對(duì)于比較簡(jiǎn)單的系統(tǒng),因?yàn)橄到y(tǒng)的復(fù)雜度一般比較低,所以可以適當(dāng)加大用例模型一級(jí)的復(fù)雜度,也就是可以將較復(fù)雜的用例分解成多個(gè)用例。對(duì)于比較復(fù)雜的系統(tǒng),因?yàn)橄到y(tǒng)的復(fù)雜度已經(jīng)很高,這就要求我們加強(qiáng)控制用例模型一級(jí)的復(fù)雜度,也就是將復(fù)雜度適當(dāng)?shù)匾仆美齼?nèi)部,讓一個(gè)用例包含較多的功能。
用例的粒度對(duì)于用例模型來說是很重要的,它不但決定了用例模型級(jí)的復(fù)雜度,而且也決定了每一個(gè)用例內(nèi)部的復(fù)雜度。在確定用例粒度的時(shí)候,應(yīng)該根據(jù)每個(gè)系統(tǒng)的具體情況,具體問題具體分析,在盡可能保證在整個(gè)用例模型容易理解的前提下決定用例粒度的大小和用例的數(shù)量。
4.用例規(guī)約(Use Case Specification)
用例圖只是在總體上大致描述了一下系統(tǒng)所提供的各種服務(wù),讓我們對(duì)系統(tǒng)有一個(gè)總體的認(rèn)識(shí)。但對(duì)于每一個(gè)用例,還需要有詳細(xì)的描述信息,以便讓別人對(duì)于整個(gè)系統(tǒng)有一個(gè)更加詳細(xì)的了解,這些信息包含在用例規(guī)約之中。而用例模型指的也不僅僅是用例圖,而是由用例圖和每一個(gè)用例的詳細(xì)描述—用例規(guī)約所組成的。每一個(gè)用例的用例規(guī)約都應(yīng)該包含以下內(nèi)容:
- 簡(jiǎn)要描述(Brief Description),對(duì)用例作用和目的的簡(jiǎn)要說明。
- 事件流(Flow of Event),包括基本流和備選流。基本流描述的是用例的基本流程,是指用例“正常”運(yùn)行時(shí)的場(chǎng)景。備選流描述的是用例執(zhí)行過程中可能發(fā)生的異常和偶爾發(fā)生的情況。基本流和備選流組合起來應(yīng)該能夠覆蓋一個(gè)用例所有可能發(fā)生的場(chǎng)景。
- 用例場(chǎng)景(Use-Case Scenario),是指同一個(gè)用例在實(shí)際執(zhí)行的時(shí)候會(huì)有很多不同的情況發(fā)生,也可以說用例場(chǎng)景就是用例的實(shí)例,用例場(chǎng)景包括成功場(chǎng)景和失敗場(chǎng)景。在用例規(guī)約中,由基本流和備選流的組合來對(duì)場(chǎng)景進(jìn)行描述。在描述用例的時(shí)候要注意覆蓋所有的用例場(chǎng)景,否則就有可能遺漏某些需求。
- 特殊需求(Special Requirement),是指一個(gè)用例的非功能性需求和設(shè)計(jì)約束。特殊需求通常是非功能性需求,包括可靠性、性能、可用性和可擴(kuò)展性等。例如法律或法規(guī)方面的需求、應(yīng)用程序標(biāo)準(zhǔn)和所構(gòu)建系統(tǒng)的質(zhì)量屬性等。
- 前置條件(Pre-Condition),執(zhí)行用例之前系統(tǒng)必須所處的狀態(tài)。例如,前置條件是要求用戶有訪問的權(quán)限或是要求某個(gè)用例必須已經(jīng)執(zhí)行完。
- 后置條件(Post-Condition),用例執(zhí)行完畢后系統(tǒng)可能處于的狀態(tài)。例如,要求在某個(gè)用例執(zhí)行完后,必須執(zhí)行另一個(gè)用例。
因?yàn)橛美?guī)約基本上是用文本方式來表述的,所以有些問題難以描述清楚。為了更加清晰地描述事件流,往往需要配以其他圖形來描述,如加入序列圖適合于描述基于時(shí)間順序的消息傳遞和顯示涉及類交互的一般形式,加入活動(dòng)圖有助于描述復(fù)雜的決策流程,加入狀態(tài)轉(zhuǎn)移圖有助于描述與狀態(tài)相關(guān)的系統(tǒng)行為。還可以在用例中粘貼用戶界面或是其他圖形,但是一定要注意表達(dá)得簡(jiǎn)單明了。
- Learning Chef
- Oracle從新手到高手
- JMeter 性能測(cè)試實(shí)戰(zhàn)(第2版)
- Mastering Python Networking
- TypeScript 2.x By Example
- Julia數(shù)據(jù)科學(xué)應(yīng)用
- Python硬件編程實(shí)戰(zhàn)
- C/C++代碼調(diào)試的藝術(shù)(第2版)
- Yii2 By Example
- Java設(shè)計(jì)模式深入研究
- Game Development Patterns and Best Practices
- MonoTouch應(yīng)用開發(fā)實(shí)踐指南:使用C#和.NET開發(fā)iOS應(yīng)用
- OpenStack Sahara Essentials
- Learning Java by Building Android Games
- Python服務(wù)端測(cè)試開發(fā)實(shí)戰(zhàn)