專利名稱:基于結(jié)構(gòu)匹配的uml模型查詢方法
技術(shù)領(lǐng)域:
本發(fā)明涉及設(shè)計(jì)階段項(xiàng)目模型的分析與理解,主要涉及一種基于結(jié)構(gòu)匹配的UML 模型查詢方法。
背景技術(shù):
隨著軟件工程技術(shù)的日益成熟,模型規(guī)模伴隨著軟件規(guī)模的發(fā)展而不斷擴(kuò)大,如 何利用現(xiàn)有軟件資源提高軟件生產(chǎn)效率已收到廣泛關(guān)注。軟件復(fù)用技術(shù)可借鑒現(xiàn)有成熟的 軟件設(shè)計(jì)方案,降低軟件設(shè)計(jì)和維護(hù)成本,提高軟件生產(chǎn)效率,找出合適的模型或代碼是復(fù) 用技術(shù)的難點(diǎn)。在模型庫(kù)日趨龐雜的今天,模型驅(qū)動(dòng)領(lǐng)域亟須對(duì)模型搜索相關(guān)技術(shù)展開(kāi)研 究,幫助用戶搜索模型庫(kù)快速找出目標(biāo)模型。目前模型搜索技術(shù)借鑒了文本搜索相關(guān)技術(shù), 搜索效果和普及率均不甚理想,未能充分利用模型的結(jié)構(gòu)信息和語(yǔ)義信息。
近些來(lái),隨著模型驅(qū)動(dòng)技術(shù)和UML建模支撐工具的逐步發(fā)展,UML模型查詢技術(shù)逐 漸開(kāi)始得到研究人員的關(guān)注(UML是通用的可視化建模語(yǔ)言,用于對(duì)軟件進(jìn)行描述、可視化 處理、構(gòu)造和建立軟件系統(tǒng)工作的文檔,充分考慮了各種需求、方法和語(yǔ)言的特點(diǎn))。目前與 UML相關(guān)的模型查詢工作主要有元模型查詢技術(shù)、基于對(duì)象約束語(yǔ)言(Object Constraint Language, OCL)的查詢擴(kuò)展以及基于信息檢索技術(shù)的模型查詢等。
元模型是對(duì)建模語(yǔ)言進(jìn)行描述的模型,其復(fù)雜度高,且難以消除,元模型查詢主要 是針對(duì)元模型進(jìn)行的查詢。
對(duì)象約束語(yǔ)言最初的雛形是IBEL (Integrated Business Engineering Language, IBM)和Syntropy,是IBM基于這兩種語(yǔ)言進(jìn)行設(shè)計(jì)而產(chǎn)生的。對(duì)象約束語(yǔ)言伴 隨著UML1.1 一起發(fā)布,通過(guò)形式化的方法定義模型約束,對(duì)UML建模語(yǔ)言進(jìn)行補(bǔ)充,進(jìn)而 提高模型的表達(dá)能力。OCL語(yǔ)言能夠描述類視圖中類不變性、方法前置和后置條件等約束, OCL不僅可以精確定義模型約束,而且擁有描述模型查詢能力?;贠CL模型查詢的研究已 取得部分進(jìn)展,能夠支持簡(jiǎn)單的UML語(yǔ)義查詢。目前與關(guān)系代數(shù)查詢語(yǔ)言相比,OCL的表達(dá) 能力還存在一些不足。此外,使用OCL編寫(xiě)的查詢語(yǔ)句的結(jié)構(gòu)復(fù)雜、不直觀、不易被用戶閱 讀和理解。與此同時(shí),OMG標(biāo)準(zhǔn)組織給出了 OCL的定義,暫時(shí)沒(méi)有一個(gè)統(tǒng)一成熟的工具支持 OCL的實(shí)現(xiàn),相應(yīng)的支撐工具正在開(kāi)發(fā)中。
基于信息檢索技術(shù)的模型查詢主要是將信息檢索技術(shù)移植到模型搜索中,使用信 息檢索技術(shù)來(lái)實(shí)現(xiàn)UML模型查詢。整個(gè)查詢過(guò)程與網(wǎng)頁(yè)搜索引擎類似,主要利用關(guān)鍵詞匹 配進(jìn)行搜索,找出模型中哪些地方出現(xiàn)上述關(guān)鍵詞。通過(guò)相關(guān)性算法得出模型元素與關(guān)鍵 詞的相關(guān)性,對(duì)模型與關(guān)鍵詞的相關(guān)程度進(jìn)行排序。最后利用信息檢索的評(píng)價(jià)指標(biāo)對(duì)模型 搜索引擎進(jìn)行評(píng)價(jià),主要包括精度(Precision)、Recall (召回值)、Fneasure (F值)等評(píng) 價(jià)指標(biāo)。整體上而言利用關(guān)鍵詞進(jìn)行模型查詢存在一些不足,模型文件中有意義的字符串 所占比例較少,文件包含大量枚舉類型值和模型結(jié)構(gòu)描述。關(guān)鍵字搜索技術(shù)針對(duì)網(wǎng)頁(yè)長(zhǎng)文 本而實(shí)現(xiàn)的,短句和數(shù)字查詢的效果并不佳。模型不僅描述了模型元素的名稱,更重要的是 模型精確地描述模型元素之間的關(guān)系,模型結(jié)構(gòu)信息無(wú)法利用關(guān)鍵字查詢進(jìn)行搜索。發(fā)明內(nèi)容
本發(fā)明目的是,鑒于上述問(wèn)題,本發(fā)明旨在提供一種基于結(jié)構(gòu)匹配的UML模型查詢方法,該方法主要分析模型存儲(chǔ)文件中的模型元素結(jié)構(gòu)信息,然后抽取其中的模型元素, 利用匹配算法進(jìn)行匹配,獲取查詢結(jié)果。實(shí)現(xiàn)UML模型查詢。
本發(fā)明是通過(guò)以下的技術(shù)方案實(shí)現(xiàn)的基于結(jié)構(gòu)匹配的UML模型查詢方法,
步驟10 :獲取UML模型庫(kù)模型文件;
步驟11 :利用模型查詢語(yǔ)言編輯目標(biāo)查詢模式;
步驟12 :解析目標(biāo)查詢的模型模式;
步驟13 :利用結(jié)構(gòu)匹配算法將步驟12解析好的目標(biāo)查詢模型模式與UML模型庫(kù)中模型進(jìn)行結(jié)構(gòu)匹配;
步驟14:顯示匹配結(jié)果;
其中步驟11中的目標(biāo)查詢模型查詢語(yǔ)言符合下面的語(yǔ)法規(guī)范
權(quán)利要求
1. 一種基于結(jié)構(gòu)匹配的UML模型查詢方法,其特征包括步驟 步驟10 :獲取UML模型庫(kù)模型文件; 步驟11 :利用模型查詢語(yǔ)言編輯目標(biāo)查詢模式; 步驟12 :解析目標(biāo)查詢的模型模式; 步驟13 :利用結(jié)構(gòu)匹配算法將步驟12解析好的目標(biāo)查詢模型模式與UML模型庫(kù)中模型進(jìn)行結(jié)構(gòu)匹配; 步驟14 :顯示匹配結(jié)果; 按照模型查詢語(yǔ)言編輯目標(biāo)查詢模型模式主要是將目標(biāo)模型模式中包含的模型元素以及它們之間存在的關(guān)系表達(dá)出來(lái); 解析目標(biāo)查詢模型模式即步驟12,其中解析過(guò)程包括 步驟30 :讀取已經(jīng)編輯完的目標(biāo)模型模式文件; 步驟31 :開(kāi)始讀取文件內(nèi)容; 步驟 32 :識(shí)別關(guān)鍵字[Class]、 [Attribute]、 [Operation]、 [Parameter]、[Abstraction]、 [Generalization]、 [Dependency]; 步驟33 :根據(jù)關(guān)鍵字創(chuàng)建相應(yīng)對(duì)象元素,讀取相應(yīng)元素特征name、visibility等,若其含有內(nèi)部元素,則跳轉(zhuǎn)至步驟32 ; 步驟34:判斷是否全部元素已經(jīng)讀完,若已經(jīng)全部讀完,則跳轉(zhuǎn)至步驟35,否則,跳轉(zhuǎn)至步驟32 ; 步驟35 :結(jié)束此次解析; 步驟12是利用結(jié)構(gòu)匹配算法將步驟12解析好的目標(biāo)查詢模型模式在模型庫(kù)進(jìn)行結(jié)構(gòu)匹配,需要先從模型庫(kù)中抽取模型信息,然后再利用結(jié)構(gòu)匹配算法進(jìn)行匹配; 步驟40 :獲取模型文件; 步驟41 :抽取模型元素信息; 步驟42 :將解析好的目標(biāo)模型元素信息在模型庫(kù)中對(duì)每個(gè)模型元素進(jìn)行逐一的結(jié)構(gòu)匹配; 抽取模型庫(kù)信息即進(jìn)行結(jié)構(gòu)匹配之前的準(zhǔn)備工作;其具體步驟包括 步驟50 :讀取模型庫(kù)文件; 步驟51 :抽取模型庫(kù)文件中的類元素,如果類中嵌套有屬性以及方法元素,則繼續(xù)抽取嵌套的屬性以及方法元素; 步驟52 :抽取模型庫(kù)文件中的類之間關(guān)系元素; 步驟53 :判斷是否模型文件中所有元素都已經(jīng)讀完,若讀完,則停止抽取,否則跳轉(zhuǎn)至步驟51 ; 模型庫(kù)文件中的類、屬性和方法元素的抽取算法;其算法具體步驟包含 步驟60:開(kāi)始讀模型文件; 步驟61 :如果當(dāng)前節(jié)點(diǎn)元素為UML:Package,則將當(dāng)前包的指針currentPackage賦給指針 parentPackage,即 parentPackage = currentPackage,然后 currentPackage=newPackage(name); 步驟62 :如果當(dāng)前節(jié)點(diǎn)元素為UML:Class,則將當(dāng)前類的指針currentClass賦給指針parentClass,以當(dāng)前節(jié)點(diǎn)信息創(chuàng)建新的類對(duì)象付給類指針currentClass,如果當(dāng)前創(chuàng)建的類對(duì)象合法,則加入類的列表中; 步驟 63 :更新包以及類的相關(guān)指針parentClass (Package),currentClass (Package)。
步驟64 :重復(fù)步驟61到步驟63直至文件結(jié)尾; 模型庫(kù)文件中的類之間關(guān)系的抽取算法。算法具體步驟如下 步驟70 :讀取模型文件; 步驟71 :如果節(jié)點(diǎn)元素為類之間關(guān)系,如UML:Generalization、UML: Abstraction等,則以當(dāng)前節(jié)點(diǎn)元素id創(chuàng)建ー個(gè)類之間關(guān)系對(duì)象; 步驟72 :如果當(dāng)前節(jié)點(diǎn)元素為UML:Generalization. child,則將步驟71中創(chuàng)建的類之間對(duì)·象的child設(shè)置為當(dāng)前節(jié)點(diǎn)的id ; 步驟73 :如果當(dāng)前節(jié)點(diǎn)元素為UML:Generalization, parent,則將步驟71中創(chuàng)建的類之間對(duì)象的parent設(shè)置為當(dāng)前節(jié)點(diǎn)的id ; 步驟74 :重復(fù)步驟71到步驟73,直到模型文件讀取結(jié)束; 利用結(jié)構(gòu)匹配算法進(jìn)行匹配,匹配過(guò)程中包括類結(jié)構(gòu)匹配以及類之間關(guān)系結(jié)構(gòu)匹配; 其中類結(jié)構(gòu)匹配包括 步驟80 :檢查類的基本信息是否匹配,基本信息包括name、visibility、isAbstract等信息,如果匹配則進(jìn)入步驟81,否則跳轉(zhuǎn)至步驟84 ; 步驟81 :匹配類中所包含的屬性元素,屬性元素的匹配主要是檢查屬性中所包含的特征值是否匹配即可,特征值包括mame、type等,如果匹配則進(jìn)入步驟82,否則跳轉(zhuǎn)至步驟·84 ; 步驟82 :匹配類中所包含的方法元素,方法元素的匹配需要檢查方法中包含的特征值信息是否匹配,特征值包括name、type、visibility,如果匹配則進(jìn)入步驟83,否則跳轉(zhuǎn)至步驟84 ; 步驟83 :匹配成功,返回肯定結(jié)果; 步驟84:匹配失敗,返回否定結(jié)果。
全文摘要
一種基于結(jié)構(gòu)匹配的UML模型查詢方法,包括步驟步驟10獲取模型庫(kù)模型文件;步驟11利用模型查詢語(yǔ)言編輯目標(biāo)查詢模式;步驟12解析目標(biāo)模型模式;步驟13利用結(jié)構(gòu)匹配算法將步驟12解析好的目標(biāo)模型模式與模型庫(kù)中模型進(jìn)行結(jié)構(gòu)匹配;步驟14顯示匹配結(jié)果;該方法主要特點(diǎn)為查詢語(yǔ)言簡(jiǎn)單,不僅能支持簡(jiǎn)單的關(guān)鍵字的模型查詢更能支持純粹的結(jié)構(gòu)查詢,更加具有一般性。
文檔編號(hào)G06F9/44GK103049503SQ20121053201
公開(kāi)日2013年4月17日 申請(qǐng)日期2012年12月11日 優(yōu)先權(quán)日2012年12月11日
發(fā)明者張?zhí)? 張學(xué)林, 李宣東 申請(qǐng)人:南京大學(xué)