APP下载

一种基于目标转换的用例建模方法

2014-07-03林郁峰陈中育骆正平吴星同

计算机与现代化 2014年7期
关键词:关注点用例文档

林郁峰,陈中育,骆正平,吴星同

(浙江师范大学数理与信息工程学院,浙江 金华 321004)

0 引言

对于软件需求,研究人员提出了许多捕获手段和建模方法,其中用例(Use Case)[1-2]作为重要需求建模工具被广泛使用。用例驱动的需求建模方法优点在于:开发者站在用户视角观察将要开发的系统[3],抽象出系统中的参与者(Actor),将一系列场景抽象成用例。在实际应用中,用例建模也暴露出一些缺点,如:用例建模对参与者及其场景挖掘没有一套系统方法;用例之间存在相互交错情况,其粒度难以把握。文献[4]提出将“缠绕”需求模块化,有效改善了用例之间的交错行为。文献[5]提出了面向目标的需求分析法,将目标看作是需求来源,以目标作为需求获取的基本线索,采用文本、采访等手段诱导需求提供者按照目标的分解、精化和抽象关系逐步构建系统,从而保证需求的完整性。文献[6]将目标和场景与用例结合,以目标作为起点,场景加以诱导,配合需求分析员进行用例建模。

然而,文献[4-5]只是针对用例的单个方面问题给出解决方案,文献[6]虽然对用例的2个缺陷都有所改进,但其需求从获取到建模的整个过程过度依赖自然语言,通过讨论分析的方法最终由需求分析员进行需求建模,识别与分析的过程耗费时间,且不同人讨论得出的结论不尽相同。为此,本文基于目标转换的用例建模方法,在目标基础上,将面向方面[7]的思想融入到用例驱动的需求建模中,采用可扩展标记语言XML存储目标模型、识别关注点来构建用例模型,该方法不仅解决了用例来源不明、用例间相互交错等问题,且在用例需求建模过程中,将分析方法总结成转换算法,避免过度依赖自然语言的情形。

1 相关技术

1.1 目标模型

目标模型是1个树形图[8-10],高层目标是指系统目标,表示最粗粒度目标。例如,1个图书管理系统,它的高层目标可以是提供便捷的图书服务。目标是可以逐层分解的,图书管理系统可以分解出借书、还书、付费等子目标,且各个子目标能够继续被分解。参照文献[6],本文采用的4层目标模型如下:

1)业务目标层(Business Goal)。识别待开发系统的整体目标,描述为什么开发系统。

2)服务目标层(Service Goal)。描述系统提供的不同服务,它们共同实现业务目标。

3)交互目标层(Interaction Goal)。服务目标的进一步细分,描述服务中特定的情节。

4)内部目标层(Inner Goal)。完成交互所需的动作或动作序列。

1.2 可扩展标记语言

XML是1种元标记语言[11],通过标记语言将文档切分,并对每个部分加以标识。本文选用XML语言存储目标模型的原因是:1)XML标签按照顺序进行嵌套,从标记的最外层到最内层能够很好地对应目标模型的高层到低层,且XML标签能够对应目标名称;2)XML作为1种存储数据的工具,能够通过查询语言实现简单的数据索引、查找、排序等功能,为目标模型的转化提供支持;3)XML可扩展性好,其简单性使其极易在任何程序中读写数据,为需求建模工具的开发提供了便利。

2 用例建模方法

2.1 基于目标转换的用例建模方法

文献[6]提出的基于目标-场景的需求分析方法中,采用表格模板作为驱动,通过分析人员的引导将用户需求转化为目标和场景树。目标和场景被用户认可后,分析人员根据现有目标场景总结出1套用例描述规则。根据描述规则,用户协助需求分析员将每个用例的相关信息(名字、参与者、前置条件、后置条件、相关用例)及事件流填入用例表格。通过“目标与场景关系图”导出“目标-场景到用例的转化规则”,其工作流程如图1所示。

图1 目标-场景需求分析法的工作流程

