劉 洋
自演化智能系統平臺(AISP,Adaptive Intelligence System Platform)是用于軟件開發的語言項目的系統平臺。包涵XML,人工智能,數據挖掘,自適應軟件框架等熱門領域和新技術。自演化智能系統平臺可根據自適應的領域模型,來重新改寫自身架構,更具外界的環境,不斷調整自己的學習庫。是系統平臺能夠根據外界環境,不斷改進學習。
AISP 目前仍處于研發狀態。目前在企業內部挖掘應用了模擬開發環境、自動化測試、代碼質量鑒定、Log 日志分析。
傳統上,軟件架構,只提供在一個系統中的參與者和互動結構的靜態描述。然而,動態軟件體系結構,可以在運行時重新配置,因此,建設動態適應性的應用提供支持。軟件架構可以指定使用的架構反射。我們通過數據結構圖,及重新編寫架構的配置圖可作為反射方案實現改變架構,及所謂的自適應契約。傳統的架構一直在面向對象的軟件方法,但是不適應過于復雜和分布式對象系統。在運行時支持自我管理和動態系統的軟件體系結構通過重新配置可用于建立動態系統[1]。
動態系統,在運行時基于背景信息能自適應自己的行為。動態系統有兩種類型:封閉的動態系統和開放的動態系統。對于封閉的完整的系統的行為和動態系統描述的修改是在編譯時刻指定。另一方面,開放動態系統,系統的行為演變在建造時和運行時對必要的自適應修改。實施開放的動態系統的技術,包括動態鏈接機制,動態對象技術(包括類加載器)和動態編程語言。
適應系統的邏輯通常是由兩個主要部分即監測和重構代碼組成。監管代碼負責識別系統的運行區域轉換。運行區域定義系統的不同操作模式和不同配置。運行區域可以觸發一些在系統內部狀態的改變,或改變系統中的依賴環境。工作區轉換識別自適應事件,事件是系統重配置的信號量。例如,資源管理器在某些服務質量等級上的不再提供托管資源給客戶,他們會產生自適應的事件都來處理內部和發送到資源的客戶端系統。系統可以生成和接收適應事件,處理并發給感興趣的客戶。自適應系統包含監測和重構代碼。因此,何時和如何重新配置系統可以由用戶外部提供,要么在運行時修改(即適應性系統),或者是內部提供,并在設計時是已知(即自我自適應系統)。則系統就具有了適應性和自適應性[2]。
適應軟件架構的邏輯是捕獲在架構的限制和重新配置操作。架構約束包涵配置約束斷言,組建或連接器的屬性,呈現一個或更多的利益攸關者所不能接受的軟件架構沖突。
架構反射定義為關注觀察和操縱一種軟件體系結構配置圖和其組成的頂點和邊。目前達成構成一種軟件體系結構的配置圖中的頂點和邊緣的共識。配置圖的頂點和邊是組件和連接器,接口和連接器,代表一個類型的配置圖。有關行為的反映,是與系統的計算物化的結果。在軟件架構中,每個配置圖代表一個特定系統的計算實例。我們定義為軟件體系結構行為的反射,能夠重寫系統的組件和連接器在運行時的配置圖[3],如圖1所示:

圖1 顯式和隱式適應性和適應性管理器
架構元模型基于具體化系統的特性。在一個動態的軟件體系結構設計一個架構元模型的主要問題包括:元級要定義架構特性(如體系結構的配置圖,元件和連接器),如何表現適應代碼,以何種機制提供納入系統的適應代碼,以及如何在動態重新配置管理系統的完整性和一致性。
1.2.1 架構元模型配置圖
我們具體化軟件架構配置,作為一個類型連接圖,其中頂點以接口與組件實例標記,邊緣以連接器屬性標記。一個頂點作為一個接口和實現(組件)對,邊被建模為I-> LJ,其中包含源和目標頂點i 和j,邊標簽l.邊標簽表示重配置連接器屬性,如改變其通信協議或安裝攔截設置。配置圖的根頂點,是一個特殊類型的頂點,在程序的入口點。它通常是C++/ Java的主程序。環在圖中用于建模連接器環。元級組件,被稱為配置管理器,負責為存儲和管理軟件架構的配置圖。
1.2.2 配置圖轉換的動態重配置
我們將有條件的圖形轉換的動態重新配置,在反射方案稱為適應合約.一個圖形變換是一個以規則為基礎的操作配置圖。表示我們圖的頂點和邊緣的接口、連接器,描述的是保存在一個圖形變換系統的靜態結構的一部分。改寫的一部分,是分別表示在我們的圖的頂點和邊的標簽組件實例和連接器屬性描述的動態結構圖的圖形轉換過程。
圖形轉換確保規則的結果仍是一個圖,如果圖中的事務性操作遵循規則,因此我們可以保證系統的完整性和一致性。然而,在實踐中,圖形轉換可能會影響只是配置圖和重新配置協議的一部分,可以用來確保只有那些轉型影響的頂點必須處于安全狀態。我們按照這種方法,并使用重新配置,它有助于減少重新配置階段的長度,并允許重新配置階段的客戶端并發調用沒有“凍結”的組件。計算和適應代碼是通過重新配置協議相關,因為它凍結在參與重新配置的組件計算。組件的狀態只能通過計算,而不是通過重新配置操作。我們重新配置協議等方面的優勢之一是從舊的組件狀態的轉移到新的組件的狀態,維護系統的完整性。組件狀態的成功轉讓需要組件開發者為他們的組件中實現一個拷貝構造函數接口。元級的配置管理器是負責執行的重新配置操作和正確操作的重新配置協議[4]。
配置管理是元級的適應管理器,存儲的具體化配置圖,并實現了重新配置(圖重寫)操作和重新配置協議。配置管理器是為適應合約的部署,調度和執行的運行時容器,如圖2所示:

