基于需求依赖关系识别横切关注点

2018-02-28 02:31温赵欣关慧贾成真
电子技术与软件工程 2018年20期
关键词:交织

温赵欣 关慧 贾成真

摘要

在面向方面需求工程中,横切关注点是一类需要单独识别的特殊关注点,因为它具有交织和分散的特性。本文提出了一种基于需求依赖关系来识别横切关注点的方法。首先定义了需求依赖关系,并提出了一种新的需求依赖关系分类方法;其次基于定义的需求依赖关系及分类,分析需求和关注点之间的依赖关系并建立依赖关系矩阵;最后通过横切关注点的交织和分散特性以及对得出的依赖关系矩阵进行运算,得出识别出的横切关注点。本文最后通过实际案例的实验结果证明了此方法识别横切关注点的可行性和有效性。

【关键词】横切关注点 需求依赖关系 面向方面 需求工程 分散 交织

面向方面软件开发(AOSD)已经成为解决复杂软件系统设计和开发的一个强有力的选择。然而,由于现代软件系统的复杂性,关注点的分离不可避免地导致横切关注点[1,12]的问题,这通常被描述为分散(scattering)和交织(tanglillg)[2]。AOSD提供新的方式来建模横切关注点,允许其单独的设计和实现,并与系统的组件进一步集成(编织)。

面向方面软件开发(AOSD)面临的主要挑战在方面识别。Themeooc[3]方法提供了对面向方面软件开发中分析和设计阶段的支持,但缺少对非功能需求的有效处理。文献[4]提出了基于聚类的横切关注点的识别方法,其通过分析各需求间的相似度及二次聚类来识别横切关注点,但操作复杂不便于应用。V型目标模型[5]虽然较好地利用了横切关注点扩散的特点,但其只能识别非功能性横切关注点,而没有实现功能性横切关注点的识别。

目前随着软件行业的发展速度加快,软件之间的竞争也越来越大,各种软件不断推出新的组合业务,导致业务之间的横切关注点越来越多,关注点之间的关系,越来越复杂。这样就给业务变更带来巨大挑战,即在软件生命周期中,如何客观准确识别横切關注点的依赖关系和影响范围成为识别横切关注点的重中之重。在这样的背景下,我们采取基于需求依赖关系的方法来识别横切关注点。

1 需求依赖关系及分类

1.1 需求依赖关系

需求依赖关系指的是同一个系统中的一个需求与另一个需求之间存在的依赖关系,本文考虑的是需求与关注点之间的依赖关系。关注点(concem)指的是整个软件开发中出现的特定的目标、概念或者兴趣域[6]。横切关注点指的是软件开发中一些具有横越多个模块的行为的一类特殊关注点。也可以把横切关注点理解为一个需求的集合,该需求集合散乱的分散在其他需求集合中。所以我们在本文中为了更好的分析需求之间的依赖关系,我们考虑的是需求与关注点之间的需求依赖关系。在[7,8,9]的基础上,本文重新总结并定义了的9种依赖关系,并对这9种关系进行了分类和举例说明。

(1)前提(precede):需求A在需求B的前面,A是B的前提。例子:‘导入音乐是‘播放音乐的前提。

(2)相似(be similarto):两个需求分享相似的数据信息,这两个需求彼此相似。例子:‘通过姓名搜索学生基本信息和‘通过学号搜索学生基本信息相似。

(3)解释(exPlain):描述需求之间的构成关系。例子:‘某安全需求是‘授权需求和‘验证需求的组合。

(4)影响(influence):一个需求对另一些需求有影响关系。‘例子:法律的需求受‘工厂或者软件开发的生意类型的影响。

(5)异常(be_exception_of):一个需求描述另一个需求的异常事件。例子:‘一个用户输入一个空用户名,系统提示‘请输入正确的用户是‘一个用户输入他的用户名和密码,接下来系统验证输入信息的异常事件。

(6)冲突(conflict):实现一个需求逆向的影响另一个需求。例子:增加系统安全功能可能和系统功能冲突。