虽然这种方法指出了用例建模的不足并分别对它们进行了改进,但是其用例模型转化过程过分依赖于自然语言,自然语言存在二义性。本文提出基于目标转换的用例建模方法,希望改进上述方法中过分依赖自然语言的情形,提高模型转化效率和准确度。将目标作为用例建模的先决条件,主要研究从目标模型到用例模型之间的转换,在目标和用例之间构造1个转换器,其输入是目标模型,输出为用例模型。该方法的工作流程和转换器结构(虚线框)如图2所示。

图2 基于目标的用例建模方法

本文方法的工作原理如下:

1)根据目标模型和XML的相似性,制定映射表。

2)给出关注点识别规则,根据规则总结出XML转换算法。

3)根据映射表,将目标映射为XML文档。

4)根据XML转换算法,用XQuery编写程序,在XML文档中识别出关注点。

5)将核心关注点和横切关注点转化为用例和包含用例,并明确其关联性,得到用例模型。

2.2 XML 转换算法

本文的4层目标模型如图3所示。

图3 4层目标模型

按照业务目标层到内部目标层的顺序,其对应的映射表(表1)中给出了4个XML元标签的定义,即:<BusinessGoal>作为根元素,其对应的业务目标层在4层目标模型中是最高层;<InnerGoal>对应于内部目标层,是最底层的元素。每个元素标签及其关闭标签之间包含了诸如<ServiceGoalName>、<InnerG-oalName>的名称标签,这类标签包含的文本内容就是当前目标名称。例如<ServiceGoal>标签及其关闭标签 <ServiceGoal/>之间包含了4对 <Service-GoalName>标签,表示服务目标层中有4个目标存在。根据映射表,目标模型树形图能够映射成XML,以文档的形式存储下来。

表1 XML映射表

在4层目标模型中,业务目标是系统的最高目标,服务目标层表示系统所提供的不同服务,交互目标层描述的是提供服务的场景序列,而内部目标则是场景的一些事件流。由于需求分析阶段相同的事件流可能分布在不同的需求模块中,本文借鉴面向方面编码(AOP)[12-14]的思想,把这类需求模块叫做横切关注点,而那些相对独立的、能表示业务流程的需求模块,称之为核心关注点[15]。在1个用例中,横切关注点和核心关注点分别对应包含(或扩展)用例和对等用例。包含用例往往分布在各个对等用例中,在用例建模过程中反复出现使得用例变得复杂而冗长。如果能够识别XML文档中的横切关注点和核心关注点并对横切关注点进行建模,就能识别包含用例,使对等用例保持分离,控制用例粒度,改善用例交错的问题。根据文献[6]中的用例转化规则,将识别层次锁定在目标模型的第3、4层,根据XML映射表,给出相应的XML转换规则和算法。

2.2.1 XML 转换规则

1)识别核心关注点:识别交互目标,它们是核心关注点。

2)识别横切关注点:根据父节点个数,筛选内部目标。

由于目标模型中父目标下不会包含相同的子目标,其对应的XML文档中,同一父元素下也不会出现重复子元素。所以只需判断内部目标出现次数即可筛选出横切关注点,这里把内部目标中横切关注点以外的识别为原子关注点,它们是核心关注点中无交错的部分。

2.2.2 XML 转换算法

1)遍历 XML文档,找到 <InteractionGoalName>,将其标注为<CoreConcerns>并返回。

2)判断所有<InnerGoalName>标签下的文本内容。

a)将扩散度(出现次数)大于1的标签标记为<CrossCuttingConcerns>并返回。

b)将扩散度等于1的标签标记为 <AtomConcerns>并返回。

通过XML转换算法,识别出了XML文档中的核心关注点、横切关注点以及原子关注点,并分别以<CoreConcerns>、<CrossCuttingConcerns>和<Atom-Concerns>标签标记。

核心关注点在用例模型中表示对等用例,横切关注点在被识别前分布在多个对等用例中,破坏了对等用例的独立性。这里将横切关注点从核心关注点中抽离,组成包含用例,降低了对等用例的耦合度,使对等用例保持分离。而原子关注点则是组成每个对等用例的事件流,不出现在用例模型中。表2反映了元标记、关注点、用例之间的映射关系。

表2 元标记-关注点-用例的映射关系

