馮富霞,李森貴
(安徽工程科技學(xué)院,安徽蕪湖 241000)
UML科學(xué)建模系統(tǒng)研究
馮富霞,李森貴
(安徽工程科技學(xué)院,安徽蕪湖 241000)
本文對(duì)實(shí)際使用UML的誤區(qū)進(jìn)行了深入分析,針對(duì)問題給出了以可伸縮迭代—遞增模型和階段類驅(qū)動(dòng)可操作任務(wù)為中心的實(shí)用RUP方法,并結(jié)合MDA指出了科學(xué)選擇UML建模工具的指導(dǎo)思想。
UML;可伸縮迭代—遞增模型;RUP;實(shí)用方法
1997年推出的UML為面向?qū)ο筌浖_發(fā)技術(shù)提供了形式化建模語言,UML提供了建模的圖符及其語義等相關(guān)內(nèi)容的詳細(xì)規(guī)定,但是,它僅是語言,而不是方法[1],它們像漢語詞匯與文章寫作的關(guān)系。實(shí)際中如何高效地使用UML,仍存在一些模糊認(rèn)識(shí)。所以,為了全面地認(rèn)識(shí)、正確地應(yīng)用UML,需要深入探討與分析建模過程。
傳統(tǒng)軟件工程中結(jié)構(gòu)化設(shè)計(jì)的思想對(duì)于軟件開發(fā)人員的影響比較深刻,軟件開發(fā)思路大多還是遵循結(jié)構(gòu)化分析、設(shè)計(jì)與結(jié)構(gòu)化編程(SA|SD|SP)的思想。盡管面向?qū)ο蠓治觥⒃O(shè)計(jì)、編程(OOA|OOD|OOP)的思想早已深入人心,但是,實(shí)際應(yīng)用還不盡然。UML作為面向?qū)ο筌浖_發(fā)的標(biāo)準(zhǔn)建模語言也遭遇了同樣的情況,易出現(xiàn)新工具老用的現(xiàn)象,進(jìn)而不能發(fā)揮應(yīng)有的作用。
1.1 以結(jié)構(gòu)化范型應(yīng)用UML
結(jié)構(gòu)化范型以數(shù)據(jù)詞典為驅(qū)動(dòng)[2],具有清晰的軟件生命周期階段劃分,即需求、分析、設(shè)計(jì)、實(shí)現(xiàn)、維護(hù)、退役6個(gè)階段[3]。瀑布模型為典型生命周期模型,實(shí)際中很可能以此為指導(dǎo)思想使用UML,表現(xiàn)如下:
(1)分析階段解決做什么的問題,主要分析系統(tǒng)工作流程以及涉及的數(shù)據(jù),產(chǎn)生相關(guān)文字資料及代表性的數(shù)據(jù)流圖(DFD)和實(shí)體關(guān)系圖(ER);套用UML,僅使用用例圖(對(duì)SA的應(yīng)數(shù)據(jù)流圖)。
(2)設(shè)計(jì)階段分為概要、詳細(xì)設(shè)計(jì),解決怎么做的問題。重點(diǎn)在于規(guī)劃軟件的具體實(shí)現(xiàn),除了文字說明資料外,最富代表性的圖為功能模塊圖、流程圖;套用UML,常照搬功能圖,附加上用活動(dòng)圖(等價(jià)于SD的流程圖)。
(3)后兩個(gè)階段為具體的實(shí)現(xiàn)階段,沒有太正規(guī)的文檔資料。80年代由于大量面向?qū)ο罂梢暬幊坦ぞ叩氖褂?如C ++,JAVA,DELPHI等),OOP隨即被人們所熟知、推崇[4]。但是,因?yàn)榱?xí)慣于結(jié)構(gòu)化編程思路,人們至今常常還在被動(dòng)使用類、對(duì)象的概念,并沒有或很少去主動(dòng)地構(gòu)建系統(tǒng)本身的類,只是在語言工具提供的組件對(duì)象中添加事件,更改其屬性從而實(shí)現(xiàn)系統(tǒng)功能。
至于UML其他圖由于沒有設(shè)立類而無法使用。在實(shí)現(xiàn)階段,UML的出現(xiàn)并沒有改變以上現(xiàn)狀。用這種方式使用UML是牽強(qiáng)的。
1.2 以面向?qū)ο蟮乃枷霊?yīng)用UML,但不遵循規(guī)范的過程方法
面向?qū)ο箝_發(fā)以用例圖為驅(qū)動(dòng),已被證明是當(dāng)前最有效的開發(fā)方式[5]。使用面向?qū)ο蟮乃枷肟隙ㄒ㈩?因此,能充分使用UML靜態(tài)、動(dòng)態(tài)圖,以各種視角完善建模系統(tǒng)。
但是,面向?qū)ο筝^傳統(tǒng)軟件開發(fā)是復(fù)雜的,UML內(nèi)容是龐大的,如果沒有規(guī)范的過程方法指導(dǎo),可能UML圖會(huì)隨心所欲使用,缺乏條理性、邏輯理性、目的性,達(dá)不到準(zhǔn)確、全面描述系統(tǒng)的目的,人為增加開發(fā)復(fù)雜性。許多介紹UML使用的案例也存在不明確過程方法、階段性任務(wù)和最終目的不明確等問題,不能正確引導(dǎo)使用。此種使用雖較前者有很大進(jìn)步,但仍不夠科學(xué),沒有發(fā)揮UML的利用率。
2.1 全面認(rèn)識(shí)面向?qū)ο蠓缎?/p>
首先,必須對(duì)采納UML的軟件開發(fā)范型有全面、深入地認(rèn)識(shí),明確使用UML的指導(dǎo)思想和價(jià)值。當(dāng)前最先進(jìn)的軟件開發(fā)技術(shù)與傳統(tǒng)范型的系統(tǒng)對(duì)比見表1。
2.2 使用UML要遵循科學(xué)、規(guī)范的軟件開發(fā)過程
2.2.1 UML與RUP統(tǒng)一過程相結(jié)合
軟件工程的目的是高效率、高效益生產(chǎn)正確、可靠并滿足用戶要求的軟件。軟件過程是軟件工程的重心。當(dāng)今,流行的面向?qū)ο筌浖^程是1999年 Rational公司的統(tǒng)一過程(RUP),由前Rational公司三位著名的高級(jí)管理人員Jacobson、Booch、Rumbaught提出,其集成了其他面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn),并經(jīng)過實(shí)踐證明,對(duì)于不同過程具有自適應(yīng)性。包括開始、細(xì)化、構(gòu)建、移交四個(gè)階段,采用最符合人類解決問題方式的迭代——遞增周期模型,每階段都有明確的階段性任務(wù),要建立翔實(shí)的文檔、UML模型[6]。
表1 結(jié)構(gòu)化和面向?qū)ο蠓缎偷膶?duì)比
Gartner公司的Dugguan警告說:“要記住,UML只是一種符號(hào),并不是什么方法論?!币l(fā)揮UML的利用率,解決以上2節(jié)中的問題,需UML與RUP統(tǒng)一過程相結(jié)合。它們之間關(guān)系為RUP的操作需借助于UML表達(dá),UML科學(xué)、合理的使用必須借助RUP支撐。
2.2.2 統(tǒng)一過程的實(shí)用實(shí)施方法
統(tǒng)一過程并不是一系列具體的操作步驟,而是包括方法學(xué)(生命周期模型)、技術(shù)、工具、人的復(fù)雜綜合性學(xué)科。全面了解、應(yīng)用RUP是困難的,所以,需要對(duì)其精要進(jìn)行總結(jié)、提煉,實(shí)際中指導(dǎo)軟件開發(fā)。
統(tǒng)一過程實(shí)用實(shí)施方法主要包括:軟件生命周期模型的選擇和可操作性階段任務(wù)。
軟件生命周期模型的選擇,可伸縮迭代—遞增模型如圖1,瀑布模型是成功的傳統(tǒng)模型,它是迭代而不遞增的,迭代—遞增模型可以說是瀑布模型與遞增模型的有機(jī)融合。
可操作性階段任務(wù),類驅(qū)動(dòng)建模過程。從圖1可以看出幾乎每一遞增階段都涉及生命周期的所有階段,只是工作側(cè)重點(diǎn)不同。具體操作其實(shí)隱含著一條線:需求描述—分析類—設(shè)計(jì)類—實(shí)現(xiàn)類,其實(shí)際區(qū)別如圖2,每階段具體操作概括為:
1.以用戶角度,建立商業(yè)模型。主要反映系統(tǒng)實(shí)際情況與用戶溝通捕獲需求,全面建模系統(tǒng),其中以用例圖為代表。
2.以開發(fā)人員角度,建立分析模型(中心分析類)。
a)用例圖內(nèi)容分組(包),添加設(shè)計(jì)所需包。(可選)
b)根據(jù)前階段的系統(tǒng)描述,提取名詞為類,并分為邊界、控制、實(shí)體類。
c)提取類的屬性、操作的概要信息。確定分析類之間的關(guān)系,建立系統(tǒng)以分析類為基礎(chǔ)的靜態(tài)、動(dòng)態(tài)描述圖(包圖注意包的內(nèi)聚、耦合性)。
注:模型中多自然語言標(biāo)示。
圖1 可伸縮迭代—遞增模型
3.建立系統(tǒng)詳細(xì)、可操作的設(shè)計(jì)模型(中心設(shè)計(jì)類)。
a)體系結(jié)構(gòu)設(shè)計(jì)。規(guī)劃系統(tǒng)軟件制品對(duì)應(yīng)的構(gòu)件圖和硬件設(shè)置相關(guān)的部署圖。
b)由分析類建立設(shè)計(jì)類。模型中所有命名程序性標(biāo)準(zhǔn)化 ,屬性細(xì)化到類型、長度描述,操作具體到可程序化的要求(活動(dòng)圖、狀態(tài)圖),建立系統(tǒng)以設(shè)計(jì)類為基礎(chǔ)的靜態(tài)、動(dòng)態(tài)描述圖。
注:模型中多程序性語言標(biāo)示。
4.把設(shè)計(jì)類轉(zhuǎn)化為具體編程語言相關(guān)的實(shí)現(xiàn)類,實(shí)現(xiàn)軟件制品。
5.構(gòu)建測(cè)試模型,測(cè)試實(shí)現(xiàn)。
圖2 分析類—設(shè)計(jì)類—實(shí)現(xiàn)類
2.3 樹立MDA思想,合理選擇UML工具
很多人認(rèn)為系統(tǒng)開發(fā)就是編碼,當(dāng)前又出現(xiàn)極限編程新倡導(dǎo)。RUP要求建立詳盡的系統(tǒng)模型,如果這些模型只用于交流目的,就會(huì)失去建立UML模型的誘惑力,阻礙使用UML的主觀能動(dòng)性。MDA模型驅(qū)動(dòng)體系架構(gòu)是當(dāng)前軟件業(yè)的熱點(diǎn)之一,倡導(dǎo)UML模型的自動(dòng)生成性。UML2支持MDA的特性,軟件架構(gòu)師Shaun·Forgie認(rèn)為,UML2.0版本是模型驅(qū)動(dòng)開發(fā)時(shí)代到來的號(hào)角。建模文件不再是負(fù)擔(dān),由模型自動(dòng)得到執(zhí)行系統(tǒng),這是使用UML的真正動(dòng)力。
但是,MDA還處于新生階段,實(shí)現(xiàn)此目標(biāo)需真正支撐MDA工具的出現(xiàn),目前,嚴(yán)格地說沒有此種工具,大部分是支持生成代碼框架。但是,僅此也可以減輕工作量,提高系統(tǒng)開發(fā)效率、效益,且長遠(yuǎn)收益是巨大的(軟件架構(gòu)師Shaun·Forgie說,“模型驅(qū)動(dòng)架構(gòu)已經(jīng)使我節(jié)省了50%的開發(fā)工作量)。
使用UML要樹立MDA思想,有意識(shí)地選擇支持MDA的恰當(dāng)工具(如:IBM等奠基的Eclipse將成為全面實(shí)現(xiàn)這個(gè)復(fù)雜結(jié)構(gòu)的第一個(gè)開發(fā)環(huán)境),提高UML模型的最大利用價(jià)值,增強(qiáng)使用UML建模系統(tǒng)的主動(dòng)性。
科學(xué)實(shí)用的UML建模過程是復(fù)雜的工程,本文側(cè)重軟件開發(fā)本身,并沒有從管理學(xué)、經(jīng)濟(jì)學(xué)等角度探討,同時(shí)提出的觀點(diǎn)需要在實(shí)踐中進(jìn)一步發(fā)展提高。
[1]Ivar Jacobson,等.統(tǒng)一軟件開發(fā)之路[M].北京:機(jī)械工業(yè)出版社,2002:1-10.
[2]李芷,等.軟件工程方法與實(shí)踐[M].北京:電子工業(yè)出版社,2004:20-30.
[3][5]Stephen R.Schach面向?qū)ο笈c傳統(tǒng)軟件工程:統(tǒng)一過程的理論與實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2006:159-160.
[4]殷兆麟.UML及其建模工具的使用[M].北京:清華大學(xué)出版社,2004:1-10.
[6]Per Kroll,Philippe Kruchten.Rational統(tǒng)一過程:實(shí)踐者指南[M].北京:中國電力出版社,2004:1-10.20-40.
(責(zé)任編輯:潘 敏)
Research on the Scientifically Modeling System with UML
Feng Fuxia,Li Sengui
(Anhui Engineering Technological College,Wuhu Anhui 241000)
In this papaer,the practical mistake about UML usage is analyzed deeply,useful approach aiming at the mistake is given,which is the flexible iterative-increasing model and driven-class phase manipulability tasks.At last, based on MDA,the guidance about the scientific choice on UML tool is given.
UML;flexible iterative-increasing model;RUP;useful approach
2009-11-11
馮富霞(1974-),女(漢族),河北獻(xiàn)縣人,安徽工程科技學(xué)院計(jì)算機(jī)科學(xué)與工程系講師,碩士研究生.
TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-2080(2010)02-0087-03