【摘 要】本文通過(guò)分析UML軟件建模過(guò)程幾個(gè)關(guān)鍵過(guò)程:需求捕獲、用例建模、類(lèi)的分析、用例實(shí)現(xiàn)、類(lèi)圖的確定。每一個(gè)過(guò)程都是是做什么的、如何做的、最后的結(jié)果是什么。經(jīng)過(guò)一系列的分析使建模過(guò)程更清晰。
【關(guān)鍵詞】軟件建模過(guò)程;需求捕獲;用例建模
0.引言
統(tǒng)一建模語(yǔ)言UML(Unified Modeling Language )是一種通用的可視化建模語(yǔ)言,是面向?qū)ο筌浖_(kāi)發(fā)領(lǐng)域中最激動(dòng)人心的工具之一。在軟件開(kāi)發(fā)過(guò)程中,一系列UML模型是開(kāi)發(fā)團(tuán)隊(duì)交流的平臺(tái),也是與用戶交流的平臺(tái),是提高軟件質(zhì)量和效率的保證。如何由用戶界面到代碼實(shí)現(xiàn)?需要用例建模、靜態(tài)建模、動(dòng)態(tài)建模、物理建模來(lái)實(shí)現(xiàn)。下面只對(duì)前三建模的主要模型進(jìn)行分析。
1.捕獲需求
若成功的獲得用戶需求,需要兩個(gè)文檔:用戶需求說(shuō)明和用戶界面原型。用戶需求分為功能性需求和非功能性需求。
1.1功能性需求
可以通過(guò)以下三種方式提取功能需求:
(1)從項(xiàng)目中已存在的文檔中提取功能需求。
(2)通過(guò)訪談獲取更多功能需求。
(3)通過(guò)參觀工作流程提取功能需求。
訪談時(shí)開(kāi)發(fā)團(tuán)隊(duì)需輪流提問(wèn),問(wèn)題要具體、簡(jiǎn)潔、可回答性。獲取需求用陳述語(yǔ)句表達(dá)。對(duì)獲取的功能需求進(jìn)行分類(lèi),設(shè)置優(yōu)先級(jí)(必須、重要、能夠、想要)等。
1.2 非功能性需求
非功能性需求分容量、有效性、性能、遵循標(biāo)準(zhǔn)、安全性等幾種類(lèi)型。
已捕獲的功能性需求和非功能性需求可以生成系統(tǒng)需求規(guī)范說(shuō)明例如檔案管理中的用例如如表1:
表1 檔案管理系統(tǒng)需求規(guī)范說(shuō)明
2.用例建模
用例建模需要尋找Actors和用例,為了達(dá)到這一目的需要以下三個(gè)文檔:
(1)用戶需求說(shuō)明。
(2)用戶界面原型。
(3)系統(tǒng)需求規(guī)范說(shuō)明。
2.1尋找Actors
參與者是與系統(tǒng)進(jìn)行交互的外部實(shí)體,它可以是系統(tǒng)用戶,也可以是其它系統(tǒng)或硬件設(shè)備。通過(guò)向用戶提出以下6個(gè)問(wèn)題[1]找到系統(tǒng)所有參與者。
(1)使用系統(tǒng)主要功能的人是誰(shuí)(即主要參與者)?
(2)需要借助于系統(tǒng)完成日常工作的人是誰(shuí)?
(3)誰(shuí)來(lái)維護(hù)和管理系統(tǒng)(次要參與者),保證系統(tǒng)正常工作?
(4)系統(tǒng)控制的硬件設(shè)備有哪些?
(5)系統(tǒng)需要與哪些其它系統(tǒng)交互?
(6)對(duì)系統(tǒng)產(chǎn)生的結(jié)果感興趣的人或事是哪些?
2.2尋找用例
用例是系統(tǒng)需實(shí)現(xiàn)的功能,通過(guò)向用戶提出以下幾個(gè)問(wèn)題[1]找到用例。
2.2.1針對(duì)參與者
(1)某個(gè)參與者要求系統(tǒng)為其提供什么功能;該參與者需要做哪些工作?
(2)參與者需要閱讀、創(chuàng)建、銷(xiāo)毀、更新或存儲(chǔ)系統(tǒng)中的某些信息嗎?
(3)系統(tǒng)中的事件一定要告知參與者嗎?參與者需要告訴系統(tǒng)一些什么嗎?
(4)系統(tǒng)新功能的識(shí)別,參與者的日常工作被簡(jiǎn)化或效率提高了嗎?
2.2.2針對(duì)系統(tǒng)
(1)系統(tǒng)需要什么樣的輸入和輸出?輸入來(lái)自哪里?輸出去往哪里?
(2)該系統(tǒng)的當(dāng)前狀況還存在哪些問(wèn)題?
(3)系統(tǒng)改進(jìn)的方向是什么?
2.3 用例建模
用例之間的關(guān)系:包含關(guān)系、擴(kuò)展關(guān)系、用例泛化關(guān)系、參與者泛化關(guān)系。例中圖書(shū)管理員處理借還書(shū)用例如圖1:
圖1圖書(shū)管理員處理借還書(shū)用例圖
2.4用例描述
用例描述是將用例發(fā)生的各種場(chǎng)景描述出來(lái),表達(dá)是用戶作什么操作,系統(tǒng)作什么反映。用例描述的內(nèi)容包含用例名、用例編號(hào)、參與者、前置條件、基本場(chǎng)景、輔助場(chǎng)景、后置條件。
3.尋找分析類(lèi)
已有功能性需求和非功能性需求以及用例,現(xiàn)在需要找類(lèi)來(lái)實(shí)現(xiàn)這些功能。采用CRC大腦風(fēng)暴和動(dòng)名詞法尋找類(lèi)、屬性、方法,這是分析類(lèi)的雛形。
4.用例實(shí)現(xiàn)
將用例用時(shí)序圖來(lái)描述,根據(jù)要用例描述來(lái)繪制時(shí)序圖。時(shí)序圖是基于每個(gè)場(chǎng)景的:對(duì)于系統(tǒng)的每一個(gè)場(chǎng)景用一個(gè)時(shí)序圖來(lái)表示,指出哪個(gè)對(duì)象負(fù)責(zé)代碼中哪個(gè)函數(shù)。時(shí)序圖指出運(yùn)行階段對(duì)象實(shí)例如何通過(guò)傳遞消息進(jìn)行通信。每條消息將調(diào)用接受該消息對(duì)象的一個(gè)函數(shù)。如圖書(shū)管理員借書(shū)時(shí)序圖如圖2:
5.確立類(lèi)圖
最困難的工作之一是分配行為到一個(gè)類(lèi)中,時(shí)序圖幫助分配行為決策的理想工具。將時(shí)序圖某一個(gè)對(duì)象提出來(lái),將所有箭頭指向它方法列為該對(duì)象所屬類(lèi)的方法。
6.結(jié)束語(yǔ)
軟件建模的起點(diǎn)是GUI原型即確定了用戶界面,開(kāi)始確定系統(tǒng)的一些場(chǎng)景或用例,接著進(jìn)行用例建模,確定系統(tǒng)功能,進(jìn)而采用用例描述反映用例發(fā)生的各種場(chǎng)景,用健壯圖和時(shí)序圖來(lái)表達(dá)場(chǎng)景,再根據(jù)時(shí)序圖進(jìn)一步精化類(lèi)的方法,最后來(lái)編寫(xiě)類(lèi)的方法,實(shí)現(xiàn)系統(tǒng)功能。軟件建模過(guò)程如圖3。建模關(guān)鍵在用例描述,它是系統(tǒng)功能轉(zhuǎn)向代碼實(shí)現(xiàn)的關(guān)鍵,類(lèi)的確定是難點(diǎn)。類(lèi)圖是根據(jù)分析類(lèi)和時(shí)序圖共同來(lái)精化的。
圖3 軟件建模過(guò)程 [科]
【參考文獻(xiàn)】
[1]陳承歡.UML與Rose軟件建模案例教程[M].北京:人民郵電出版社,2010.
[2]Dr. Jim Arlow.OO Analysis and Design with UML and USDP.Clear View Training Limited,2004.
[3]Kendall Scott[美]Doug Rosenberg.用例驅(qū)動(dòng)的UML對(duì)象建模應(yīng)用—范例分析.論文集[M].北京:人民郵電出版社,2005.