陳智勇,徐 鋒,余 萍
1.南京大學(xué) 軟件新技術(shù)國家重點實驗室,南京 2100462.南京大學(xué) 計算機科學(xué)與技術(shù)系,南京 210046
一個基于COP的控制軟件安全性增強方法
陳智勇1,2,徐 鋒1,2,余 萍1,2
1.南京大學(xué) 軟件新技術(shù)國家重點實驗室,南京 210046
2.南京大學(xué) 計算機科學(xué)與技術(shù)系,南京 210046
安全性關(guān)鍵系統(tǒng)(Safety-Critical System,SCS)[1]泛指具有潛在破壞力的一類系統(tǒng),這類系統(tǒng)的失效會造成設(shè)備的損毀甚至是人員的傷亡。此類系統(tǒng)中,軟件是系統(tǒng)的一個重要安全因子,軟件的失效導(dǎo)致SCS的運行錯誤從而造成巨大的損失。軟件安全性(software safety)工作的出發(fā)點是系統(tǒng)安全性。一個單獨的軟件本身并不存在安全性問題,只有當(dāng)軟件和硬件相互作用,在不同的環(huán)境下運行才有可能導(dǎo)致人員的生命危險、或系統(tǒng)崩潰、或造成不可接受的資源損失時,才涉及到安全性問題。因此,Mc-Dermid[2]認(rèn)為,軟件安全性只是軟件在系統(tǒng)上下文中對系統(tǒng)安全性方面的貢獻(xiàn)的描述。例如在航電軟件中,飛機在飛行高度低于預(yù)警值時應(yīng)該及時發(fā)出警示提醒飛行員。導(dǎo)致軟件失效的原因主要有兩類,一類是程序的邏輯錯誤,如某個公式的代碼描述錯誤;另一類是對軟件在不同環(huán)境中運行沒有正確設(shè)計。例如1996年6月4日,阿麗亞娜5型運載火箭的首航,原計劃將運送4顆太陽風(fēng)觀察衛(wèi)星到預(yù)定軌道,但因為軟件引發(fā)的問題導(dǎo)致火箭在發(fā)射39 s后偏軌,從而激活了火箭的自我摧毀裝置。阿麗亞娜5型火箭和其他衛(wèi)星在瞬間灰飛煙滅。后來查明的事故原因是:代碼重用。阿5型的發(fā)射系統(tǒng)代碼直接重用了阿4型的相應(yīng)代碼,而阿4型的飛行條件和阿5型的飛行條件截然不同。此次事故損失3.7億美元。在現(xiàn)代軟件工程中,代碼重用已經(jīng)成為軟件設(shè)計的基礎(chǔ)方法之一,但是重用的代碼的安全性需要有可靠的保障。
SCS系統(tǒng)的控制軟件一般會通過同其應(yīng)用功能相關(guān)的傳感器獲取環(huán)境數(shù)據(jù),然后控制執(zhí)行器的行為。但是由于系統(tǒng)運行環(huán)境的復(fù)雜性,很多環(huán)境因素會導(dǎo)致系統(tǒng)進(jìn)入危險狀態(tài),部分可能已經(jīng)在控制軟件設(shè)計的時候考慮到并加以處理。但是對軟件安全性的研究表明,不論使用多么完善的軟件開發(fā)模型,總是不可能在軟件設(shè)計之初考慮到軟件需要面對的所有可能出現(xiàn)的危險環(huán)境。因此,在軟件維護(hù)階段,能增量式地添加對環(huán)境因素的處理來提高整個系統(tǒng)的安全性而又不影響原有軟件在應(yīng)用方面的功能也是軟件安全性研究的一個重要方面。因此,軟件安全方面功能的開發(fā)可以采用軟件開發(fā)模型中的增量模型(Incremental Model),一步一步構(gòu)建軟件安全功能。如圖1所示是一個采用增量模型的安全性增強的實際系統(tǒng),由一個原始系統(tǒng)和一個停機系統(tǒng)組成[3]。停機系統(tǒng)是作為原有系統(tǒng)安全功能增強系統(tǒng)設(shè)計,其輸入從原有系統(tǒng)上的傳感器獲得。原始系統(tǒng)根據(jù)其使用的傳感器的數(shù)據(jù)控制執(zhí)行器的行為,同時一個停機系統(tǒng)并行運行,當(dāng)診斷發(fā)現(xiàn)需要停機時,停機系統(tǒng)能迅速停止執(zhí)行器的運行。這里,停機系統(tǒng)就是作為同原有系統(tǒng)完全獨立的一個增量設(shè)計然后同原有系統(tǒng)整合成一個新的系統(tǒng)。但是這類如停機系統(tǒng)的安全功能增強方法是以功能為中心的設(shè)計方法,增量同原有系統(tǒng)以及增量同增量之間都是完全獨立的,新增的系統(tǒng)資源也不能被不同功能模塊重復(fù)利用,這就帶來一些資源如傳感器等的極大浪費。
圖1 停機系統(tǒng)
系統(tǒng)安全功能增強以新增的系統(tǒng)資源為中心可以很好地避免上述的問題。本文新增的系統(tǒng)資源是指用于檢測軟件運行的環(huán)境上下文的一系列傳感器,因此,設(shè)計環(huán)境因素應(yīng)該成為安全升級方法需要考慮的中心問題,COP正是一種能準(zhǔn)確直觀地獲取環(huán)境因素,并且提供支撐機制動態(tài)地根據(jù)環(huán)境上下文改變程序行為[4]的編程方法。COP允許程序員通過實現(xiàn)一種稱為layer的抽象程序行為集合及其內(nèi)部的局部方法(partial method)來實現(xiàn)程序行為的改變。在SCS系統(tǒng)中,對于不改變執(zhí)行器行為的程序行為切換,目前已經(jīng)存在的COP的支撐機制如ContextJ[5],EventCJ[6]等都可以實現(xiàn)。但是對于控制軟件安全性升級,危險狀態(tài)的觸發(fā)很有可能需要改變執(zhí)行器的行為,例如停止馬達(dá)的轉(zhuǎn)動,在危險消除以后恢復(fù)執(zhí)行器的原有執(zhí)行狀態(tài)。從控制軟件的角度來看,執(zhí)行器是程序中的臨界資源,軟件的安全相關(guān)部分對其訪問和修改會影響到應(yīng)用相關(guān)部分原來的運行結(jié)果,而目前的COP支撐機制并沒有對程序行為切換過程中臨界資源的訪問控制提供明確的支持。針對上面的問題,對EventCJ做了一定的改進(jìn),對于程序行為切換過程所影響的臨界資源提供對其上下文保存和恢復(fù)的支持機制,并且在Lego NXT上實現(xiàn)了一個運行支撐機制。
軟件的上下文正成為軟件開發(fā)要面對的一個非常重要的問題,但是主流編程語言幾乎沒有提供準(zhǔn)確地描述上下文的能力,COP編程方法的出現(xiàn)很好地彌補了這一不足。COP中任何計算訪問信息都被視為上下文信息。任何一種COP的方法都應(yīng)該包含以下一些屬性[7]:
(1)行為變量(Behavioral variations):行為變量表示那些能替代或者改變軟件基本行為的行為集合。
(2)行為層(Layers):行為層是那些相關(guān)的上下文依賴行為變量的集合。
(3)動態(tài)行為變量激活(Activation):COP編程方法中行為變量能在運行時刻被激活從而影響系統(tǒng)的行為的機制。
(4)上下文(Context):所有可計算的和可獲取的信息都可以成為行為變量所依賴的上下文。
(5)作用域(Scoping):精確控制激活或注銷Layer的作用域,同一個行為變量在同一時刻可能在不同的作用域中分別被激活或注銷。
COP語言的一個設(shè)計問題就是對layer激活的控制,即什么時候、哪個Layer應(yīng)該在程序執(zhí)行過程的什么位置被激活或注銷的問題。目前的研究提出主要有兩類方法,一種采用的是稱為塊結(jié)構(gòu)體[6](block-structured)的方法,如ContextJ[5]中的with表達(dá)式。這種方法的特點是上下文環(huán)境的改變和對應(yīng)行為的激活/注銷是在程序的同一處或者同一個線程內(nèi)進(jìn)行的,同時在退出表達(dá)式塊后即注銷了對應(yīng)的Layer。另一種方法是針對Appeltauer[5]等人指出的很多l(xiāng)ayer的激活/注銷是由外部事件所引發(fā),而這類行為的激活不適宜采用塊結(jié)構(gòu)體的方法來實現(xiàn)。為此Tetsuo等人設(shè)計了EventCJ[6],采用的是一種稱為事件驅(qū)動的方法(Event-based Context Transition),這種方法可以分離上下文環(huán)境的變化檢測與行為的激活。
目前大部分的COP語言采用的是塊結(jié)構(gòu)體的方法,這類方法多采用線程粒度的layer激活策略,雖然塊語句可以很方便地表示在一個具體的方法調(diào)用中何時激活layer,但是對于那些由程序執(zhí)行過程中隨時發(fā)生的外部事件(如進(jìn)入某座建筑或者傳感器數(shù)據(jù)發(fā)生變化)觸發(fā)的上下文變化并不適用。對于安全控制而言,危險狀態(tài)是隨機發(fā)生并且對其的響應(yīng)處理需要非常及時,即任何線程的執(zhí)行都有可能隨時被打斷。因此線程粒度的layer激活不適用于軟件的安全性升級。
EventCJ基于事件和由事件觸發(fā)的layer切換規(guī)則來管理layer的激活。在EventCJ中,事件由類似AspectJ[8]切點的方式定義,layer切換規(guī)則由基于規(guī)則的描述語言定義。EventCJ中事件的發(fā)生可以立即觸發(fā)layer的切換發(fā)生,從而影響程序的執(zhí)行流程,因此對于軟件的安全控制是合適的,但是EventCJ的不足之處在于,首先其事件的描述能力較弱,它只能描述程序中變量或函數(shù)的當(dāng)前狀態(tài)[9],對于狀態(tài)的變化過程則無法直觀地表達(dá);其次EventCJ雖然提供了layer切換規(guī)則描述,但是對于切換時layer的信息沒有提供保存和恢復(fù)的功能,這對于前面提到的程序行為切換時臨界資源的訪問控制不能提供明確的支持。
上面提到EventCJ的事件存在的描述能力不足,為此在其基礎(chǔ)上進(jìn)行了改進(jìn),定義了事件(event)和條件(condition)的概念。
事件:在監(jiān)測過程中瞬間發(fā)生的稱為事件。例如監(jiān)測過程中,光傳感器采集數(shù)據(jù)一次稱為事件。一個事件含有值屬性和時間屬性,其中值屬性是指該事件附屬的值,如光傳感器采集一次數(shù)據(jù)這個事件,該事件的值屬性就是采集到的數(shù)據(jù)值;時間屬性是指該事件發(fā)生的時間信息,如上例,采集數(shù)據(jù)發(fā)生的時間就是該事件的時間屬性。有了事件的概念,系統(tǒng)屏蔽了不同傳感器數(shù)據(jù)類型造成的差異性,統(tǒng)一對接收到的事件做分析處理。
條件:條件代表在執(zhí)行的過程中能保持一段時間的信息,例如(x<1)是一個條件,因為這個狀態(tài)只要x不超過1就能一直保持。
Condition和Event有如下的語法關(guān)系:
事件start(c)當(dāng)條件c從false變?yōu)閠rue時產(chǎn)生,end(c)當(dāng)條件c從true變?yōu)閒alse時產(chǎn)生。有了條件和事件的概念,就可以結(jié)合傳感器獲取到的上下文信息,描述系統(tǒng)的安全狀態(tài),然后根據(jù)狀態(tài)轉(zhuǎn)換觸發(fā)的事件決定Layer的激活。例如有表示車輛和前方障礙物距離的變量d,小車當(dāng)前的狀態(tài)S={d>10},可以定義Layer激活事件E={end(S)}。通過使用Event和Condition可以精確地描述系統(tǒng)的當(dāng)前狀態(tài)以及狀態(tài)的變化過程。
3.1 Layer定義
Layer是上下文相關(guān)行為集合的抽象概念,每個layer都至少有一個partial method用來定義同具體的上下文相關(guān)聯(lián)的行為。同ContextJ一樣,本文在Layer中也定義一系列的partial methods。但是所不同的是,首先在Layer中可以定義activate/deactivate對,分別表示layer被激活和注銷時執(zhí)行的動作;其次還可以定義save/restore對,表示對Layer現(xiàn)場信息的操作,下面會詳細(xì)介紹。
3.2 Layer激活
Layer激活表示程序的執(zhí)行流程轉(zhuǎn)換到被激活的layer的域中,Layer轉(zhuǎn)換的語法如下:
Layer的切換默認(rèn)是不保存被切換的Layer的信息的,但是如前面所述,Layer的信息在某些情況下顯得非常重要。供前綴和后綴修飾save和restore。save前綴表示保存Operator左側(cè)的Layer的信息;restore后綴則表示激活Operator右側(cè)的Layer以前首先執(zhí)行信息恢復(fù)操作。
下面是一個簡單的例子說明:
這條轉(zhuǎn)換規(guī)則表示當(dāng)RiskEvent發(fā)生時,如果NormalNavi已經(jīng)激活則注銷NormalNavi并且激活RiskNavi;否則僅激活RiskNavi。下面考慮當(dāng)危險狀態(tài)撤銷后,系統(tǒng)回復(fù)正常狀態(tài)需要載入注銷前的一些信息如速度,方向等信息,上面的簡單例子改寫如下:
NormalNavi切換到RiskNavi時保存Layer的信息;相對應(yīng)地,RiskNavi切換到NormalNavi時載入Layer信息。
為了說明安全升級模型的應(yīng)用在Lejos上實現(xiàn)了一個運行支撐機制,結(jié)構(gòu)如圖2所示。Lejos是基于樂高機器人(Lego NXT)的一個Java程序開發(fā)/運行環(huán)境[8]。樂高機器人包括一個可編程的類似CPU的控制器,一系列傳感器和馬達(dá)等執(zhí)行器。Lego NXT有豐富的附加組件如傳感器支持,并且其擁有Lejos這樣一個成熟的Java開發(fā)環(huán)境,可以較好地模擬現(xiàn)實中的SCS系統(tǒng)。運行支撐機制包括了一個上下文描述語言及其解析器的實現(xiàn)和layer的定義激活策略。
圖2 運行支撐機制結(jié)構(gòu)圖
context information collector是根據(jù)定義的上下文信息收集腳本生成的,并作為原有工程的一部分同原程序一起編譯生成新的可執(zhí)行文件。為此,實現(xiàn)了一個將上下文描述語言轉(zhuǎn)換為Java語言的編譯器原型。編譯器包裝成一個Eclipse plugin。系統(tǒng)維護(hù)人員在使用過程中,對一個包含規(guī)約描述腳本的Java Project,按照規(guī)約描述語言生成一個新的Project并且編譯鏈接替代原先的Project。Event Recognizer和Checker則是具體設(shè)備無關(guān)的組件,前者是對輸入的傳感器數(shù)據(jù)產(chǎn)生對應(yīng)的事件,后者則是對事件驗證是否觸發(fā)layer的激活條件。
4.1 上下文信息描述語言
一個上下文信息可以用一個向量<J,S>表示,其中J表示在Java程序中對應(yīng)的表示變量,S表示對應(yīng)的傳感器。默認(rèn)一個傳感器一次采集的數(shù)據(jù)可以在Java中找到對應(yīng)的數(shù)據(jù)類型來表示,例如光傳感器采集的光強度值可以用一個Integer類型來表示。傳感器S包括屬性向量<N,P,G,S>,分別表示傳感器名稱,傳感器端口,獲取數(shù)據(jù)方法和屬性設(shè)置。屬性的設(shè)置一般包括采樣頻率、數(shù)據(jù)的過濾方式等。
上下文信息收集作為一個單獨的線程運行,可以根據(jù)指定的頻率采集傳感器信息,數(shù)據(jù)發(fā)送到事件處理器,事件處理器和信息收集線程通過Java提供的管道流PipeInput-Stream,PipeOutputStream通信。
事件處理器需要隨時判定定義的事件是否發(fā)生。設(shè)想上下文信息收集線程不斷把監(jiān)測的傳感器數(shù)據(jù)或者監(jiān)控的函數(shù)的調(diào)用情況發(fā)送到事件處理器,一旦收到傳來的信息,處理器就需要驗證。事件處理器在運行過程中維護(hù)一張保存所有監(jiān)控信息當(dāng)前值的表,當(dāng)收到信息時就更新該表,然后驗證所有定義的事件和條件的真值。
因為條件是定義在監(jiān)控變量上的一個布爾表達(dá)式,所以可以直接根據(jù)存儲在表中的監(jiān)控變量的值來判斷條件是否成立。事件的評估則要復(fù)雜一些,考慮如下事件start(c),不僅需要知道條件c的當(dāng)前值,而且還需要知道c的更新以前的最后一個值。事件end(c)亦如此。傳感器數(shù)據(jù)的update事件的監(jiān)測可以通過按照一定周期返回值獲得,然而程序執(zhí)行信息,startM和endM則可以采用面向方面的編程方法(Aspect-Oriented Programming),通過設(shè)置切點的方法獲取。
4.2 Layer激活
設(shè)計了一個管理所有被激活的layer的優(yōu)先級隊列,并且該隊列是線程安全的。系統(tǒng)反饋線程在隊列為空時處于wait狀態(tài),當(dāng)Checker發(fā)出control activation信號,附帶activation序號,并且把一個layer放入激活隊列后,喚醒反饋線程。反饋線程的工作流程是,它首先從隊首取一個layer,讀取其padding標(biāo)志位,該標(biāo)志位表示這個layer是否需要在條件滿足期間保持對反饋線程的占有,不允許其他layer執(zhí)行反饋動作。如果padding被置位,則反饋線程會等待直到Checker發(fā)出的新的activation信號,否則反饋線程執(zhí)行完后取隊列的下一個layer執(zhí)行。線程執(zhí)行一個layer前,如果layer的onSave標(biāo)志被置位,則先調(diào)用save方法;執(zhí)行完成后,檢查onRestore標(biāo)志位,如果被置位則執(zhí)行restore方法,完成后退出。每個Layer都有一個用于保存Layer信息的表,在本文的實現(xiàn)中采用Java的HashMap實現(xiàn)。暴露兩個調(diào)用的接口:
顧名思義,save是將一個object按照key指定的鍵名保存到hash表中,restore按照key從hash表中取出。系統(tǒng)會自動為每一個Layer生成一個唯一的key,可以通過getKey方法獲得。
在上面的運行支撐機制上,實現(xiàn)了一個保持距離安全的實驗系統(tǒng),給出了具體的規(guī)約腳本,用來展示本文的安全升級模型在具體系統(tǒng)中的使用。如圖3所示,在Lejos上有一個正確運行的零件分揀系統(tǒng)SPS-Lejos。SPS-Lejos能夠根據(jù)顏色傳感器對放入的零件顏色的感知,移動軌道上的零件回收盒到相應(yīng)位置,然后機械臂將零件彈入對應(yīng)顏色的回收盒中。
圖3 SPS-Lejos系統(tǒng)
假設(shè)SPS-Lejos對于系統(tǒng)的安全性方面有了新的要求如下:新添加一個用于測距的傳感器,用于控制移動部件和軌道障礙物的距離,如果小于閾值則停止馬達(dá)轉(zhuǎn)動,當(dāng)障礙物消除后繼續(xù)轉(zhuǎn)動馬達(dá)到預(yù)設(shè)角度。下面展示了本文模型對這一問題的解決方案。
5.1 上下文信息提取
上下文信息定義腳本pedl.xml定義了兩個導(dǎo)出的初級事件:ev_previous_light,ev_current_light。兩者均對應(yīng)NXT中光傳感器:LightSensor的數(shù)據(jù)變化,對應(yīng)的是Decision Module中的變量:Controller.previous_light,Controller.current_ light。不同的是兩者獲取數(shù)據(jù)前傳感器的設(shè)置不同,下面表示了ev_current_light的定義。每次S2端口的LightSensor監(jiān)控數(shù)據(jù)發(fā)生變化,就觸發(fā)事件ev_current_light。
在這里,信息采集是作為一個單獨的線程一直處在運行狀態(tài)的,必然會給系統(tǒng)帶來額外的開銷,為了能動態(tài)地控制負(fù)載,在setting標(biāo)簽中設(shè)置了period參數(shù)控制數(shù)據(jù)采集的時間間隔。
5.2 驗證安全條件
安全條件是根據(jù)光傳感器的數(shù)據(jù)變化來描述的,當(dāng)前后兩個傳感器數(shù)值差超過一定值時表示傳感器同前方障礙物的距離達(dá)到安全距離閾值。傳感器的數(shù)值可以直接通過value操作符從事件中獲取,安全條件描述如下所示,定義了兩個監(jiān)控變量:current_light,previous_light,每次事件ev_current_light和ev_previous_light發(fā)生,驗證器就會重新計算兩個監(jiān)控變量及其差值:
5.3 Layer激活
定義如下兩個事件:SafeToRisky,RiskyToSafe。它們的含義如前所述,在實際中的意義分別是障礙物距離從安全距離和危險距離之間的相互變化的瞬間。
當(dāng)SafeToRisky事件被觸發(fā),下面的轉(zhuǎn)換規(guī)則觸發(fā)。如果SafeControl處于激活狀態(tài),則會首先調(diào)用SafeControl中的restore代碼塊,一般執(zhí)行的是保存SafeControl中的現(xiàn)場信息,然后執(zhí)行deactivate代碼塊,一般斷開對設(shè)備的占用,最后調(diào)用RiskControl中的activate代碼塊。
RiskyToSafe事件被觸發(fā)時的執(zhí)行流程類似,它們的轉(zhuǎn)換規(guī)則如下所示:
5.4 實驗結(jié)果
在安全升級前,當(dāng)軌道上有障礙物如圖3中的小人時,移動的零件回收盒會直接撞倒障礙物;對原有系統(tǒng)的代碼應(yīng)用開發(fā)的Eclipse插件轉(zhuǎn)換得到了有COP運行支撐機制的安全增強系統(tǒng)的新系統(tǒng),能夠在軌道出現(xiàn)障礙物時,暫停分揀系統(tǒng)的工作,當(dāng)障礙物移除時,零件收集盒能夠移動至預(yù)先指定的位置而不會因為中途被打斷出錯,說明了對于系統(tǒng)在layer激活前后上下文信息的保存是有效的,實驗結(jié)果表明本文的安全規(guī)約對系統(tǒng)的安全性起到了預(yù)期的增強作用。通過多次實驗發(fā)現(xiàn),起初從系統(tǒng)距離達(dá)到安全閾值到作出響應(yīng)有0.5~1.0 s的時延,由于本文采用的是Jvm下的多線程機制干預(yù)程序的正常運行,將Layer激活部分的線程優(yōu)先級設(shè)為最高可以有效地降低因線程調(diào)度帶來的時延,提高系統(tǒng)的響應(yīng)性。
本文所描述的基于COP的動態(tài)軟件安全性升級框架,為軟件安全性的升級維護(hù)提供了一種可靠方便的方法。認(rèn)為軟件的后期維護(hù)同樣需要可靠的安全性升級模式,COP的思想較好地契合了增量式安全升級的要求,但是當(dāng)前的COP運行支撐機制又不能很好地滿足需求,因此提出了本文前面描述的方法,可以很好地滿足后期維護(hù)動態(tài)升級安全性的需求。在經(jīng)典的ECA(Event-Condition-Action)模型基礎(chǔ)上,改進(jìn)了Action部分在實際應(yīng)用中的局限性,提供了一個以Layer上下文保存為核心的運行支撐機制并且實現(xiàn)了一個基于NXT的原型系統(tǒng),編寫了安全規(guī)約描述腳本語言的編譯器及其Eclipse插件工具。
目前本文的模型只適用于那些對超時不敏感執(zhí)行器任務(wù),即執(zhí)行器可以被打斷而不對最后的執(zhí)行效果造成影響,對于那些要求在某段時間內(nèi)完成的任務(wù)并不適用,未來將針對這一類執(zhí)行器完善本文的模型。
[1]IsaksenU,BowenJ P,NissankeN.System andsoftware safety in critical systems,RUCS Technical Report RUCS/97/ TR/062/A[R].Berks,UK:Department of Computer Science,University of Reading,1997.
[2]McDermid J.Software safety:where's the evidence[C]//Proceedings of the 6th Australian Workshop on Industrial Experience with Safety Critical Systems and Software.[S.l.]:Australian Computer Society,2001.
[3]Kalinsky D.Architecture of safety-critical systems[J].Embedded Systems Programming,2005:14-25.
[4]Hirschfeld R,Costanza P,Nierstrasz O.Context-oriented programming[J].Journal of Object Technology,2008,7:125-151.
[5]Appeltauer M,Hirschfeld R,Haupt M,et al.ContextJ:contextoriented programming with Java[J].Computer Software,2011.
[6]Kamina T,Aotani T,Masuhara H.EventCJ:a context-oriented programming language with declarative event-based context transition[C]//Proceedings of the 10th International Conference on Aspect-oriented Software Development.New York:ACM,2011:253-264.
[7]Costanza P,Hirschfeld R.Language constructs for contextoriented programming:an overview of ContextL[C]//Dynamic Languages Symposium(DLS)'05.New York:ACM Press,2005.
[8]Allan C.Adding trace matching with free variables to AspectJ[C]// OOPSLA'05.New York:ACM,2005.
[9]Kamina T,Aotani T,Masuhara H.Designing event-based context transition in context-oriented programming[C]//COP'10. New York:ACM,2010.
CHEN Zhiyong1,2,XU Feng1,2,YU Ping1,2
1.State Key Lab for Novel Software Technology,Nanjing University,Nanjing 210046,China
2.Department of Computer Science&Technology,Nanjing University,Nanjing 210046,China
Control software is the core of safety-critical systems,its correctness is crucial to the system safety.However,as systems are facing increasingly complex context environment,which cannot be considered all,system safety is facing new challenges. So it is very important to enhance software safety via an environment-centered,incremental method when maintaining the software.Context-oriented programming is a programming technique which treats software context as a central notion.Current operating mechanisms for COP treat context explicitly,and it provides mechanisms to dynamically adapt behavior in reaction to changes in context.However,some behavior adaptions may interrupt the system actuator's running state,and affect system's results.There still don't have an effective approach to deal with such problems.According to existing COP language,it proposes a control software safety enhancement model based on software context saving and restoring,also,it provides the corresponding runtime support mechanism and programming tools.It shows a parts picking system safety enhancement case to satisfy the model's correctness.
software safety;Context-Oriented Programming(COP);programming model
控制軟件往往是安全攸關(guān)系統(tǒng)的核心,其正確性對系統(tǒng)安全起著至關(guān)重要的作用。然而由于系統(tǒng)面對的環(huán)境因素越來越復(fù)雜,軟件設(shè)計之初不可能考慮到所有可能面對的環(huán)境變化因素,系統(tǒng)的安全性面臨新的挑戰(zhàn)。因此在軟件維護(hù)階段,以環(huán)境變化為中心,增量式地增強軟件的安全性顯得非常重要。面向上下文編程方法(Context-Oriented Programming,COP)正是一種以軟件運行上下文環(huán)境為中心的編程方法?,F(xiàn)有的支撐COP思想的運行機制可以使得系統(tǒng)根據(jù)精確的上下文信息動態(tài)地調(diào)整系統(tǒng)的行為,但是有些上下文引發(fā)的系統(tǒng)行為調(diào)整會導(dǎo)致系統(tǒng)執(zhí)行器的現(xiàn)有運行被打斷,對于這類影響系統(tǒng)執(zhí)行器行為的上下文,現(xiàn)有的COP運行機制還沒有提供有效處理方法。根據(jù)現(xiàn)有的COP方法,給出了一個基于軟件上下文保存與恢復(fù)的控制軟件安全性增強的編程模型,并在Lego NXT控制器上實現(xiàn)了相應(yīng)的運行支撐和編程工具,通過一個產(chǎn)品分揀系統(tǒng)的安全性增強實例,初步驗證了該編程模型的合理性。
軟件安全性;面向上下文編程(COP);編程模型
A
TP391
10.3778/j.issn.1002-8331.1208-0522
CHEN Zhiyong,XU Feng,YU Ping.COP based approach to control software safety enhancement.Computer Engineering and Applications,2013,49(5):64-69.
國家重點基礎(chǔ)研究發(fā)展規(guī)劃(973)(No.2009CB320702);國家自然科學(xué)基金(No.61021062,No.61073030)。
陳智勇(1988—),男,碩士研究生,主要研究領(lǐng)域為可信計算;徐鋒(1975—),男,博士,博士生導(dǎo)師,主要研究領(lǐng)域為可信計算、系統(tǒng)安全、軟件可靠性技術(shù)等。E-mail:zychen.nju@gmail.com
2012-09-07
2012-10-16
1002-8331(2013)05-0064-06
CNKI出版日期:2012-10-31 http://www.cnki.net/kcms/detail/11.2127.TP.20121031.1000.020.html