李天科
摘要:為了從遺留系統(tǒng)中提取具有可復(fù)用價值的構(gòu)件,并對提取的構(gòu)件實施有效的管理。提出了基于UML的構(gòu)件提取方法,通過分析用例圖、交互圖、類圖,篩選需要提取的候選構(gòu)件,依據(jù)構(gòu)件質(zhì)量度量模型,對候選構(gòu)件進行度量,確定所提取構(gòu)件并進行封裝。最后確定了構(gòu)件描述的刻面術(shù)語,并選擇應(yīng)用數(shù)據(jù)庫保存構(gòu)件的描述信息,應(yīng)用文件系統(tǒng)保存構(gòu)件。
關(guān)鍵詞:遺留系統(tǒng);構(gòu)件提?。粯?gòu)件描述
中圖分類號:TP311.54 文獻標(biāo)識碼:A 文章編號:1007-9416(2018)05-0109-03
1 引言
隨著軟件需求的迅速增長,軟件復(fù)用技術(shù)和基于構(gòu)件的軟件開發(fā)技術(shù)逐漸受到軟件開發(fā)者的青睞。軟件復(fù)用是指在新軟件系統(tǒng)的開發(fā)過程中,重復(fù)利用已有的、相同或相近軟件元素的過程。作為提高軟件生產(chǎn)率的一個有效方法,依照軟件復(fù)用的思想,軟件系統(tǒng)的開發(fā)不再采用一切“從零開始”的模式,而是以己有的工作為基礎(chǔ),充分利用遺留系統(tǒng)開發(fā)中積累的成果,消除重復(fù)勞動,提高軟件開發(fā)效率和質(zhì)量[1]。
構(gòu)件是指語義完整、語法正確和有可重用價值的單位軟件,是軟件重用過程中可以明確辨識的、具有相對獨立功能的構(gòu)成成分。簡單地說,構(gòu)件就是具有一定功能,能夠獨立工作或能同其它構(gòu)件裝配起來協(xié)調(diào)工作的程序體。
基于構(gòu)件的軟件復(fù)用,存在兩個關(guān)鍵技術(shù)問題,一是需要大量的可復(fù)用構(gòu)件,二是如何找到合適的構(gòu)件。
軟件工程專業(yè)的歷屆學(xué)生在課程設(shè)計、畢業(yè)論文設(shè)計過程中,開發(fā)了大量的應(yīng)用系統(tǒng)。這些遺留系統(tǒng)針對的問題域各種各樣,實現(xiàn)方法也各有不同。這些系統(tǒng)都是以學(xué)習(xí)為目的而開發(fā),大多或多或少存在一些缺陷,系統(tǒng)的功能、性能很難真正滿足行業(yè)的需要,多數(shù)應(yīng)用系統(tǒng)難以投入實際應(yīng)用。即便如此,許多遺留系統(tǒng)中還是存在一些有價值的軟件模塊,隨意丟棄必然造成資源浪費。從這些遺留系統(tǒng)中提取有復(fù)用價值的軟件模塊或軟件構(gòu)件,進行合理的分類描述,然后通過軟件構(gòu)件庫收集、存儲。在以后的軟件開發(fā)實踐中,就可以根據(jù)需求選擇重復(fù)。
2 遺留系統(tǒng)中構(gòu)件的提取
從遺留系統(tǒng)中提取有可復(fù)用價值的構(gòu)件是構(gòu)件獲取的主要途徑之一。然而,大多數(shù)遺留系統(tǒng)在軟件設(shè)計和開發(fā)時并沒有為復(fù)用作專門的考慮,系統(tǒng)的接口和文檔也不是為復(fù)用而設(shè)計的,甚至有些遺留系統(tǒng)只有代碼,沒有相關(guān)的文檔。因此,要從遺留系統(tǒng)中提取構(gòu)件存在很多困難。
如何從遺留系統(tǒng)中提取構(gòu)件,是軟件復(fù)用與程序理解領(lǐng)域的一個重要交叉研究領(lǐng)域[2]。許多專業(yè)人員對此做了深入研究,文獻[2]從系統(tǒng)分解和度量兩個方面對構(gòu)件提取的研究現(xiàn)狀做了綜述,文獻[3]以系統(tǒng)理解和軟件度量為基礎(chǔ),提出了一種從面向?qū)ο筮z留系統(tǒng)中挖掘可復(fù)用構(gòu)件的方法,文獻[4]提出了一種領(lǐng)域框架和構(gòu)件的提取方法。這些研究為自動化的構(gòu)件識別和獲取提供基礎(chǔ),但是至今,構(gòu)件的提取還不能做到完全的自動化[3]。
學(xué)生的課程設(shè)計、畢業(yè)設(shè)計產(chǎn)生的遺留系統(tǒng)一般都有比較完整的文檔,因此,可以依據(jù)這些文檔理解系統(tǒng),采用手工方式從這些系統(tǒng)中提取構(gòu)件。本文采用了基于UML的軟件構(gòu)件提取方法,提取過程是一個基于用例迭代的過程,構(gòu)件的提取由用例驅(qū)動,用例圖描述系統(tǒng)的功能需求,交互圖描述每個用例的流程和涉及的類,類圖描述實現(xiàn)用例的類和類之間的關(guān)系,構(gòu)件則是類的抽象[1]。下面結(jié)合圖書館管理系統(tǒng),說明構(gòu)件的提取過程:
(1)依據(jù)用例圖,分析每一個用例的可復(fù)用性,并利用有用性原則篩選用例。
圖1是圖書管理系統(tǒng)中涉及圖書管理員角色的用例圖,由圖可知,涉及圖書管理員的用例包括:用戶管理、圖書管理、借閱管理、借書證管理。其中圖書管理和借閱管理是兩個比較復(fù)雜的用例,圖書管理包含圖書編目管理和圖書入庫管理。借閱管理包括:借閱資格驗證管理、借書管理、還書管理、續(xù)借管理等。
依據(jù)有用性原則篩選用例,所謂有用性原則就是選取的用例具有相對獨立的邏輯功能,能滿足某種通用的功能需求,或者能滿足特定領(lǐng)域經(jīng)常被用到的業(yè)務(wù)需求。對于一個遺留系統(tǒng),并沒有必要把所有的用例確定為提取構(gòu)件的候選用例,一般只選擇可復(fù)用性高,邏輯功能完善、邏輯關(guān)系比較獨立的用例。
例如,針對圖書館管理系統(tǒng),選取用戶管理用例作為候選用例,提取通用的用戶管理構(gòu)件,該構(gòu)件可在新系統(tǒng)開發(fā)中復(fù)用,實現(xiàn)用戶的輸入、刪除、更新等功能。也可以考慮選取借閱管理用例作為候選用例提取領(lǐng)域構(gòu)件,以后在領(lǐng)域內(nèi)開發(fā)新的圖書管理系統(tǒng)的時候復(fù)用。
(2)依據(jù)交互圖,了解候選用例的處理流程,分析候選用例所涉及到的類,以及這些類之間的耦合關(guān)系。
借書管理的順序圖如圖2所示,圖2表示了借書管理中的業(yè)務(wù)處理流程,參照借書管理用例的順序圖并研究借閱管理的其它用例,可知借書管理所涉及的類有:“圖書管理員”、“讀者”、“書籍”、“圖書信息”、“借閱記錄”以及“圖形界面控制類(GUI)”等。
依據(jù)交互圖分析類之間的耦合關(guān)系,耦合關(guān)系是度量構(gòu)件獨立性的指標(biāo)之一。類的耦合數(shù)越大,類越容易受其它類的影響,不利于復(fù)用。圖2描述了這些類之間的方法調(diào)用過程,反應(yīng)這些類之間的耦合關(guān)系。
(3)依據(jù)類圖,確定那些類共同實現(xiàn)那個候選用例。將這些類提取出來,作為具有實現(xiàn)該用例功能的候選構(gòu)件。
分析借書管理的類圖(如圖3所示),由于“圖書管理員”、“讀者”、“書籍”、“圖書信息”、“借閱記錄”類共同用來實現(xiàn)圖書借閱用例。因此,將這些類抽象成圖書借閱構(gòu)件。
(4)依據(jù)構(gòu)件質(zhì)量度量模型,對所提取的候選構(gòu)件質(zhì)量進行度量,并根據(jù)需要對構(gòu)件進行封裝。
構(gòu)件可復(fù)用性質(zhì)量度量的模型有多種,本文選擇三個主要的因素進行度量,即有用性、易用性、接口成熟性。有用性就是度量提取的構(gòu)件能完成什么邏輯功能,易用性包括易理解、易修改,易修改就是針對新系統(tǒng)特殊的功能需求對構(gòu)件能進行適應(yīng)性修改。接口成熟性度量包括接口的正確性和接口的易理解性。接口的正確性判斷是依據(jù)接口是否符合接口規(guī)格說明。接口的易理解性是指接口規(guī)格說明是否能被用戶正確理解[5]。根據(jù)度量的結(jié)果確定需要提取的構(gòu)件,最后對提取的構(gòu)件進行封裝,這里封裝的含義有兩方面,一是對提取的同一構(gòu)件的類進行打包,如將java類打包成jar包的形式。二是給每一個構(gòu)件添加必要的文檔。
3 構(gòu)件的管理
3.1 構(gòu)件的分類描述
隨著提取構(gòu)件數(shù)量的增加,構(gòu)件的分類描述越來越重要。構(gòu)件復(fù)用者通過構(gòu)件的描述信息,往往找到的是一個具有相似功能的構(gòu)件集。如何找到合適的構(gòu)件,主要取決于需要確定更合理的構(gòu)件描述術(shù)語。
現(xiàn)有文獻關(guān)于構(gòu)件的分類描述主要應(yīng)用刻面分類法,刻面分類法是由一組描述構(gòu)件特征的刻面所組成,每個刻面從不同的角度對構(gòu)件進行分類,每個刻面由一組基本的術(shù)語構(gòu)成術(shù)語空間。
本文參照青鳥構(gòu)件模型[6]、以及現(xiàn)有的一些文獻[7][8]中提出的構(gòu)件刻面分類方法,針對提取的構(gòu)件,設(shè)計出了五個刻面:構(gòu)件屬性、構(gòu)件形態(tài)、應(yīng)用環(huán)境、構(gòu)件功能、存儲環(huán)境。具體描述信息見圖4所示。
(1)構(gòu)件屬性:涉及構(gòu)件描述的一些基本信息,術(shù)語包括構(gòu)件名稱、作者、版本、創(chuàng)建時間、入庫時間、修改時間。
(2)構(gòu)件形態(tài):描述構(gòu)件開發(fā)所用的語言、構(gòu)件的模型以及構(gòu)件的抽象層次。術(shù)語包括開發(fā)語言、類型、抽象層次。開發(fā)語言術(shù)語指定為枚舉值:C#、C++、Java、JSP、ASP、PHP、其它。類型術(shù)語指定為枚舉值:COM/DCOM、JavaBean/EJB、CORBA。抽象層次術(shù)語指定的枚舉值:DLL、EXE、源碼、其它。
(3)應(yīng)用環(huán)境:指構(gòu)件實現(xiàn)的目標(biāo)及可能的應(yīng)用領(lǐng)域。術(shù)語包括構(gòu)件實現(xiàn)目標(biāo)、應(yīng)用領(lǐng)域、適用的操作系統(tǒng)。其中應(yīng)用領(lǐng)域術(shù)語指定為枚舉值:通用、信息管理、辦公應(yīng)用、Web應(yīng)用、數(shù)據(jù)庫相關(guān)、網(wǎng)絡(luò)和通信、多媒體、文件處理、標(biāo)記語言相關(guān)、用戶界面、其它。操作系統(tǒng)術(shù)語指定為枚舉值:Unix、Linux、Windows、Android。
(4)構(gòu)件功能:主要指構(gòu)件在原有或可能的軟件系統(tǒng)中實現(xiàn)的邏輯功能,術(shù)語包括功能的分類、功能描述、接口描述。功能分類指定的枚舉值:圖形圖像、網(wǎng)絡(luò)通信、數(shù)值處理、數(shù)據(jù)庫、用戶界面、容器、字處理、文件操作、其他。功能描述是對構(gòu)件所實現(xiàn)的功能用文字描述,幫助使用者理解構(gòu)件。接口描述對構(gòu)件的輸入?yún)?shù)個數(shù)及類型、輸出結(jié)果等進行描述。
(5)存儲環(huán)境:構(gòu)件實體采用文件系統(tǒng)存儲,存儲環(huán)境刻面描述包含構(gòu)件存儲有關(guān)的信息,術(shù)語包括文件名、文件屬性、文件存儲路徑。
3.2 構(gòu)件的存儲
從遺留系統(tǒng)中提取的構(gòu)件形式多樣、規(guī)模大小不一,不適合使用關(guān)系數(shù)據(jù)庫直接存儲。因為關(guān)系數(shù)據(jù)庫中的字段一般有類型、大小的限制,這與構(gòu)件實體的特點不相符。
構(gòu)件實體適合采用文件系統(tǒng),以文件為單位存儲。文件系統(tǒng)對所存儲的文件大小沒有限制,且可以存儲多種不同形式的構(gòu)件,這恰好符合構(gòu)件的特點。但是文件系統(tǒng)不具有快速有效的檢索途徑,文件系統(tǒng)中存儲的構(gòu)件檢索效率低,特別是當(dāng)文件數(shù)量很多的時候,檢索效率更低。因此,文件系統(tǒng)不能滿足對構(gòu)件高效檢索的要求。
在實際應(yīng)用中,構(gòu)件的存儲采用關(guān)系數(shù)據(jù)庫與文件系統(tǒng)相結(jié)合的方法實現(xiàn)較合理,具體的存儲結(jié)構(gòu)見圖5。圖中的橢圓表示構(gòu)件的刻面分類信息,包括構(gòu)件基本屬性、構(gòu)件形態(tài)、構(gòu)件功能、應(yīng)用環(huán)境和存儲環(huán)境,刻面分類信息是構(gòu)件的附加信息,這些信息存儲在關(guān)系數(shù)據(jù)庫中。其中,構(gòu)件的一個刻面對應(yīng)一個構(gòu)件表,一個術(shù)語對應(yīng)一個字段(表設(shè)計見圖4),六個表組成構(gòu)件庫。構(gòu)件復(fù)用者利用構(gòu)件庫就可以高效檢索構(gòu)件,利用構(gòu)件的存儲環(huán)境信息就可知構(gòu)件的文件名、文件存儲路徑。然后按照文件名和路徑,從文件系統(tǒng)中找到并下載構(gòu)件。
4 結(jié)語
本文參考了現(xiàn)有構(gòu)件提取和管理的文獻資料,研究了基于UML的構(gòu)件提取方法,該方法是一種是通過分析用例圖、交互圖、類圖,確定需要提取的候選構(gòu)件,然后依據(jù)構(gòu)件質(zhì)量度量模型,對候選構(gòu)件進行度量,最后確定并提取可復(fù)用價值較高的構(gòu)件,并進行封裝。這種手工提取方法,雖然不能實現(xiàn)自動化的構(gòu)件提取,但是思路簡單易于實現(xiàn)。
參考文獻
[1]朱建江.基于軟件構(gòu)件的軟件復(fù)用的研究[D].南京:南京航空航天大學(xué),2001.
[2]羅景,張路,孫家.構(gòu)件提取技術(shù)綜述[J].計算機科學(xué),2005,32(12):1-7.
[3]周欣,陳向葵,孫家,楊芙清.面向?qū)ο笙到y(tǒng)中基于度量的可復(fù)用構(gòu)件獲取機制[J].電子學(xué)報,2003,31(5):649-653.
[4]彭鑫,趙文耘.一種基于類間關(guān)系動態(tài)分析的領(lǐng)域框架和構(gòu)件提取方法[J].小型微型計算機系統(tǒng),2007,28(11):1928-1931.
[5]李曉麗,劉超,金茂忠,高仲儀.軟件構(gòu)件的可復(fù)用性質(zhì)量度量[J].計算機應(yīng)用研究,2007,24(6):280-283.
[6]潘穎,趙俊峰,謝冰.構(gòu)件庫技術(shù)的研究與發(fā)展[J].計算機科學(xué),2003,30(5):90-94.
[7]梁潔輝.Web構(gòu)件庫管理系統(tǒng)的設(shè)計與實現(xiàn)[D].南京:南京理工大學(xué),2004.
[8]楊森,曹寶香.基于J2EE和XML的構(gòu)件庫系統(tǒng)的設(shè)計[J].計算機技術(shù)與發(fā)展,2009,19(8):100-103.