摘 要: 在分析當前軟件工程中使用UML方法劃分軟件子系統(tǒng)方法,存在很大的主觀因素的基礎(chǔ)上,引入形式概念分析(FCA)理論解決這一不足,通過UML可視化建模得到用例圖后生成用例的形式背景,進而構(gòu)造概念格,最后通過對概念格的分析,完成對軟件子系統(tǒng)的劃分。
關(guān)鍵詞: 形式概念分析;子系統(tǒng)劃分;軟件建模;UML;用例模型
隨著軟件工程的飛速發(fā)展,軟件建模提出了一系列的語言、理論、工具和方法。實踐表明,大多數(shù)的系統(tǒng)軟件開發(fā)中的錯誤是由需求和設(shè)計階段產(chǎn)生的,而且錯誤在系統(tǒng)中存在的時間越長則越難發(fā)現(xiàn),解決這些錯誤的代價也越高。為了提高軟件需求和軟件設(shè)計的質(zhì)量,軟件工程界提出了需求分析工程技術(shù)和各種軟件建模技術(shù)。
在軟件建模中,當獲得用戶需求后,首要任務(wù)就是要劃分子系統(tǒng),子系統(tǒng)劃分得合理與否,直接影響軟件后續(xù)的開發(fā)和維護工作能否順利進行。劃分子系統(tǒng)時首先應(yīng)該要遵循“高內(nèi)聚、低耦合”的原則;其次要考慮到所有的使用角色,兼顧使用者的需求;最后也要適當考慮整體開發(fā)的分段實現(xiàn)。
1 概述
在研制開發(fā)軟件系統(tǒng)尤其是開發(fā)一個較大企業(yè)管理系統(tǒng)時,為便于直觀方便地劃分子系統(tǒng),通常根據(jù)過程與數(shù)據(jù)類的相關(guān)性,利用功能和數(shù)據(jù)的關(guān)系確定子系統(tǒng)。由此要涉及到許多支持的相關(guān)理論和方法,如模糊聚類、神經(jīng)網(wǎng)絡(luò)等。這些方法幾乎都有一個共同點,都需要產(chǎn)生或處理C-U矩陣的問題。其中,C表示程序模塊對基本表的存入關(guān)系(即創(chuàng)建或維護基本表),U表示對基本表的使用關(guān)系。雖然C-U矩陣具有很強的分析能力,但在實際開發(fā)軟件系統(tǒng)中,C-U矩陣的構(gòu)造和處理都比較復(fù)雜,增加了軟件開發(fā)與設(shè)計的難度,從獲取用戶需求、描述能力和圖形化方面都有待于提高。
目前,統(tǒng)一建模語言(UML)形成了相對完善的建模理論并得到了廣泛的應(yīng)用,能夠快速地獲得用戶的需求,也有很好的圖形展示。但UML在劃分子系統(tǒng)時,常根據(jù)開發(fā)人員的主觀因素去進行判斷,降低了系統(tǒng)的科學(xué)性。為減少產(chǎn)生錯誤的代價和彌補應(yīng)用UML建模開發(fā)過程中的不足,本文探討了應(yīng)用FCA理論方法來解決這一問題。
2 形式概念分析
形式概念分析FCA(Formal Concept Analysis)[1]是對概念的哲學(xué)理解的數(shù)學(xué)化表達,是以人為中心的構(gòu)造數(shù)據(jù)并分析數(shù)據(jù)的方法,是數(shù)據(jù)的內(nèi)在結(jié)構(gòu)、 關(guān)聯(lián)和相互依存關(guān)系的可視化方法。FCA將概念的對象看作外延,將屬性看作內(nèi)涵對概念數(shù)學(xué)化,然后通過構(gòu)造形式背景進而生成概念格對給定的數(shù)據(jù)進行數(shù)學(xué)分析和思考。FCA作為人工世界的建模工具,與傳統(tǒng)的建模方法相比較,既具有描述能力又具有分析能力,還具有圖形化能力,這從根本上決定了其在軟件系統(tǒng)建模中無可替代的優(yōu)勢。
由以上定義可以看出,概念的內(nèi)涵是概念外延中所有對象共同屬性的集合,而概念的外延則是概念內(nèi)涵可以確定的最大對象集合,一個概念是一個完備的二元組。特別定義兩個特殊的概念,分別是:包含所有對象的概念為全概念,包含所有屬性的概念為空概念。形式概念(A,B)的外延A和內(nèi)涵B被關(guān)系I緊密地聯(lián)系在一起。因為A′=B且B′=A,則外延決定內(nèi)涵,同時內(nèi)涵也決定外延,進而決定了形式概念。
2.2 FCA在軟件系統(tǒng)中的應(yīng)用
FCA被引入到信息科學(xué)技術(shù)領(lǐng)域后,即被軟件工程及軟件系統(tǒng)開發(fā)等領(lǐng)域所關(guān)注和應(yīng)用。在國外的應(yīng)用研究中,有如參考文獻[3]的基于FCA的信息系統(tǒng)模型綜合性與完整性的驗證方法。在參考文獻[4]中,F(xiàn)CA在軟件系統(tǒng)開發(fā)中的應(yīng)用被分為早期階段活動和軟件維護兩方面。早期階段主要應(yīng)用于需求分析、復(fù)用組件檢索、形式化規(guī)格說明和基于FCA的Z規(guī)格可視化等;而軟件的維護階段主要用于類層次再工程。在參考文獻[5]中指出:FCA可以很好地運用在軟件生命周期的各個階段;若將FCA用在軟件工程的各個主要部分還有可能開啟一個徹底的基于概念的軟件工程新視角等。
為此,本文結(jié)合UML建模方法與FCA的各自優(yōu)勢,設(shè)計了UML建模與FCA相結(jié)合的軟件子系統(tǒng)劃分的新方法,使得快速準確地獲得用戶需求的同時又科學(xué)地劃分軟件子系統(tǒng)。并且希望通過在劃分軟件子系統(tǒng)這一應(yīng)用中,找到UML方法和FCA理論在軟件建模應(yīng)用中的其他結(jié)合點。
3 基于FCA軟件子系統(tǒng)劃分
3.1 軟件系統(tǒng)建模問題分析
基于UML的面向?qū)ο筌浖^程建??朔藗鹘y(tǒng)軟件都用過程或函數(shù)作為主要構(gòu)造模塊,同時還解決了數(shù)據(jù)流分析的層次復(fù)雜性,對軟件系統(tǒng)模型的映射程度進行了加強;而且UML作為面向?qū)ο蟮目梢暬瘶藴式UZ言,采用的是圖形符號進行表示系統(tǒng)中所有的對象和關(guān)系,應(yīng)用直觀的圖形從不同的角度描述待開發(fā)系統(tǒng),為更好地理解建模過程提供了有效的交流形式。
應(yīng)用UML建模開發(fā)一個功能多、數(shù)據(jù)較復(fù)雜的軟件系統(tǒng),在開發(fā)過程中,基本上都是采用由大劃小、各個擊破的方式。因此,對復(fù)雜軟件系統(tǒng)結(jié)構(gòu)的分析就成為軟件系統(tǒng)建模要解決的首要問題,而明確系統(tǒng)-子系統(tǒng)-功能模塊之間的層次關(guān)系以及各個層次中各要素間的相互作用就成為軟件系統(tǒng)建模的前提和基礎(chǔ)。
軟件系統(tǒng)結(jié)構(gòu)建模的難點在于如何將系統(tǒng)內(nèi)相互聯(lián)系緊密的模塊聚合在一起,使得模塊內(nèi)部的內(nèi)聚合性增強,同時使模塊間的耦合度降低。FCA的概念格理論所提供的聚類機制可以很好地解決這一難題。所以,本文在軟件的開發(fā)過程中,采用以UML進行建模、使用FCA對軟件系統(tǒng)進行子系統(tǒng)劃分方法,可以使軟件系統(tǒng)在開發(fā)過程對子系統(tǒng)的劃分更加地合理、科學(xué)。
3.2 基于FCA建模的實例分析應(yīng)用
下面以學(xué)生選課管理系統(tǒng)為例,說明利用FCA結(jié)合UML對系統(tǒng)結(jié)構(gòu)建模的基本原理。
?。?)窮舉軟件系統(tǒng)所要實現(xiàn)的所有功能模塊
UML分析系統(tǒng)功能需求較為快速有效的方法就是構(gòu)建用例模型,并以用例圖加以描述。這一部分可以采用按角色找到系統(tǒng)的用例(即系統(tǒng)的功能)。學(xué)生選課管理系統(tǒng)的參與角色主要有學(xué)生、教師、教學(xué)秘書這三類。按照這三個角色可以得到的系統(tǒng)用例圖如圖1所示。
?。?)找到各功能所對應(yīng)數(shù)據(jù)類并生成形式背景
根據(jù)定義1中所述,形式背景由概念的內(nèi)涵和外延組成,外延為對象集,在本方法中將功能集合作為對象集(即形式背景中的外延),以數(shù)據(jù)集合作為屬性集(即形式背景的內(nèi)涵),建立起兩者的“功能-數(shù)據(jù)”二元關(guān)系。在這里,功能-數(shù)據(jù)的二元關(guān)系既包括功能產(chǎn)生對應(yīng)數(shù)據(jù)這一關(guān)系,也包括該功能使用對應(yīng)數(shù)據(jù)這一關(guān)系。結(jié)合實例,生成學(xué)生選課管理系統(tǒng)“功能-數(shù)據(jù)”形式背景如表1所示。
?。?)根據(jù)概念格的聚類功能
使用或產(chǎn)生相同數(shù)據(jù)并實現(xiàn)相近功能的節(jié)點在概念格的Hasse圖上必能聚集在一起,根據(jù)這一規(guī)律在系統(tǒng)分析員的幫助下,利用Hasse圖就可以輕易地分析找出“功能-數(shù)據(jù)”密切相關(guān)的一些模塊,將之歸納入一個子系統(tǒng)中并命名。將“功能-數(shù)據(jù)”聯(lián)系緊密的模塊聚集在一起,如圖2中的區(qū)域所示,每個區(qū)域代表一個子系統(tǒng),區(qū)域1代表選課管理子系統(tǒng),區(qū)域2代表成績管理子系統(tǒng),區(qū)域3代表新課程增加子系統(tǒng)。
?。?)判別子系統(tǒng)或模塊實現(xiàn)的先后次序
利用概念格節(jié)點的聯(lián)系可以很容易判斷出子系統(tǒng)之間的關(guān)系,也可得出子系統(tǒng)產(chǎn)生的數(shù)據(jù)有多少被其他子系統(tǒng)所共享,在充分考慮共享數(shù)據(jù)的重要性及關(guān)聯(lián)的緊密程度的前提下,可根據(jù)各子系統(tǒng)間的技術(shù)約束來判別實現(xiàn)的先后順序。如圖2所示,區(qū)域2中成績管理子系統(tǒng)要使用區(qū)域1中的課程信息數(shù)據(jù),因此選課管理子系統(tǒng)要先于成績管理子系統(tǒng)實現(xiàn)。在同一子系統(tǒng)中,節(jié)點(即模塊)的層次越高,其使用和產(chǎn)生的數(shù)據(jù)被下級節(jié)點所共享的程度就越大。因此,可以根據(jù)區(qū)域中節(jié)點的層次關(guān)系,也即是屬性(即模塊使用和產(chǎn)生的數(shù)據(jù))的層次關(guān)系來確立子系統(tǒng)中模塊開發(fā)的先后次序。
子系統(tǒng)劃分是軟件系統(tǒng)建模中的一個基礎(chǔ)性工作,子系統(tǒng)劃分是否合理,將會直接影響到軟件系統(tǒng)后續(xù)的開發(fā)和維護。本文提出的劃分子系統(tǒng)方法,首先運用UML建模方法找到系統(tǒng)中的角色,然后根據(jù)每個角色窮盡其所有的用例(即找到功能),最后使用形式概念分析方法構(gòu)造出形式背景,進而構(gòu)造出概念格,完成子系統(tǒng)的劃分。有效地避免了單純用UML建模中的主觀意識,使得子系統(tǒng)劃分工作更科學(xué)、更合理。
參考文獻
[1] WORMUTH B, BECKER P. Introduction to formal concept analysis[C]. Proceedings of the 2nd International Conference of Formal Concept Analysis, Sydney, Australia, 2004:1-4.
[2] 謝志鵬,劉宗田.基于概念格的關(guān)聯(lián)規(guī)則發(fā)現(xiàn)[J].小型微型計算機系統(tǒng),2000,21(10):1028-1031.
[3] LAUKAITIS A, VASILECAS O. Formal concept analysis and information systems modeling[C]. Proceedings of the International Conference on Computer Systems andTechnologies, Bulgaria. New York, NY, USA: ACM, 2007.
[4] TILLEY T, COLE R, BECKER P, et al. A survey of formal concept analysis support for software engineering activities [C]. Berlin/Heidelberg: Springer, 2005: 107-118.