(7)发展(evolve into):一个需求B是另一个需求A的新版本,A发展成B。例子:‘用户用电脑听歌发展为‘用户用手机听歌。

(8)花费(increase/deereas_cost_of):一个需求的实现能够增加/减少另一个需求的花费。例子:如果一个需求声明了‘响应需求小于5秒,它减少了需求的时间花费。

(9)价值(increase/decrease_value_of):一个需求的实现能够增加/减少另一个需求的价值。例子:用户能在听音乐的同时浏览照片。在这个事件中‘用户听歌增加了满意度,因为它增加了‘浏览照片需求。

1.2 一种新的需求依赖关系分类

如图1所示,通过分析和研究以上需求依赖关系之间的异同,本文提出的依赖关系模型在概念层次上分为两大类,分别是内在需求依赖关系和附加依赖关系。内在需求依赖关系又分成两小类,分别为业务相关和演化;附加需求依赖关系也分成两小类,分别是价值和成本。内在需求依赖关系描述的是需求的基本关联状态和需求的语义以及需求的结构信息。附加的需求依赖关系是指特定软件开发活动存在的关系。

根据内在需求依赖关系与附件需求依赖关系的定义与分类,业务相关依赖关系包括前提、相似、解释、影响、异常、冲突,演化依赖关系有发展,价值需求依赖关系包括价值,成本需求依赖关系包括花费。通过对这些依赖关系分类,我们可以更直观的判定关注点和需求之间的相互作用和影响范围。使开发人员可以在横切关注点更改的最初迅速找到与之相关的关注点,便于开发人员掌握工作的重点。

2 横切关注点的特征和识别方法

2.1 横切依赖关系分析

横切关注点的识别通常要涉及到两个不同领域之间存在的追溯依赖关系。这两个域,一般称为源和目标,例如关注点和需求陈述。从数学的角度来看,源和目标通过映射或追溯关系相互关联,用可追溯矩阵来表示。在文献[2]中,作者利用一种关键字匹配技术来建立关注点之间的关联,而本文则用需求依赖关系来连接源和目标之间的相互关联,其可以按照如下所述形式化。

根据图2,存在从源域到目标域的多值函数f',如果f'(s)=t,则s和t之间存在追溯关系。同样的,定义另一个从目标域到源域的多值函数g',该函数可以被认为是f‘的一个特殊的反向函数。如果f'不是一个超射,则认为目标是f'的范围。显然,f'和g'可以表示为单值函数,考虑到共域是目标和源的非空子集的集合。

Let f:Source→(Targct)和g:Target→(Source)是由以下定义的新函数:

分散、交织和横切是这个函数的一些特殊情况,且横切是分散和交织的特殊组合

定义1分散(scattering)。一个元素s∈Source是分散的,如果card(f(s))>1,其中card(f(s))是指f(s)的基数。换句话说,在源和目标之间的映射中,源元素与多个目标元素有依赖关系时,发生分散。

