構件化軟體中非功能特徵組裝方法

構件化軟體中非功能特徵組裝方法

《構件化軟體中非功能特徵組裝方法》是北京大學於2004年6月16日申請的專利,該專利的公布號為CN1584830,申請公布日為2005年2月23日,發明人是梅宏、黃罡、曹東剛、王千祥。該發明屬於軟體技術領域。

《構件化軟體中非功能特徵組裝方法》包括建立包含側面的軟體體系結構,具體包括:實現與構件相互獨立、提供非功能特徵的側面,在體系結構建模階段建立側面與構件之間關聯的描述機制;自動生成包含構件實現與側面實現的可運行代碼以及針對構件、側面、系統的部署描述符的軟體包;在運行階段根據體系結構規約建立和調整構件實例與側面實例之間的關聯;該發明有助於提高軟體構件的可復用性,可以線上調整非功能特徵,對於2004年前大型軟體系統的開發、集成、演化具有十分重要的意義,另一方面,同一個側面可在同一個套用或不同套用中與多個構件關聯以實現非功能特徵,這使得側面也成為一種可復用的資產,增加了軟體復用在目標系統中的比重。

2015年11月27日,《構件化軟體中非功能特徵組裝方法》獲得第十七屆中國專利獎優秀獎。

(概述圖為《構件化軟體中非功能特徵組裝方法》摘要附圖)

基本介紹

  • 中文名:構件化軟體中非功能特徵組裝方法
  • 申請人:北京大學
  • 申請日:2004年6月16日
  • 申請號:2004100481281
  • 公布號:CN1584830
  • 公布日:2005年2月23日
  • 發明人:梅宏、黃罡、曹東剛、王千祥
  • 地址:北京市海淀區頤和園路5號
  • 分類號:G06F9/44
  • 代理機構:北京同立鈞成智慧財產權代理有限公司
  • 代理人:劉芳、劉薇
  • 類別:發明專利
專利背景,發明內容,專利目的,技術方案,改善效果,附圖說明,權利要求,實施方式,榮譽表彰,

專利背景

Internet成為主要的軟體運行平台以及“軟體作為服務”的新型產品模式下,軟體系統的非功能特徵顯得尤為重要,如安全、事務、可靠性等。對於通過一組預製構件(Component)組裝而成的套用系統而言,這些非功能特徵往往涉及系統中的多個構件,同時,實現這些非功能特徵的策略與機制大多特定於具體的套用。例如,一個構件在某套用中需要安全保護,某些關鍵操作還需要保證事務性,而在另一個套用中可能不需要安全保護,也不需要事務保障。因此,在構件製作階段就全面地考慮這些非功能特徵不但難度大,而且也不必要。在構件製作階段就著手解決某些非功能特徵,通常的做法是,將相關代碼硬編碼到構件實現體中,這樣雖然可以使構件實現了非功能特徵,但是卻增加構件自身的複雜度,影響其性能和穩定性,更嚴重的是,不論是否需要或好用,目標系統在復用這樣的構件時都需要遷就其硬編碼的非功能特徵,導致該構件的可復用性大大降低。
側面(Aspect)用於描述系統中跨越多個構成成分的貫穿特性。這些特性既有功能性的,也有非功能性的,2004年之前的側面技術主要致力於解決全新開發的系統中的非功能需求的問題,並且取得了較好的成效,但是,卻沒有考慮如何解決基於復用的系統組裝中的非功能需求的問題,而且,側面的復用率、目標系統的復用率較低,形成一定程度的資產浪費。

發明內容

專利目的

《構件化軟體中非功能特徵組裝方法》要解決的技術問題主要在於,針對2004年之前的技術中的構件化軟體中非功能特徵組裝方法存在的構件可復用性低,側面的復用率、目標系統的復用率較低的問題,提出一種靈活、開放、簡單易行的方法,由構件提供主體功能特徵,側面提供非功能特徵,保證構件組裝而成的目標軟體系統滿足特定的非功能需求,側面與構件在設計、實現階段相互獨立,保證構件的可復用性,在系統運行階段,構件運行支撐平台負責建立並維護構件與側面之間的關聯,保證構件在運行過程中表現出指定的非功能特徵。

技術方案

