陸 偉,張龍妹,朱怡安
(1.西安財(cái)經(jīng)學(xué)院 信息學(xué)院,陜西 西安710100;2.西安科技大學(xué) 通信與信息工程學(xué)院,陜西 西安710054;3.西北工業(yè)大學(xué) 軟件與微電子學(xué)院,陜西 西安710072)
國(guó)際上一些專家和學(xué)者對(duì)自愈軟件系統(tǒng)[1]從不同角度展開(kāi)了初步探索和研究[2],隨著越來(lái)越多研究人員開(kāi)始嘗試運(yùn)用自愈技術(shù)與方法解決各自領(lǐng)域中遇到的問(wèn)題,自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法顯得越來(lái)越重要,并成為自愈軟件系統(tǒng)發(fā)展與應(yīng)用的瓶頸問(wèn)題。針對(duì)這一問(wèn)題,本文借鑒模型驅(qū)動(dòng)的設(shè)計(jì)思想,提出了一種以故障模型為中心的自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法,并通過(guò)一個(gè)仿真軟件的設(shè)計(jì)與實(shí)現(xiàn)驗(yàn)證所提出方法的可行性與有效性。
根據(jù)當(dāng)前研究成果,自愈軟件系統(tǒng)實(shí)現(xiàn)的基本途徑可以歸納為3類:基于外部的方法、基于內(nèi)部的方法和基于內(nèi)外部結(jié)合的方法。
(1)基于外部的方法:基于外部的方法基本思想是,從系統(tǒng)運(yùn)行環(huán)境的外部角度監(jiān)控系統(tǒng)運(yùn)行過(guò)程中的外部表征或環(huán)境變化,在此基礎(chǔ)上對(duì)系統(tǒng)進(jìn)行診斷,必要時(shí)通過(guò)外部行為對(duì)系統(tǒng)進(jìn)行修復(fù)。
基于系統(tǒng)體系結(jié)構(gòu)的自愈方法是基于外部方法的典型代表。該方法的思想是利用系統(tǒng)體系結(jié)構(gòu)模型作為系統(tǒng)自愈的基礎(chǔ),從系統(tǒng)運(yùn)行的外部監(jiān)控系統(tǒng)體系結(jié)構(gòu)模型在系統(tǒng)運(yùn)行過(guò)程中的變遷,并據(jù)此進(jìn)行診斷和修復(fù)。
卡內(nèi)基·梅隆大學(xué)計(jì)算機(jī)學(xué)院的Garlan等長(zhǎng)期從事自愈系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法研究。在 “Rainbow-Architecturebased Adaptation of Complex Systems”項(xiàng)目的研究過(guò)程中,他們提出了一個(gè)支持自愈系統(tǒng)設(shè)計(jì)的Rainbow 系統(tǒng)[3]是基于外部的方法的典型代表。Rainbow 以系統(tǒng)體系結(jié)構(gòu)模型為基礎(chǔ),允許系統(tǒng)開(kāi)發(fā)人員通過(guò)設(shè)計(jì)自愈策略向現(xiàn)有系統(tǒng)中增加自愈功能。此外,在在面向服務(wù)計(jì)算領(lǐng)域,基于外部的方法具有較大優(yōu)勢(shì),文獻(xiàn) [4,5]在這方面進(jìn)行嘗試。
基于外部方法的優(yōu)點(diǎn)是:①自愈過(guò)程中的各階段—監(jiān)控、診斷以及修復(fù)在系統(tǒng)及其運(yùn)行環(huán)境外部進(jìn)行,與目標(biāo)系統(tǒng)相對(duì)隔離,因此,自愈過(guò)程不需要通過(guò)修改目標(biāo)系統(tǒng)代碼;②根據(jù)不同系統(tǒng)的要求不同,自愈過(guò)程中可以靈活選用多種診斷與修復(fù)模型以及方法,具有較好的動(dòng)態(tài)可配置性;③基于外部的方法本身并是不針對(duì)具體應(yīng)用的,因此該方法及其實(shí)現(xiàn)機(jī)制具有可重用性;④該方法對(duì)于遺留系統(tǒng)以及無(wú)法獲得源碼的目標(biāo)系統(tǒng)具有適用性。
基于外部方法的缺點(diǎn)是:①該方法很難獲得目標(biāo)系統(tǒng)內(nèi)部狀態(tài),這為自愈過(guò)程中故障診斷以及修復(fù)方法的選擇帶來(lái)了困難;②自愈過(guò)程中的修復(fù)行為僅僅能夠針對(duì)系統(tǒng)外部或者環(huán)境模型進(jìn)行,限制了修復(fù)動(dòng)作的執(zhí)行以及效果。
(2)基于內(nèi)部的方法:基于內(nèi)部的方法基本思想是,在目標(biāo)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中考慮并添加系統(tǒng)自愈功能,使得自愈功能與目標(biāo)系統(tǒng)在同一環(huán)境下運(yùn)行。
J.Park等提出的一種自愈代碼自動(dòng)生成的方法,是基于內(nèi)部的方法的代表[6]。該方法的思想通過(guò)對(duì)系統(tǒng)設(shè)計(jì)過(guò)程中的各種UML 模型進(jìn)行分析,從而產(chǎn)生各種內(nèi)部狀態(tài)以及外部環(huán)境約束規(guī)則,并根據(jù)這些約束規(guī)則產(chǎn)生監(jiān)控與診斷代碼,進(jìn)一步結(jié)合修復(fù)策略自動(dòng)產(chǎn)生修復(fù)代碼,目前這項(xiàng)研究仍在進(jìn)行之中。
基于內(nèi)部方法的優(yōu)點(diǎn):①更容易獲得系統(tǒng)運(yùn)行過(guò)程中的內(nèi)部狀態(tài)與行為信息,為自愈過(guò)程中故障診斷以及修復(fù)方法選擇提供更準(zhǔn)確的依據(jù);②診斷和修復(fù)行為可以深入系統(tǒng)內(nèi)部,根據(jù)要求不同實(shí)現(xiàn)不同粒度的自愈,效率較高。
基于內(nèi)部方法的缺點(diǎn)是:①需要在系統(tǒng)正常功能設(shè)計(jì)的同時(shí)考慮自愈功能,設(shè)計(jì)容易陷入混亂;②自愈代碼與功能代碼纏繞在一起,實(shí)現(xiàn)與維護(hù)困難;③系統(tǒng)自愈部分與功能部分運(yùn)行于同一環(huán)境下,容易導(dǎo)致功能部分與自愈部分同時(shí)失效;④系統(tǒng)獲得局部信息容易,獲得全局信息困難,不利于解決系統(tǒng)性能退化問(wèn)題;⑤該方法適合于從零開(kāi)始開(kāi)發(fā)的系統(tǒng),或者至少可獲得源碼的系統(tǒng),不適應(yīng)于遺留系統(tǒng)或者第三方產(chǎn)品。
(3)基于內(nèi)外部結(jié)合的方法:基于內(nèi)外部結(jié)合的方法的基本思想是,采用基于內(nèi)部方法在系統(tǒng)中部署傳感器和控制點(diǎn),以更準(zhǔn)確獲取系統(tǒng)狀態(tài)或行為信息,控制點(diǎn)可以支持不同粒度修復(fù)動(dòng)作的執(zhí)行;采用基于外部方法在系統(tǒng)運(yùn)行時(shí)進(jìn)行運(yùn)行環(huán)境監(jiān)測(cè)、故障診斷以及修復(fù)方法選擇,并使得系統(tǒng)自愈部分與正常功能部分相對(duì)隔離。
David Breitgand提出的自愈系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)框架PANACEA[7]是基于外部與內(nèi)部結(jié)合方法的典型代表。在PANACEA 框架下,目標(biāo)系統(tǒng)設(shè)計(jì)過(guò)程中通過(guò)注解 (annotations)機(jī)制在系統(tǒng)中添加傳感器和控制點(diǎn),PANACEA 運(yùn)行系統(tǒng)可通過(guò)這些傳感器收集系統(tǒng)運(yùn)行過(guò)程中的內(nèi)部狀態(tài)或行為信息,通過(guò)控制點(diǎn)實(shí)施相應(yīng)自愈行為。Gaudin等在歐盟FP7計(jì)劃支持下進(jìn)行的FastFix[8]項(xiàng)目也屬于這一類。
基于內(nèi)外部結(jié)合的方法可充分利用基于外部和基于內(nèi)部?jī)煞N方法的優(yōu)點(diǎn),是自愈軟件系統(tǒng)實(shí)現(xiàn)方法的發(fā)展趨勢(shì)。
實(shí)際軟件系統(tǒng)往往是自愈層與功能層交織在一起的復(fù)雜系統(tǒng),無(wú)論采用以上3種實(shí)現(xiàn)途徑中的哪一種,在分析與設(shè)計(jì)系統(tǒng)功能層模型的同時(shí),不得不分散精力考慮系統(tǒng)自愈層模型 (包括監(jiān)控器、診斷器、控制器與修復(fù)器)的分析與設(shè)計(jì)。隨著越來(lái)越多自愈層行為的加入,系統(tǒng)自愈層模型與功能層模型的交織也將越來(lái)越復(fù)雜,這使得設(shè)計(jì)過(guò)程很容易陷入反復(fù)與混亂。即使我們通過(guò)多次反復(fù)工作與不懈努力最終完成了設(shè)計(jì),如何對(duì)系統(tǒng)設(shè)計(jì)結(jié)果的自愈性或者自愈程度進(jìn)行評(píng)價(jià)又將是一個(gè)需要解決的困難問(wèn)題。此外,系統(tǒng)設(shè)計(jì)結(jié)果中功能層與自愈層模型的交織將進(jìn)一步導(dǎo)致系統(tǒng)實(shí)現(xiàn)時(shí)代碼纏繞的問(wèn)題,進(jìn)而增加系統(tǒng)演化的難度,同時(shí)也妨礙系統(tǒng)的可理解性、可重用性以及可追溯性。
當(dāng)前,軟件設(shè)計(jì)與開(kāi)發(fā)對(duì)象管理組織 (object management group,OMG)提出的模型驅(qū)動(dòng)架構(gòu)MDA (Model Driven Architecture,MDA)是以模型為中心的軟件開(kāi)發(fā)方法學(xué)。MDA 在縱向上將系統(tǒng)模型劃分為計(jì)算無(wú)關(guān)模型(computation independent model,CIM)、平臺(tái)無(wú)關(guān)模型(platform independent model,PIM)和平臺(tái)相關(guān)模型(platform specific model,PSM)以解決軟件系統(tǒng)設(shè)計(jì)中應(yīng)用邏輯、平臺(tái)特性和業(yè)務(wù)的交織問(wèn)題。對(duì)于自愈計(jì)算系統(tǒng),橫向上自愈層與功能層的交織同樣為系統(tǒng)設(shè)計(jì)帶來(lái)了可移植性、演化性、可維護(hù)性以及可追溯性的問(wèn)題。根據(jù)MDA的思想,同樣可以從橫向上將自愈計(jì)算系統(tǒng)的功能層模型與自愈層模型加以劃分與隔離,從而可以對(duì)隔離后的兩部分進(jìn)行分別建模與實(shí)現(xiàn),隨后,根據(jù)需要通過(guò)不同層次的模型組合或者代碼編織得到系統(tǒng)整體模型或代碼,如圖1所示。
圖1 自愈軟件系統(tǒng)橫向模型驅(qū)動(dòng)設(shè)計(jì)思想
在以上自愈系統(tǒng)橫向模型驅(qū)動(dòng)設(shè)計(jì)思想指導(dǎo)下,基本功能層與自愈層隔離之后,就可以采用一般軟件系統(tǒng)的方法和技術(shù)分別對(duì)這兩部進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。基本功能層與自愈層的隔離使得它們?cè)O(shè)計(jì)與實(shí)現(xiàn)相對(duì)獨(dú)立,這種松耦合能夠提高自愈模型的模塊化、可配置型、可重用性以及可維護(hù)性,同時(shí),降低了系統(tǒng)整體設(shè)計(jì)的復(fù)雜性。但是,這種松耦合也使得自愈層與基本功能層的聯(lián)系丟失,進(jìn)而導(dǎo)致自愈模型與基本功能模型設(shè)計(jì)完成后需要重新組合與編織。
故障模型或者故障假設(shè)是系統(tǒng)可靠性和容錯(cuò)研究領(lǐng)域的基礎(chǔ)和前提。故障模型描述系統(tǒng)可能出現(xiàn)的故障情況、故障表征以及故障對(duì)系統(tǒng)的影響,是軟件系統(tǒng)實(shí)現(xiàn)自愈的基本參照,沒(méi)有故障模型,也就無(wú)法評(píng)價(jià)系統(tǒng)的自愈能力。
當(dāng)前研究人員從故障原因、故障定位、故障對(duì)系統(tǒng)的影響、屬性描述、可能的檢測(cè)手段以及解決策略等不同角度對(duì)故障展開(kāi)了初步研究[9],雖然這些研究對(duì)故障描述的視角不同,但大部分研究都需要利用不同方法 (分類和聚類等)對(duì)故障集合加以劃分,從而降低故障問(wèn)題的空間。本文并不研究故障描述視角以及故障集合劃分方法,僅針對(duì)故障集合劃分后的結(jié)果進(jìn)行統(tǒng)一描述。
定義1 故障模型:故障模型MF是一顆帶權(quán)的無(wú)序平衡樹(shù),表示為T <root,(Ti,wi)>,樹(shù)中的葉子節(jié)點(diǎn)代表所有基本故障f (即非葉子節(jié)點(diǎn)代表宏故障F,節(jié)點(diǎn)的權(quán)值代表了該故障節(jié)點(diǎn)在樹(shù)中同層次故障節(jié)點(diǎn)中的重要性。
在故障模型定義的基礎(chǔ)上,軟件系統(tǒng)自愈性可以表示為系統(tǒng)對(duì)故障模型的支持程度,這就為系統(tǒng)自愈性的量化評(píng)價(jià)提供了基礎(chǔ),同時(shí),系統(tǒng)設(shè)計(jì)結(jié)果對(duì)故障模型的覆蓋程度可以作為系統(tǒng)自愈層的設(shè)計(jì)目標(biāo)。
故障模型MF不僅描述了故障節(jié)點(diǎn)之間的關(guān)系,而且描述了計(jì)算系統(tǒng)中故障節(jié)點(diǎn)的屬性,因此,MF可以作為系統(tǒng)自愈層的設(shè)計(jì)依據(jù),同時(shí)也可以作為連接系統(tǒng)功能層與自愈層的橋梁。在故障模型的連接下,自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法框架如圖2所示。
圖2 自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)框架
在圖2所示的自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)框架下,系統(tǒng)最終可執(zhí)行代碼可以通過(guò)3種途徑獲得。
第一種途徑的過(guò)程為:系統(tǒng)設(shè)計(jì)中首先針對(duì)系統(tǒng)功能層建模,得到系統(tǒng)功能層PIM,在此基礎(chǔ)上,進(jìn)一步得到系統(tǒng)故障模型MF;然后,根據(jù)系統(tǒng)自愈層CIM 與故障模型MF,得到系統(tǒng)自愈層PIM;在分別得到系統(tǒng)功能層與自愈層PIM之后,對(duì)它們進(jìn)行合并或組合,從而得到系統(tǒng)全局PIM;隨后可以像對(duì)待一般系統(tǒng)模型一樣,對(duì)系統(tǒng)全局PIM 進(jìn)行轉(zhuǎn)化得到系統(tǒng)PSM,經(jīng)進(jìn)一步轉(zhuǎn)化后得到系統(tǒng)源碼,再經(jīng)編譯后得到系統(tǒng)可執(zhí)行代碼。參照?qǐng)D2中路徑①所示過(guò)程。
第二種途徑的過(guò)程為:系統(tǒng)設(shè)計(jì)中首先根據(jù)系統(tǒng)功能層模型或者源碼,得到系統(tǒng)故障模型MF;然后,根據(jù)系統(tǒng)自愈層CIM 與故障模型MF,得到系統(tǒng)自愈層PIM;隨后,繼續(xù)對(duì)自愈層PIM 進(jìn)行轉(zhuǎn)化,得到自愈層的PSM,經(jīng)進(jìn)一步轉(zhuǎn)化得到自愈層的源碼;最后,通過(guò)代碼靜態(tài)編織技術(shù)將自愈層源碼織入功能層源碼,從而得到系統(tǒng)整體源碼,經(jīng)編譯后得到系統(tǒng)可執(zhí)行代碼。參照?qǐng)D2中路徑②所示過(guò)程。
第三種途徑的過(guò)程為:在第二種途徑中得到系統(tǒng)自愈層源碼之后,并不進(jìn)行代碼靜態(tài)編織,而是繼續(xù)針對(duì)自愈層源碼進(jìn)行編譯,得到自愈層的可執(zhí)行代碼;通過(guò)代碼動(dòng)態(tài)編織技術(shù),在系統(tǒng)功能層代碼運(yùn)行過(guò)程中動(dòng)態(tài)織入自愈層代碼,實(shí)現(xiàn)系統(tǒng)自愈過(guò)程。參照?qǐng)D2中路徑③過(guò)程。
在以上3種途徑的主要區(qū)別在于自愈層與功能層模型組合或代碼編織層次不同,它們具有各自的優(yōu)缺點(diǎn)。從第一種途徑到第三種途徑,自愈層與功能層的組合或者編織時(shí)機(jī)越來(lái)越晚,隔離程度越來(lái)越高,可重用性與可維護(hù)性也越來(lái)越好,但系統(tǒng)實(shí)現(xiàn)難度也會(huì)越來(lái)越大,因?yàn)榇a編織尤其是動(dòng)態(tài)編織技術(shù)上是困難的。實(shí)際應(yīng)用中,不同系統(tǒng)可以根據(jù)其自身特點(diǎn)分別采取不同途徑或者不同途徑的組合得到最終包含自愈功能的可執(zhí)行代碼。對(duì)于從零開(kāi)始設(shè)計(jì)的系統(tǒng),由于可以得到系統(tǒng)功能層PIM,因此適合于采用第一種途徑,在得到系統(tǒng)自愈層PIM 之后進(jìn)行模型合并或者組合,當(dāng)然,為了減少代碼纏繞問(wèn)題,也可以采用第二或者第三種途徑,或者采用3種途徑結(jié)合的方法;對(duì)于具備系統(tǒng)源碼的遺留系統(tǒng),由于可能不具備系統(tǒng)功能層PIM,可以采用第二種途徑,當(dāng)然,對(duì)于源碼文檔不全或者根據(jù)源碼分析較為復(fù)雜的情況下,也可以采用第三種途徑,或者采用兩種途徑結(jié)合的方法;對(duì)于不具備系統(tǒng)源碼的遺留系統(tǒng)或者第三方系統(tǒng),則只能采用第三種途徑。
根據(jù)所提出的橫向模型驅(qū)動(dòng)的設(shè)計(jì)思想以及以故障模型為中心的自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)具有自愈特性的捷聯(lián)慣性導(dǎo)航系統(tǒng)仿真軟件,以證實(shí)本文所提出的設(shè)計(jì)思想以及實(shí)現(xiàn)方法的有效性。
捷聯(lián)慣性導(dǎo)航系統(tǒng)廣泛應(yīng)用于對(duì)可靠性要求較高的軍事以及民用領(lǐng)域,在這些領(lǐng)域,導(dǎo)航系統(tǒng)一旦出現(xiàn)故障,往往難以通過(guò)外部或人工的方式對(duì)系統(tǒng)進(jìn)行修復(fù),因而可能造成重大損失或帶來(lái)嚴(yán)重后果。因此,提高捷聯(lián)慣性導(dǎo)航系統(tǒng)在故障情況下的連續(xù)可用能力至關(guān)重要。
雖然主動(dòng)配電網(wǎng)的設(shè)想很好,但其建設(shè)需要大量的投資,這些投資在現(xiàn)有體制下難以實(shí)現(xiàn)收益。主動(dòng)配電網(wǎng)的發(fā)展既依賴于技術(shù)進(jìn)步,又需要充分競(jìng)爭(zhēng)的用戶側(cè)電力市場(chǎng)。通過(guò)技術(shù)進(jìn)步帶來(lái)投資降低,而充分競(jìng)爭(zhēng)的電力市場(chǎng)和相應(yīng)商業(yè)模式有望給電網(wǎng)和用戶帶來(lái)切實(shí)的收益。
捷聯(lián)慣性仿真軟件核心功能用于實(shí)現(xiàn)慣性導(dǎo)航的解算任務(wù),由加速度計(jì)、陀螺儀、導(dǎo)航計(jì)算機(jī)、姿態(tài)計(jì)算機(jī)、內(nèi)外部總線、電源和時(shí)鐘中斷器等組件組成,各組件間的交互如圖3所示。
圖3 仿真軟件的核心功能組成
仿真軟件的最終核心功能設(shè)計(jì)類圖如圖4所示。仿真軟件實(shí)現(xiàn)中,加速度計(jì)、陀螺儀、電源和時(shí)鐘中斷器采用多線程機(jī)制,在仿真啟動(dòng)后即開(kāi)始運(yùn)行,按照設(shè)定好的數(shù)據(jù)產(chǎn)生持續(xù)的信號(hào)輸出;導(dǎo)航計(jì)算機(jī)、姿態(tài)計(jì)算機(jī)和內(nèi)外部總線設(shè)計(jì)為獨(dú)立的功能類,以函數(shù)調(diào)用的形式模擬導(dǎo)航解算的各環(huán)節(jié)任務(wù)以及數(shù)據(jù)的傳輸。
通過(guò)對(duì)導(dǎo)航系統(tǒng)實(shí)際工作環(huán)境以系統(tǒng)功能模型分析,可以得到導(dǎo)航系統(tǒng)可能出現(xiàn)的基本故障。本實(shí)例僅考慮導(dǎo)航系統(tǒng)的導(dǎo)航解算過(guò)程中,可能出現(xiàn)的基本故障,包括慣性元器件數(shù)據(jù)異?;驌p壞、電源不穩(wěn)定、計(jì)算誤差超限以及通信故障,故障列表見(jiàn)表1。
表1 系統(tǒng)故障列表
通過(guò)集合劃分的方法,可以構(gòu)造滿足定義1的樹(shù)狀故障模型MF= {F1,F(xiàn)2,F(xiàn)3,F(xiàn)4,F(xiàn)5}。其中,F(xiàn)1= {F11,F(xiàn)12,F(xiàn)13},F(xiàn)2= {F21,F(xiàn)22,F(xiàn)23,F(xiàn)24},F(xiàn)3= {F31,F(xiàn)32},F(xiàn)4= {F41,F(xiàn)42},F(xiàn)5= {F51,F(xiàn)52};F11= {f1,f2,f3},F(xiàn)12= {f4,f5,f6},F(xiàn)13= {f7,f8,f9},F(xiàn)21= {f10,f11,f12},F(xiàn)22= {f13,f14,f15},F(xiàn)23= {f16,f17,f18},F(xiàn)24= {f19,f20,f21},F(xiàn)31= {f24,f28},F(xiàn)32= {f25,f26,f27,f29},F(xiàn)41= {f30},F(xiàn)42= {f31},F(xiàn)51= {f22},F(xiàn)52= {f23}。
圖4 仿真軟件系統(tǒng)核心功能類圖
對(duì)于監(jiān)控器Monitor,本例設(shè)計(jì)了14 個(gè)軟件傳感器,負(fù)責(zé)獲取故障模型中所有故障所影響的全部系統(tǒng)參數(shù),并以事件序列方式輸出至診斷器;診斷器接收監(jiān)控器傳送的事件序列,通過(guò)遍歷故障模型的方法診斷系統(tǒng)所發(fā)生的最低級(jí)別故障,并將診斷故障樹(shù)發(fā)送至控制器與修復(fù)器;對(duì)于控制器,負(fù)責(zé)接收診斷器發(fā)送的診斷故障樹(shù),并根據(jù)診斷故障樹(shù)與系統(tǒng)功能模型,阻止故障對(duì)系統(tǒng)的進(jìn)一步影響,標(biāo)記故障組件故障狀態(tài),并在故障修復(fù)后重新啟用故障部件;對(duì)于修復(fù)器,根據(jù)診斷器發(fā)送的診斷故障樹(shù),結(jié)合功能模型,確定故障組件,并進(jìn)行相應(yīng)修復(fù)操作,本例采用了備用組件和微重啟的修復(fù)策略[11]。
面向方面編程(aspect-oriented programming,AOP)是一種支持從外部獲取目標(biāo)系統(tǒng)內(nèi)部狀態(tài)或行為信息并獲取控制點(diǎn)的機(jī)制,該技術(shù)在不需要獲得目標(biāo)系統(tǒng)源碼情況下,可以在編譯或者加載時(shí)動(dòng)態(tài)向目標(biāo)系統(tǒng)中插入代碼。本例采用面向方面設(shè)計(jì) (aspect-oriented design,AOD)方法,對(duì)系統(tǒng)自愈層模型進(jìn)行了設(shè)計(jì) (針對(duì)故障模型中所有第二級(jí)宏故障 (F1x)設(shè)計(jì)了模擬修復(fù)策略),得到設(shè)計(jì)結(jié)果如圖5所示。
面向方面代碼支持靜態(tài)或動(dòng)態(tài)織入,因此,本例可以采用圖2中的第二種途徑,在分別得到系統(tǒng)功能代碼和自愈層代碼后進(jìn)行代碼編織,從而保持代碼在源代碼級(jí)隔離。為了更直觀了解系統(tǒng)實(shí)現(xiàn)后的情況,此處給出了系統(tǒng)全局模型,如圖6所示。
根據(jù)系統(tǒng)設(shè)計(jì)得到的功能層模型與自愈層模型,本例通過(guò)Java和AspectJ語(yǔ)言對(duì)系統(tǒng)核心功能模型與自愈層模型進(jìn)行實(shí)現(xiàn),通過(guò)代碼編織得到系統(tǒng)全局最終代碼,以驗(yàn)證系統(tǒng)運(yùn)行過(guò)程中的自愈特征。在系統(tǒng)實(shí)現(xiàn)基礎(chǔ)上,通過(guò)修改相應(yīng)仿真單元狀態(tài)值和輸出值的方式對(duì)系統(tǒng)可能出現(xiàn)的故障特征進(jìn)行模擬,記錄系統(tǒng)處理結(jié)果和處理耗時(shí),對(duì)系統(tǒng)的自愈特征進(jìn)行驗(yàn)證。系統(tǒng)運(yùn)行過(guò)程監(jiān)控界面如圖7所示。
在實(shí)驗(yàn)中,針對(duì)故障模型中的每個(gè)第二級(jí)宏故障(F1x),模擬輸入1000次,系統(tǒng)運(yùn)行硬件環(huán)境為:Intel CPU G1620 2.7GHz,4GB RAM;操作系統(tǒng)為Win7旗艦版。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)對(duì)輸入的每個(gè)故障均能夠有效診斷并修復(fù),診斷與修復(fù)率達(dá)到100%,符合設(shè)計(jì)預(yù)期結(jié)果,即自愈度達(dá)到1,平均自愈耗時(shí)0.047ms,實(shí)驗(yàn)結(jié)果如圖8所示 (圖中A 表示該類故障自愈度為1)。
圖5 系統(tǒng)自愈層面向方面模型
圖6 系統(tǒng)全局靜態(tài)模型
本文此處僅僅為了驗(yàn)證所提出的系統(tǒng)設(shè)計(jì)方法的有效性,并不針對(duì)不同修復(fù)策略性能進(jìn)行討論,因此,不再針對(duì)自愈耗時(shí)進(jìn)行進(jìn)一步分析。
圖7 系統(tǒng)運(yùn)行監(jiān)控界面
本文研究自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)問(wèn)題,采用模型驅(qū)動(dòng)設(shè)計(jì)思想,提出一種以故障模型為中心的自愈軟件系統(tǒng)設(shè)計(jì)方法,以解決系統(tǒng)設(shè)計(jì)過(guò)程中功能層與自愈層模型交織的問(wèn)題,在此基礎(chǔ)上,分析與討論了系統(tǒng)代碼實(shí)現(xiàn)的3種不同途徑,以解決系統(tǒng)功能層與自愈層代碼纏繞的問(wèn)題。根據(jù)所提出的設(shè)計(jì)思想與方法,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)具有自愈性的捷聯(lián)慣性導(dǎo)航仿真軟件,驗(yàn)證了所提出的系統(tǒng)設(shè)計(jì)思想與方法的可行性與有效性。本文所提出的橫向模型驅(qū)動(dòng)方法,為自愈軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)提供了參考,對(duì)監(jiān)控軟件、自適應(yīng)軟件等系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)具有借鑒意義。故障模型是所提出的系統(tǒng)橫向模型驅(qū)動(dòng)設(shè)計(jì)方法的連接紐帶,本文僅給出了故障模型的統(tǒng)一結(jié)構(gòu),而不同系統(tǒng)的故障模型構(gòu)造方法有待于進(jìn)一步研究。此外,本文所采用的AOP是目前支持代碼編織技術(shù)的一種,其效率問(wèn)題與代碼動(dòng)態(tài)編織的支持程度需要進(jìn)一步研究與分析。
圖8 系統(tǒng)實(shí)驗(yàn)數(shù)據(jù)統(tǒng)計(jì)結(jié)果
[1]Locasto ME.Self-h(huán)ealing:Science,engineering and fiction[C]//The New Securiy Paradigms Workshop,2007.
[2]Al-oqily I.A survey for self-h(huán)ealing architectures and algorithms[C]//9th International Multi-Conference on Systems,Signals and Devices,2012:1-5.
[3]Garlan D.Invited talk-engineering self-h(huán)ealing and self-improving systems [C]//5th Int Conf on Secure Software Integration &Reliability Improvement Companion,2011:207-207.
[4]REN Hongmin,LIU Jin.Research on self-h(huán)ealing framwork for Web service based on connectors[J].Application Research of Computers,2012,29 (8):3004-3007 (in Chinese). [任洪敏,劉晉.基于連接件的Web服務(wù)自愈框架研究 [J].計(jì)算機(jī)應(yīng)用研究,2012,29 (8):3004-3007.]
[5]Yin Y.A self-h(huán)ealing composite Web service model[C]//Proceedings of Services Computing Conference,2009:307-312.
[6]Park J.Approach to generating monitoring code toward ad-vanced self-h(huán)ealing [C]//Control and Automation and Energy System Engineering,2011:138-148.
[7]Breitgand D.PANACEA towards a self-h(huán)ealing development framework [C]//Proceedings of Integrated Network Management,2007:169-178.
[8]Gaudin B,Hinchey M.FastFIX:An approach to self-h(huán)ealing[C]//Proceedings of Computer Science and Information Systems,2011:957-964.
[9]Ozcelik B.An approach for classifying program failures[C]//Proceedings of Advances in System Testing and Validation Lifecycle,2010:93-98.
[10]Portela AER,Perdomo JG.Survey:Termites system with self-h(huán)ealing based on autonomic computing [C]//Proceedings of Computing Congress,2011:1-6.
[11]TAN Chenxin,WANG Lei,GUAN Yuxin.Research on micro-reboot technology with supporting self-h(huán)ealing [J].Mini Micro Systems,2013,34 (1):77-82 (in Chinese). [譚成鑫,王雷,關(guān)育新.支持自恢復(fù)的微重啟技術(shù)研究 [J].小型微型計(jì)算機(jī)系統(tǒng),2013,34 (1):77-82.]