圖2 配置管理器作為元級適應性管理器
配置管理提供了一種在運行時裝載/卸載適應合約的程序接口。為了保證引入系統代碼的安全性,新的適應性合約必須在原有的值得信賴的環境下進行開發和測試。 程序接口驗證新的適應合約得到了XML 描述器的信任。
適應合約是用來指定架構元模型的配置圖的有意義轉換。可以使用他們提供的自適應系統的適應邏輯。適應化修改合約反射是調用重新配置操作修改軟件架構本身的結果的架構元模型。他們代表元級對象在運行時部署和配置管理器。適應性合約中包含了一系列的元級別的配置圖轉化的條件規則。適應性合約是用來指定一個系統的體系結構約束。因此架構約束代表配置斷言的屬性,組件或連接器,適應性合約要求訪問這些屬性和斷言的機制。我們提供一個允許合約輪詢元級配置和基本組件和連接器的結構約束信息的機制作為適應性事件。 架構的約束,可以指定使用條件語句的適應事件。適應的事件具有從基礎組件和連接器的元級適應性合約去耦的優勢。實際上,他們提供適應代碼和計算代碼相關的運行時的分離。允許動態加載和卸載適應合約,因此沒有直接依賴于他們的客戶端。在軟件體系結構的重新配置,傳入和傳出的管理系統及其依賴系統的安全性和完整性的關鍵。由于兩個不同類型的依賴關系,適應合約有兩種形式:管理內部資源的配置合約,從客戶端和傳入的依賴關系,管理組件傳出依賴關系的組件系統。支持管理引入的重配置合約依賴關系。 在我們的模型中,配置合約只能被定義為一個單一的地址空間。連接合約代表系統和組件之間的單個連接的體系結構約束。類似配置合約,他們由一系列條件語句和重新配置操作組成。配置工具通過軟件架構的組件和連接器或者具體的語言的過程執行適應合同,如項目中的C++。 允許的組件框架中的專業化和具體化的抽象元級別的組件執行細化的轉換[5]。
通過提供使用接口,IDL 是用來定義顯式的依賴管理組件。IDL的發射和消費的事件用于指定基礎級適應事件。組件的框架是由專業和模板中的組件框架抽象組件的IDL 編譯器生成。組件可以是原語或復合組件。組件也有重新配置協議使用的接口:一個遍歷接口遍歷配置圖和更換組件過程中遷移連接器和狀態的的拷貝構造函數。他們表示元級配置管理器類型的引用,用于重新配置操作和適應事件處理。組件元信息,使用在適應合約描述語言,存儲在一個XML 組件描述符,由組件IDL 定義生成。連接器由專業和模板組件框架抽象連接器的IDL 組件定義。有兩種類型的連接器:客戶端和提供者連接器。客戶端連接器可以直接連接到一個組件,除非它是外部系統,在這種情況下,它連接到一個目標組件提供者端。連接器提供了重新配置接口,如link_component 和unlink_component 操作,并配置管理器,使用這個接口來實現其圖形重寫操作。在我們C 原型實現中,一些抽象和編程術語是用來代表通常在ADL 發現的概念,如接口,連接器和綁定操作。與其要求程序員顯式地指定一個軟件架構ADL 配置圖,不如我們build C++源代碼依賴關系圖自動生成靜態部分的元級配置圖。類似C 語言編譯器如何生成一個C 頭文件的依賴關系圖,配置工具解析的C 源代碼,從入口函數的連接器(邊)到目標接口(頂點)。每個接口的頭文件,然后被解析為更多的連接器和接口直到達到葉接口,并建立了系統分析樹。配置工具生產的類型,直接作為系統接口配置圖的頂點和鏈接器,如同邊的XML 配置描述器。開發者可以通過編輯配置描述器接口標簽綁定接口和組件的。一旦組件實現已指定的所有配置圖和適應合約已連接的所有接口,軟件架構可以被配置工具實例化。
可擴展標記語言(XML)是基于Web的應用程序和軟件系統的新興標準。 XML 是一種標記定義的語言,它允許定義與所謂的文檔類型定義(DTD)的分層標記語言。有了適當的DTD,標準的XML 工具,非常方便地用來編輯,類型檢查,分析和改造的任何XML 文件。
XML 解析對配置文件的內容有強制格式約束,同時構建相應的內存結構,并以此自動執行一致性檢查來替代手工編碼。一個友好的XML 編輯器擁有圖形用戶界面的,允許最終用戶而無需掌握語法的設計配置。
使用可擴展樣式語言(XSL),可以通過文本和圖形,自動創建一個配置文件,實際項目中會開發系統的XSL 腳本文件集合來執行自動配置過程。標記語言通常用來注釋結構信息的文本文件。因此,通用的XML 文檔,包括文本分組和結構的標簽。標記語言定義XML的元素,本質上作為標記表示,結構模型(內容模型)的可行方法是元素可以嵌套。此外,元素屬性名稱表示為注釋對。AISP 圖元素對象和這些對象的成員屬性。我們不使用任何文本內容,只是憑借DTD所提供的內容模型。項目中開發的XML 解析器建立一個代表給定的配置文件中的元素的樹。根據對象類,解析并設置相應的成員屬性的字符串的值。屬性通常描述為一個轉換參數等數據。DAG 結構元素被創建是使用唯一的ID,并在占位符元素引用這些ID。同樣,XML 強制保證元素擁有的ID的唯一性,從而簡化了搜索引用的元素的解析器庫。DTD 中必須限制子樹和類型數量。源對象通常不會有子女的對象,因為它們依賴從外部數據源的數據來計算自己的數據。一組過濾器對象會取得單一子樹的數據,并將其轉換、傳遞。
不同的的子樹的數據將進入到同樣的方式計算。而在另一個用例中,對象的不同子樹會影響以計算方式從而導致其差異。例如動態轉換通過另一個對象的數據值進行參數化,從而使用不同的參數化對象的數據轉化對象的數據值。使用包裝元素,將需要標記為子元素的對象映射為只需某個確定標記的子元素。這種標記元素可以嵌套的擁有其他元素作為子元素。
標記元素被映射為軟件中的標記對象,可以表示任何特殊功能而只返回其子元素。我們可以通過設計對象過濾器用于區分這種元素[6]。
通過XML 形式來保存配置圖的頂點和邊相。通過設計的特定解析器,將其解析到架構運行時中。
自演化智能軟件系統平臺作為企業內部研發平臺,用于大規模商用,醫用軟件的開發,系統開發預研項目。已經取得了一定的成就和成果。并在自動測試嗎,模擬開發,專家系統輔助開發,智能計算,人工智能領域發揮了不可替代的作用。但是仍有許多關鍵技術無法突破,如結論確定性,進化熵擴散等問題。仍需要繼續進行更多的研究。
[1]Walter Cazzola,Andrea Savigni,Andrea Sosio,and Francesco Tisato,“Explicit Architecture and Architec-tural Reflection”.[C]In Proceedings of the 2nd International Workshop on Engineering Distributed Objects(EDO 2000),LNCS.Springer-Verlag.
[2]Robert J.Allen,Remi Douence,and David Garlan,“Spe-cifying and Analyzing Dynamic Software Architectures”,[C]Conference on Fundamental Approaches to Software En-gineering,March 1998.
[3]Peyman Oreizy et Al.,“An Architecture-Based Approach to Self-Adaptive Software”,[J]IEEE Intelligent Systems,May/June 1999.
[4]Nenad Medvidovic and Richard N.Taylor,“A Classifica-tion and Comparison Framework for Software Architec-ture Description Languages”,[J]IEEE Transactions on Software Engineering,January 2000.
[5]Jim Dowling,Tilman Schaefer,Vinny Cahill,“Using Reflection to Support Dynamic Adaptation of System Software:A Case Study Driven Evaluation”,[C]In Proceed-ings of Software Engineering and Reflection 2000,LNCS 1826.
[6]reitmayr dieter,"OpenTracker -An Open Software Ar-chitecture for Reconfigurable Tracking based on XML Gerhard Reitmayr and Dieter Schmalstieg",[C]Vienna Uni-versity of Technology