《構件化軟體中非功能特徵組裝方法》包括如下步驟:
步驟一、建立包含側面的軟體體系結構,具體包括:實現與構件相互獨立、提供非功能特徵的側面;在體系結構建模階段建立側面與構件之間關聯的描述機制;
步驟二、自動生成包含構件實現與側面實現的可運行代碼以及針對構件、側面、系統的部署描述符的軟體包;
步驟三、在運行階段根據體系結構規約建立和調整構件實例與側面實例之間的關聯。
步驟一中實現與構件相互獨立、提供非功能特徵的側面的具體步驟為:定義側面激活時機及其與構件之間的交換數據,以及側面可執行的操作。
所述的激活時機包括:構件實例創建前後、構件實例刪除前後、構件實例方法調用前後以及上述操作產生例外之後。激活的側面可根據當前上下文執行與非功能特徵相應的動作,所述的當前上下文包括:構件實例的狀態、標識以及方法調用請求的內容。
所述側面的實現語言由構件運行支撐平台決定,當構件平台為J2EE套用伺服器時,側面可採用JavaC/C++實現;當構件平台為.NET時,側面可採用任何CLR(Common Language Runtime,通用語言運行環境)支持的程式語言,如C/C++,C#,Basic等。
步驟一中的描述機制為在體系結構建模時設定語言元素,分別為:側面元素,用於描述側面實現提供的操作以及該操作可在哪些激活時刻執行;插入點元素,用於描述某構件允許插入側面的具體操作;編織元素,其描述了在構件插入點插入的側面及該側面執行的操作。
步驟二中的構件、側面、系統的部署描述符由體系結構建模語言書寫的設計文檔半自動化生成。所述的步驟三中在運行階段構件實例與側面實例之間的關聯的建立過程為:裝載並實例化指定的側面,然後建立與構件實例之間的關聯。所述的裝載是指構件運行支撐平台解析部署描述符並讀取側面的可執行代碼,實例化指的是構件運行支撐平台創建側面實例並將之與指定的構件實例關聯起來。側面實例與構件實例之間的關聯採用截取器(Interceptor)模式實現,即,與某個構件實例關聯的所有側面實例組成一個鏈路,安置在客戶端與構件實例之間,在構件實例調用前後、實例創建與實例刪除以及例外產生後被激活並執行相應動作。
所述的步驟三中在運行階段構件實例與側面實例之間的關聯的調整具體包括增加側面,用於滿足新的非功能需求;當已有的非功能需求不再需要時刪除側面;當已有的非功能需求產生細微的變化時替換側面,當已有的非功能需求之間的優先權別發生改變時調換側面實例的先後次序。由於截取器模式中的截取器具有即插即用的能力,因此,側面實例及其與構件實例的關聯在運行時刻可以進行適度的調整。這種運行時調整的能力適合於非功能需求經常變化、尤其是需要保持7(天)×24(小時)不間斷運行的高可靠系統。

改善效果

採用《構件化軟體中非功能特徵組裝方法》,同一個構件在不同套用中復用時,只要與不同的側面關聯,就能滿足套用的非功能需求,極大提高軟體構件的可復用性;在保持當前系統持續運行、構件實例不受影響的前提下,可以線上調整非功能特徵,這對於2004年前基於Web的大型軟體系統的開發、集成、演化具有十分重要的意義。另一方面,同一個側面可在同一個套用或不同套用中與多個構件關聯以實現非功能特徵,這使側面也與構件一樣成為一種可復用的資產,增加了軟體復用在目標系統中的比重。

附圖說明

圖1為《構件化軟體中非功能特徵組裝方法》所述的組裝方法流程圖;
圖2為該發明一實施例的組裝示意圖。
構件化軟體中非功能特徵組裝方法
附圖說明

權利要求

1、《構件化軟體中非功能特徵組裝方法》其特徵在於:包括如下步驟:
步驟一、建立包含側面的軟體體系結構,具體包括:實現與構件相互獨立、提供非功能特徵的側面;在體系結構建模階段建立側面與構件之間關聯的描述機制;
步驟二、自動生成包含構件實現與側面實現的可運行代碼以及針對構件、側面、系統的部署描述符的軟體包;
步驟三、在運行階段根據體系結構規約建立和調整構件實例與側面實例之間的關聯。
2、根據權利要求1所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述的步驟一中實現與構件相互獨立、提供非功能特徵的側面的具體步驟為定義側面激活時機及其與構件之間的交換數據以及側面可執行的操作。
3、根據權利要求2所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述的激活時機包括構件實例創建前後、構件實例刪除前後、構件實例方法調用前後以及上述操作產生例外之後。
4、根據權利要求2所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述側面可執行的操作為激活的側面根據當前上下文執行與非功能特徵相應的動作,所述的當前上下文包括構件實例的狀態、標識以及調用請求的內容。
5、根據權利要求1所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述的描述機制為在體系結構建模時設定語言元素,其一為側面元素,用於描述側面實現提供的操作以及該操作可執行的激活時刻;其二為插入點元素,用於描述構件允許插入側面的具體操作;其三為編織元素,用於描述在構件插入點插入的側面及該側面執行的操作。
6、根據權利要求1或5所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述的步驟二中的構件、側面、系統的部署描述符由體系結構建模語言書寫的設計文檔半自動化生成。
7、根據權利要求1所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述的在運行階段建立構件實例與側面實例之間的關聯的步驟為:裝載並實例化指定的側面,然後建立側面實例與構件實例之間的關聯。
8、根據權利要求7所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述的實例與側面實例之間的關聯採用截取器模式,所述的截取器模式為,與某個構件實例關聯的所有側面實例組成一個鏈路,安置在客戶端與構件實例之間,在構件實例調用前後或實例創建或實例刪除以及例外產生後被激活並執行相應動作。
9、根據權利要求1或7或8所述的構件化軟體中非功能特徵組裝方法,其特徵在於:所述的步驟三中調整構件實例與側面實例之間的關聯包括:增加側面、刪除側面、替換側面以及改變側面實例的先後次序。

