《武汉工程大学学报》  2011年09期 101-104   出版日期:2011-09-30   ISSN:1674-2869   CN:42-1779/TQ
一种基于KAOS和XML的横切关注点识别方法


0引言横切关注点会造成交织和分散的问题,降低了软件的可读性、可维护性和可复用性.关注点分离作为软件开发中重要准则之一,软件系统一般由多个关注点组成,其中包括核心级关注点和系统级关注点.核心级关注点指与业务逻辑相关的主过程,系统级关注点是指业务逻辑之外的过程,如日志,安全,性能等.而某些系统级关注点会表现出横切行为,即一些核心级关注点需要使用若干个系统级关注点提供的服务,同时某些系统级关注点也影响多个核心级关注点的状态[1].具有横切行为的关注点称为横切关注点,横切关注点有两个重要特点:(1)交织(Tangling):横切关注点参与某关注点的实现(2)分散(Scattering):横切关注点分散在多个关注点之中横切关注点妨碍了计算机软件设计中的低耦合[2],面向方面需求工程(Aspect Oriented Requirement Engineering,AORE)[3]的主要目标是需求阶段横切关注点的分离.在目前AORE提出的各种方法中,有的只能识别非功能性需求而具有局限性[4],基于Petri网的方法尚不能表明运用于大中型系统中[5].本文提出一种基于KAOS(knowledge acquisition in automated specification)和XML(extensible markup language)的横切关注点识别方法.首先利用KAOS中的目标模型(Goal Model)在不同层次上对待开发系统进行需求建模.高层次上将待开发系统分解为各个子系统,以保证对横切关注点进行系统的识别;低层次上将高层次目标精细化,然后将需求模型存储于XML文件,最后利用XQuery实现的横切关注点识别算法完成对横切关注点的识别.1横切关注点的识别方法及应用横切关注点的识别分3步:建立目标模型、存储目标模型、横切关注点识别.本文将以某酒店管理系统中住宿管理子系统[5]来详细描述横切关注点的识别过程.该子管理系统的需求如下所述:(1)顾客请求预定房间:在接受预定前,首先检查是否有空的房间,若有空房间则分配房间并创建预定记录,接受顾客预定请求,否则拒绝顾客请求.(2)顾客请求入住酒店:顾客在请求入住时,检查顾客是否有预定房间,若有则消除预定记录;若没有则检查是否有空房间,若有则为顾客分配房间,接受顾客入住请求并为顾客创建账单,否则拒绝顾客入住请求.(3)顾客请求离开酒店:顾客在请求离开前,首先检查顾客是否有入住记录和未付费的账单,若有则计算账单、为顾客结账、消除入住记录,同时接受顾客离开请求.(4)系统需提供日志功能:系统中任何操作需要被记录并保存.1.1建立需求目标模型根据待开发系统的需求描述运用KAOS建立目标模型(Goal Model).目标是KAOS中的重要概念,KAOS是需求工程中建立需求模型的方法学[6].在KAOS建立的层次化目标模型中,除了最顶层的战略目标外每个层次中的目标都能被上层目标证明其存在的合理性,也就是为什么该目标存在于模型中;同时除最底层的叶子目标外每个层次中的目标都能被一组子目标精细化,也就是应该怎样实现此目标.通过将待开发系统的战略目标精细化为各层次子目标,当子目标精细化到其责任能够被分配到主体(Agent)时,就得到了目标模型,此时最底层的叶子目标也称为不可精细化的子目标.根据住宿管理子系统需求描述而建立的基于KAOS的目标模型(Goal Model)如图1所示.第9期涂成茂,等:一种基于KAOS和XML的横切关注点识别方法
武汉工程大学学报第33卷
图1酒店管理系统的目标模型
Fig.1Goal Model of Hotel Manager System 1.2存储目标模型在此步中需将目标模型映射至XML文件中.XML是一种元标记语言,是一套可以自定义特定领域语义标记的规范,这些标记将文档分成许多部件并对这些部件加以标识,利用XML可以方便描述对象及其关系[7].首先将Goal Model层次结构映射至XML模式文件中,然后根据XML模式文件将Goal Model模型完整映射至XML文件中.在将Goal Model层次结构映射至XML模式文件时,须依据关注点流、关注点、元关注点的语义创建XML元标记,其中包括标记名称和类型,其映射关系如表1所示,根据表中的自定义元标记而生成的HotelManager.xml文件如图2所示,其中存储了酒店管理系统需求模型.1.3横切关注点识别在此步中,将依据横切关注点的定义给出横切关注点识别算法.
1.3.1横切关注点定义依据目标模型中各层次目标语义,现给出关注点及横切关注点等概念定义:(1)关注点:目标模型中任一层次中一个特定的目标.(2)元关注点:目标模型中自上而下精细化过程中不可精细化的子目标.(3)关注点流:目标模型中某目标被精细化后的子目标集合,规定元关注点的关注点流为其自身.(4)横切关注点:在目标模型同层次中,任意两两关注点的关注点流交集中的子目标.(5)关注点扩散度:关注点在目标模型中出现的次数.
表1目标模型与XML元标记映射关系
Table 1Mapping between Goal Model and
?XML Metaconcern
元标记Goal Model<StrategicalGoal/>酒店管理<KernaGoal/>住宿管理、其它管理<Concern/>预定房间、入住登记、退房登记<ConcernFlow/>{检查剩余房间、创建预定并分配房间、保存日志}、{…}、…<MetaConcern/>检查剩余房间、检查预定记录、计算账单、保存日志、…1.3.2横切关注点识别算法根据横切关注点定义,则显然有如下结论:关注点是横切关注点与关注点的扩散度至少大于1互为充要条件,推导如下:(1)充要性:若关注点Concern为横切关注点,则根据横切关注点定义,C1必然出现于至少2个关注点的关注点流中,由此可以推出C1的关注点扩散度必然大于1.(2)必要性:若关注点Concern的扩散度至少大于1,则根据扩散度的定义,该关注点必然出现于至少2个不同的关注点流aConcernFlow与bConcernFlow中,令与aConcernFlow与bConcernFlow相对应的关注点分别为aConcern和bConcern,因此aConcern与bConcern的关注点流交集中至少包含Concern,因此Concern为横切关注点.第9期涂成茂,等:一种基于KAOS和XML的横切关注点识别方法
武汉工程大学学报第33卷
根据以上结论,有如下横切关注点识别算法:(1)取3个目标集合C1,C2,C3并置为空,C3用于置入横切关注点;(2)将需求模型中的目标逐一划入集合C1;同时将其逐一划入集合C2,但对于重复元素只放入一次; (3)计算C2中各个元素的扩散度.遍历C2集合中的元素,并计算该元素在C1集合中出现的次数;(4)将扩散度大于1的目标划入横切关注点集合C3;算法所识别的横切关注点存在于C3中.图2XML中的目标模型
Fig.2Goal Model in XML 1.4方法应用及比较此节给出算法实现、案例应用以表明方法的可行性和稳定性.
1.4.1算法实现运用1.3节中算法思想并基于XQuery的算法实现如图3所示,其中行5定义了元关注点层次上去除重复元素后的关注点集合C2,行7统计了C2中各元素在文档中出现的次数,行8设定了选入C3集合的条件,行10至行13定义了C3集合中的元素及其扩散度.
图3基于XQuery算法实现
Fig.3Algorithm implemented by XQuery1.4.2方法可行性实验此小节将识别算法运用于酒店管理系统中表明方法的可行性.图4显示了在对住宿管理子系统运用算法后元关注点(MetaConcern)层次的横切关注点识别结果.图4元关注点层次横切关注点
Fig.4Crosscutting Concerns in MetaConcern Level由图4可以看出,住宿管理子系统中有检查剩余房间和保存日志2个横切关注点,它们的扩散度分别为2和3,与各个横切关注点相关联的连接点如表2所示.其中保存日志是典型的系统级横切关注点,而检查剩余房间作为核心级关注点,但它降低了预定房间与入住登记两关注点的内聚度,因此是横切关注点.为了与图4进行比较,图5显示了系统中的其它关注点及其扩散度.表2横切关注点的连接点
Table 2Joinpoint of crosscutting concerns
横切关注点扩散度连接点检查剩余房间2预定房间、入住登记保存日志3预定房间、入住登记、退房登记图5其它关注点及其扩散度
Fig.5NonCrosscutting Concerns and Dispersity1.4.3方法稳定性实验通过实验表明在系统需求发生变更后方法所具有的稳定性.在酒店管理系统中增加如下需求:系统中任何操作之前需要做权限检查.本文方法对此需求变更所做的处理:首先在需求模型中变更对应的需求,然后重新映射于XML文件中,算法实现不需要做任何的变更.其处理结果如图6所示.
图6需求变更后的横切关注点
Fig.6Crosscutting Concerns after Updating Requirements1.4.4方法比较此小节通过与国外的研究方法的比较进一步表明本文方法的优越性.A.Sampaio等人的研究方法[4]只能识别保存日志横切关注点,其局限性是显而易见的;而基于Petri网的方法[5]识别出的横切关注点包括了需求模型中所有的关注点,因此该方法因识别结果过于宽泛而缺乏实际意义.2结语以上叙述的需求阶段横切关注点识别方法,首先利用Goal Model对系统进行建模,然后结合横切关注点及扩散度的定义给出了横切关注点识别算法.尽管实验结果显示此方法能识别横切关注点,但却不能识别横切关注点的类型,即不能确定横切关注点是属于before型,还是after型,甚至around型,导致此方法不能对需求阶段横切关注点的封装提供支持,因此未来仍需对本文方法进行更多的研究.参考文献: