• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      面向源代碼軟件設(shè)計(jì)模式自動(dòng)抽取技術(shù)的研究

      2013-12-31 00:00:00儲(chǔ)赟
      電子世界 2013年24期

      【摘要】本文主要研究如何從源代碼中自動(dòng)抽取出設(shè)計(jì)模式,并研究了相關(guān)的技術(shù)。論文闡述了自動(dòng)抽取技術(shù)的過程,首先是結(jié)構(gòu)分析,通過分析XMI文檔,提取出類的結(jié)構(gòu)特征,接著是動(dòng)態(tài)分析。運(yùn)用結(jié)構(gòu)分析階段后將產(chǎn)生一些模式候選項(xiàng),這些模式候選項(xiàng)是一些由類和方法組成的結(jié)構(gòu),將作為動(dòng)態(tài)分析的輸入,動(dòng)態(tài)分析監(jiān)控模式候選項(xiàng)的動(dòng)態(tài)執(zhí)行的情況,得出進(jìn)一步的結(jié)果。論文的結(jié)論就是作為抽取設(shè)計(jì)模式的目的是可以自動(dòng)(或半自動(dòng))抽取任何JAVA程序中的設(shè)計(jì)模式。

      【關(guān)鍵詞】設(shè)計(jì)模式;結(jié)構(gòu)分析;行為分析;XMI

      一、引言

      設(shè)計(jì)模式是面向?qū)ο笤O(shè)計(jì)的一個(gè)高級(jí)抽象,從程序理解和軟件維護(hù)的觀點(diǎn)出發(fā),一個(gè)設(shè)計(jì)模式提供了模式結(jié)構(gòu)中每個(gè)類的角色信息和模式各組成元素的關(guān)系以及模式組成元素和系統(tǒng)其余部分關(guān)系的信息。因此,源碼中設(shè)計(jì)模式的抽取是逆向工程中的一個(gè)關(guān)鍵問題。對(duì)于缺少分析和設(shè)計(jì)文檔的軟件系統(tǒng)來說,從它的源碼中抽取設(shè)計(jì)模式有助于軟件系統(tǒng)的理解和文檔化,增強(qiáng)軟件系統(tǒng)的可維護(hù)性。進(jìn)一步,能識(shí)別軟件系統(tǒng)中引入設(shè)計(jì)模式后可以改進(jìn)的地方并進(jìn)行相應(yīng)的修改,提高了源碼質(zhì)量,從而達(dá)到軟件重構(gòu)的目的。

      二、技術(shù)現(xiàn)狀

      設(shè)計(jì)模式比源代碼更高層次地描述了軟件系統(tǒng),設(shè)計(jì)模式也是描述部分設(shè)計(jì)的一種方式。設(shè)計(jì)模式是一種表示設(shè)計(jì)結(jié)構(gòu)的技術(shù),通過掌握設(shè)計(jì)的思路設(shè)計(jì)模式保存了設(shè)計(jì)的關(guān)鍵信息,設(shè)計(jì)模式定義了類、實(shí)例、角色、關(guān)系和責(zé)任分配,一個(gè)好的軟件結(jié)構(gòu)可以被快速應(yīng)用解決問題而不用重新設(shè)計(jì),設(shè)計(jì)模式就是被定義好的常見問題解決方案的抽象設(shè)計(jì)。當(dāng)一些情形經(jīng)常出現(xiàn)時(shí),可以選擇設(shè)計(jì)模式解決相應(yīng)問題而不用每次都分析問題再想辦法解決,例如調(diào)停者模式被選擇來解決一個(gè)特定的設(shè)計(jì)問題而不用重新設(shè)計(jì)。選擇了設(shè)計(jì)模式無論做文檔還是解釋說明都顯得更容易,在面向?qū)ο箝_發(fā)過程中設(shè)計(jì)模式起了很多作用[1]:

      本文所涉及的設(shè)計(jì)模式是指Gamma等人在文獻(xiàn)[1]中提出的23個(gè)通用的設(shè)計(jì)模式。Gamma等從動(dòng)機(jī)、目的、參與者、協(xié)作、應(yīng)用效果、解決方案幾個(gè)方面描述設(shè)計(jì)模式。為了便于軟件工程師在實(shí)際應(yīng)用過程中理解、選擇和實(shí)現(xiàn)設(shè)計(jì)模式,除解決方案部分外,設(shè)計(jì)模式的動(dòng)機(jī)、目的、參與者、協(xié)作、應(yīng)用效果等項(xiàng)內(nèi)容通常以非形式化的方式描述。解決方案部分使用OMT圖描述一個(gè)通用的設(shè)計(jì)結(jié)構(gòu)。從源碼中抽取設(shè)計(jì)模式必然要求對(duì)其進(jìn)行描述,采用某種表示方法如PROLOG規(guī)則、抽象語法樹,約束可滿足問題(CSP)的變量和約束條件等,對(duì)設(shè)計(jì)模式所表達(dá)的對(duì)象結(jié)構(gòu)和行為進(jìn)行抽象,并將這些設(shè)計(jì)模式表示存儲(chǔ)在便于修改和維護(hù)的設(shè)計(jì)知識(shí)庫中。

      計(jì)模式抽取在理論和自動(dòng)化工具的開發(fā)方面的研究都取得了進(jìn)展,但還存在一些困難和問題,如基于設(shè)計(jì)模式解法部分的設(shè)計(jì)模式識(shí)別規(guī)則的定義多種多樣,實(shí)現(xiàn)方式各異,沒有廣泛適用的規(guī)范;實(shí)際可用的設(shè)計(jì)模式抽取工具較少,成型的工具大都作為龐大的逆向工程環(huán)境的一部分,模塊化程度不高;設(shè)計(jì)模式抽取的結(jié)果因設(shè)計(jì)模式特點(diǎn)、抽取的目標(biāo)語言和目標(biāo)系統(tǒng)而差別很大,實(shí)際應(yīng)用困難等。

      三、一般基于源代碼的設(shè)計(jì)模式抽取方法的步驟

      一般而言,從Java軟件中抽取設(shè)計(jì)模式的過程分解成以下三個(gè)步驟:

      (1)對(duì)設(shè)計(jì)模式建模和描述,生成設(shè)計(jì)模式的中間表示模型;

      (2)以查找設(shè)計(jì)模式為目的,分析軟件系統(tǒng)的Java代碼,抽取源碼信息模型;

      (3)比較中間模型和信息模型的相似性,從而識(shí)別Java代碼中的設(shè)計(jì)模式實(shí)例。

      四、基于XMI的方法

      XML元數(shù)據(jù)交換(XML Metadata Interchange,XMI)是一種標(biāo)準(zhǔn),這種標(biāo)準(zhǔn)能夠使用可擴(kuò)展標(biāo)記語言(Extensible Markup Language,XML)來表達(dá)對(duì)象,XML也是萬維網(wǎng)上表示數(shù)據(jù)的普遍格式。XMI不僅僅是一套有序的規(guī)則,它還與建模標(biāo)準(zhǔn)密切相關(guān),這使得用戶可以在XML應(yīng)用中有效地進(jìn)行建模操作。XMI2.0詳細(xì)說明了如何從模型中創(chuàng)建XML模式(schema),而以前的XMI版本則詳細(xì)說明了如何從模型中創(chuàng)建XML的文檔類型定義(Document Type Definition,DTD)。模式與DTD都定義了XML文檔的內(nèi)容。[2]

      XMI是創(chuàng)建應(yīng)用程序所需要的,由于XML不是面向?qū)ο蟮?,因此需要將?duì)象映射到XML。由于XML的靈活性,因此可以有多種映射方式。盡管如此,在交換XML文檔的時(shí)候,這種靈活性也會(huì)帶來一定問題。如果一個(gè)工具利用了一種方法將對(duì)象映射到XML,而另一個(gè)工具將對(duì)象映射到XML卻使用了另外一種方法,那么這兩種工具就不可能正確地解釋對(duì)方的XML文檔。XMI使用模型來確認(rèn)對(duì)象是共享的。一個(gè)使用了XMI的工具能夠與使用XMI的其他工具交換對(duì)象。

      XMI使用了兩個(gè)相關(guān)的標(biāo)準(zhǔn):可擴(kuò)展標(biāo)記語言(Extensible Markup Language,XML)和統(tǒng)一建模語言(Unified Modeling Language,UML)。XMI是以XML為基礎(chǔ)的;XMI使用XML從文檔中保存及加載對(duì)象。而UML定義了對(duì)象和類的結(jié)構(gòu),使用這種定義來解釋XMI怎樣在XML中說明對(duì)象和類的。

      五、結(jié)構(gòu)分析

      在一個(gè)大型軟件系統(tǒng)中,包含類的個(gè)數(shù)往往成百成萬個(gè)。而每個(gè)類都有不同類型的屬性和方法。為了提高代碼的重用和效率,這些類之間往往以一種相對(duì)復(fù)雜的方式關(guān)聯(lián)。因此,從這么多類中抽取出一個(gè)模式就變成一項(xiàng)非常復(fù)雜的任務(wù)。為了解決這個(gè)問題,我們首先僅僅考慮結(jié)構(gòu)特征,減少了分析類的范圍。我們所說的結(jié)構(gòu)特征包含了屬性的個(gè)數(shù),方法的個(gè)數(shù),以及類型,如抽象類,具體類或者接口,以及與其他類的關(guān)系。

      設(shè)計(jì)模式抽取工具的輸入是XMI文檔,它包含了被分析的軟件的UML類圖的信息。工具直接分析XMI文檔,代替了直接分析源代碼。從UML類圖生成XMI文檔,已經(jīng)在上一章中詳細(xì)闡述了步驟。就目前而言,通過使用我們使用的Rational Rose從源代碼逆向工程到順序圖是不可能的。因此,XMI文檔僅僅包含了UML類圖的相關(guān)信息。

      結(jié)構(gòu)分析過程框架如下結(jié)構(gòu)分析階段的整個(gè)過程的方法框架。與一般的從源代碼中設(shè)計(jì)模式抽取的過程類似。

      整個(gè)過程可以分成三個(gè)步驟完成:

      (1)對(duì)要抽取的目標(biāo)設(shè)計(jì)模式進(jìn)行分析建立特征模型,分一下兩步進(jìn)行:

      a.設(shè)定特定設(shè)計(jì)模式的特征權(quán)重;

      b.建立特定設(shè)計(jì)模式的特征權(quán)重關(guān)系矩陣。

      (2)對(duì)源代碼逆向工程所得的XMI文檔進(jìn)行分析:

      a.統(tǒng)計(jì)XMI中每個(gè)類的特征元素的權(quán)重;

      b.建立系統(tǒng)特征的關(guān)系矩陣。

      (3)利用匹配算法把在第一步中獲得的模式關(guān)系矩陣和在第二步中得到的系統(tǒng)的關(guān)系矩陣進(jìn)行匹配。[3]

      六、行為分析

      一般而言,設(shè)計(jì)模式通常包含了結(jié)構(gòu)和行為兩方面的信息。結(jié)構(gòu)信息描述了模式中的類之間的靜態(tài)的結(jié)構(gòu)關(guān)系。行為信息表示了模式中對(duì)象之間的動(dòng)作和交互的序列細(xì)節(jié)。因此,僅僅使用結(jié)構(gòu)分析抽取出的設(shè)計(jì)模式的方法是不充分的。經(jīng)過結(jié)構(gòu)分析后的結(jié)果中包含了1 positives實(shí)例。而行為分析的結(jié)果是減少1 positives實(shí)例。

      結(jié)構(gòu)分析已經(jīng)產(chǎn)生一些可能的設(shè)計(jì)模式實(shí)例的候選模式實(shí)例集合,動(dòng)態(tài)分析將把這些經(jīng)過結(jié)構(gòu)分析獲得的候選集合信息作為輸入并產(chǎn)生一個(gè)相同或更少數(shù)目的集合。行為分析將不產(chǎn)生新的設(shè)計(jì)模式的實(shí)例,它只檢查候選集合,檢查每個(gè)設(shè)計(jì)模式實(shí)例的期望的行為特征,也就是說把1 positives的候選項(xiàng)去除。

      結(jié)構(gòu)分析和行為分析之間的不同在于結(jié)構(gòu)分析主要檢查類之間的交互而行為分析則關(guān)注不同類實(shí)例或?qū)ο笾g的通訊。這就意味著結(jié)構(gòu)分析只會(huì)作一次相同檢查而行為分析可能重復(fù)多次相同的檢查,檢查次數(shù)取決于相同類有多少個(gè)對(duì)象實(shí)例存在以及它們?nèi)绾谓换?,重?fù)多次相同的檢查的原因是對(duì)象可以以不同方式創(chuàng)建,因?yàn)檫@個(gè)原因,它們可能擁有不同的屬性需要分別分析。行為分析的結(jié)果可能和前面做的結(jié)構(gòu)分析結(jié)果相似。

      行為分析的主要目的是找到類之間存在的依賴關(guān)系,或者是否存在一些類委派的方法調(diào)用。對(duì)每一個(gè)特別的設(shè)計(jì)模式,行為分析是不同的,類似與結(jié)構(gòu)分析階段我們所做的。對(duì)于設(shè)計(jì)模式的特征的行為分析相對(duì)于結(jié)構(gòu)分析要復(fù)雜的多。行為分析的主要困難是對(duì)于相似的期望行為有多種實(shí)現(xiàn)方式。

      七、總結(jié)

      從源代碼中抽取出設(shè)計(jì)模式的實(shí)例,對(duì)于提高軟件可理解性和可維護(hù)性、軟件設(shè)計(jì)重用以及軟件重構(gòu)具有重要意義。論文著重論述了基于XMI的兩階段抽取設(shè)計(jì)模式實(shí)例的方法,該方法主要分為結(jié)構(gòu)分析和行為分析兩個(gè)階段來完成。其中第一個(gè)階段是結(jié)構(gòu)分析,通過分析XMI文檔獲得類的結(jié)構(gòu)特征,抽取出候選設(shè)計(jì)模式實(shí)例的集合,第二階段是行為分析,分析第一階段中設(shè)計(jì)模式實(shí)例的候選集合,掃描源代碼以去除候選集合中的1 positive設(shè)計(jì)模式實(shí)例。

      參考文獻(xiàn)

      [1]E.Gamma,R.Helm,R.Johnson,et al.設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)(第一版)[M].李英軍,等譯.北京:機(jī)械工業(yè)出版社,2000.

      [2]林輝躍.面向?qū)ο筌浖性O(shè)計(jì)模式的智能抽取技術(shù)研究[D].碩士學(xué)位論文,2013.

      [3]S.Tilley,K.Wong,H.Muller,etal.Structural redocumentation:A case study.IEEE Software,1995,12(1):46-54.

      [4]D.Heuzeroth,T.Holl,G.Hostrom,et al.Automatic Design Patern Detection.in:Proc.of the 11th IEEE Intenrational Workshop on Program Comprehension.Portla nd,Oregon.2003.USA:IEEE Computer Society,2003:94-99.

      [5]XMI Metadata Interchange.http://www.omg.org/technology/documents/formal/xmi.htm,Jan.2006.

      [6]SUN Microsytems.AWT,the SUN Java Abstract Window Toolkit.http://java.sun.com/products/jdk/awt,F(xiàn)eb.2006.

      [7]馮鐵,李文錦,張家晨.從源碼中抽取設(shè)計(jì)模式技術(shù)研究綜述[J].計(jì)算機(jī)應(yīng)用研究,2005(8).

      [8]馮鐵,李文錦,張家晨,柴勝.面向Java語言的設(shè)計(jì)模式抽取方法的研究[J].計(jì)算機(jī)工程與應(yīng)用,2005.

      [9]馬越峰,李凡,陳平.基于程序源代碼的設(shè)計(jì)模式自動(dòng)發(fā)現(xiàn)技術(shù)研究[J].計(jì)算機(jī)科學(xué),2005,32.

      [10]Jing Dong,Dushyant S.Lad,Yajing Zhao.DP-Miner:Design Pattern Discovery Using Matrix.Proceeding of the 14thAnnual IEEE International Conference and Workshops on the Engineering of Computer-Based Sysems,2007.

      [11]徐強(qiáng),金艷紅,等譯.精通XMI——使用XMI、XML和UML進(jìn)行Java編程[J].電子工業(yè)出版社,2004,2.

      [12]劉利秋,等譯.從頭學(xué)XML和Java編程一例通[M].機(jī)械工業(yè)出版社,2003,8.

      [13]閻紅編著.Java與模式[M].電子工業(yè)出版社,2002,10.

      作者簡介:儲(chǔ)赟(1981—),女,江蘇常州人,碩士,現(xiàn)供職于華東政法大學(xué)信息化辦公室。

      丰原市| 威宁| 都昌县| 伽师县| 古交市| 玉林市| 平南县| 乐业县| 怀集县| 盱眙县| 临海市| 开阳县| 潜江市| 子长县| 江达县| 莱州市| 开封市| 鲜城| 云林县| 阿图什市| 平塘县| 广平县| 阿尔山市| 清河县| 长乐市| 辽阳县| 乐平市| 怀柔区| 广宗县| 营口市| 蒙阴县| 南和县| 富阳市| 柳州市| 寻甸| 太仆寺旗| 融水| 永吉县| 普格县| 保德县| 泸溪县|