實施方式

《構件化軟體中非功能特徵組裝方法》如圖1,包括如下步驟:
步驟一、建立包含側面的軟體體系結構,具體包括:實現與構件相互獨立、提供非功能特徵的側面;在體系結構建模階段建立側面與構件之間關聯的描述機制;
步驟二、自動生成包含構件實現與側面實現的可運行代碼以及針對構件、側面、系統的部署描述符的軟體包;
步驟三、在運行階段根據體系結構規約建立和調整構件實例與側面實例之間的關聯。
具體說明如下:由於側面可能與任意的構件關聯,因此,側面的實現對構件的依賴必須降至最低。同時,側面的實現還必須便於運行時刻與構件建立關聯,並在需要時線上增加、刪除或替換。典型的側面實現技術作用於程式語言,程式編譯之前側面與主體程式分離,編譯後則成為不可分割的整體。對構件組裝而言,採用這種實現方式的構件是一種硬編碼非功能特徵的構件,具有難以復用的缺點。為此,該發明採用側面與構件在運行時才編織成一個整體的系統構造方式,確保構件的可復用性,兼顧普適性與實用性,該發明定義了側面激活時機及其與構件之間的交換數據,以及側面可執行的操作。側面可在構件實例創建前後、構件實例刪除前後、構件實例方法調用前後、以及上述操作產生例外之後被激活,激活的側面可根據當前上下文執行與非功能特徵相應的動作,典型的當前上下文包括構件實例的狀態、標識以及調用請求的內容,特別地,這些當前上下文就是側面與構件之間交換的數據。遵循這組規則的側面都可以在系統設計階段和運行階段建立與指定構件的關聯,實現特定的非功能特徵。側面採用的實現語言由構件運行支撐平台決定,如構件平台為J2EE套用伺服器,則側面可採用Java或C/C++實現,而構件平台為.NET時,則可採用任何CLR支持的程式語言,如C/C++,C#,Basic等。
當實現了與構件相互獨立、提供非功能特徵的側面之後,要在體系結構建模階段建立側面與構件之間的關聯。體系結構建模語言必須能夠描述符合上述實現方式的側面及其與構件的關聯。為此,該發明定義了三種新的語言元素,其中,側面元素描述了側面實現提供的操作以及這些操作可在哪些激活時刻執行,如下列描述所示:
<aspect><aspectName>Security</aspectName><beforeInvocation><signature>accessControl</signature></beforeInvocation><beforeInvocation><signatute>authorize</signature></beforeInvocation>……</aspect>
其中,側面元素由<aspect>標識,側面實現提供的操作由<signature>標識,激活時刻的表示如<beforeInvocation>,表示調用前激活側面。插入點元素由實例名(ownerName)、扮演者名(playerName)、方法名(methodName)這樣的三元組組成,用以確定側面要影響到的具體某個方法,如下列描述所示:
<joinPoint><ownerName>shoppingCart</ownerName><playerName>ShoppingCart</playerName><methodName>getTaxes()</methodName></joinPoint>
其中,插入點元素由<joinPoint>標識,實例名由<ownerName>標識,扮演者名由<playerName>標識,方法名由<methodName>標識。
編織元素用於描述在構件插入點插入的側面及該側面執行的操作,
<weaving><beforeInvocation><refAspect>Security</refAspect><refMethod>accessControl</refMethod><property><Name>role-name</Name><value>administrator</value></property></beforeInvocation></weaving>
其中,編織元素由<weaving>標識;在構件插入點插入的側面由<refAspect>標識;執行的操作由<refMethod>標識,<property>表示側面與構件之間交換的數據。
在體系結構建模階段建立了側面與構件之間關聯的描述後,體系結構建模工具可自動生成包含構件實現與側面實現的可運行代碼以及針對構件、側面、系統的部署描述符的軟體包。然後將軟體包部署到套用伺服器,該伺服器根據部署描述符裝載軟體包中的可運行代碼並實例化,在運行階段根據體系結構規約建立和調整構件實例與側面實例之間的關聯。
在軟體運行階段,構件運行支撐平台解析部署描述符,讀取與側面元素、插入點元素、編織元素等信息相關的內容,裝載並實例化指定的側面實現,然後建立與構件實例之間的關聯。針對前面提出的側面實現方式,側面實例與構件實例之間的關聯可以採用截取器(Interceptor)模式實現,即,與某個構件實例關聯的所有側面實例組成一個鏈路,安置在客戶端與構件實例之間,在構件實例調用前後(實例創建與刪除也可視為特殊的調用)以及例外產生後被激活並執行相應動作。
以下結合圖2,以基於ABC(Architecture Based Component Composition,基於軟體體系結構的構件組裝)方法的實現為例,對該發明的技術方案進行詳細的說明。
ABC方法將2004年之前的軟體體系結構方法與基於構件的軟體開發方法結合在一起,把軟體體系結構作為系統藍圖而使用中間件技術作為系統運行的支撐平台,並利用映射規則和工具來縮小設計到實現的距離。將側面引入ABC方法的具體工作包括:在體系結構描述語言ABC/ADL中增加側面描述的語言元素,即側面元素、插入點元素、編織元素,在可視化體系結構建模工具中增加側面的表示,具體而言,就是將側面表示為一種特殊的構件,該構件的屬性包含側面元素中的所有內容;側面與構件之間的關聯表示為一種特殊的依賴,該依賴的屬性包括插入點元素與編織元素的內容。在特定於J2EE套用的軟體包自動生成工具中將側面描述寫入部署描述符,J2EE套用伺服器支持截取器模式。引入側面之後的基於ABC的系統組裝過程具體如圖2所示,包括:
首先,根據系統功能需求從可復用資產庫中選擇J2EE構件,並通過連線子建立構件之間的互動關係,完成系統主體功能的設計;然後,根據非功能需求從可復用資產庫中選擇側面,如圖中的安全側面、事務側面,並在體系結構描述語言ABC/ADL中增加側面描述的語言元素,即側面元素、插入點元素、編織元素,建立其與構件之間的關聯,從而完成系統非功能部分的設計;通過上述兩步完成了包含側面的軟體體系結構的設計。
接下來,根據上述的軟體體系結構自動生成特定於J2EE的套用軟體包,套用軟體包中包含了一個以上的構件以及一個套用部署描述符檔案。其中,每一構件包含構件實現的可運行代碼以及一個構件部署描述符檔案,構件部署描述符檔案包括很多內容,諸如構件信息、依賴引用、資源引用、安全形色、事務屬性等;所有構件共用套用部署描述符檔案中的套用系統配置信息,包括安全形色、名字服務、事務屬性、通信服務等。
最後,通過部署工具將軟體包安裝到J2EE套用伺服器,該伺服器將根據部署描述符裝載軟體包中的可運行代碼並實例化,其中,側面實現被實例化後以截取器的形式插入構件容器,並在指定時刻執行非功能特性,所述的指定時刻為構件實例創建前後、構件實例刪除前後、構件實例方法調用前後、以及上述操作產生例外之後。例如,構件實例創建前,同類型構件實例總數已經達到上限,則不允許創建新的實例;構件實例刪除前,若實例總數達到下限,則不允許刪除該實例;構件實例方法調用前,往往需要激活多個截取器以協助構件調用公共服務從而實現非功能特徵,如通信截取器調用通信服務實現構件的分布化訪問,日誌截取器調用日誌服務記錄構件的使用情況,認證截取器利用認證服務實現構件的安全訪問控制,而事務截取器則調用事務服務以保證構件的事務特性;上述方法調用產生例外時,可能需要執行一些用戶定製的例外處理,如事務處理失敗需要回滾整個事務。
該實施例在運行時會根據具體的套用環境及套用要求調整側面,此時調整側面就是調整相應的截取器,如,為提高性能而禁用日誌,只需從截取器鏈中刪除日誌截取器即可;需要加密調用請求只需在通信截取器之前增加一個加密截取器;改變訪問構件所使用的互操作協定只需替換2004年之前的通信截取器;調整構件的事務策略則改變事務截取器的屬性即可。

榮譽表彰

2015年11月27日,《構件化軟體中非功能特徵組裝方法》獲得第十七屆中國專利獎優秀獎。

相關詞條

熱門詞條

聯絡我們