定义2交织(tangling)。一个元素t∈Target是交织的,如果card(g(t)>1。在源和目标之间的映射中,目标元素与多个源元素具有依赖关系,发生交织。

定义3横切(Crosscutting)。让s1,s2ESource,且s1≠s2,如果card(f(s1))>1,t∈f(s1):s2 Eg(t),s1横切s2。.换句话说,横切发生在源和目标之间的映射中,源元素分布在目标元素中,并且在这些目标元素中的至少一个与其他源元素交织在一起。

根据前面的定义,可以得出:让s1,s2∈source,且s1≡s2,如果card(f(s1))>1且f(s1)∩f(s2)≠,则认为s1横切s2。

2.2 依赖矩阵建立

本文用一种可追溯矩阵的依赖矩阵来表示函数f。表1给出了一个具有5个源元素和6个目标元素的依赖关系矩阵的示例,用行来表示源元素,用列来表示目标元素。单元中的A1表示对应列的目标元素寻址对应行的源元素(在表1中,s1被映射到t1和t4,这意味着t1和t4寻址s1。基于这个依赖关系矩阵,导出了分散矩阵(表2)和交织矩阵(表3))。

在分散矩阵中,如果该行中的源元素被分散(映射到多个目标元素),则行仅包含从源到目标元素的依赖关系;否则行仅包含零(无分散)。

在交织矩阵中,如果该行中的目标元素被交织(映射到多个源元素),则行只包含依赖关系从目标到源元素;否则行仅包含零(没有交织)。

通过分散矩阵和交织矩阵的乘积得到横切积矩阵。横切积矩阵示出横切关系的数量,并用于推导最终横切矩阵。表4和表5分别显示了横切积矩阵和横切矩阵的例子。横切积矩阵不是二进制矩阵,因为它包含分散和交织矩阵乘积的结果。横切矩阵是通过将横切积矩阵转换成二进制矩阵来获得的。在横切矩阵中,矩阵单元只表示横切的发生;它从横切的数量中抽象出来。通过一个简单的转换,横切积矩阵ccpm可以导出横切矩阵ccm:ccm[i][k]-if(ccpm[i][k]>0)∧(i≠j)then1else0。使用这个简单的转换,任何大于1值被转换1并且对角线的值被设置为0(显然源元素不能横切本身)。横切关注点判断公式为。cc=∑i=1|s|ccmki(k为行),如果cc>0,则为横切关注点。

图3示出了获得最终横切矩阵的整个过程。

2.3 横切关注点识别

识别横切关注点主要步骤被概括并总结如下:

2.3.1 识别源元素

需求通常表示在多个文件中,它们是从与不同的利益相关者的访谈中提取的。分析这些需求以确定主要关注点:功能性关注点和非功能性关注点(NFCS)。为了识别NFCS,本文使用一个目录,其中定义了常见的NFCS。

2.3.2 识别目标元素

需求通常表示在多个文件中,它们是从与不同的利益相关者的访谈中提取的。

2.3.3 建立依赖关系矩阵

拿关注点和需求分别得作为源和目标,并通过需求依赖关系来建立它们的追踪关系。

2.3.4 通过矩阵运算识别横切

几个简单的矩阵运算(图3),经过计算后在在需求阶段获取横切关注点。

3 实例分析及比较

3.1 案例分析

为了说明这一过程,本文应用了文献[10]中提出的案例的简化版本,CFVS(aconcurrent file versoning system)。CFVS系统不仅支持维护不同版本的项目文件,还支持一组开发人员在同一个项目上工作,同时修改同一个文件。在这个示例中,开发人员可以下载软件项目(check-out)的版本。在更改项目的当前版本之后,开发人员可以将项目的新版本上传到CFVS系统(check-in)。表6列出了系统必须完成的主要需求表7显示了根据需求提取的关注点和非功能关注点。

接下来分别用关注点和需求作为源和目标,并根据第一章中定义的需求依赖关系,建立了需求依赖关系矩阵(表8)。根据3.1 的定义计算出横切积矩阵(表9),从而导出横切矩阵(表10)。根据文中横切关注点判断公式cc=∑i=1|s|,ccmki(k为行),得出c2,c4,c7,c8,c10,c11,c12,c13,c14,c15,c16,c17为横切关注点。

在上述例子中,本文通过对CFVS系统的关注点和需求的需求依赖关系分析给出了对于的需求依赖关系矩阵,并通过该计算得到了横切关注点集。通过该方法计算出的横切关注点与实际开发中得到的结论一致,验证了本文方法的可行性。

3.2 讨论

此小节通过与国外的研究方法的比较进一步表示本文方法的可行性。与Conejero J M等人的研究方法[11]相比,他们识别出了10个横切关注点(表12),我们识别了13个横切关注点。原方法采用的是一个横切模式来识别横切关注点。通过对关注点和用例的关键词的比对,来自动的建立源与目标的映射关系,并通过关注点之间的extend和include关系来校验和矯正自动建立的映射关系。而我们采用了需求依赖关系来链接源于目标之间的映射,这样可以更全面的分析每种关注点和需求之间的全面的关系,找出了找出更多的隐藏的横切关注点。与Theme/Doc和V型目标模型方法比较,我们可以兼顾的识别功能的和非功能的横切关注点。

4 结束语

本文首先基于横切依赖关系的概念框架引入了重新定义的需求依赖关系,并通过需求依赖关系建立需求依赖关系矩阵;通过依赖矩阵计算识别横切关注点。最后通过本文的方法对CFVS系统进行分析,验证了本文方法的可行性。本文方法的优势在于只要分析需求依赖关系就可以识别横切关注点,既包括功能性横切关注点,也包括非功能关注点,还可以准确的通过需求依赖关系来确定横切关注点的影响范围。为开发人员在需求分析阶段识别横切关注点提供了一个好的方法。希望下一步在需求依赖关系的识别上可以在不影响依赖关系的全面性上减少开发人员在需求依赖关系上的判断所花费的时间,让横切关注点的识别即准又快,可以在大型开发工程中易于应用。

参考文献

[1]FILMAN R,ELRAD T,CLARKE S.Aspect-Oriented Software Development[J].InAspect-Oriented Software Development,2003,43(2):19-26.

[2]BERG K V D.Analysis of crosscuttingin early software developmentphases based on traceability(M]//Transactions on Aspect-OrientedSoftware Development Ⅲ.SpringerBerlin Heidelberg,2007:73-104.

[3]BANIASSAD E,CLARKE S.Theme:AnApproach for Aspect-Oriented Analysisand Design[C]//InternationalConference on Software Engineering,2004. ICSE 2004.Proceedings.IEEE,2004:158-167.

[4]DUAN C,CLELAND-HUANG J.A ClusteringTechnique for Early Detection ofDominant and Recessive Cross-Cutting Concerns[C]//Aspect-Oriented Requirements Engineeringand Architecture Design,2007.EarlyAspects at ICSE:Workshops in.IEEE,2007:1-1.

[5]YU Y,MYLOPOULOS J.From Goals toAspects:Discovering Aspects fromRequirements Goal Models[C]//Proc.IEEE International RequirementsEngineering Conference.2004:38-47.

[6]Moreira A,Rashid A,Araujo J.Multi-Dimensional Separation of Concernsin Requirements Engineering[C]//IEEE International Conference onRequirements Engineering.IEEEComputer Society,2005:285-296.

[7]MANG H,LI J,ZHU L.Investigatingdependencies in software requirementsfor change propagation analysis[J].Information&Software Technology,2014,56(1):40-53.

[8]HARTONG M,GOEL R,WIJESEKERA D.Security requirement derivation bynoun——verb analysis of use——misusecase relationships:a case studyusing positive train control[M].Springer-Verlag New York,Inc.2014.

[9]SOOMRO S,HAFEEZ A,SHAIKH A.Ontology B a s e d RequirementInterdependency Representation andVisualization[M]//CommunicationTechno10Gies,Information Securityand Sustainable Development.SpringerInternational Publishing,2013:259-270.

[10]TEKINERDOGAN B,AKSIT M,HENNINGER F.Impact of Evolution of Concerns inthe Model-Driven Architecture DesignApproach[J].Electronic Notes inTheoretical Computer Science,2007,163(02):45-64.

[11]CONEJERO I M,HERNANDEZ J,JURADOE.Mining early aspects basedon syntactical and dependencyanalyses[J].Science of ComputerProgramming,2010,75(11):1113-1141.

[12]何成萬.横切关注点管理中的若干关键问题综述[J].计算机科学,2016,43(07):7-12.

猜你喜欢
交织
幽绿秘影
“新”与“旧”的交织 碰撞出的魅力“夜上海”
几何映射
交织冷暖
一种改进的块交织方法及FPGA实现
金融骗局虚实交织
奥运梦与中国梦交织延展
PTT/桑蚕丝交织物的手感特征
互通式立交交织区研究
IDMA系统中交织器研究现状