楊 曦
(福州大學(xué)陽光學(xué)院,福建福州350015)
一種基于CBD的構(gòu)件優(yōu)化選擇模型
楊 曦
(福州大學(xué)陽光學(xué)院,福建福州350015)
構(gòu)件優(yōu)化選擇模型一直是基于構(gòu)件開發(fā)領(lǐng)域的研究熱點(diǎn),但過去的二十年間這方面的理論研究一直未取得太大的成果,尤其在選擇構(gòu)件時(shí)幾乎都未考慮構(gòu)件間內(nèi)聚和耦合的影響.本文提出一種構(gòu)件優(yōu)化選擇的數(shù)學(xué)模型,為如何選擇構(gòu)件提供一種可量化的依據(jù).該模型將CBD開發(fā)的功能性評級及構(gòu)件的內(nèi)聚性和耦合度進(jìn)行了量化,試圖在功能評級和內(nèi)聚性最大化,而耦合度最小化的情況下,應(yīng)用遺傳算法尋求最佳的構(gòu)件選擇方案.最后,通過一個(gè)小型金融系統(tǒng)的案例來驗(yàn)證該模型的有效性.
CBD開發(fā);耦合度;模塊化;遺傳算法
大型軟件系統(tǒng)的有效性開發(fā)一直以來都是軟件工業(yè)界的挑戰(zhàn).許多概念和方法的提出,比如抽象數(shù)據(jù)類型、結(jié)構(gòu)化編程、面向?qū)ο蠓椒?、設(shè)計(jì)模式和建模語言等,都是為了提高軟件系統(tǒng)開發(fā)的有效性.而近年來,基于構(gòu)件的開發(fā)CBD(ComponentBasedDevelopment)則成為一種最具潛力的軟件有效性開發(fā)方法[1].而所謂構(gòu)件則被定義為有特定合約接口且有明確上下文依賴的合成化單元[2].CBD關(guān)注于按功能或邏輯將系統(tǒng)分解成接口定義良好的構(gòu)件集,從而可以選擇合適的商業(yè)成品構(gòu)件(CommercialOff-the-ShelfComponent,COTS)來集成軟件系統(tǒng).這種方法已證實(shí)可以大大縮短開發(fā)時(shí)間并使得開發(fā)出來的系統(tǒng)具有更好的可維護(hù)性.
許多研究試圖為軟件的模塊化定義標(biāo)準(zhǔn)、開發(fā)度量,以量化模塊化行為.傳統(tǒng)基于模塊的軟件系統(tǒng)開發(fā),通常都依循高內(nèi)聚、低耦合的設(shè)計(jì)原則.內(nèi)聚度高的模塊具有較好的可重用性,而低耦合性則使得軟件系統(tǒng)更易維護(hù).文獻(xiàn)[3]提出一種基于耦合和內(nèi)聚的軟件質(zhì)量度量方法,該方法給出了一些好的編程實(shí)踐特性,旨在減少維護(hù)及修改的成本.文獻(xiàn)[4]探討了軟件系統(tǒng)模塊化的標(biāo)準(zhǔn),并將此標(biāo)準(zhǔn)在傳統(tǒng)和非傳統(tǒng)的方式下進(jìn)行了評估.文獻(xiàn)[5,6]提出了一種新的度量集,用于分析大型系統(tǒng)模塊間的交互性和評估軟件模塊化的質(zhì)量.文獻(xiàn)[7]基于最小耦合度、最高內(nèi)聚性的標(biāo)準(zhǔn),提出一種定量的方法用于測量和評估軟件模塊化的方案.文獻(xiàn)[8]提出一種構(gòu)件選擇的兩階段決策模型,通過案例檢索和(0-1)整數(shù)目標(biāo)規(guī)劃,實(shí)現(xiàn)最優(yōu)構(gòu)件組合選擇.文獻(xiàn)[9]提出一種基于線性規(guī)劃的構(gòu)件優(yōu)化選擇機(jī)制,將構(gòu)件選擇問題轉(zhuǎn)化為在一組線性約束條件下目標(biāo)函數(shù)優(yōu)選的數(shù)學(xué)問題,利用回溯法求得最優(yōu)構(gòu)件選擇方案.
研究表明,在可相互替換的軟件構(gòu)件集中,通常認(rèn)為這些構(gòu)件應(yīng)該具有相同的功能.而事實(shí)上,因?yàn)檐浖?gòu)件由不同構(gòu)件廠商提供,所以功能上就可能存在差異.因此,在選擇商業(yè)構(gòu)件時(shí),構(gòu)件對于CBD功能需求的契合度也必須加以考慮.之前關(guān)于模塊化及構(gòu)件選擇的研究,雖然從不同角度給出了構(gòu)件選擇的依據(jù)和方法,但基于最小耦合度及最大內(nèi)聚性的定量方法都無法妥善解決如何為不同軟件模塊(Module)選擇最合適的構(gòu)件,更沒有考慮到構(gòu)件對于系統(tǒng)的功能性貢獻(xiàn)因素,而這三種因子對于軟件系統(tǒng)的可重用性、易維護(hù)性及系統(tǒng)可用性等質(zhì)量屬性又起著關(guān)鍵的決定作用.所以,本文以最小耦合度、最大內(nèi)聚性為因子,同時(shí)將軟件功能契合度最大化的因素也加以考慮,用于軟件構(gòu)件的選擇.基于這些因子構(gòu)建的構(gòu)件優(yōu)化選擇模型是一組帶約束的二進(jìn)制二次方程,故引入遺傳算法解決優(yōu)化選擇的進(jìn)化問題.
2.1 基礎(chǔ)選擇模型
將內(nèi)聚性和耦合度做為構(gòu)件選擇的考慮因子這方面,本文引用文獻(xiàn)[7]的定量測量內(nèi)聚和耦合的方法,用模塊內(nèi)耦合度(Intra-modular Coupling Density,ICD)的概念來表示模塊的內(nèi)聚和耦合間的定量關(guān)系,公式如下:
CIIN是模塊內(nèi)部構(gòu)件與構(gòu)件之間的交互數(shù),而CIOUT是某一模塊中的構(gòu)件與另一模塊的構(gòu)件之間的交互數(shù).如圖1所示,CIIN=6(圖中實(shí)線的數(shù)目),CIOUT=6(圖中虛線的數(shù)目),則ICD=0.5.本文ICD用于表示耦合和內(nèi)聚的比例關(guān)系,這樣,模塊j的內(nèi)聚與所有交互數(shù)的比例可以表示為ICDj.
圖1 CBD軟件模塊的內(nèi)聚和耦合
然而,我們很容易發(fā)現(xiàn),若有些模塊只有一個(gè)構(gòu)件(比如圖1中的模塊2與模塊3),則這些模塊ICD的值勢必為0.為彌補(bǔ)這個(gè)缺陷,我們將公式(1)的分子簡單地加上1,于是得到如下表示第j個(gè)模塊耦合度的公式:
眾所周知,高內(nèi)聚、低耦合可以使軟件系統(tǒng)具有較高的可維護(hù)性.所以ICD的值對于以CBD方式開發(fā)的軟件系統(tǒng)的可維護(hù)性而言至關(guān)重要.
2.2 優(yōu)化選擇模型
CBD開發(fā)首先應(yīng)該將模塊識別出來,并且每個(gè)模塊至少要有一個(gè)構(gòu)件組成.軟件構(gòu)件是包含可執(zhí)行程序代碼的軟件產(chǎn)品,通常由第三方構(gòu)件廠商提供.CBD開發(fā)中一個(gè)最主要的問題是如何從市場中選擇合適的構(gòu)件來組成模塊.通常,CBD采用自頂向下的開發(fā)方法.這種方法,首先需定義功能/客戶需求.然后再確定模塊的數(shù)目及特性,最后選擇合適的構(gòu)件組成模塊.選擇構(gòu)件的原則必須遵循模塊內(nèi)部的構(gòu)件之間的交互最大化(最大內(nèi)聚性),而模塊與其他模塊的構(gòu)件之間的交互最小化(最小耦合度).
為構(gòu)建構(gòu)件選擇的優(yōu)化模型,需要先定義、說明一些參數(shù),如表1所示:
表1 構(gòu)件優(yōu)化選擇模型參數(shù)表
則第j個(gè)模塊的內(nèi)聚值(CIIN)j的計(jì)算公式為:
第j個(gè)模塊的交互性(包括內(nèi)聚和耦合)CAj的計(jì)算公式為:
軟件系統(tǒng)所有模塊的交互性CA的計(jì)算公式為:
所有模塊內(nèi)聚值的和CIIN為:
這樣,基于上一節(jié)確定的標(biāo)準(zhǔn)(即公式2),我們構(gòu)建的構(gòu)件選擇的優(yōu)化數(shù)學(xué)模型如下:
顯然,為了優(yōu)化選擇構(gòu)件,目標(biāo)函數(shù)(7)是軟件系統(tǒng)功能性最大化的量化公式,目標(biāo)函數(shù)(8)是ICD值最大化的量化公式,即基于系統(tǒng)模塊間耦合度最小,而模塊本身內(nèi)聚度最大的情況構(gòu)建的計(jì)算公式.等式(9)顯示從待選構(gòu)件集中只能為所服務(wù)的模塊選擇一個(gè)構(gòu)件.不等式(10)限定每個(gè)模塊里至少要有一個(gè)構(gòu)件.為了簡化優(yōu)化模型,我們用Fmax和Fmin分別表示F的最大值和最小值,用Imax和Imin表示ICD的最大值和最小值,將多目標(biāo)優(yōu)化模型轉(zhuǎn)化為集成的單一目標(biāo)優(yōu)化模型.這樣,目標(biāo)函數(shù)(7)~(9)轉(zhuǎn)化為:
這里,wf、wl分別代表F和ICD在系統(tǒng)中的權(quán)重,故wf+wl=1.Fmax的值可以通過求解(7)、(9)、(10)、(11)而確定.同理,F(xiàn)min可以通過求解(14)、(9)、(10)、(11)來獲得.而Imax可以通過求解(8)、(9)、(10)、(11)獲得,Imin可以通過求解(15)、(9)、(10)、(11)獲得.
2.3 基于遺傳算法的優(yōu)化選擇
由于優(yōu)化模型是帶約束的二元二次方程,所以優(yōu)化選擇問題事實(shí)上是一個(gè)NP完全問題,而解決這類問題最重要的就是如何有效解決“組合爆炸”的問題,顯然遺傳算法[10]是一種明智選擇.
我們通過一個(gè)案例來分析優(yōu)化選擇模型的有效性,其中遺傳算法染色體表示如圖2(a)所示.在這個(gè)案例中,將軟件系統(tǒng)分成三個(gè)模塊m1、m2、m3,而由市面上選定的12個(gè)商業(yè)構(gòu)件(sc1~sc12)組成5個(gè)可選構(gòu)件集(s1~s5),每一個(gè)可選集中只有一個(gè)構(gòu)件可以被選中用于某個(gè)特定模塊,同一可選集中的構(gòu)件都提供相似的功能并可相互替換.如圖2所示,sc2、sc4、sc8、sc10及sc12分別從s1、s2、s3、s4、s5中被選中.
圖2 染色體表示及ZIP編碼示例
關(guān)于編碼,本文采用ZIP編碼方式,其結(jié)構(gòu)如圖2(b)所示.每一對基因分別代表軟件構(gòu)件編號及選中該構(gòu)件的模塊編號,例如,第一對編碼表示構(gòu)件sc2被模塊m2選中,同理第二對編碼表示sc4被m1選中.這種編碼方式除了能較高概率地獲得有效方案,而且也滿足了約束條件.故而,在每一次交叉和變異之后,算法都無需驗(yàn)證個(gè)體是否能令人滿意.與經(jīng)典遺傳算法相似的是,2個(gè)交叉點(diǎn)也是隨機(jī)產(chǎn)生的,并且將兩個(gè)父基因在交叉點(diǎn)處互換部分的染色體.然而,本文中的交叉點(diǎn)必須在染色體的相同位置.
變異可以發(fā)生在染色體的任意位置.一對基因由隨機(jī)生成的構(gòu)件和模塊替換.交叉和變異后,需在個(gè)體上做一個(gè)有效性測試,以確保構(gòu)件與模塊的結(jié)合是有效的.若無效,則放棄該解決方案,而新的個(gè)體將會被創(chuàng)建直至通過有效性測試.
為驗(yàn)證構(gòu)件優(yōu)化選擇模型的有效性,本節(jié)以一個(gè)小型金融系統(tǒng)的CBD開發(fā)為例,闡述優(yōu)化選擇模型的整個(gè)應(yīng)用流程并對結(jié)果進(jìn)行分析.該系統(tǒng)由10個(gè)功能需求構(gòu)成,開發(fā)團(tuán)隊(duì)經(jīng)過分析討論將其分為Business(m1)、Security(m2)和Assistant(m3)三個(gè)模塊.從構(gòu)件市場上選取了20個(gè)商業(yè)構(gòu)件(sc1~sc20)進(jìn)入可選集(s1~s10).表2列出了10個(gè)功能需求及由20個(gè)商業(yè)構(gòu)件組成的10個(gè)構(gòu)件可選集,并且列出了每個(gè)商業(yè)構(gòu)件對于系統(tǒng)不同模塊的功能性評級.功能性評級表示構(gòu)件之于不同功能需求對軟件系統(tǒng)模塊的功能貢獻(xiàn)率程度.1代表對系統(tǒng)功能貢獻(xiàn)非常大,0代表對系統(tǒng)無功能貢獻(xiàn).功能性評級的數(shù)值大小由開發(fā)團(tuán)隊(duì)根據(jù)商業(yè)構(gòu)件特點(diǎn)共同討論決定.
表2 商業(yè)構(gòu)件的功能性評級表
表3列出了軟件構(gòu)件間的交互性評級,取值范圍為1~10.交互性評級也是由開發(fā)團(tuán)隊(duì)根據(jù)系統(tǒng)分析討論確定的.根據(jù)上一節(jié)給定的優(yōu)化選擇模型,可以計(jì)算出Fmax、Fmin、I-max、Imin如下所示:
表3 軟件構(gòu)件間的交互數(shù)
在這個(gè)案例分析中,取功能性和ICD的權(quán)值wf、wl都為0.5,而模塊ICD的門限值H設(shè)為0.這樣根據(jù)上一節(jié)構(gòu)建的構(gòu)件優(yōu)化選擇模型,即公式組(12).基于遺傳算法,設(shè)定種群規(guī)模為50,變異率為0.08,交叉點(diǎn)為1.
基于遺傳算法解決優(yōu)化問題的結(jié)果如圖4所示,圖中的小方點(diǎn)表示每一代適應(yīng)度的平均值,而小菱形點(diǎn)代表每一代適應(yīng)度的最大值.可以看到,大概在第12代之后,適應(yīng)度的值基本趨于穩(wěn)定并且達(dá)到了最優(yōu)解.對于不同的門限值H,我們又重新用遺傳算法求解,表4列出了不同H值所獲得的構(gòu)件選擇方案,從表中數(shù)據(jù)我們可以看到,雖然增加H的值可以提高系統(tǒng)的可維護(hù)性,但系統(tǒng)的功能性卻呈現(xiàn)非線性的變動.
圖4 遺傳算法解決優(yōu)選問題的結(jié)果
表4 不同H值的構(gòu)件選擇結(jié)果
例如,若開發(fā)團(tuán)隊(duì)將H的值設(shè)為第2項(xiàng),則第3至第7種方案是可以考慮的,至于選擇哪一種方案,得由開發(fā)團(tuán)隊(duì)結(jié)合多個(gè)條件綜合考慮,比如優(yōu)先級,比如客戶的期望值.若客戶認(rèn)為可維護(hù)性于他們而言更加重要,則相比之下,第7種選擇方案更適合.相反,若客戶希望系統(tǒng)有較高的功能性,則可以考慮第5種選擇方案.
實(shí)踐證明,若問題域是一個(gè)較小規(guī)模的系統(tǒng)或門限值H設(shè)定得過大,則種群規(guī)模的設(shè)置就顯得尤為重要.門限值H需慎重選定,否則很難取得合適的種群來生成最終可行的方案.
基于構(gòu)件的開發(fā)通過集成現(xiàn)有的商業(yè)構(gòu)件來構(gòu)建新的軟件系統(tǒng),不僅大大提高了軟件開發(fā)質(zhì)量和開發(fā)效率,而且在分布、開放、動態(tài)的Internet計(jì)算環(huán)境下,可以充分利用網(wǎng)絡(luò)節(jié)點(diǎn)中的大量經(jīng)實(shí)踐檢驗(yàn)的構(gòu)件,降低開發(fā)成本.本文基于商業(yè)構(gòu)件之于系統(tǒng)的內(nèi)聚性、耦合度和功能性評級三個(gè)考量因子,提出了一種構(gòu)件優(yōu)化選擇的公式化數(shù)學(xué)模型,試圖調(diào)和最大內(nèi)聚性、最小耦合度、最大功能性之間的平衡關(guān)系,通過遺傳算法解決優(yōu)化選擇和進(jìn)化問題,找出最佳的、最合適的解決方案.但該模型仍然需要依賴一些人為的判斷,比如功能性評級和交互性評級都需要通過開發(fā)團(tuán)隊(duì)的分析探討來確定.故下一步的工作可以引入模糊理論來解決需要主觀判定的數(shù)據(jù),也可以引入信息理論和復(fù)雜度理論來測量系統(tǒng)的內(nèi)聚性和耦合度.
〔1〕Szyperski,C.,Gruntz,D.,&Murer,S.(2004).Component software:Beyond object-oriented programming. Addison-W esley Professional.
〔2〕Szyperski,C.,&P?ster,C.(1996).Component-oriented programm ing:WCOP’96 workshop report.Special issues in object-oriented programm ing.In W orkshop reader of the 10th European conference on object-oriented programm ing(pp.127–130).
〔3〕Stevens,W.,M yers,G.,&Constantine,L.(1974). Structured design.IBM Systems Journal,13(2),115–139.
〔4〕Parsa,S.,&Bushehrian,O.(2004).A framework to investigate and evaluate genetic clustering algorithms for automatic modularization of software systems.Lecture Notes in Computer Science,699–702.
〔5〕Sarkar,S.,Kak,A.C.,&Nagaraja,N.S.(2005).Metrics for analyzing module interactions in large software systems.In Proceedings of the 12th Asia Pacific software engineering conference(pp.264–271).
〔6〕Sarkar,S.,Rama,G.M.,&Kak,A.C.(2007).API-based and information-theoretic metrics for measuring the quality of software modularization.IEEE Transactions on Software Engineering,33(1),14–32.
〔7〕Abreu,F.B.,&Goul?o,M.(2001).Coupling and cohesion as modularization drivers:Are we being overpersuaded.In Proceedings of the?fth European conference on software maintenance and reengineering. W ashington,DC,USA:IEEE Computer Society.
〔8〕原欣偉,覃正,蔡俊.COTS軟構(gòu)件選擇決策模型研究[J].計(jì)算機(jī)工程,2006,32(11):69-71.
〔9〕王懷軍,李軍懷,張璟,樓文曉.基于線性規(guī)劃的構(gòu)件優(yōu)選機(jī)制研究[J].西安理工大學(xué)學(xué)報(bào),2010,2(2):186-191.
〔10〕Marian,R.M.,Luong,L.,&Abhary,K.(2006).A genetic algorithm for the optim isation of assembly sequences.Computers&Industrial Engineering,50(4),503–527.
TP311
A
1673-260X(2013)12-0013-04
國家自然科學(xué)基金資助項(xiàng)目(No.60963007),福建省教育廳科技項(xiàng)目(No.JB11251)資助