(1.后勤科學(xué)研究所 北京 100071; 2.海軍作戰(zhàn)應(yīng)用軟件管理中心 北京 100083; 3.國防科學(xué)技術(shù)大學(xué) 計算機(jī)學(xué)院 長沙 410073)
摘 要:隨著軟件規(guī)模和復(fù)雜度的增加,軟件失效和故障問題日益加劇。如何在開發(fā)階段利用開發(fā)環(huán)境為實現(xiàn)軟件可信性提供有效支撐,從而確保軟件運行行為與預(yù)期保持一致,具有重要的研究價值。借助面向方面的設(shè)計思想,把可信性作為一種方面融入軟件的開發(fā)環(huán)境,研究實現(xiàn)了可信軟件開發(fā)平臺TSCE。該平臺能夠在軟件研制過程中,一體化地提供可信性需求定制、可信代碼自動生成、可信代碼自動織入等輔助開發(fā)手段。利用該平臺,開發(fā)人員不用額外編寫可信性實現(xiàn)的相關(guān)代碼,便可在部署運行階段使軟件具有一定的可信性判斷能力和故障預(yù)警與修復(fù)能力。
關(guān)鍵詞:可信軟件; 面向方面編程; 開發(fā)平臺
中圖分類號:TP339文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2009)05-1743-03
One trusted software constitution environment
based on aspectoriented programming
ZHANG Zhuxi1,3 LI Renjie2,3 WANG Huaimin3
(1.General Logistics Department Logistics Research Institute Beijing 100071 China; 2.General Management Center of Naval Operational Software Beijing 100083 China; 3. School of Computer Science National University of Defense Technology Changsha 410073 China)
Abstract:Nowadays the problems of software failure and invalidation become more serious. How to improve the credibility of software in developing stage to make the software runtime behavior coincide with pepole’s expectation has become a hot issue. This paper regarded the credibility as an aspect and applied AOP thought in the research and implementation of trusted software constitution environment (TSCE). Making use of TSCE in developing stage the software can have monitor and control abilities automatically without producing any codes by manual work.
Key words:trusted software; aspectoriented programming; IDE
隨著計算機(jī)與網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,軟件已經(jīng)滲透到了國民經(jīng)濟(jì)和國防建設(shè)的各個領(lǐng)域,在信息社會中發(fā)揮著至關(guān)重要的作用[1]。然而,軟件規(guī)模和復(fù)雜度增加的同時,軟件失效和故障問題也日益嚴(yán)重。2002年,美國商務(wù)部國立標(biāo)準(zhǔn)技術(shù)研究所(National Institute of Standards and Technology NIST)的一份報告指出:據(jù)推測,美國每年由軟件缺陷而引起的損失額平均高達(dá)595億美元,相當(dāng)于國內(nèi)生產(chǎn)總值的0.6%[2]。透過這些損失,人們已經(jīng)清醒地認(rèn)識到開發(fā)可信軟件的必要性和緊迫性。
1 可信軟件研究現(xiàn)狀
什么是軟件的可信?筆者認(rèn)為,如果一個軟件系統(tǒng)的行為總是與預(yù)期相一致,則可稱之為可信(trustworthy)[3]。經(jīng)過多年研究,人們對造成軟件不可信的原因、機(jī)理已有基本認(rèn)識,并研究出了一些對策,如形式化方法、軟件測試方法和過程管理方法等。形式化方法用形式化的語言來描述軟件的需求和特征,通過推理驗證來保證最終軟件能否滿足這些需求和具備這些特征。軟件測試方法通過靜態(tài)的源代碼分析以及動態(tài)的目標(biāo)碼運行等不同的途徑排除軟件缺陷。過程管理方法則主要針對開發(fā)者,提高開發(fā)過程的規(guī)范性,從而減少缺陷。
不難看出,上述方法雖然在很大程度上提高了軟件的可信性,但它們同屬于避免與減小軟件缺陷的預(yù)防手段,難以直接對部署并實際運行的系統(tǒng)給出可信與否的實時判斷,也很難及時定位和修復(fù)系統(tǒng)運行過程中發(fā)生的故障。
作為對上述方法的補(bǔ)充,本文研究實現(xiàn)了可信軟件開發(fā)平臺。該平臺能夠在軟件開發(fā)過程中,以系統(tǒng)源代碼為基礎(chǔ)提供可信需求的定制功能,并以此為依據(jù),以面向方面(aspect)的方式為原系統(tǒng)自動生成和注入可信狀態(tài)監(jiān)測功能與運行行為管控功能。在該平臺的輔助下,開發(fā)人員不用額外編寫可信性實現(xiàn)的相關(guān)代碼,便可在部署運行階段使軟件具有一定的可信性判斷能力和故障預(yù)警與修復(fù)能力。
2 面向方面的可信軟件開發(fā)模型
面向方面編程(aspectoriented programming,AOP)是施樂公司帕洛阿爾托研究中心(Xerox PARC)在20世紀(jì)90年代發(fā)明的一種編程范式[4],是對面向?qū)ο缶幊蹋╫bjectoriented programming,OOP)的補(bǔ)充和完善。
軟件開發(fā)中存在一些特殊的公共行為或公共需求,這些行為或需求在傳統(tǒng)的OOP程序設(shè)計中不能自然適合單個對象和程序模塊,從而導(dǎo)致相應(yīng)的實現(xiàn)代碼散布在軟件各個角落,嚴(yán)重影響了軟件的模塊性與可擴(kuò)展性。隨著軟件系統(tǒng)復(fù)雜度的增加,OOP的這一問題更加突出,嚴(yán)重影響了軟件質(zhì)量。
面向方面的設(shè)計思想能夠通過獨立開發(fā)橫切關(guān)注點(crosscutting concern),將應(yīng)用程序中的業(yè)務(wù)邏輯同對其提供支持的通用服務(wù)進(jìn)行分離,在提高軟件模塊性的同時,使開發(fā)人員從重復(fù)解決公用業(yè)務(wù)的勞動中解脫出來,僅專注于企業(yè)的核心業(yè)務(wù)邏輯。
借助面向方面的設(shè)計理念,本文研究并提出了可信軟件開發(fā)模型,其基本思想是以原系統(tǒng)既有核心業(yè)務(wù)代碼為基礎(chǔ),利用可信軟件開發(fā)平臺TSCE(trusted software constitution environment),在后臺以面向方面的形式自動提供軟件可信性這一公用業(yè)務(wù)的實現(xiàn),并將其添加到原系統(tǒng)中,從而在幾乎不用編寫代碼的情況下為項目開發(fā)自動化地提供軟件可信性解決方案。
如圖1所示,用戶在編碼過程中,通過可信軟件開發(fā)平臺提供的可信性需求分析定制功能,向平臺輸入如軟件監(jiān)測、故障預(yù)警、自主管理和運行行為控制等指標(biāo)要求。平臺以此為基礎(chǔ)在AOP空間根據(jù)模板自動生成需求對應(yīng)的可信性實現(xiàn)代碼,并再以AOP基礎(chǔ)工作環(huán)境為支撐,自動將其與原系統(tǒng)代碼合并,經(jīng)平臺統(tǒng)一的編譯整合,最終生成具有一定可信性的目標(biāo)軟件。
這種開發(fā)模型能夠保證可信性實現(xiàn)代碼與原系統(tǒng)代碼在編程空間上相互獨立,從而降低了系統(tǒng)內(nèi)部的耦合度,增加了系統(tǒng)的可擴(kuò)展性。其次,由于平臺針對可信的共性需求,提供了自動的一體化解決方案,開發(fā)人員能夠把更多精力投入到核心業(yè)務(wù)的實現(xiàn)上來,從而從整體增加了軟件的開發(fā)效率,降低了軟件開發(fā)成本,減小了人工開發(fā)的出錯幾率。
3 關(guān)鍵問題研究與實現(xiàn)
3.1 可信代碼自動生成技術(shù)
在使用可信軟件開發(fā)平臺時,用戶僅需人工開發(fā)并管理OOP空間中的核心業(yè)務(wù)邏輯,而軟件相應(yīng)的可信實現(xiàn)則是根據(jù)OOP空間的代碼和用戶的可信需求,由開發(fā)平臺在獨立的AOP空間生成。為此,開發(fā)平臺至少需要解決以下三個問題:
a)為誰提供可信保障。OOP的基本單位是類(class),人們自然會想到把類作為可信性保障的基本單位。而長期工程實踐表明,為更加充分地監(jiān)控軟件的運行行為,同時考慮到監(jiān)控粒度的需要,類的成員函數(shù)往往成為關(guān)注的重點,因為它們能夠具體地代表業(yè)務(wù)邏輯的執(zhí)行狀況,并且AOP程序開發(fā)也提供了為OOP類成員函數(shù)注入公共業(yè)務(wù)代碼的編程能力。
b)提供哪些可信保障。軟件運行時期的可信性保障大體可以分為兩類,即可信性狀態(tài)判斷和可信性行為控制。前者具體包括軟件運行監(jiān)測、狀態(tài)預(yù)警和日志記錄等,其實現(xiàn)與業(yè)務(wù)邏輯無關(guān);后者用于控制軟件的運行,使其與期望保持一致,一般包括運行控制、自主管理和異常處理等軟件行為管控等,其業(yè)務(wù)相關(guān)性較強(qiáng)。
c)如何生成可信代碼。由于系統(tǒng)的業(yè)務(wù)邏輯各不相同,很難統(tǒng)一生成適合所有系統(tǒng)的可信性實現(xiàn)。對于與業(yè)務(wù)無關(guān)的,開發(fā)平臺根據(jù)用戶定制的需求,以可信代碼模板為基礎(chǔ)自動為其生成AOP實現(xiàn)代碼;對于與業(yè)務(wù)細(xì)節(jié)相關(guān)的,則僅自動生成AOP代碼框架和通用的行為管控實現(xiàn),并采用模板方法(template method)設(shè)計模式暴露接口,供用戶必要時擴(kuò)展實現(xiàn)。平臺自動生成的可信代碼被統(tǒng)一管理和存放在獨立的文件中,與原系統(tǒng)代碼相互獨立,僅在編譯時通過AOP的織入技術(shù)[5]與原系統(tǒng)進(jìn)行合并,如圖2所示。
3.2 基于AOP的運行行為管控技術(shù)
在傳統(tǒng)的OOP可信軟件開發(fā)中,為判斷軟件運行與預(yù)期是否一致并在故障發(fā)生時予以糾正,一般都會實現(xiàn)運行監(jiān)視和控制等行為管控相關(guān)的類或模塊。其基本原理是:首先設(shè)置一個用于集中控制和存儲信息的管理對象,然后向被管理對象中安插若干管控探針[6]。探針將采集的信息匯聚到管理對象中,管理對象對信息處理后向探針發(fā)回控制指令從而控制軟件運行。
在傳統(tǒng)實現(xiàn)中,一旦軟件的可信性要求變更或增加,用戶往往要在數(shù)萬行的代碼中逐一維護(hù)或修改散布在各個角落的探針代碼,這種修改不僅增加了開發(fā)成本,而且容易引發(fā)新的bug,使軟件開發(fā)始終問題不斷,難以收斂。
利用面向方面技術(shù),管理對象和管控探針被放在AOP的基本編程單元方面中實現(xiàn),并通過準(zhǔn)確定義切入點(pointcut)與原系統(tǒng)中的被管理對象發(fā)生聯(lián)系,在編譯前期通過AOP的織入技術(shù)完成管控探針的部署。部署后的運行行為管控方式與OOP中的基本一致。
基于AOP的運行行為管控技術(shù)有兩個明顯的優(yōu)勢:a)由于可信代碼與業(yè)務(wù)代碼分離實現(xiàn),從而帶來了更好的軟件模塊性和可擴(kuò)展性;b)由于可信代碼實現(xiàn)空間上的獨立,加之上述管控部件的功能和工作模式的相對固定,從而為機(jī)器的自動生成創(chuàng)造了條件。如圖2所示,上述可信功能的實現(xiàn)在AOP代碼模板中的固定區(qū)域以自動方式定制和生成,而關(guān)鍵字advice后的“類::方法名稱”,則用于標(biāo)志可信部件在原系統(tǒng)中的部署位置,該位置很容易借助平臺提供的圖形化人機(jī)交互方式自動填寫。
3.3 平臺織入器的選擇
AOP的特點可以概括為分離實現(xiàn),織入融合。前者是指不同關(guān)注點的分離實現(xiàn),后者是指將分離實現(xiàn)的所有內(nèi)容進(jìn)行整合,以形成最終的目標(biāo)系統(tǒng)。前文已研究了如何利用開發(fā)平臺在AOP空間自動分離實現(xiàn)可信性需求,下面討論如何為平臺選擇恰當(dāng)?shù)目椚牍ぞ邅韺崿F(xiàn)織入融合。
表1對目前常用的幾種編織器進(jìn)行了對比。其中,開發(fā)平臺是指織入器所依托的軟件開發(fā)環(huán)境;開發(fā)語言是指編織器所能操作的開發(fā)語言;工具支持是指支持該織入器工作的若干組件或產(chǎn)品。織入性能用來描述織入器將橫切關(guān)注點織入系統(tǒng)的耗時情況,5為耗時最少性能最優(yōu);系統(tǒng)性能用來描述織入器織入代碼后原系統(tǒng)性能受到的影響,5為影響最小。
表1 幾種織入器的對比
織入器開發(fā)平臺開發(fā)語言工具支持實現(xiàn)原理編織性能系統(tǒng)性能
XWeaver不受限C++Java命令行工具、Eclipse插件基于XML的代碼模型45
AspectC++VC7C++命令行工具、ACDT、AspectC++addInAST、模板、預(yù)處理22
DynInst不受限C++DynInst API動態(tài)代碼植入技術(shù)53
AspectJJavaJavaAJDT、Ajdoc、Eclipse插件源代碼生成技術(shù)35
JBoss AOPJavaJavaEclipse 插件反射、攔截器框架53
Spring AOPJavaJavaSpring框架、Eclipse插件IoC模式、攔截器53
AspectC#.NETC#AOP引擎CodeDOM API34
Aspectsharp.NETC#Aspectsharp框架動態(tài)代理53
通過比較不難看出,XWeaver織入器能夠同時支持多種主流開發(fā)語言和常用開發(fā)環(huán)境,且編織性能與織入后系統(tǒng)性能均令人滿意。XWeaver是由瑞士Automatic Control Laboratory開發(fā)的AOP工具。它在編織時使用基于XML的代碼模型,可以保存原有代碼中的所有信息,包括格式、層次結(jié)構(gòu)和注釋等,對原有代碼的影響最小,最終得到的編織代碼可讀性強(qiáng)、代碼品質(zhì)高,同時可以集成于Eclipse中。因此,本文選用XWeaver作為可信軟件開發(fā)平臺的AOP代碼編織器。
4 實際應(yīng)用
本文以一個大規(guī)模高可用郵件傳輸系統(tǒng)的開發(fā)為背景,從軟件模塊化、軟件開發(fā)成本和效率影響等方面考察可信軟件開發(fā)平臺的應(yīng)用效果。
1)軟件模塊化方面 如圖3所示,(a)是通過傳統(tǒng)OOP技術(shù)開發(fā)的同類項目的軟件模塊示意圖,其中,縱向長條矩形代表軟件中不同模塊,深色線段代表可信性實現(xiàn)代碼;(b)是借助本平臺開發(fā)的軟件模塊。通過比較不難看出,由于采用了AOP技術(shù),可信代碼與業(yè)務(wù)邏輯實現(xiàn)代碼的糾纏問題得到了顯著改善,其代碼模塊性更好。
2)開發(fā)成本方面 經(jīng)統(tǒng)計,在項目7萬行左右的代碼中,有60%用于實現(xiàn)業(yè)務(wù)功能,其余實現(xiàn)非功能性需求。整個代碼中20%特別用于實現(xiàn)軟件的可信性。其中借助平臺自動生成的代碼約占全部可信代碼的43%,約6千行,若按每人每天開發(fā)代碼60行[5]來計算,該平臺可節(jié)約開發(fā)成本約3月/人。
3)效率影響方面 利用可信軟件開發(fā)平臺,在系統(tǒng)的報文發(fā)送模塊中自動生成和注入了可信狀態(tài)監(jiān)控功能,以掌握每份郵件的傳送進(jìn)度。實際運行時,本文通過發(fā)送單個報文大小相同、個數(shù)不同的報文組進(jìn)行效率測試。如圖4所示,X軸代表每組的報文連發(fā)個數(shù),Y軸對應(yīng)本組平均單個報文的發(fā)送時間(單位ms)。通過對比可以看出,與Aspect C++相比,XWeaver對目標(biāo)系統(tǒng)的報文發(fā)送效率影響較小,并且與人工編碼實現(xiàn)的目標(biāo)系統(tǒng)效率接近。
5 結(jié)束語
面向方面作為一種全新的軟件開發(fā)方法,提供了有效的手段來區(qū)分、描述和實現(xiàn)軟件的非功能方面。從應(yīng)用層面來看,當(dāng)今軟件開發(fā)正朝著以正面功能為核心兼顧非功能方面的方向發(fā)展。軟件的可信性作為一種關(guān)鍵的非功能方面,其重要程度已是人所共識。利用面向方面的軟件開發(fā)方法,能夠使其以一種更加靈活、松散的方式融入系統(tǒng),軟件也因此具有了更好的模塊性和擴(kuò)展性。
隨著人們對AOP研究和實踐的深入,相關(guān)標(biāo)準(zhǔn)的建立和完善以及開發(fā)工具的廣泛支持,面向方面已不再是軟件開發(fā)時零星點綴的編程技巧,而正在深刻影響著開發(fā)者的設(shè)計模式,并逐步成為一種獨特而有效的工程實現(xiàn)方法。
參考文獻(xiàn):
[1]陳火旺,王戟,董威. 高可信軟件工程技術(shù)[J]. 電子學(xué)報,2003,31(12A): 1933-1938.
[2]Software errors cost U.S. economy $ 59.5 billion annually[EB/OL].(2002-07-28)[2007-10-14].http://www.nist.gov/public_affairs/releases/n0210.htm.
[3]王懷民,唐揚斌,尹剛,等. 互聯(lián)網(wǎng)軟件的可信機(jī)理[J]. 中國科學(xué)E輯信息科學(xué),2006,36(1):1-14.
[4]KEPHART J O CHESS D M. The vision of autonomic computing[J].Computer 2003,36(1):41-50.
[5]張矚熹. 面向方面編程在軟件可管理性上的研究與實現(xiàn)[D]. 長沙:國防科學(xué)技術(shù)大學(xué),2006.
[6]曹東剛,梅宏. 面向Aspect 的程序設(shè)計——一種新的編程范型[J]. 計算機(jī)科學(xué),2003,30(9):5-10.