一.系統(tǒng)邊界和參與者
參與者Actor定義:在系統(tǒng)之外,透過系統(tǒng)邊界和系統(tǒng)進(jìn)行有意義的交互的任何事物
透露出參與者的特征:
1.不屬于系統(tǒng)
2.通過系統(tǒng)邊界直接和系統(tǒng)交互->參與者的確定決定了系統(tǒng)邊界的確定
3.進(jìn)行有意義的交互
4.任何事物
其中第二點(diǎn)的"直接"要注意:如果一個(gè)顧客通過售票員買機(jī)票,那么對于售票系統(tǒng)來說,售票員是參與者而顧客不是.
由此又產(chǎn)生了業(yè)務(wù)建模和系統(tǒng)建模的區(qū)別:對于售票系統(tǒng)來說,當(dāng)業(yè)務(wù)建模的時(shí)候,我們描述的是顧客來訂票,可能還有票務(wù)中心的主任來詢問售票情況等等事件.但是系統(tǒng)建模的時(shí)候,他們都不是我們的對象,我們描述為售票員要售票和提供售票情況的事件的描述,因此這兩者在建模的不同階段是不一樣的.
在有些自動(dòng)系統(tǒng)中,時(shí)間往往是觸發(fā)系統(tǒng)工作的外部事物,因此參與者是時(shí)間,不可忽略.
識(shí)別參與者方法:面對一個(gè)系統(tǒng)時(shí),你應(yīng)該問這些問題:
誰使用系統(tǒng)?
誰改變系統(tǒng)數(shù)據(jù)?
誰從系統(tǒng)獲取信息?
誰需要系統(tǒng)的支持來完成日常工作?
誰負(fù)責(zé)管理并維護(hù)系統(tǒng)正常運(yùn)行?
系統(tǒng)要應(yīng)付那些硬設(shè)備?
系統(tǒng)要和其他的系統(tǒng)交互嗎?
誰對系統(tǒng)產(chǎn)生的結(jié)果感興趣?
時(shí)間,氣候等外部條件呢?
當(dāng)你回答完這些問題之后,你的答案基本上就涵蓋了參與者的候選人.
識(shí)別參與者的重要性:
1.根據(jù)參與者識(shí)別系統(tǒng)用例:因此為了完整系統(tǒng)的功能,你識(shí)別的系統(tǒng)參與者寧多勿少.
2.測試部署階段你可能會(huì)通過識(shí)別者的角度去了解系統(tǒng)的完整性.
3.用例文檔編寫階段,參與者不是很重要,但是你應(yīng)該考慮參與者的泛化關(guān)系,避免出現(xiàn)用例的重復(fù)功能.
二.識(shí)別事件
羅列清楚系統(tǒng)事件,是正確建立系統(tǒng)用例的必要條件.
系統(tǒng)事件分為兩類:系統(tǒng)外部事件和系統(tǒng)內(nèi)部事件
外部事件就是外部參與者對系統(tǒng)交互的具體工作,內(nèi)部事件就是系統(tǒng)內(nèi)部觸發(fā)的工作,通常由時(shí)間觸發(fā).
識(shí)別事件的方法:頭腦風(fēng)暴法-主語+謂語+賓語,描述系統(tǒng)可能發(fā)生的事情,盡可能全面,同樣是寧多勿少的原則,不過你可以根據(jù)事件的重要程度進(jìn)行一個(gè)排序,這能加深你對系統(tǒng)的認(rèn)識(shí).
通常把識(shí)別出來的事件列成一個(gè)表格:稱為3A表
Actor??Action?Aim
參與者??作甚么??業(yè)務(wù)目的
...??...??...
三.識(shí)別用例
用例定義:用例是一組用例實(shí)例
用例實(shí)例定義:系統(tǒng)執(zhí)行的一系列動(dòng)作,用以產(chǎn)生參與者可觀測到的結(jié)果值
用例要點(diǎn):
1.位于系統(tǒng)??--必須由系統(tǒng)運(yùn)行
2.目標(biāo)導(dǎo)向??--用例運(yùn)行必須有所目的
3.止于邊界??--可以觀測到結(jié)果,并且是在邊界和外部有所交互的
4.用戶觀點(diǎn)??--參與者觀測
5.粒度???--是一組有共同目標(biāo)或者可以類聚的目標(biāo)的實(shí)例們組成
識(shí)別用例是從業(yè)務(wù)建模開始的,也就是說我們描述用例是從用戶的角度即用戶觀點(diǎn)出發(fā)的識(shí)別行為,描述用例是用純粹的業(yè)務(wù)語言,而不是技術(shù)語言.比如描述為清繳稅款,而不是J2ee架構(gòu).因此,用戶的命名也是從用戶的角度出發(fā),描述用戶要做的一件通過系統(tǒng)完成有目的,有結(jié)果的行為.
用例的粒度不宜過細(xì),過細(xì)的分解會(huì)導(dǎo)致用例描述的錯(cuò)誤:
1.把交互的步驟成為一個(gè)用例,而不是把一類一系列步驟作為一個(gè)用例.例如,用戶登陸是一個(gè)用例,錯(cuò)誤的做法是把請求輸入用戶名也作為一個(gè)用例.
2.把必要的處理過程中的一些系統(tǒng)內(nèi)部活動(dòng)稱作用例:驗(yàn)證用戶,連接數(shù)據(jù)庫,發(fā)送SQL請求等稱作一個(gè)用例,其實(shí)都是用戶登陸這一次交互的步驟而已.
3.把識(shí)別用例的工作當(dāng)成是關(guān)系數(shù)據(jù)庫分析的工作:稱作四輪馬車的錯(cuò)誤,即CRUD(Create Read Update Delete).例如管理用戶是一個(gè)用例,但是可能變成了增加用戶,查詢用戶,修改用戶,刪除用戶的"系統(tǒng)就是數(shù)據(jù)的增刪改查"的認(rèn)識(shí)論錯(cuò)誤.
識(shí)別用例的一個(gè)關(guān)鍵性原則就是:站在用戶的角度分析用戶的目的,而不是站在系統(tǒng)的角度,更不是站在數(shù)據(jù)的角度.
通過建立的系統(tǒng)事件可以很順利的畫出用例圖,但是應(yīng)該記住"用例的本質(zhì)是文字",所以我們最終要將用例圖轉(zhuǎn)化成用例文檔.可以用下面的例子格式書寫用例文檔:
用例編號(hào):
用例名:
用例描述:
參與者:
前置條件:開始該用例時(shí)的所必需的系統(tǒng)和環(huán)境狀態(tài)
后置條件:結(jié)束該用例時(shí)的所具備的系統(tǒng)和環(huán)境狀態(tài)
基本路徑:
1…..××××
2……××××
3…..××××
擴(kuò)展點(diǎn):
2a.××××
2a1….×××××
補(bǔ)充說明:
前置條件和后置條件可以反應(yīng)用例間的相互依賴關(guān)系.還可以防止漏掉某些用例
用例之間的關(guān)系:擴(kuò)展extends,包含include,泛化