彭 博,王 普,李亞芬
摘 要:軟件復用技術被認為是解決軟件危機的有效方法,可以大幅度提高軟件開發效率和質量,其核心是建立可復用構件庫系統。構件庫系統最主要的問題是如何對構件進行準確描述和分類,以便更快、更準地查找到用戶需要的構件。在此采用刻面分類方法在Web應用開發領域中建立軟件構件庫,完成了構件的定義和準確描述及分類,確定了構件的存儲模型,采用關鍵字檢索和刻面分類檢索兩種檢索方式,有效提高了檢索效率和準確性,實現了在Web應用開發中對軟件復用的支持。
關鍵詞:Web應用開發;構件庫;軟件復用;刻面分類
中圖分類號:TP311文獻標識碼:A
文章編號:1004-373X(2009)20-116-04
Design and Realization of Component Library System in Web Field
PENG Bo,WANG Pu,LI Yafen
(College of Electronic Information & Control Engineering,Beijing University of Technology,Beijing,100124,China)
Abstract:The software reuse is considered to be an effective way to solve the software crisis,which can greatly improve the efficiency and quality of software development,and the core of software reuse is to set up a reusable component library.The most important question of a component library system is how to describe components accurately and classification,in order that the users could search and get their needed components faster and more accurate.In this paper,it builds a component library based on the faceted classification method in the field of Web application development,which completes the definition of components,the accurate description and efficient classification,it determines the components storage model,using key words searching and facet classification searching,it greatly improves the searching efficiency and accuracy,realizes supports of software reuse in Web application development.
Keywords:Web application development;component library;software reuse;facet classification
0 引 言
目前采用Web形式開發的軟件產品需求與日劇增,其規模和復雜度不斷增加,開發和維護成本也不斷提高,傳統的Web開發模式面臨著巨大的挑戰。人們在探索新軟件開發方法的過程中發現,軟件復用(Software Reuse)將是解決這個問題現實可行的途徑[1],而軟件復用的核心是建立可復用構件庫系統,實現軟件開發人員的合理分工,提高軟件產品開發效率,縮短開發周期。軟件復用是在軟件開發中避免重復勞動的解決方案,其出發點是應用系統的開發不再采用一切“從零開始”的模式,而是以已有的工作為基礎,充分利用過去應用系統開發中積累的知識和經驗[2]。它的基本思想是借鑒現代工業生產中的標準構件復用思想,通過公共的可復用構件來集成新的軟件產品,其本質上是運用現存軟件系統的產品構造新的軟件系統,在軟件開發中避免重復勞動。國內外軟件界對可復用軟件構件庫系統及其相關技術進行了深入的研究,并取得不少成果,比較有影響,例如北大青鳥構件庫管理系統(JBCLMS)、REBOOT系統,RIG及NATO標準,ALOAF模型等。
在分析各類構件庫系統的基礎上,針對Web應用開發領域,建立了原型構件庫系統,系統完成了用戶認證授權、構件添加、構件修改、構件刪除、構件入庫以及下載、構件檢索和維護等功能,以實現在Web應用開發過程中對軟件復用的支持,使基于軟件復用技術的Web應用開發人員可以快速有效地開發各種Web應用軟件,提高Web應用軟件的開發效率。
1 構件庫系統的定義和職能
構件庫系統是整個軟件復用的中介和核心,是可重用構件的集合,并作為開發可重用構件和基于可重用構件開發這兩個生存周期的聯系體系[3]。具體地說,構件庫是軟件構件的基礎物質倉庫,是分類和管理可復用構件資產的基礎設施,它在構件開發人員和構件使用人員之間起到了橋梁作用,如圖1所示。
圖1 構件庫系統職能圖
構件庫系統存儲并管理著大量的構件,系統必須對這些構件進行有效的組織和管理,同時還需要為構件庫系統使用者提供方便有效地構件檢索工具,支持開發人員在軟件開發過程中方便檢索、理解和獲取構件。構件庫系統主要職能包括:構件的選取、構件的驗證、構件的描述和分類、構件的入庫存儲、構件的檢索、構件庫系統的管理和維護、構件庫系統的安全訪問管理等。
2 構件的定義以及存儲模型
2.1 構件的定義
構件來源于英文的“Component”,對構件的定義一般來說,有廣義與狹義之分。廣義構件是指可以被明確標識的軟件制品,它可以是需求分析、設計、代碼、測試用例、文檔或軟件開發過程中的其他產品。狹義軟件構件是指具體的、可復用的、提供明確接口完成特定功能的程序代碼塊[4]。
鑒于Web開發過程的特殊性,在此認為在Web開發各個階段的各種成果對于今后的復用工作都是非常有價值的,都應當作為可復用構件存儲,因此構件定義為在Web應用開發過程中的一切有復用價值的產品。例如在系統設計前的需求文檔、系統的設計文檔、各種模塊實體代碼、測試階段的各種測試用例、各種圖片或者多媒體資料等,可見這里涉及的構件的表現形式多樣,粒度大小差異明顯。
2.2 構件的存儲模型
對于構件的存儲方式,首先想到使用關系數據庫(RDBMS),其具有儲存和管理大量數據的高效性、理論的嚴密性和技術的成熟性。但是在實際應用中,由于本文定義的構件的結構相對復雜,存在形式多種多樣,粒度大小多樣且尺度相差有時很懸殊,這與關系數據庫對所保存的數據項一般都有尺寸限制,不宜過大的要求不相符合。文件系統(Files)的存儲特點是存儲容量大,對存儲的數據體積無限制,存儲數據的形式也沒有要求,但文件系統的查詢效率低,不利于大量數據的存儲以及管理。因此,單一使用關系數據庫或者文件系統都不完全符合對構件存儲的需要。
在該構件庫系統中利用關系數據庫來存儲構件的信息部分,利用文件系統來存儲構件的實體,并通過信息文件中的地址信息與構件實體建立鏈接。其中,構件信息中包含構件的分類信息,即按照某種分類方式確定的分類信息;基本信息是指對構件基本屬性的描述、構件的說明等,可增加對構件理解的說明文件,例如構件的作者、入庫日期、下載次數、構件說明文件等;地址信息則是指對構件實體實際存放位置的描述,如圖2所示。
圖2 構件庫系統存儲模型
3 構件庫系統的體系結構
本文構件庫系統基于瀏覽器/服務器(B/S)模式,采用Web多層結構,如圖3所示構件庫系統分為三層結構:視圖層、業務層、數據層。
圖3 構件庫系統體系結構圖
視圖層主要完成系統與客戶的交互工作,當客戶通過瀏覽器向指定的Web服務器發出申請時,Web服務器將客戶端的申請處理后,把處理的相應的內容再傳送給客戶端瀏覽器。
業務層將視圖層提出的請求轉換為對數據層的請求,并將數據層返回的數據處理,最后提交視圖層。業務層負責完成各種應用邏輯,在構件庫系統中,業務邏輯層體現為構件庫系統的主要功能和實現,是構件庫系統的核心。
數據層包括數據庫和及其服務與管理系統,負責對從業務層傳來的數據進行處理。并且對業務層屏蔽處理細節,屏蔽的掉了底層數據庫系統的特殊性,使邏輯可以按照統一的接口訪問庫中的數據,提高整個系統的靈活性和可移植性。
用戶對數據的訪問請求,通過視圖層的客戶端瀏覽器提供的用戶界面輸入,并經業務層中業務邏輯轉換為對數據層的數據請求,數據層的服務器處理完請求后,將結果通過業務邏輯層,返回給視圖層由視圖層輸出顯示用戶所需的結果。構件庫系統采用瀏覽器/服務器(B/S)模式及多層體系結構,有助于功能的獨立與系統的擴展,同時降低了系統的復雜性和耦合度,并且使得系統更穩定、方便擴展、維護簡單。
如圖3所示,本文構件庫系統設置了兩類用戶,構件庫使用人員和構件庫管理人員,他們都通過友好的界面接口使用構件庫系統的服務。其中構件庫使用人員主要使用構件檢索工具獲取自己感興趣或者需要的構件,構件檢索工具支持兩種檢索模式:關鍵字查詢以及刻面分類查詢。同時因為對構件理解最深刻的是構件開發人員本身,因此構件管理工具可以讓構件開發人員添加和管理自己開發的構件。信息反饋工具可以讓構件的使用者與該構件的開發者進行交流,以便構件的更新與改進,同時構件庫使用人員也可以使用信息反饋工具與系統管理人員交流,討論構件分類方式以及構件庫系統管理等問題。
構件庫的管理人員有權限訪問并管理所有構件,并可以使用用戶管理工具對構件庫系統所有用戶的信息以及權限進行維護管理。由于Web開發的技術日新月異,新技術、新術語不斷更新,構件庫管理人員可以使用刻面術語管理工具動態維護系統刻面及術語空間。信息發布工具主要用于發布系統通知信息及系統消息,構件庫管理人員使用系統的文本編輯器編輯發布信息。
4 構件庫分類方式以及構件的描述
4.1 構件庫分類方式的確定
構件的表示、分類和檢索方法,決定了構件庫系統的組織、管理,以及構件庫系統的查詢和用戶對構件的理解,是構件庫系統研究的基礎性問題,也是構件庫系統的關鍵性問題。對單個構件的復用可以劃分為構件的識別和檢索、構件的理解和適應性修改三部分,復用成本公式[5]為:
復用的成本=檢索成本+理解成本+修改成本
有效的檢索機制能大大降低構件的檢索成本和理解成本,對構件的分類就是為了高效方便的檢索,而構件的分類最終體現在構件的分類描述上。
Frakes W和Mili H分別對現有的構件表示和檢索方法進行分類。Mili按復雜度和檢索效果的遞增將其分為基于文本、基于詞法描述子的和基于規則的編碼和檢索三類。Frkaes W將現有的構件表示方法分為人工智能方法、超文本方法、和基于庫科學/信息科學的方法[6]。
人工智能方法采用人工智能的學習和推理機制,來維護一個表示構件的知識庫[7]。該方法采用構件知識表示語言,來描述構件的屬性及其特征和用于檢索構件的知識。這種方法目前處于實驗階段,還沒有得到廣泛應用。
超文本方法使用超文本技術,主要應用于非線性關系的檢索領域,通過基于屬性的元模型鏈接為開發人員提供一個有用的功能集合,從而找到可重用的構件[8]。
基于各種形式化規格說明的方法[9,10],需要使用專門的形式化規范語言對組件進行全面細致的描述。當查找構件時,系統會對兩個構件進行完整的匹配,這樣的查詢方式具有較高的查準率,能夠滿足大型構件庫系統的檢索要求。但是形式化規范語言的復雜性,使這種方法的廣泛應用受到了很大的限制。
在實際的構件庫系統中,往往采用基于庫科學/信息科學的表示方法[11]。信息科學方法又分為基于受控詞匯表(如枚舉、刻面)分類和基于不受控詞匯表分類兩種形式,其中以關鍵詞分類(Keyword)和刻面分類(Faceted)兩種應用最多。現在的大型通用構件庫系統應用較為普遍的也是刻面分類方式,例如REBOOT模型從抽象、操作、操作對象、依賴四個刻面對構件進行描述,青鳥構件庫也是采用以刻面分類為主、多種分類模式相結合的方法對構件進行分類描述[12]。
通過對上文中介紹的幾種查詢方法進行比較分析,結合Web應用系統組件庫查詢的特殊性,確定使用刻面分類法對組件進行描述和分類,如表1所示,本文確定四個主要刻面:
(1) 功能描述(Function Description):描述構件的具體實現功能;
(2) 層次形態(Level & State):描述構件在軟件開發過程中所處的層次階段及構件的具體形態;
(3) 開發環境(Develop Environment):描述構件的開發工具以及開發語言;
(4) 應用環境(Application Environment):描述構件在使用的時候所需要的環境,包括操作系統、數據庫系統、Web服務器。
表1 構件分類描述具體刻面及術語
刻面名稱子刻面名稱術語舉例
功能描述無用戶管理、信息發布、統計計數、數據庫、人機交互、上傳下載等
層次形態層次描述形態描述分析、設計、編碼、測試等文本、圖片、代碼、功能模塊等
開發環境開發語言開發工具HTML,Java,jsp,.Net,Asp等Eclipse,Photoshop,VisualStudio等
應用環境操作系統WebServer數據庫Windows,Linux,Unix,Solaris等Tomcat,WebSphere,Apache 等MySQL,Oracle,PostgreSQL等
4.2 構件分類描述的實例
根據上文確定的刻面分類模式,舉一個構件描述的具體實例:假設構件(ID=0001)是用于用戶登錄的模塊,其功能描述為用戶管理(User Manage),層次已處于測試階段(Testing),形態為代碼(Code)、是使用開發工具(Eclipse)開發的開發語言為(Java),其部署環境為操作系統(Linux)、Web服務器(Tomcat)、數據庫(MySql),構件相應的XML描述如下: