專利名稱:構件化軟件系統的運行狀態結構化顯示方法
技術領域:
本發明涉及軟件技術領域中的一種構件化軟件系統的運行狀態結構化顯示方法,尤其是一種通過可視化工具在線訪問軟件體系結構來直觀、真實地反映系統運行狀態的方法。
背景技術:
軟件維護是指在軟件產品已經交付使用之后,對軟件進行修改的過程,從而改正軟件中的錯誤,提高軟件的性能,或是保證軟件系統能持續地與用戶環境相適應。軟件的一些本質特性,如軟件需求的變化性和不斷增加的復雜性等,決定了在軟件生命周期中,軟件維護是不可避免的重要階段。特別是在Internet成為主流軟件運行環境之后,網絡的開放性和動態性使得客戶需求與硬件資源不斷地變化,其結果是不可預測的軟件維護不斷增多。據統計,軟件維護的成本占到整個軟件成本的50%-80%,并且該成本還在不斷增大。軟件維護高成本的主要原因之一在于維護人員難以理解被維護的軟件。因此,如何提供一種直觀、易于理解的手段描述或表示軟件系統,成為簡化軟件維護、降低維護成本的關鍵。進一步地,軟件開始被看作一種服務(Software As Service),這意味著軟件系統24(小時)×7(天)的不間斷運行成為重要需求,因此,軟件系統的描述或表示還應該準確、真實地反映系統運行狀態。軟件體系結構是對軟件總體結構的描述,即對其計算元素和它們之間交互的高層組織的描述。其主要目標就是幫助開發人員更好地理解軟件系統,顯然,軟件體系結構是一種描述被維護系統的有效手段。但目前的軟件體系結構主要作用于軟件開發階段。而在維護階段,主要利用程序理解技術來分析源代碼然后構造軟件體系結構。這種軟件體系結構無法捕捉系統的運行狀態和行為。對于構件化軟件系統而言,構件往往在市場上購得,無法獲取源代碼,因此,現有的利用軟件體系結構描述被維護系統的方法能力不足,適用性較差。
發明內容
本發明所要解決的技術問題在于,針對現有技術的不足,提出一種構件化軟件系統的運行狀態結構化顯示方法,在軟件系統運行時將軟件體系結構可視化,直觀、真實地反映系統的結構及當前的運行狀態,輔助維護人員理解系統,利用軟件的維護,降低成本。
該發明的核心思想就是將開發階段構造的軟件體系結構在運行階段予以實例化,通過構件運行支撐平臺建立與構件化軟件系統的映射,從而真實、直觀地反映系統的結構及當前的運行狀態。
本發明通過以下的技術方案實現一種構件化軟件系統的運行狀態結構化顯示方法,其特征在于,包括如下步驟步驟一、構件運行支撐平臺裝載構件化軟件系統,獲取并實例化構件化軟件系統的軟件體系結構;步驟二、建立軟件體系結構與運行系統之間的映射關系;步驟三、實時訪問與顯示軟件體系結構。
所述步驟一中構件運行支撐平臺裝載構件化軟件系統的過程為將應用以軟件包的形式部署到構件運行支撐平臺,然后實例化構件,為構件分配互操作資源,建立構件與系統服務之間的關聯。
所述步驟一中獲取并實例化構件化軟件系統運行狀態的軟件體系結構的過程為根據當前系統中的構件實例及其之間的關系對現有的軟件體系結構描述語言元素進行擴展,增加構件運行實例Component元素、連接子運行實例Connector元素和系統服務Constraint元素,其中,所述的Constraint元素用于表示作用于體系結構、構件以及連接子的一組約束,Component元素包括其類型ComponentType元素與實現體ComponentImplementation元素,Connector元素包括客戶端代理ClientSideProxy元素、服務端代理ServerSideProxy元素以及與上述代理之間建立的連接Connection元素,然后實例化上述所述的元素。
構件化軟件系統的構件往往運行在構件運行支撐平臺提供的容器中。該平臺同時還提供構件之間互操作機制以及其它公共服務,如安全、事務、命名、持久、日志等等。容器利用這些機制將各個構件連接起來并保障作用于構件的各種系統約束。因此,構件化軟件系統運行狀態的軟件體系結構表示的關鍵在于與容器建立緊密關聯。步驟二中建立軟件體系結構與運行系統之間的映射關系的過程為步驟21、掃描應用中的所有構件實例,同時記錄每個構件的依賴關系,創建相應構件實例的Component描述對象;所述的Component描述對象用于實時收集運行構件的容器的運行狀態;步驟22、獲取每個構件實例的接口信息,創建ComponentType描述對象;獲取每個構件實例的實現體信息,創建ComponentImplementation描述對象;獲取每個構件實例使用的系統服務信息,創建Constraint描述對象;所述的ComponentType描述對象、ComponentImplementation描述對象用于實時收集構件的運行狀態;所述的Constraint描述對象用于實時收集每個構件實例使用的系統服務信息;步驟23、根據所有構件之間的依賴關系創建Connector描述對象,判斷構件之間是否存在一到多個的依賴關系,如果存在,創建一個Connector描述對象以及相應的C1ientSideProxy描述對象和ServersideProxy,并根據作為客戶端的構件采用的互操作機制創建Connection描述對象;所述的Connector描述對象、ClientSideProxy和ServerSideProxy描述對象、Connection描述對象用于實時收集互操作機制的運行狀態。
所述的在線訪問和顯示通過可視化工具完成,可視化工具通過應用編程接口在線訪問軟件體系結構,實時顯示運行系統的軟件體系結構。
本發明所述的方法可以實時地顯示運行系統的軟件體系結構,通過軟件體系結構表示處于運行狀態的構件化軟件系統,為維護人員提供了一個直觀、易于理解的系統視圖,基于該視圖,不僅能夠獲取被維護系統設計時的信息,準確把握設計人員的意圖,還能利用現有的軟件體系結構相關技術完成系統的推理和驗證,從而降低軟件維護的復雜度和難度,節省軟件維護的成本。
圖1為本發明的流程圖;圖2為本發明一實施例的實現流程圖;圖3為本發明建立的構件化軟件系統運行狀態的軟件體系結構的描述語言示意圖。
具體實施例方式
以下通過具體的實施例和附圖對本發明的技術方案進行詳細的說明。
該發明的核心思想就是將開發階段構造的軟件體系結構在運行階段予以實例化,通過構件運行支撐平臺建立與構件化軟件系統的映射,從而真實、直觀地反映系統的結構及當前的運行狀態。
參見圖1,首先,構件運行支撐平臺裝載構件化軟件系統,獲取并實例化構件化軟件系統運行狀態的軟件體系結構;然后,建立軟件體系結構與運行系統之間的映射關系,實時訪問與顯示軟件體系結構。
以下參照圖2以基于J2EE應用服務器的實現為例,進行詳細的說明。
應用服務器是目前典型的構件運行支撐平臺,被認為是繼操作系統、數據庫管理系統之后,隨著計算機網絡環境的發展而出現的里程碑式的系統軟件。J2EE應用以軟件包的形式部署到應用服務器,設計階段的軟件體系結構可隨軟件包一起發布,供應用服務器在實例化運行系統的軟件體系結構時使用。在應用服務器內部,部署的應用和系統服務都是構件,由應用服務器統一創建與維護。
當一個應用部署到應用服務器時,應用服務器根據軟件包中的部署描述符裝載并實例化構件,為構件分配所需的互操作資源,然后建立構件與系統服務之間的關聯以滿足指定的約束。在完成這些應用服務器部署應用的標準步驟后,獲取應用的軟件體系結構并實例化。
如果無法直接從應用服務器中獲取軟件體系結構,則根據當前系統中的構件實例及其之間的關系得到軟件體系結構描述語言(ArchitectureDescription Language,簡稱ADL)元素,所述的軟件體系結構描述語言元素如圖3所示,包括構件類型ComponentType元素、連接子類型ConnectorType元素,配置信息Configuration元素,同配置信息Configuration元素相關的構件實例componentInstance元素,連接子實例ConnectorInstance元素,并在上述元素的基礎上擴展以下的元素構件運行實例Component元素、連接子運行實例Connector元素和系統服務Constraint元素,其中,所述的Constraint元素用于表示作用于體系結構、構件以及連接子的一組約束,Component元素包括其類型ComponentType元素與實現體ComponentImplementation元素,Connector元素包括客戶端代理ClientSideProxy元素、服務端代理ServerSideProxy元素以及與上述代理之間建立的連接Connection元素。
其中,所述的構件類型ComponentType元素、連接子類型ConnectorType元素,配置信息Configuration元素,同配置信息Configuration元素相關的構件實例componentInstance元素,連接子實例ConnectorInstance元素為設計階段的軟件結構體系的描述語言元素,構件運行實例Component元素、連接子運行實例Connector元素和用于表示作用于體系結構、構件以及連接子的一組約束——系統服務Constraint元素及實現體ComponentImplementation元素,客戶端代理ClientSideproxy元素、服務端代理ServerSideProxy元素以及與這些代理之間建立的連接Connection元素為特定于運行系統軟件結構的描述語言元素。
某些特定于運行系統軟件結構的描述語言元素與設計階段的軟件結構體系的描述語言元素具有繼承關系,如Component元素繼承自ComponentInstance、Connector元素繼承自ConnectorInstance、RuntimeSoftwareArchitecture繼承自Configuration,因為前者需要對后者進行更詳細的描述,而沒有繼承關系的擴展元素,如Constraint、ComponentImplementation、ClientSideProxy、ServerSideProxy、Connection,則是描述那些系統運行階段特有的狀態,以確保真實、準確反映系統的運行狀態。本質上,運行系統的軟件體系結構是對設計階段軟件體系結構的精化。
而后建立軟件體系結構與運行系統之間的映射關系,通過可視化工具進行在線訪問與顯示。
需要說明的是,如果設計階段的軟件體系結構隨同應用軟件包一起部署到構件運行支撐平臺,則可直接利用設計階段的軟件體系結構實例化上述的各個元素;如果無法獲取設計階段的軟件體系結構,則根據當前系統中的構件實例及其之間的關系在線重建軟件體系結構并實例化上述的各個元素。其中,前者簡單快捷,后者相對復雜耗時,主要適用于設計階段軟件體系結構無法獲得的情況。
軟件體系結構實例化之后,進行軟件體系結構與運行系統之間的映射。首先,掃描應用中的所有構件實例,并創建相應的Component描述對象,對于每個構件實例,獲取其接口信息以創建ComponentType描述對象,獲取其實現體信息以創建ComponentImplementation描述對象,獲取其使用的系統服務的信息以創建Constraint描述對象,此時,還要記錄每個構件依賴的其它構件;接下來,根據所有構件之間的依賴關系創建Connector描述對象,若兩個構件之間存在一到多個依賴,則創建一個Connector描述對象以及相應的ClientSideProxy和ServerSideProxy描述對象,并根據作為客戶端的構件采用的互操作機制創建Connection描述對象。至此,完整建立了軟件體系結構與運行系統之間的映射。最后,將該軟件體系結構與軟件包中保留的設計階段的軟件體系結構進行一致性檢查,并將后者記錄的語義信息轉存到前者的相應元素中。如果利用設計階段的軟件體系結構直接實例化運行系統的軟件體系結構,則只需將前者描述的各個元素實例化成對象,然后查找到相應的運行實體并建立關聯即可。
完成運行系統軟件體系結構的映射后,即可通過編程接口和圖形界面在線察看系統的運行狀態,并進行軟件維護。其中的圖形界面與開發階段使用的軟件體系結構建模工具類似,往往采用簡單的方框和連線等圖元表示。
由于現有的軟件系統在運行時,人們無法看到用于描述軟件總體結構的軟件體系結構,而是通過分析構件的源代碼后構造軟件體系結構,而且,這種軟件體系結構表示的是一種靜態的軟件結構,無法動態的表現出系統運行的狀態和行為,本發明通過擴展軟件體系結構的描述語言,在系統運行時構造特定于運行系統的軟件體系結構,該軟件體系結構實例化后通過可視化工具以視圖的方式顯示,不但直觀、真實地反映系統的結構,還可以反映系統當前的運行狀態,便于輔助維護人員理解系統,利于軟件的維護,降低成本。
最后所應說明的是,以上實施例僅用以說明本發明的技術方案而非限制,盡管參照較佳實施例對本發明進行了詳細說明,本領域的普通技術人員應當理解,可以對本發明的技術方案進行修改或者等同替換,而不脫離本發明技術方案的精神和范圍,其均應涵蓋在本發明的權利要求范圍當中。
權利要求
1.一種構件化軟件系統的運行狀態結構化顯示方法,其特征在于,包括如下步驟步驟一、構件運行支撐平臺裝載構件化軟件系統,獲取并實例化構件化軟件系統的軟件體系結構;步驟二、建立軟件體系結構與運行系統之間的映射關系;步驟三、實時訪問與顯示軟件體系結構。
2.根據權利要求1所述的構件化軟件系統的運行狀態結構化顯示方法,其特征在于,所述步驟一中構件運行支撐平臺裝載構件化軟件系統的過程為將應用以軟件包的形式部署到構件運行支撐平臺,然后實例化構件,為構件分配互操作資源,建立構件與系統服務之間的關聯。
3.根據權利要求1所述的構件化軟件系統的運行狀態結構化顯示方法,其特征在于,所述步驟一中獲取并實例化構件化軟件系統的軟件體系結構的過程為根據當前系統中的構件實例及其之間的關系對現有的軟件體系結構描述語言元素進行擴展,增加構件運行實例(Component)元素、連接子運行實例(Connector)元素和系統服務(Constraint)元素,其中,所述的系統服務(Constraint)元素用于表示作用于體系結構、構件以及連接子的一組約束,構件運行實例(Component)元素包括構件運行實例類型(ComponentType)元素與實現體(ComponentImplementation)元素,連接子運行實例(Connector)元素包括客戶端代理(ClientSideProxy)元素、服務端代理(ServerSideProxy)元素以及與上述代理之間建立的連接(Connection)元素,然后實例化上述所述的元素。
4.根據權利要求1所述的構件化軟件系統的運行狀態結構化顯示方法,其特征在于步驟二中建立軟件體系結構與運行系統之間的映射關系的過程為步驟21、掃描應用中的所有構件實例,同時記錄每個構件的依賴關系,創建相應構件實例的構件運行實例(Component)描述對象;所述的構件運行實例(Component)描述對象用于實時收集運行構件的容器的運行狀態;步驟22、獲取每個構件實例的接口信息,創建構件運行實例類型(ComponentType)描述對象;獲取每個構件實例的實現體信息,創建實現體(ComponentImplementation)描述對象;獲取每個構件實例使用的系統服務信息,創建系統服務(Constraint)描述對象;所述的構件運行實例類型(ComponentType)描述對象、實現體(ComponentImplementation)描述對象用于實時收集構件的運行狀態;所述的系統服務(Constraint)描述對象用于實時收集每個構件實例使用的系統服務信息;步驟23、根據所有構件之間的依賴關系創建連接子運行實例(Connector)描述對象,判斷構件之間是否存在一到多個的依賴關系,如果存在,創建一個接子運行實例(Connector)描述對象以及相應的客戶端代理(ClientSideProxy)描述對象和服務端代理(ServerSideProxy)描述對象,并根據作為客戶端的構件采用的互操作機制創建連接(Connection)描述對象;所述的連接子運行實例(Connector)描述對象、客戶端代理(ClientSideProxy)和服務端代理(ServerSideProxy)描述對象、連接(Connection)描述對象用于實時收集互操作機制的運行狀態。
5.根據權利要求1所述的構件化軟件系統的運行狀態結構化顯示方法,其特征在于,所述的實時訪問和顯示通過可視化工具完成,可視化工具通過應用編程接口在線訪問軟件體系結構,實時顯示運行系統的軟件體系結構。
全文摘要
本發明公開了一種構件化軟件系統的運行狀態結構化顯示方法,首先,構件運行支撐平臺裝載構件化軟件系統,獲取并實例化構件化軟件系統的軟件體系結構;建立軟件體系結構與運行系統之間的映射關系;實時訪問與顯示軟件體系結構。本發明通過軟件體系結構表示處于運行狀態的構件化軟件系統,為維護人員提供了一個直觀的、易于理解的系統視圖,基于該視圖,不僅能夠獲取被維護系統設計時的信息,準確把握設計人員的意圖,還能利用現有的軟件體系結構相關技術完成系統的推理和驗證,從而降低軟件維護的復雜度和難度,節省軟件維護的成本。
文檔編號G06F9/44GK1588309SQ20041006241
公開日2005年3月2日 申請日期2004年7月2日 優先權日2004年7月2日
發明者梅宏, 黃罡, 曹東剛, 劉天成 申請人:北京大學