计算机研究与发展ISSN1000—1239/CN11—1777/TPJournalofComputerResearchandDevelopment45(8):1408—1416,2008横切侵入性和横切不变性吕嘉1应晶1’2吴明晖1’2蒋涛11(浙江大学计算机科学与技术学院杭州310027)2(浙江大学城市学院计算机与计算科学学院杭州310015)(samlv2000@163.corn)CrosscuttingInvasionandCrosscuttingInvariantLuJial,YingJin91”,WuMinghuil”,andJiangTa011(CollegeofComputerScienceandTechnology,ZhejiangUniversity,Hangzhou310027)2(SchoolofComputerandComputingScience。CityCollegeofZhejiangUniversity,Hangzhou310015)AbstractOwingtOthecharacteristicsofquantificationandobliviousnessofaspect—orientedlanguage,modularbehavioralanalysisandmodularreasoningaremoredifficultthanthatofthetraditionalparadigms.Todealwithcrosscuttingsafetyandcrosscuttingqualityinaspect—orientedlanguage,crosscuttingmodulesandaffectedmodulesareconstrainedwithpre-conditionsandpost—conditions,butassigningblameforpre-conditionandpost—conditionfailuresduringtheprocessofcrosscuttingposessubtleandcomplexproblems.Toanalyzebehavioraleffectofacrosscuttingconcern,theprogrammershouldconsidertheaspectitselfandthepartofthesystemitaffects.Furthermore,whenseveralaspectsarewovenatasamepointcut,theanalysisofpossibledangerousinterferencesbecomesmorecomplex.Similartothenotionofbehavioralsubtypinginobject—orientedlanguage,anotionofcrosscuttinginvariantisproposed.InordertOcheckthebehavioralerrorsofviolatingcrosscuttinginvariabilityandfourothersimplebehavioralerrors,analgorithmbasedonsoftwarebehavioralcontractsisproposed.Toformalizethisalgorithm,crosscuttingcontractcalculusandasetofcontractelaborationrulesarepresented.Thecontractsoundnesstheoremwhichensuresthecorrectnessofthecontractelaborationprocessisstatedandproved.Anexampleisalsorepresentedtoshowhowtousethesecontractelaborationrulestocheckandanalyzethebehavioralerrors.Keywordsaspect—orientedlanguage;crosscuttingsafety;crosscuttingquality;crosscuttinginterference;modularanalysis摘要由于面向方面语言的不知觉性和多量化特点,模块分析和模块推理比传统方法学更加困难.为了解决面向方面语言的横切安全和横切质量问题,使用前提条件和后验条件约束横切模块和被横切模块,然而在横切过程中寻找前提条件和后验条件的失败原因十分微妙和复杂.为了分析一个横切关注点的行为影响,程序员需要考虑方面本身和这个方面影响的系统其他部分.当几个方面编织在同一个切入点,危险干扰分析变得更加复杂.类似面向对象语言中的行为子类型概念,引入横切不变性概念.为了检查由于破坏横切不变性引起的行为错误和其他4种简单行为错误,基于软件行为契约提出一个横切不变性检测算法.为了形式化这个算法,提出CrosscuttingContract演算和一组契约求解规则,并通过定义和证明契约完备性来保证契约求解过程的正确性.还使用一个例子说明如何使用这些契约求解规则检测和分析行为错误.收稿日期:2007-06—04;修回日期:2008—01—15基金项目:霍英东教育基金会资助项目(94030)万方数据吕嘉等:横切侵人性和横切不变性1409关键词面向方面语言;横切安全;横切质量;横切干扰;模块分析中图法分类号TP311.1面向方面语言[1]的出现,有效地模块化了横切关注点,解决了由于关注点分离引起的代码分散和代码混杂问题.由于横切不知觉性和多量化[2],面向方面语言的模块行为分析和模块推理比传统语言更加复杂.当程序员实现一个横切关注点,必须保证其余程序部分不受这个横切关注点的干扰,目前的主流面向方面语言还没有机制有效支持这个要求,引起横切关注点实现与系统其他部分紧耦合,从而降低面向方面软件系统的质量和安全性.许多学者研究在保持面向方面语言基本特性的前提下,通过维护传统的模块...