專利名稱:一種基于契約的aop應用程序中行為沖突問題的自動檢查方法
技術領域:
本發(fā)明涉及面向方面軟件在實際應用中面臨的關鍵問題的檢測與處理領域,特別 是涉及一種基于契約的AOP應用程序中行為沖突問題的自動檢查方法。
背景技術:
面向方面的程序設計(AOP,Aspect-OrientedProgramming)[1][2][3]方法把軟件系 統(tǒng)的功能和非功能需求、平臺特性等諸多不同的關注點相互獨立,實現(xiàn)了更好的模塊化。它 被認為是對面向對象技術的一種必要的補充,彌補了面向對象程序設計方法在跨越多個模 塊行為上的不足。AOP通過引進Aspect將影響多個類的行為(橫切關注點)封裝到一個可 重用模塊中,從而消除了 OOP引起的代碼混亂和分散問題[4],降低了類與類之間的耦合度, 使軟件更易于操作、維護、復用和擴展。一般來說,面向方面軟件由兩部分組成實現(xiàn)系統(tǒng)功 能的基礎程序(base program)和實現(xiàn)橫切關注點的程序(Aspect)。一個Aspect又包括兩 部分切入點(pointcut)和通知(advice)。一個切入點(pointcut)是一組連接點(join point)的集合,而一個連接點是程序流中的一個特定的執(zhí)行點。通知(advice)是在連接點 (join point)之前(before)、之后(after)、或前后(around)被執(zhí)行的代碼。AspectJra 是 目前被廣泛使用的AOP語言。目前,面向方面技術正朝著實用化的方向發(fā)展。但是,AOP在實際應用中面臨一個 關鍵問題行為沖突。行為沖突也稱為Aspect組合的語義沖突問題[6][7]。這種沖突表現(xiàn) 為原本能夠正確運行的程序,織入Aspect后,不能正確運行;或者是多個Aspect織入到 同一個連結點,織入的先后順序可能導致Aspect間發(fā)生沖突;或者兩個Aspect之間是一種 互斥的關系,不能同時織入到同一個基礎程序,等等。Aspect組合的語義沖突有可能發(fā)生于 Aspect和基礎程序之間,又可能發(fā)生于Aspect和Aspect之間。AOP中的行為沖突問題引起了廣泛的關注,產(chǎn)生了一些研究成果。但是大部分研 究都還存在一些不足1)契約檢查工具檢測不出全部違反契約的行為[8] ;2)開發(fā)出的用于 AOP的DBC (Design by Contract) [9]_工具主要用于驗證契約,而不是用于檢測Aspect組 合中的行為沖突[11] ;3)只檢測作用于同一個連接點的Aspect間的沖突[7][12]。隨著軟件 規(guī)模的擴大,以及Aspect數(shù)量的增加,不僅要解決Aspect間可能發(fā)生的沖突,而且要解決 Aspect和基礎程序間可能發(fā)生的沖突。同時,不僅要考慮多個Aspect作用于同一個連接點 的情況,而且要考慮Aspect作用于不同的連接點的情況。參考文獻[1] Kiczales, G. , Lamping, J. , Menhdhekar, Α. , etal. Aspect oriented programming[C] · In-Proceedings of EC00P' 97, Number 1241 in Lecture Notes in Computer Science, Springer Verlag,1997,220-242.[2] Elrad, Τ. , R. Fi Iman, A. Bader, etal. Aspect-Oriented Programming [J]. Comm. ACM,2001,44(10), special issue.
[3]Chengwan He,Zheng Li,Keqing He. Towards Trusted Aspect Composition. In !Proceedings of2008 International Conference on Computer Science and Software Engineering. Volume,Issue,8-11,2008,643—648.[4]Jyri Laukkanen. Aspect-Oriented Programming. Computer Science,Seminar paper,2008.[5] AspectJ Team. The Aspect J Programming Guide. 2003. http : //www. eclipse, org/aspectj/doc/released/progguide/[6]F. Tessier, M. Badri, L. Badri. A Model-Based Detection of Conflicts Between CrosscuttingConcerns Towards a Formal Approach. In International Workshop on Aspect-Oriented SoftwareDevelopment, Peking University, China, September 2004.[7]Pascal Durr, Tom Staijen, Lodewijk Bergmans,Mehmet Aksit. Reasoning About SemanticConflicts Between Aspects. In :EIWAS 2005 :2nd European Interactive Workshop on Aspects inSoftware.[8]Robert Bruce Findler, Mario Latendresse, Matthias Felleisen. Behavioral Contracts andBehavioral Subtyping. Foundations of Software Engineering, FSE 2001.pp. 229—236.[9]B. Meyer. "Design by Contract.,,in Advances in Object-Oriented Software Engineering,D. Mandrioli and B. Meyer, eds.Prentice Hall,Englewnod Cliffs,N. J. 1991,pp. 1-50.[10]Bertrand Meyer. Applying"design by contract,,· IEEE Computer Society Press, 1992,Volume25,IssuelO,Pages 40-51.[ll]David H. Lorenz, Therapon Skotiniotis. Extending Design by Contract for Aspect-OrientedProgramming. arXiv :cs/0501070vl [cs. SE]24Jan,2005.[12]Istvan Nagy, Lodewijk Bergmans,Mehmet Aksit. Composing Aspects at Shared Join Points. Workshop AID in 20th. EC00P. France,2006.
發(fā)明內(nèi)容
本發(fā)明所要解決的問題是針對上述現(xiàn)有技術而提出一種基于契約的AOP應用程 序中行為沖突問題的自動檢查方法,能在程序運行時檢查由于aspect組合導致的行為沖 突問題。本發(fā)明為解決上述提出的問題所釆用解決方案為一種基于契約的AOP應用程序 中行為沖突問題的自動檢查方法,其特征在于包括有以下步驟1)基于契約式設計思想,使用Java Annotation描述基礎程序和方面代碼的相關 契約,主要涉及前置條件和后置條件,織入的Aspect中advice的類型為before advice或 / 禾口 after advice ;2)根據(jù)繼承關系和Aspect的織入關系,抽取源代碼中的契約,通過斷言驗證程序 生成工具把已抽取的契約轉換成斷言驗證程序;3)執(zhí)行包含斷言驗證程序的目標文件,把織入某個Aspect之前的基礎程序視為
4父類型,織入該Aspect之后的基礎程序視為子類型,如果父類型和子類型之間滿足行為子 類型的條件,就可以保證織入Aspect后程序行為的正確性,從而在程序運行時實現(xiàn)行為沖 突的自動檢測。按上述方案,所述的行為子類型的條件是前置條件變?nèi)酰笾脳l件變強。按上述方案,所述的執(zhí)行包含斷言驗證程序的目標文件是指通過AOP語言編譯器 編譯包含斷言驗證程序的源代碼從而生成Java字節(jié)碼,使用Java執(zhí)行工具執(zhí)行包含斷言 驗證程序的目標文件,得到相關執(zhí)行結果和契約檢查報告。按上述方案,當多個Aspect作用于同一個連接點時,首先確定織入Aspect的數(shù)量 及其執(zhí)行的優(yōu)先級,在AOP語言AspectJ中,通過引入聲明declare precedence指定作用 于同一個連接點的advice執(zhí)行的優(yōu)先級,然后根據(jù)優(yōu)先級的高低依次織入每個Aspect。按上述方案,如果織入多個Aspect,當程序檢查第i個Aspect的契約時,首先要判 斷第i-Ι個Aspect的織入類型。本發(fā)明的有益效果在于基于契約式設計思想,研究基礎程序和織入Aspect后的 契約繼承機制,實現(xiàn)了 AOP系統(tǒng)中行為子類型的概念。使用Java annotation描述基礎程 序和方面代碼的相關契約,通過斷言驗證程序生成工具把基礎程序和方面代碼中的契約抽 取出來,然后把它們轉換成斷言驗證程序用于檢查是否違反了相關契約,從而可以在程序 運行階段實現(xiàn)Aspect組合中行為沖突的自動檢測,為Aspect的安全組合提供了保障,有利 于構建高可信的面向方面軟件。
圖1是行為沖突自動檢測流程。圖2是織入Aspect (before advice)前后程序之間的關系。圖3是織入Aspect (after advice)前后程序之間的關系。圖4是織入Aspect (before advice和after advice)前后程序之間的關系。圖5是多個Aspect作用于同一個連接點的例子(引自參考文獻[12])。
具體實施例方式下面結合實施例對本發(fā)明作進一步說明,但不能作為對本發(fā)明的限定。(1)基于契約式設計思想,使用Java Annotation描述基礎程序和方面代碼 (Aspect)(基礎程序和方面代碼統(tǒng)稱為源代碼)的相關契約,本發(fā)明主要涉及前置條件和 后置條件,織入的Aspect中advice的類型為before advice,after advice或者同時包括 before advice 禾口 afteradvice ;(2)假設Aspect作用于基礎程序中某個類的方法m,為了保證程序行為的正確性, ^/nA before advice>after 已dvice 同Β^ 只入 before advice/after advice Itfjp
滿足的契約分別如下表1、表2、表3所示。其中, !表示方面代碼中before advice的前置 條件;‘纟表示方面代碼中before advice的后置條件;a〖fe表示方面代碼中after advice的 前置條件;a〖L表示方面代碼中after advice的后置條件;mpM表示方法m的前置條件;mp。st 表示方法m的后置條件;一表示如果前者的條件滿足,則后者一定滿足。表中的第1列為織 入Aspect前程序需要滿足的契約,即方法的前置條件和后置條件;第2列為織入Aspect后
5程序依次要檢查的契約; 表1織入Aspect (before advice)前后程序需要滿足的契約
織入Aspect前需要織入Aspect后需要滿足的契
滿足的契約約(按順序)
權利要求
一種基于契約的AOP應用程序中行為沖突問題的自動檢查方法,其特征在于包括有以下步驟1)基于契約式設計思想,使用JavaAnnotation描述基礎程序和方面代碼的相關契約,主要涉及前置條件和后置條件,織入的Aspect中advice的類型為before advice或/和after advice;2)根據(jù)繼承關系和Aspect的織入關系,抽取源代碼中的契約,通過斷言驗證程序生成工具把已抽取的契約轉換成斷言驗證程序;3)執(zhí)行包含斷言驗證程序的目標文件,把織入某個Aspect之前的基礎程序視為父類型,織入該Aspect之后的基礎程序視為子類型,如果父類型和子類型之間滿足行為子類型的條件,就可以保證織入Aspect后程序行為的正確性,從而在程序運行時實現(xiàn)行為沖突的自動檢測。
2.按權利要求1所述的基于契約的AOP應用程序中行為沖突問題的自動檢查方法,其 特征在于所述的行為子類型的條件是前置條件變?nèi)酰笾脳l件變強。
3.按權利要求1所述的基于契約的AOP應用程序中行為沖突問題的自動檢查方法,其 特征在于所述的執(zhí)行包含斷言驗證程序的目標文件是指通過AOP語言編譯器編譯包含斷 言驗證程序的源代碼從而生成Java字節(jié)碼,使用Java執(zhí)行工具執(zhí)行包含斷言驗證程序的 目標文件,得到相關執(zhí)行結果和契約檢查報告。
4.按權利要求1所述的基于契約的AOP應用程序中行為沖突問題的自動檢查方法,其 特征在于當多個Aspect作用于同一個連接點時,首先確定織入Aspect的數(shù)量及其執(zhí)行的 優(yōu)先級,在AOP語言AspectJ中,通過引入聲明declare precedence指定作用于同一個連 接點的advice執(zhí)行的優(yōu)先級,然后根據(jù)優(yōu)先級的高低依次織入每個Aspect。
5.按權利要求4所述的基于契約的AOP應用程序中行為沖突問題的自動檢查方法,其 特征在于如果織入多個Aspect,當程序檢查第i個Aspect的契約時,首先要判斷第i_l個 Aspect的織入類型。全文摘要
本發(fā)明涉及一種基于契約的AOP應用程序中行為沖突問題的自動檢查方法,包括有以下步驟1)基于契約式設計思想,使用Java Annotation描述基礎程序和方面代碼的相關契約;2)抽取源代碼中的契約,通過斷言驗證程序生成工具把已抽取的契約轉換成斷言驗證程序;3)執(zhí)行包含斷言驗證程序的目標文件,從而在程序運行時實現(xiàn)行為沖突的自動檢測。本發(fā)明的有益效果在于可以在程序運行階段實現(xiàn)Aspect組合中行為沖突的自動檢測,為Aspect的安全組合提供了保障,有利于構建高可信的面向方面軟件。
文檔編號G06F11/36GK101957792SQ201010262900
公開日2011年1月26日 申請日期2010年8月26日 優(yōu)先權日2010年8月26日
發(fā)明者何成萬, 余秋惠, 姚峰, 張慧, 張立軍, 李征, 胡宏銀 申請人:武漢工程大學