虽然包含用例和对等用例已经被识别,但它们之间的关系并未明确,所以还不能得到完整的用例模型。为了得到它们之间的关系,可以根据横切点识别结果,对原XML文档再做1次识别,识别方法为:为每个包含用例,也就是带<CrossCuttingConcerns>标签的内容,假设内容是“Cname”,在Goal.xml中寻找其父节点,在<InteractionGoal>下遍历<InnerGoalName>内容,若与“Cname”相同,返回<InteractionGoalName>。

运算结果确定了包含用例及与其相连的对等用例。根据UML标准,对等用例和包含用例用椭圆表示,它们之间的联系用带箭头的虚线表示,虚线上用“include”表示包含关系。

3 实例分析

本节以客运服务系统为例,采用XML转换算法对目标模型进行用例建模。该系统是针对客运乘客和管理人员开发的,目的是提供信息查询、票务管理、信息管理等功能,而票务管理功能为乘客提供订票、取票、退票等服务。其4层目标模型如图4所示。

图4 客运服务系统目标模型

3.1 用XML存储目标模型

根据系统的目标模型,通过XML映射表,将4层目标模型转化成带有<BusinessGoal>、<ServiceGoal>、<InteractionGoal>和 <InnerGoal>4层标签的kyfw.xmlXML文档,如图5所示。

图5 客运服务系统的XML模型

图5中第7、14、20行的<InteractionGoal>中分别存储了订票服务、取票服务、退票服务3个交互目标。

3.2 识别关注点

本文以Oxygen XML Editor为实验平台,将XML转换算法编写成kyfw.xquery文件,对kyfw.xml文档进行筛选,结合实例给出分析如下:

该文件以XQuery 1.0为语言,以文献[16-17]为技术参考,以oxy为命名空间编写。在第3行中,申明了kyfw.xml,也就是存放着客运服务目标模型的XML文件的路径。第5到8行是识别核心关注点的函数。而区分横切关注点和原子关注点的函数则出现在第9到16行。最后带有<Concerns>标签的是主函数,调用之前申明的2个函数。识别结果如图6所示。

图6中带有 <CoreConcerns>标签的“订票服务”、“取票服务”以及“退票服务”被识别为核心关注点。而“计算账单”和“核对订单”因为带有<Cross-CuttingConcerns>标签,为横切关注点,而剩下的“检查车次信息”等则是原子关注点。所以“订票服务”、“取票服务”及“退票服务”在用例模型中作为对等用例出现,用椭圆表示。而“计算账单”和“核对订单”因为横切了多个核心关注点而作为横切关注点,在用例模型中以包含用例的形式出现,用带箭头的虚线连接对等用例。

图6 XML识别结果

3.3 用例模型

确定了对等用例和包含用例之后,需要明确其关系。根据3.2节中提出的识别方法编写 relation.xquery,对关注点识别结果进一步处理。以下是核心的relation函数:

relation函数的第2、3行分别遍历了kyfw.xml文件中的所有InteractionGoal元素以及横切关注点名称集合,第4行限制了返回的条件,也就是当InteractionGoalName的文本字段与横切关注点名中字段相等时才返回。最终结果以横切关注点字段顺序排列,格式为“对等用例”includes“包含用例”。识别结果如图7所示。

图7 对等用例和包含用例关系识别结果

在图7中“核对订单”和“计算账单”分别与2个对等用例形成联系,这样,“订票服务”、“取票服务”、“退票服务”作为3个对等用例出现在用例模型中,同时“取票服务”、“退票服务”有共同的包含用例“核对订单”,“订票服务”、“退票服务”则都包含了“计算账单”。根据UML规范,可以得到用例模型如图8所示。

图8 最终的用例模型

3.4 分析比较

对传统的面向对象方法[2]、基于目标的方法[4]、AOSD 方法[5]、目标-场景方法[6]以及本文方法,在需求的获取手段、识别手段、识别效率、需求模型精度和向设计阶段过渡的能力5个方面进行比较发现,基于目标的方法提供了1种很好的需求捕获手段,面向对象需求分析中的用例模型能够让需求良好地过渡到设计阶段,本文方法较好地结合了两者的长处。同时,相比自然语言,更为形式化的算法提高了需求传达和需求建模过程的稳定性和鲁棒性。如遇到新的需求或原先的需求产生了变更,只需更新目标模型并重新映射,算法的实现无需变更,使建模过程效率更高。表3给出了上述几种建模方法在5个方面的比较结果。

