需求分析不是一項(xiàng)一蹴而就就可以完成的工作朝抖,它需要一個(gè)長(zhǎng)期的過程糊闽,而這個(gè)過程是一個(gè)由粗到細(xì)的過程,它體現(xiàn)了人類認(rèn)識(shí)事物的客觀規(guī)律爹梁。在需求分析的初期右犹,我們對(duì)需求的認(rèn)識(shí)往往是整體的、宏觀的姚垃,隨著分析工作的逐漸深入念链,一步步細(xì)化。按照這個(gè)思路莉炉,我們對(duì)需求的分析钓账,首先應(yīng)當(dāng)從功能角色分析開始。所謂功能角色分析絮宁,就是從一個(gè)外部用戶的視角分析整個(gè)軟件系統(tǒng)能夠提供的功能梆暮,以及這些功能到底是提供給哪些角色使用。
對(duì)一個(gè)系統(tǒng)進(jìn)行功能和角色方面的梳理和分析绍昂,可以采用的比較主流的方法之一就是繪制用例圖啦粹。用例圖是UML的4+1視圖中的一種,準(zhǔn)確地說就是那個(gè)“+1”窘游。用例圖是貫穿整個(gè)面向?qū)ο蠓治?設(shè)計(jì)(OOA/D)的核心視圖唠椭,它描述的是系統(tǒng)到底為用戶提供了哪些功能,以及到底是哪些用戶在使用這些功能忍饰,是溝通用戶與技術(shù)人員的橋梁贪嫂。
運(yùn)用用例視圖對(duì)業(yè)務(wù)需求進(jìn)行分析、抽象艾蓝、整理力崇、提煉,進(jìn)而形成抽象模型的過程稱之為用例建模赢织,而這個(gè)模型就是用例模型亮靴。 一般地,在一個(gè)用例圖中通常有三種元素:參與者(Actor)于置、用例(Use Case)與系統(tǒng)邊界(Boundary)茧吊。
用例描述的是系統(tǒng)為用戶提供的功能,也就是系統(tǒng)能為用戶做什么八毯,通常被繪制成一個(gè)橢圓搓侄;參與者,我認(rèn)為稱為角色更加合適宪彩,也就是系統(tǒng)為哪些類型的用戶提供服務(wù)休讳,他們都各自承擔(dān)哪些不同的職責(zé),通常被繪制成一個(gè)小人兒尿孔;最后是系統(tǒng)邊界,也就是系統(tǒng)是對(duì)現(xiàn)實(shí)世界哪個(gè)范圍的內(nèi)容進(jìn)行的模擬,它涉及到軟件設(shè)計(jì)的工作范圍與工作量活合,通常被繪制成一個(gè)方框雏婶。但是,通常情況下系統(tǒng)邊界只是一個(gè)概念而不用真正繪制出來白指,因?yàn)楸焕L制成用例的必然是系統(tǒng)內(nèi)部的功能留晚,被繪制成參與者的必然是系統(tǒng)外部事物。從這個(gè)意義上講告嘲,用例圖中的參與者不僅包括人错维,還包括那些外部系統(tǒng)和自動(dòng)觸發(fā)器。根據(jù)這樣一個(gè)思路橄唬,我以往常常將外部系統(tǒng)和自動(dòng)觸發(fā)器繪制成一個(gè)小人赋焕,這常常令客戶感到困惑。隨后我改變了思路仰楚,將外部系統(tǒng)和自動(dòng)觸發(fā)器繪制成另一種表達(dá)形式——類元符號(hào)表示法隆判,并在構(gòu)造型上標(biāo)注為Actor。上圖是一個(gè)考核系統(tǒng)中一個(gè)子模塊的用例圖僧界。圖中的用例就是這個(gè)系統(tǒng)提供給用戶的各項(xiàng)功能侨嘀。注意,這里僅僅是在羅列功能而不表示它們之間諸如流程調(diào)用等相互關(guān)系捂襟,這是一些初學(xué)者常常犯的毛病咬腕。
參與者與用例通過實(shí)線關(guān)聯(lián)起來,代表的是一種使用關(guān)系葬荷。箭頭代表的是一種導(dǎo)航涨共,即動(dòng)作施與的方向。
在這個(gè)用例圖中闯狱,普通用戶執(zhí)行查詢操作煞赢,查詢系統(tǒng)提供的“預(yù)警監(jiān)控單項(xiàng)查詢”、“預(yù)警監(jiān)控匯總查詢”等查詢報(bào)表哄孤;每日自動(dòng)觸發(fā)器觸發(fā)自動(dòng)考核功能照筑,自動(dòng)考核功能從“稅收征管系統(tǒng)”這樣一個(gè)外部系統(tǒng)中采集數(shù)據(jù)。 圖中考核管理員和執(zhí)法人員代表的是兩個(gè)完全不同的角色瘦陈,但他們?cè)谶@個(gè)圖中體現(xiàn)的是一些共有的特性凝危,即對(duì)這堆報(bào)表的查詢,因此被繪制成繼承自普通用戶晨逝。繼承是參與者間唯一的關(guān)系蛾默,代表繼承者擁有被繼承者所有的功能與權(quán)限。除了參與者以外捉貌,用例與用例直接也存在著一些類型的關(guān)系支鸡,這我們?cè)诤竺嬖敿?xì)講述冬念。 在繪制用例圖時(shí)一個(gè)值得思考的細(xì)節(jié)是,用例是怎樣通過分析獲得的牧挣。這個(gè)問題急前,在一些客戶對(duì)信息化管理比較有經(jīng)驗(yàn)的項(xiàng)目中不存在問題,因?yàn)樵诳蛻籼峁┙o我們的需求文檔中就清晰地劃分出了一項(xiàng)一項(xiàng)的功能瀑构。這些功能可能會(huì)在日后的需求分析工作中有所調(diào)整裆针,但它從整體上形成了一個(gè)雛形,成為我們進(jìn)行用例分析進(jìn)而形成用例的依據(jù)寺晌。 但當(dāng)我們面對(duì)的是一些對(duì)信息化管理沒有經(jīng)驗(yàn)的客戶世吨,情況就有些不妙了。在這種情況下呻征,通吃呕椋客戶只能給我們一些管理目標(biāo)、基本想法怕犁,其它的調(diào)研工作就需要我們自己去做了边篮。這時(shí),我給大家的建議是奏甫,首先從組織機(jī)構(gòu)上劃分清楚系統(tǒng)涉及哪些部門戈轿、哪些科室,然后在這個(gè)基礎(chǔ)上劃分出來這些部門這各個(gè)科室的人員都扮演哪些不同職能的角色阵子,以及完成哪些業(yè)務(wù)操作思杯。系統(tǒng)中的一個(gè)功能,在一般情況下是組織機(jī)構(gòu)中某個(gè)(或多個(gè))角色挠进,為該機(jī)構(gòu)某項(xiàng)業(yè)務(wù)流程完成的某個(gè)操作色乾,并且這個(gè)操作應(yīng)當(dāng)有某個(gè)確定的結(jié)果(即產(chǎn)出物)。而這個(gè)功能就是我們需要提取出來的用例领突。雖然功能角色分析在整個(gè)需求分析過程中可能會(huì)隨著認(rèn)識(shí)的深入而不斷調(diào)整暖璧,但分析過程大體是這樣進(jìn)行的。 有人說君旦,我們繪制的用例圖拿給客戶看不懂澎办。這樣一個(gè)清晰明了的用例圖,輔之以我們對(duì)圖形的描述金砍,客戶怎么會(huì)看不懂呢局蚀?關(guān)鍵問題在于,我們沒有將用例圖的精髓弄明白恕稠,再加上出現(xiàn)一些常見問題琅绅,使得用例圖畫得不倫不類,客戶當(dāng)然就看不明白了鹅巍。
現(xiàn)在我們看看用例繪制都有些什么常見問題千扶。
- 沒有正確理解用例圖的視角料祠。前面我反復(fù)強(qiáng)調(diào)了,用例圖的視角是用戶县貌,也就是說术陶,站在用戶的角度來觀察的我們需要設(shè)計(jì)的系統(tǒng)凑懂。從這個(gè)視角煤痕,用戶看到的系統(tǒng)是什么呢?當(dāng)然是一項(xiàng)一項(xiàng)的功能接谨,這些功能是客戶能夠理解的摆碉、具體的、對(duì)客戶存在價(jià)值的功能脓豪。從這個(gè)意義上說巷帝,那些技術(shù)性的功能不應(yīng)當(dāng)出現(xiàn)在這里,或者應(yīng)當(dāng)描述為用戶可以理解的文字扫夜,比如“自動(dòng)考核”楞泼。而那些應(yīng)當(dāng)繪制的用例,在取名時(shí)也應(yīng)當(dāng)站在用戶角度去取名笤闯。舉個(gè)簡(jiǎn)單的例子堕阔,一個(gè)員工檔案信息系統(tǒng),以往我們總愛將用例取名為“添加員工信息”颗味、“更新員工信息”超陆、“刪除員工信息”,這就是典型的技術(shù)人員編寫的用例浦马∈毖剑“添加員工信息”對(duì)于用戶來講應(yīng)當(dāng)是做什么呢——填寫新員工資料;“更新員工信息”對(duì)于用戶來講又是做什么呢——更改員工資料晶默;“刪除員工信息”又是什么呢——員工注銷谨娜。不論是“填寫新員工資料”、“更改員工資料”磺陡,還是“員工注銷”趴梢,對(duì)于客戶都是日常工作中需要完成的操作,將用例命名為這些名字必然為用戶所理解仅政。同時(shí)垢油,每一個(gè)用例對(duì)于用戶來說應(yīng)當(dāng)是有價(jià)值的,也就是說圆丹,用戶使用這個(gè)功能是要完成一項(xiàng)操作滩愁,或獲得什么信息。比如上圖的“自動(dòng)考核”會(huì)產(chǎn)生一批考核結(jié)果辫封,執(zhí)行“預(yù)警監(jiān)控單項(xiàng)查詢”可以獲得預(yù)警監(jiān)控結(jié)果數(shù)據(jù)硝枉。
- 圖形繪制雜亂無章廉丽。一個(gè)系統(tǒng),特別是一個(gè)大型系統(tǒng)妻味,提供給用戶的功能是繁雜的正压。如果你想將所有的功能,不管粗的細(xì)的责球,都試圖繪制在一個(gè)用例圖中焦履,幾乎沒人看得懂。我們之所以將分析設(shè)計(jì)圖形化雏逾,是因?yàn)閳D形能給人形象立體的感官嘉裤,使人立即就明白了其中的意思,但前提是栖博,這個(gè)圖形是主題清晰的屑宠、形象生動(dòng)的。因此仇让,我們繪制用例圖要學(xué)會(huì)拆分典奉,由粗到細(xì)地一個(gè)一個(gè)繪制。先整體的繪制丧叽,再劃分成各個(gè)模塊一個(gè)一個(gè)詳細(xì)繪制卫玖,再進(jìn)一步細(xì)化。所以蠢正,描述一個(gè)系統(tǒng)應(yīng)當(dāng)有許許多多的用例圖骇笔。
-
用例是一個(gè)場(chǎng)景。在現(xiàn)實(shí)世界中嚣崭,我們常常面對(duì)的是一個(gè)個(gè)長(zhǎng)而復(fù)雜的操作流程笨触,但在軟件世界里,我們要將它們拆分成一個(gè)個(gè)的用例雹舀,怎樣拆分芦劣?一個(gè)用例必須有一個(gè)場(chǎng)景,也就是時(shí)間相近说榆、地點(diǎn)單一的一系列操作虚吟,并且這些操作最終應(yīng)當(dāng)有一個(gè)明確的結(jié)果。
如上所示這個(gè)用例圖签财,“申辯申請(qǐng)”就是過錯(cuò)責(zé)任人填寫了一張申辯申請(qǐng)單串慰,最終的結(jié)果是將申辯申請(qǐng)單提交給考核管理員;“申辯受理”就是考核管理員接收了過錯(cuò)責(zé)任人的申辯申請(qǐng)單并予以受理唱蒸,當(dāng)然另一個(gè)結(jié)果是對(duì)其不予受理邦鲫,該申請(qǐng)單被退回給過錯(cuò)責(zé)任人。每個(gè)用例都有確定的場(chǎng)景,明確的目的和結(jié)果庆捺。 功能角色分析是對(duì)系統(tǒng)宏觀的古今、整體的需求分析,它用簡(jiǎn)短的圖形繪制出了一個(gè)系統(tǒng)的整體輪廓滔以。但僅僅進(jìn)行功能角色分析是遠(yuǎn)遠(yuǎn)不夠的捉腥,我們還需要在它的基礎(chǔ)上做更加詳盡的分析。