張森森 程杰仕 張亞紅
摘 要:眾所周知軟件建立的整個(gè)生命周期中,軟件開發(fā)人員要花費(fèi)很大的時(shí)間與精力在軟件的建模中,但是后期的各種維護(hù)與軟件功能的改進(jìn)都必須要對最初建立的模型進(jìn)行更改,因此前期建立簡單有效的軟件模型對軟件的整個(gè)生命周期具有非常大的意義。本文主要通過群落技術(shù)來對軟件模型中的模塊化的結(jié)構(gòu)進(jìn)行改進(jìn),群落技術(shù)的核心利用的是軟件模塊之間的耦合性與模塊內(nèi)部的內(nèi)聚性來建立耦合內(nèi)聚的關(guān)系圖,進(jìn)而完成對軟件的模塊化的優(yōu)化,使軟件的模塊化結(jié)構(gòu)更加地清晰易懂,使軟件各種性能的改進(jìn)變得更加地簡潔方便。
關(guān)鍵詞: 軟件;模塊結(jié)構(gòu);群落技術(shù)
文章編號: 2095-2163(2019)03-0298-02 中圖分類號: TP311.5 文獻(xiàn)標(biāo)志碼: A
0 引 言
在對軟件進(jìn)行設(shè)計(jì)的過程中,模塊化的運(yùn)用可以起到非常關(guān)鍵的作用,因此對軟件進(jìn)行設(shè)計(jì)時(shí)除了應(yīng)該得到最佳的模塊的數(shù)目之外,提高模塊的性能也具有至關(guān)重要的意義。模塊的耦合性與內(nèi)聚性是軟件性能的重要指標(biāo)。其中,模塊的內(nèi)聚性通常用來描述軟件某個(gè)模塊本身關(guān)聯(lián)的聯(lián)系程度,耦合性多是用于描述不同的模塊之間的聯(lián)系程度,模塊存在主要是為了軟件開發(fā)人員在對軟件進(jìn)行設(shè)計(jì)時(shí)能夠分離某些功能,為了達(dá)到統(tǒng)一細(xì)小的功能存在于同一個(gè)模塊中的目的,這樣在后期進(jìn)行維護(hù)以及功能變更時(shí)只需要對于相應(yīng)的模塊,不必每次都對整個(gè)軟件來進(jìn)行修改,因此模塊化在軟件的設(shè)計(jì)中占據(jù)很重要的位置[1]。通常來說,軟件的模塊化就是根據(jù)軟件本身需要完成的功能來對軟件進(jìn)行整體的劃分,本文研究的群體檢測技術(shù)本質(zhì)上就是采用將整個(gè)的軟件看作一個(gè)群落的技術(shù)來探索更加合理化的軟件模塊劃分方法,因而在實(shí)踐中有著強(qiáng)大的應(yīng)用研發(fā)價(jià)值。
1 群落技術(shù)的理論基礎(chǔ)
對于軟件模塊結(jié)構(gòu)的優(yōu)化已經(jīng)發(fā)表了一系列的研究成果,同時(shí)還有眾多的工具以及理論可供調(diào)取選用[2],但是模塊結(jié)構(gòu)的優(yōu)化卻仍具可觀潛力亟待開發(fā),現(xiàn)存的研究很多都是封閉軟件或者是優(yōu)化度不夠,本文提出的群落技術(shù)是在不同的層次上來完成對于軟件結(jié)構(gòu)的調(diào)整,最終實(shí)現(xiàn)軟件模塊的優(yōu)化的目的。
1.1 基本層次的技術(shù)運(yùn)用
基本層次主要針對的是理論的運(yùn)用,為此最先處理的是已經(jīng)存在的模塊,對其進(jìn)行優(yōu)化時(shí)將主觀設(shè)定每個(gè)模塊作為一個(gè)群落,如前文所述的內(nèi)聚性主要是各個(gè)群落內(nèi)部的關(guān)聯(lián)性,耦合性是不同群落之間的聯(lián)系,最終的目的是降低不同群落之間的聯(lián)系、增強(qiáng)群落內(nèi)部的聯(lián)系,因此在對數(shù)據(jù)進(jìn)行歸類時(shí)通常將觀察不同群落以及每個(gè)群落之間屬性點(diǎn)的聯(lián)系程度。如果群落中的屬性點(diǎn)有聯(lián)系就記為1,否則為0,這就是適用于群落內(nèi)部各個(gè)屬性點(diǎn)之間的關(guān)系的最基本的計(jì)數(shù)辦法。
1.2 研究層次的發(fā)掘技術(shù)運(yùn)用
研究可知,當(dāng)有針對性地分析與解讀最底層基本的群落內(nèi)部的計(jì)數(shù)辦法后,在實(shí)際的運(yùn)用過程中還需要對于群落之間的屬性點(diǎn)的聯(lián)系進(jìn)行合理的規(guī)定,本文中的規(guī)定辦法與前面闡述的非常類似。如果2個(gè)不同的群落之間的2個(gè)屬性具有聯(lián)系,計(jì)數(shù)為1;但是如果2個(gè)群落之間非常多的屬性之間具有聯(lián)系,研究人員則應(yīng)深入探尋查找出具有聯(lián)系的數(shù)目,此時(shí)就是重點(diǎn)根據(jù)整個(gè)軟件各個(gè)群落之間聯(lián)系的綜合結(jié)果作為計(jì)算的依據(jù)[3]。究其本質(zhì)來說,各個(gè)群落之間的聯(lián)系值的大小也就是在最基本層次得到的聯(lián)系值大小的推演及運(yùn)用。
基于此,研究又給出一個(gè)簡單的概念例子來進(jìn)行釋義講解:假如有3個(gè)基本模塊并且定義為群落A、模塊B與群落D,在群落A中有3個(gè)屬性,假設(shè)為(1,2,3),在群落B中也有3個(gè)屬性,假設(shè)為(4,5,6),D中也有3個(gè)屬性,假設(shè)為(7,8,9),并且群落A、B、D中各個(gè)屬性都有簡單的聯(lián)系。在研究定義時(shí)將群落A、B與D視作為功能的最基本層次,則群落A,B與群落D之間的屬性值為1;在A與B的上一個(gè)層次假設(shè)有更大的模塊,定義為群落a,群落D的上一級為群落b,此時(shí)D與A,B都有聯(lián)系,這樣就可將群落a與群落b之間的屬性值定義為2。如此一來,在設(shè)計(jì)應(yīng)用過程中也就是將依據(jù)軟件整個(gè)的屬性值Q的變化來判斷軟件模塊性的變化。若將其運(yùn)用在本文的實(shí)例中,就是通過確定群落a中的A,B與b中D之間的移動來獲得Q的最小值。
1.3 群落技術(shù)的核心思想
群落技術(shù)在根本上就是將整個(gè)軟件看成一個(gè)大的群落,不同的子功能視作小的群落,最終完成的任務(wù)是將各個(gè)小的群落之間的聯(lián)系降到最低、且將各個(gè)群落自身的模塊性提高。在研究構(gòu)建的實(shí)驗(yàn)中規(guī)定一個(gè)值Q來對整個(gè)群落總體的這些仿真值來進(jìn)行判斷。Q值越大,帶邊采用群落方法進(jìn)行移動將會明顯降低了模塊性,反之就是實(shí)現(xiàn)了優(yōu)化。
2 群落技術(shù)的應(yīng)用
本文的應(yīng)用在開源的Java代碼Trama,其具備的功能是對矩形的圖形化來進(jìn)行講解,而本文據(jù)此展開實(shí)驗(yàn)則能切實(shí)有效地對軟件的性能進(jìn)行檢驗(yàn)。
2.1 數(shù)據(jù)選取與收集
這里,研究擬對于Trama的各項(xiàng)數(shù)據(jù)進(jìn)行統(tǒng)計(jì),得到的結(jié)果見表1。
2.2 群體檢測技術(shù)的運(yùn)用
在實(shí)際的運(yùn)用過程中統(tǒng)計(jì)出所需要的數(shù)據(jù),并且借助時(shí)下優(yōu)良的實(shí)例化工具將研究的軟件具體化,最終找到群落中所需要的屬性。運(yùn)行結(jié)果詳見表2。
2.3 結(jié)果分析
由表2可以看出,有9個(gè)不同的模塊需要從原來的群落中移動到新的群落中去,為了更好地驗(yàn)證本文采用方法的準(zhǔn)確性,啟用了開源軟件Trama,并對軟件進(jìn)行了手工查找,最終結(jié)果發(fā)現(xiàn)本文求得的各移動模塊都是有必要的,準(zhǔn)確率已然高達(dá)百分之百,只是完整率卻還并未臻至令人滿意程度。
3 結(jié)束語
盡管本文的方法展示出了可行性與簡易性,但是方法卻并未得到廣泛應(yīng)用,因此下一步的主要工作是:采用來自不同領(lǐng)域的各種軟件,用不同的尺度來對本文的群落方法進(jìn)行檢驗(yàn);開發(fā)出能在各種水平上進(jìn)行實(shí)踐操作的工具。
參考文獻(xiàn)
[1]鐘林輝, 張能偉, 候長源, 等.? 一種改進(jìn)的基于層次聚類的軟件重構(gòu)技術(shù)研究[J]. 計(jì)算機(jī)工程與應(yīng)用,2015,51(20):50-54.
[2]PRESSMAN R S. 軟件工程:實(shí)踐者的研究方法[M]. 黃柏索,梅宏,譯. 北京:機(jī)械工業(yè)出版社,1999.
[3]AMBLER S W. 軟件工程技術(shù)叢書:數(shù)據(jù)庫重構(gòu)[M]. 王海鵬 譯. 北京:機(jī)械工業(yè)出版社,2011.
[4]SENG O, STANMMEL J, BURKHART D. Search-based determination of refactoring for improving the class structure of object-oriented system[C]// Proceedings of the 8th Annual Conference on Genetic and Evolutionary Computation Conference. NewYork,USA: ACM, 2006:1909-1916.