表3 方法比较结果

4 结束语

针对用例建模过程中存在的问题,本文提出采用XML转换算法进行用例建模,并以客运服务系统为例,验证了该方法的可行性。结果表明,当需求存在交织的问题时,算法能够清晰地识别和筛选关注点,避免了人工分析可能产生的偏差,为用例建模提供了重要判断依据。尤其遇到庞大、复杂的系统时,这种方法能够为用例识别节省大量时间,将共用的事件流从对等用例中抽离形成包含用例则能减少用例模型的冗余,使其保持低耦合的状态。当然,该方法也存在一定的不足,比如从需求到用例的过程中,需要对XML文档进行2次操作。下一步的研究工作将是,借助XML适用于多平台的特性,为用例模型设计形式化的开发工具。

[1] 卢梅,李明树.软件需求工程——方法及工具评述[J].计算机研究与发展,1999,36(11):1289-1300.

[2] Jacobson I.Object Oriented Software Engineering:A Use Case Driven Approach[M].New York:Addison Wesley,1992.

[3] Larman C.Applying UML and Patterns:An Introduction to Object-oriented Analysis and Design and Iterative Development[M].Prentice Hall,2006.

[4] Jacobson I,Ng P W.Aspect-oriented Software Development with Use Cases[M].New York:Addison Wesley,2005.

[5] Dardenne A,Van Lamsweerde A,Fickas S.Goal-directed requirements acquisition[J].Science of Computer Programming,1993,20(1-2):3-50.

[6] 戴娟.基于目标与场景的用例驱动需求分析技术研究[D].西安:西安电子科技大学,2012.

[7] 莫倩,刘晓.面向方面的软件工程指南[J].计算机工程,2007,33(14):62-65.

[8] Van Lamsweerde A.Goal-oriented requirements engineering:A guided tour[C]//Proceedings of the 5th IEEE InternationalSymposium on Requirements Engineering.2001:249-262.

[9] Yue K.What does it mean to say that a specification is complete?[C]//Proceedings of the 4th International Workshop on Software Specification and Design.1987.

[10] Anton A I.Goal-based requirements analysis[C]//Proceedings of the 2nd International Conference on Requirements Engineering.1996:136-144.

[11] 李辛.基于语义相关性的XML关键字查询的研究与实现[D].北京:北京交通大学,2009.

[12] Kiczales G,Lamping J,Mendhekar A,et al.Aspect-oriented programming[C]//Proceedings of the 11th European Conference on Object-oriented Programming.1997:220-242.

[13] 金英,刘华虓,张鹏.一种面向方面需求模型的分析与验证方法[J].计算机学报,2013,36(1):63-73.

[14] 韩晓英,虞慧群.一种基于UML的面向方面模块动态特性编织方法[J].华东理工大学学报(自然科学版),2007,33(3):394-399.

[15] 何明昕.关注点分离在计算思维和软件工程中的方法论意义[J].计算机科学,2009,36(4):60-63.

[16] Holzner S.XML:A Beginner’s Guide:Go Beyond the Basics with Ajax,XHTML,XPath 2.0,XSLT 2.0 and XQuery[M].Osborne/McGraw-Hill,2009.

[17] Walmsley P.XQuery权威指南[M].王银辉,译.北京:电子工业出版社,2009.

猜你喜欢

关注点用例文档
浅谈Matlab与Word文档的应用接口
冬奥关注点
UML用例间包含关系与泛化关系的比较与分析
UML用例模型中依赖关系的比较与分析
有人一声不吭向你扔了个文档
寻找关注点 提高复习效率——以初中教学中“0”为关注点为例
下半年尿素市场四大关注点
如何分析一组数据的集中和分散——数据分析的两个关注点
联锁软件详细设计的测试需求分析和用例编写
從出土文獻用例看王氏父子校讀古書的得失