基于構(gòu)件的開發(fā)(Component-Based
Development,簡稱CBD)或基于構(gòu)件的軟件工程(Component-Based Software
Engineering,簡稱CBSE)是一種軟件開發(fā)新范型,它是在一定構(gòu)件模型的支持下,復用構(gòu)件庫中的一個或多個軟件構(gòu)件,通過組合手段高效率、高質(zhì)量地構(gòu)造應用軟件系統(tǒng)的過程
由于以分布式對象為基礎的構(gòu)件實現(xiàn)技術日趨成熟,CBD已經(jīng)成為現(xiàn)今軟件復用實踐的研究熱點,被認為是最具潛力的軟件工程發(fā)展方向之一。
一、
基本概念
下面簡單介紹與本文相關的一些概念,包括構(gòu)件、接口、契約、接口描述語言、構(gòu)件框架等,另外還介紹了CBD的開發(fā)模式,以及構(gòu)件技術和對象技術的關系。
在文獻[Szyperski97]中,Szyperski把構(gòu)件定義為“軟件構(gòu)件是一個僅帶特定契約接口和顯式語境依賴的結(jié)構(gòu)單元”,同時他還寫道:“軟件構(gòu)件可以獨立部署,易于第三方整合。”
根據(jù)這個觀點,可以認為構(gòu)件由一方定義其規(guī)格說明,被另一方實現(xiàn),然后供給第三方使用。接口(interface)是用戶與構(gòu)件發(fā)生交互的連接渠道,第 三方只能通過構(gòu)件接口的規(guī)格說明理解和復用構(gòu)件,接口規(guī)格說明也是一種“契約”(contract),它足夠精確地描述構(gòu)件實現(xiàn)的功能,同時又不把構(gòu)件限 定于唯一的實現(xiàn)方法,這種不確定帶來多解決方案的靈活性。另一方面,雖然構(gòu)件可以獨立部署的,但是一個構(gòu)件可能會用到其它構(gòu)件或平臺提供的服務,或者說基 于構(gòu)件的軟件系統(tǒng)中通常是多個構(gòu)件協(xié)作完成一定功能,所以構(gòu)件依賴于組裝環(huán)境或稱為語境(context)。
構(gòu)件基礎設施 (infrastructure)是異構(gòu)構(gòu)件互操作的標準和通信平臺,構(gòu)件框架(Framework)是構(gòu)件實例“即插即用”的支撐結(jié)構(gòu)。通過一定的環(huán)境 條件和交互規(guī)則,構(gòu)件框架允許一組構(gòu)件形成一個“孤島”,獨立地與外部構(gòu)件或其他框架交互和協(xié)作,因此構(gòu)件框架及其內(nèi)含的構(gòu)件也可以視為一個構(gòu)件,于是構(gòu) 件通過不斷的迭代和合成,構(gòu)成一個結(jié)構(gòu)復雜的應用系統(tǒng)。目前,有多個組織和公司制定了構(gòu)件基礎設施的標準或開發(fā)了相關產(chǎn)品,也為構(gòu)件、構(gòu)件框架和接口建立 了模型和技術規(guī)范,其中OMG CORBA[OMG01]、Microsoft COM/DCOM(或.NET)[Microsoft01, Box99]以及Sun JavaBean/EJB[Perrone01]占主導地位,本文第六章將重點討論CORBA CCM(CORBA Component Model)構(gòu)件模型,并介紹基于CCM技術的演化構(gòu)件模型。
特別地,通過購買獲得的第三方構(gòu)件稱為COTS(commercial off-the-shelf ,簡稱COTS)構(gòu)件,作為內(nèi)部(in-house)構(gòu)件的對應概念。使用COTS是無源碼的完全黑盒復用,既有成本低、即買即用的優(yōu)點,又有不一定滿足需求或誤配的風險。
CBD遵循“購買而不創(chuàng)建(buy, don’t build)”的開發(fā)哲學[Clements95],讓人們從“一切從頭開始”(build from scratch)的程序編制轉(zhuǎn)向軟件組裝。基于構(gòu)件的開發(fā)任務包括創(chuàng)建、檢索和評價、適配(adaptation)、組裝、測試和驗證、配置和部署 (deployment)、維護和演進,以及遺產(chǎn)系統(tǒng)(legacy)的再工程等主要活動,它們與傳統(tǒng)的生命周期中的方法不盡相同。首先,CBD采用以構(gòu) 件庫為中心的開發(fā)模式,構(gòu)件檢索和評價是CBD的一項關鍵任務,這里我們理解的構(gòu)件庫不僅僅是一個獨立的數(shù)據(jù)庫,而是廣泛的、一切可獲得的構(gòu)件資源,尤其 是通過互聯(lián)網(wǎng)發(fā)布的軟件構(gòu)件。其次,構(gòu)件形成是一種在軟件體系結(jié)構(gòu)支持下的組裝過程,也就是說,在應用領域里需要用DSSA將獨立的構(gòu)件組裝成完整的應用 系統(tǒng),可見構(gòu)件的匹配和一致性驗證也成為CBD的關鍵任務。再次,CBD過程中需要同一些技術標準化接軌,相同的構(gòu)件可能由多個軟件供應商生產(chǎn),被多個用 戶使用,所以構(gòu)件接口、構(gòu)件基礎設施必須標準化。最后,CBD需要配置管理(Configuration Management),即專門處理構(gòu)件的集成、配置和發(fā)布(distribution)的有關事宜,于是構(gòu)件的配置、適配和部署都是CBD的關鍵任務。
構(gòu)件技術與面向?qū)ο蠹夹g緊密相關。構(gòu)件和對象都是對現(xiàn)實世界的抽象描述,通過接口封裝了可復用的代碼實現(xiàn),不同的是,首先在概念層面上,對象描述客觀世 界實體(identity),構(gòu)件提供客觀世界服務(service)[Petre00],其次在復用策略上,對象是通過繼承實現(xiàn)復用,而構(gòu)件是通過合成 實現(xiàn)復用;最后在技術手段上,構(gòu)件通過對象技術而實現(xiàn),對象按規(guī)定經(jīng)過適當?shù)慕涌诎b(wrap)之后成為構(gòu)件,一個構(gòu)件通常是多個對象的集合體。
當今,構(gòu)件技術已經(jīng)成為計算環(huán)境的基本組成之一,眾多中間件產(chǎn)品和開發(fā)工具提供了對不同構(gòu)件模型的實現(xiàn)支持,特別在分布式、企業(yè)級應用軟 件系統(tǒng)中,無不把軟件的構(gòu)件化作為解決維護、擴展和升級的唯一途徑。然而,雖然業(yè)已存在了大量的CBD概念、方法和工具,軟件業(yè)并未完全遷移到CBD軟件 開發(fā)范型,一個主要原因是缺少一套成熟的CBD開發(fā)方法學,至今尚未完全解決如下關鍵問題[Bergner99]:
(1)必須建立一個完善的CBD概念框架,用數(shù)學方法定義構(gòu)件相關概念的形式化模型,既要盡可能的簡單,又要足以描述已有的構(gòu)件基本概念和開發(fā)技術。
(2)必須有切實可行的構(gòu)件描述方法和技術。在構(gòu)件概念框架基礎上,為構(gòu)件開發(fā)者建立相互交流的特殊語言,例如UML[Booch01]的圖形化描述技術和CORBA IDL[OMG01]的文本描述技術,理想的描述技術可以提供系統(tǒng)的一致性約束和正確性驗證。
(3)要為CBD的開發(fā)流程建立一個合理的過程模型,特別要研究如何為扮演不同角色的開發(fā)者分配相應的任務,例如軟件體系結(jié)構(gòu)設計師負責軟件構(gòu)架設計的詳細職責和結(jié)果驗收標準。
(4)要有支持描述技術和過程模型的輔助開發(fā)工具,至少需要具備開發(fā)構(gòu)件、實現(xiàn)應用系統(tǒng)和生成文檔的工具。理想的開發(fā)工具還包括關鍵系統(tǒng)特征的驗證工具。
顯見,上述這些問題和前面介紹的軟件復用目的和任務緊密相關,必須從軟件復用的認識高度分析CBD方法中存在的問題,重點是使用知識表示方法和演化計算 方法解決構(gòu)件的語義模型和自動過程問題,包括CBD原理和技術中的構(gòu)件模型、構(gòu)件體系結(jié)構(gòu)和描述語言和基于構(gòu)件的開發(fā)過程等幾方面內(nèi)容。
二、 CBSE/CBD的工程學目標
CBSE/CBD的工程學(管理)目標如下:
(1) 降低費用:這是所有軟件開發(fā)方法學的共同目標,CBSE/CBD把成本效率提高到軟件復用方法的最高境界。
(2) 方便裝配:CBSE/CBD的最大特征是一系列構(gòu)件的裝配過程。
(3) 提高復用性:全面考慮構(gòu)件在多個應用系統(tǒng)中的復用潛力。
(4) 提高可定制性和適應性:開發(fā)者可以按需配置構(gòu)件;
(5) 提高可維護性:在系統(tǒng)中可以方便地添加、刪除和修改構(gòu)件。
三、 CBSE/CBD的技術目標
CBSE/CBD的技術目標如下:
(1) 降低耦合:耦合指構(gòu)件之間的相關性;
(2) 提高內(nèi)聚:內(nèi)聚指構(gòu)件內(nèi)元素之間的相關性;
(3) 控制粒度:粒度系統(tǒng)中構(gòu)件對應問題域的規(guī)模,包括構(gòu)件數(shù)量和大小兩個方面;
四、 CBSE/CBD的研究方向
CBSE/CBD的研究方向:
(1) 基于構(gòu)件軟件工程方法的概念模型過程模型;
(2) 構(gòu)件模型:研究構(gòu)件的本質(zhì)特征及構(gòu)件間的關系;
(3) 構(gòu)件獲取:有目的的構(gòu)件生產(chǎn)和從已有系統(tǒng)中挖掘提取構(gòu)件;
(4) 構(gòu)件描述語言:以構(gòu)件模型為基礎,解決構(gòu)件的精確描述、理解及組裝問題;
(5) 構(gòu)件庫(構(gòu)件分類與檢索):研究構(gòu)件分類策略、組織模式及檢索策略,建立構(gòu)件庫系統(tǒng),支持構(gòu)件的有效管理;
(6) 構(gòu)件集成組裝:在構(gòu)件模型的基礎上研究構(gòu)件組裝機制,包括源代碼級的組裝和基于構(gòu)件對象互操作性的運行級組裝;
(7) 標準化:構(gòu)件模型的標準化和構(gòu)件庫系統(tǒng)的標準化;
(8) 構(gòu)件系統(tǒng)的安全性問題和時效(real-time)問題;
(9) 非技術因素對CBD的影響:法律法規(guī)、商業(yè)實踐、組織結(jié)構(gòu)等方面的挑戰(zhàn)和策略。
參考文獻
[Brown00] A. Brown. Large-Scale Component-Based Development. New Jersey: Prentice Hall, Inc., 2000.
[Szyperski97] C. Szyperski. Component Software-Beyond OO Programming. Addison-wesley,1997
[OMG01] OMG CORBA, http://www.corba.org,2001
[Microsoft01] Microsoft corporation, http://www.microsoft.com/com,2001
[Box99] Don Box, Essential COM, Addison-Wesley, ISBN 0-201-63446-5,1999
[Perrone01] Paul J. Perrone, et al. J2EE構(gòu)建企業(yè)系統(tǒng)—專家級解決方案. 北京: 清華大學出版社, 2001
[Clements95] P.C. Clements, From Subroutines to Subsystems: Component Based Software Development. American Programmer, vol. 8, No. 11, November 1995.
[Petre00] Luigia Petre. Components vs. Objects. Turku Centre for Computer Science, TUCS Technical reports, No 370, October 2000
[Bergner99] Klaus Bergner, Andreas Rausch, Marc Sihling, Alexander Vilbig. Componentware – Methodology and Process,19th March 1999
[Booch01] Grady Booch, James Rumbaugh, Ivar Jacobson著.邵維忠、麻志毅、張文娟、孟祥文譯,UML用戶指南,機械工業(yè)出版社,2001.6
下面簡單介紹與本文相關的一些概念,包括構(gòu)件、接口、契約、接口描述語言、構(gòu)件框架等,另外還介紹了CBD的開發(fā)模式,以及構(gòu)件技術和對象技術的關系。
在文獻[Szyperski97]中,Szyperski把構(gòu)件定義為“軟件構(gòu)件是一個僅帶特定契約接口和顯式語境依賴的結(jié)構(gòu)單元”,同時他還寫道:“軟件構(gòu)件可以獨立部署,易于第三方整合。”
根據(jù)這個觀點,可以認為構(gòu)件由一方定義其規(guī)格說明,被另一方實現(xiàn),然后供給第三方使用。接口(interface)是用戶與構(gòu)件發(fā)生交互的連接渠道,第 三方只能通過構(gòu)件接口的規(guī)格說明理解和復用構(gòu)件,接口規(guī)格說明也是一種“契約”(contract),它足夠精確地描述構(gòu)件實現(xiàn)的功能,同時又不把構(gòu)件限 定于唯一的實現(xiàn)方法,這種不確定帶來多解決方案的靈活性。另一方面,雖然構(gòu)件可以獨立部署的,但是一個構(gòu)件可能會用到其它構(gòu)件或平臺提供的服務,或者說基 于構(gòu)件的軟件系統(tǒng)中通常是多個構(gòu)件協(xié)作完成一定功能,所以構(gòu)件依賴于組裝環(huán)境或稱為語境(context)。
構(gòu)件基礎設施 (infrastructure)是異構(gòu)構(gòu)件互操作的標準和通信平臺,構(gòu)件框架(Framework)是構(gòu)件實例“即插即用”的支撐結(jié)構(gòu)。通過一定的環(huán)境 條件和交互規(guī)則,構(gòu)件框架允許一組構(gòu)件形成一個“孤島”,獨立地與外部構(gòu)件或其他框架交互和協(xié)作,因此構(gòu)件框架及其內(nèi)含的構(gòu)件也可以視為一個構(gòu)件,于是構(gòu) 件通過不斷的迭代和合成,構(gòu)成一個結(jié)構(gòu)復雜的應用系統(tǒng)。目前,有多個組織和公司制定了構(gòu)件基礎設施的標準或開發(fā)了相關產(chǎn)品,也為構(gòu)件、構(gòu)件框架和接口建立 了模型和技術規(guī)范,其中OMG CORBA[OMG01]、Microsoft COM/DCOM(或.NET)[Microsoft01, Box99]以及Sun JavaBean/EJB[Perrone01]占主導地位,本文第六章將重點討論CORBA CCM(CORBA Component Model)構(gòu)件模型,并介紹基于CCM技術的演化構(gòu)件模型。
特別地,通過購買獲得的第三方構(gòu)件稱為COTS(commercial off-the-shelf ,簡稱COTS)構(gòu)件,作為內(nèi)部(in-house)構(gòu)件的對應概念。使用COTS是無源碼的完全黑盒復用,既有成本低、即買即用的優(yōu)點,又有不一定滿足需求或誤配的風險。
CBD遵循“購買而不創(chuàng)建(buy, don’t build)”的開發(fā)哲學[Clements95],讓人們從“一切從頭開始”(build from scratch)的程序編制轉(zhuǎn)向軟件組裝。基于構(gòu)件的開發(fā)任務包括創(chuàng)建、檢索和評價、適配(adaptation)、組裝、測試和驗證、配置和部署 (deployment)、維護和演進,以及遺產(chǎn)系統(tǒng)(legacy)的再工程等主要活動,它們與傳統(tǒng)的生命周期中的方法不盡相同。首先,CBD采用以構(gòu) 件庫為中心的開發(fā)模式,構(gòu)件檢索和評價是CBD的一項關鍵任務,這里我們理解的構(gòu)件庫不僅僅是一個獨立的數(shù)據(jù)庫,而是廣泛的、一切可獲得的構(gòu)件資源,尤其 是通過互聯(lián)網(wǎng)發(fā)布的軟件構(gòu)件。其次,構(gòu)件形成是一種在軟件體系結(jié)構(gòu)支持下的組裝過程,也就是說,在應用領域里需要用DSSA將獨立的構(gòu)件組裝成完整的應用 系統(tǒng),可見構(gòu)件的匹配和一致性驗證也成為CBD的關鍵任務。再次,CBD過程中需要同一些技術標準化接軌,相同的構(gòu)件可能由多個軟件供應商生產(chǎn),被多個用 戶使用,所以構(gòu)件接口、構(gòu)件基礎設施必須標準化。最后,CBD需要配置管理(Configuration Management),即專門處理構(gòu)件的集成、配置和發(fā)布(distribution)的有關事宜,于是構(gòu)件的配置、適配和部署都是CBD的關鍵任務。
構(gòu)件技術與面向?qū)ο蠹夹g緊密相關。構(gòu)件和對象都是對現(xiàn)實世界的抽象描述,通過接口封裝了可復用的代碼實現(xiàn),不同的是,首先在概念層面上,對象描述客觀世 界實體(identity),構(gòu)件提供客觀世界服務(service)[Petre00],其次在復用策略上,對象是通過繼承實現(xiàn)復用,而構(gòu)件是通過合成 實現(xiàn)復用;最后在技術手段上,構(gòu)件通過對象技術而實現(xiàn),對象按規(guī)定經(jīng)過適當?shù)慕涌诎b(wrap)之后成為構(gòu)件,一個構(gòu)件通常是多個對象的集合體。
當今,構(gòu)件技術已經(jīng)成為計算環(huán)境的基本組成之一,眾多中間件產(chǎn)品和開發(fā)工具提供了對不同構(gòu)件模型的實現(xiàn)支持,特別在分布式、企業(yè)級應用軟 件系統(tǒng)中,無不把軟件的構(gòu)件化作為解決維護、擴展和升級的唯一途徑。然而,雖然業(yè)已存在了大量的CBD概念、方法和工具,軟件業(yè)并未完全遷移到CBD軟件 開發(fā)范型,一個主要原因是缺少一套成熟的CBD開發(fā)方法學,至今尚未完全解決如下關鍵問題[Bergner99]:
(1)必須建立一個完善的CBD概念框架,用數(shù)學方法定義構(gòu)件相關概念的形式化模型,既要盡可能的簡單,又要足以描述已有的構(gòu)件基本概念和開發(fā)技術。
(2)必須有切實可行的構(gòu)件描述方法和技術。在構(gòu)件概念框架基礎上,為構(gòu)件開發(fā)者建立相互交流的特殊語言,例如UML[Booch01]的圖形化描述技術和CORBA IDL[OMG01]的文本描述技術,理想的描述技術可以提供系統(tǒng)的一致性約束和正確性驗證。
(3)要為CBD的開發(fā)流程建立一個合理的過程模型,特別要研究如何為扮演不同角色的開發(fā)者分配相應的任務,例如軟件體系結(jié)構(gòu)設計師負責軟件構(gòu)架設計的詳細職責和結(jié)果驗收標準。
(4)要有支持描述技術和過程模型的輔助開發(fā)工具,至少需要具備開發(fā)構(gòu)件、實現(xiàn)應用系統(tǒng)和生成文檔的工具。理想的開發(fā)工具還包括關鍵系統(tǒng)特征的驗證工具。
顯見,上述這些問題和前面介紹的軟件復用目的和任務緊密相關,必須從軟件復用的認識高度分析CBD方法中存在的問題,重點是使用知識表示方法和演化計算 方法解決構(gòu)件的語義模型和自動過程問題,包括CBD原理和技術中的構(gòu)件模型、構(gòu)件體系結(jié)構(gòu)和描述語言和基于構(gòu)件的開發(fā)過程等幾方面內(nèi)容。
二、 CBSE/CBD的工程學目標
CBSE/CBD的工程學(管理)目標如下:
(1) 降低費用:這是所有軟件開發(fā)方法學的共同目標,CBSE/CBD把成本效率提高到軟件復用方法的最高境界。
(2) 方便裝配:CBSE/CBD的最大特征是一系列構(gòu)件的裝配過程。
(3) 提高復用性:全面考慮構(gòu)件在多個應用系統(tǒng)中的復用潛力。
(4) 提高可定制性和適應性:開發(fā)者可以按需配置構(gòu)件;
(5) 提高可維護性:在系統(tǒng)中可以方便地添加、刪除和修改構(gòu)件。
三、 CBSE/CBD的技術目標
CBSE/CBD的技術目標如下:
(1) 降低耦合:耦合指構(gòu)件之間的相關性;
(2) 提高內(nèi)聚:內(nèi)聚指構(gòu)件內(nèi)元素之間的相關性;
(3) 控制粒度:粒度系統(tǒng)中構(gòu)件對應問題域的規(guī)模,包括構(gòu)件數(shù)量和大小兩個方面;
四、 CBSE/CBD的研究方向
CBSE/CBD的研究方向:
(1) 基于構(gòu)件軟件工程方法的概念模型過程模型;
(2) 構(gòu)件模型:研究構(gòu)件的本質(zhì)特征及構(gòu)件間的關系;
(3) 構(gòu)件獲取:有目的的構(gòu)件生產(chǎn)和從已有系統(tǒng)中挖掘提取構(gòu)件;
(4) 構(gòu)件描述語言:以構(gòu)件模型為基礎,解決構(gòu)件的精確描述、理解及組裝問題;
(5) 構(gòu)件庫(構(gòu)件分類與檢索):研究構(gòu)件分類策略、組織模式及檢索策略,建立構(gòu)件庫系統(tǒng),支持構(gòu)件的有效管理;
(6) 構(gòu)件集成組裝:在構(gòu)件模型的基礎上研究構(gòu)件組裝機制,包括源代碼級的組裝和基于構(gòu)件對象互操作性的運行級組裝;
(7) 標準化:構(gòu)件模型的標準化和構(gòu)件庫系統(tǒng)的標準化;
(8) 構(gòu)件系統(tǒng)的安全性問題和時效(real-time)問題;
(9) 非技術因素對CBD的影響:法律法規(guī)、商業(yè)實踐、組織結(jié)構(gòu)等方面的挑戰(zhàn)和策略。
參考文獻
[Brown00] A. Brown. Large-Scale Component-Based Development. New Jersey: Prentice Hall, Inc., 2000.
[Szyperski97] C. Szyperski. Component Software-Beyond OO Programming. Addison-wesley,1997
[OMG01] OMG CORBA, http://www.corba.org,2001
[Microsoft01] Microsoft corporation, http://www.microsoft.com/com,2001
[Box99] Don Box, Essential COM, Addison-Wesley, ISBN 0-201-63446-5,1999
[Perrone01] Paul J. Perrone, et al. J2EE構(gòu)建企業(yè)系統(tǒng)—專家級解決方案. 北京: 清華大學出版社, 2001
[Clements95] P.C. Clements, From Subroutines to Subsystems: Component Based Software Development. American Programmer, vol. 8, No. 11, November 1995.
[Petre00] Luigia Petre. Components vs. Objects. Turku Centre for Computer Science, TUCS Technical reports, No 370, October 2000
[Bergner99] Klaus Bergner, Andreas Rausch, Marc Sihling, Alexander Vilbig. Componentware – Methodology and Process,19th March 1999
[Booch01] Grady Booch, James Rumbaugh, Ivar Jacobson著.邵維忠、麻志毅、張文娟、孟祥文譯,UML用戶指南,機械工業(yè)出版社,2001.6