基于重用的用例层次模型与应用
任胜兵,陈松乔,喻寿益
(中南大学 信息科学与工程学院,湖南 长沙,410083)
摘要: 扩展了Regnell关于用例层次模型的研究,提出了一种基于重用的用例层次模型。该层次模型将用例的描述分为3个不同的抽象层次:服务层、结构层和事件层。按照UML规范,定义了各层有关元素间的关系,给出了由扩展巴科斯范式定义的用例描述规范及相应的图形表示。该模型解决了Regnell采用纯图形方式描述用例时不能处理用例间的包含、扩展和泛化关系的描述问题,易于实现不同系统间、不同用例间和用例内部对用例描述的重用。同时,采用该模型还可以避免纯图形方式下难以采用自动工具支持用例描述的修改和验证等问题。在Drawlet框架下,设计了该模型的用例建模和重构原型工具。
关键词: 用例描述; 重用; 层次模型; 扩展巴科斯范式; 重构
中图分类号:TP311 文献标识码:A 文章编号: 1672-7207(2005)02-0277-05
Hierarchical Use Case Model Based on Reuse and Applications
REN Sheng-bing,CHEN Song-qiao,YU Shou-yi
(School of Information Science and Engineering, Central South University, Changsha 410083, China)
Abstract: Extending Regnell′s research on hierarchical use case model, a hierarchical use case model based on reuse is proposed. The hierarchical model divides use case description into three different abstract levels: the service level, the structure level, and the event level. Relationships among elements at each level are described according to the UML(Unified Modelling Language) specification, the use case textual specification is defined by the extended BNF and its corresponding graphical representations are presented. The model solves the problem, that is, the pure graphical use case representation proposed by Regnell can not deal with the description of the relationship among use cases, such as inclusion, extension and generalization, and can easily realize the use case description reuse among different systems, use cases, and use case internal elements. Moreover, the model can avoid the difficulty in automatically supporting the modification and verification of the use case description under pure graphical representation. The use case modeling prototype tool and refactoring prototype tool are implemented under the Drawlet framework.
Key words: use case description; reuse; hierarchical model; extended BNF; refactoring
自I.JACOBSON提出用例及其有关概念以来,用例被广泛地引入到各种软件开发方法中[1],在开发的早期阶段描述系统功能需求[2]。用例从用户使用系统的角度以黑盒的方式描述系统外部参与者与系统一系列交互的过程,是用户和开发者通过反复讨论对系统功能需求取得的共识,影响到软件开发的各个阶段。若用例描述能够成为重用的单元,则不仅可以减少用例建模的工作量,提高用例描述的质量,而且可在其后的软件开发过程中极大地提[CM(22] 高软件的重用性。在此,作者提出一种基于重用的用例层次模型,采用UML规范定义每一层各元素间的关系,用扩展巴科斯范式定义一种用例文本描述规范,并给出用例描述对应的图形表示。为实现对用例描述重用的自动支持,将代码重构的思想引入到用例描述的重构中,在Drawlet框架下设计并实现建模和重构的原型工具。
1 用例描述与重用
对用例的描述,不同的使用者各不相同[3]。自然语言是大多数用例使用者采用的描述方式[4],容易被大多数用户理解,使用灵活、自由且表达能力强。但自然语言存在一些缺点,如表达不精确,随意性强,易产生冗余等等。模板是用例描述的另一种常用方式[5],模板描述格式比较规范、统一,使用者容易掌握,但模板描述一般是在一个抽象层次上进行,对于复杂用例的描述篇幅往往较长。用例的图形描述直观、简洁,便于与一般用户交流。但现有的图形描述不能完全描述用例,需要借助自然语言。UML对用例的描述没有明确规定,除采用自然语言或模板外,也可使用活动图和顺序图来描述[6]。用UML的活动图和顺序图来描述用例的主要困难之一在于难以保持图形内容之间的一致性。
用例的层次化描述符合人类认识事物由整体到局部的过程,便于用户理解、使用和维护用例描述。B.REGNELL给出了一种层次化的图形用例描述方法[2],将用例描述分为3层:环境层,主要描述用例与系统外界之间的关系,用UML的用例图来描述;结构层,主要定义用例内部有哪些用例片断,用高级消息顺序图来描述;基本层,主要描述用例片断的事件流,用消息顺序图来描述。在该用例层次模型中,对如何描述用例之间的包含、扩展和泛化关系没有提出有效的解决办法,对用例建模的支持有限。同时,单纯采用图形方式来描述用例,难以采用工具支持用例描述的修改和验证等工作。
重用被视为提高软件生产效率和质量的可行途径[7]。用例描述作为软件开发早期阶段的产物,对其进行重用是一种较高抽象级别的软件知识重用,可较大地提高软件重用的水平[8]。用例描述的重用方式主要有3种:用例内部的重用、用例间的重用和不同系统间用例的重用。用例内部重用主要由一系列参与者与系统交互的事件流构成,可用用例片断(episode)来划分用例描述[2],以提高用例描述的可理解性,同时用例片断在用例内部的描述中可重复使用。用例间的重用可以用UML的3个关系来表示[6]。不同系统间用例的重用主要通过工具来实现[2]。显然,不同的用例描述方式难于实现系统间用例描述的重用。
重构可以用来改善软件的内部结构,提高软件的可重用性[9]。重构作为一种思想,除可用于程序转换外,还可用于转换软件的其他成分,提高其可重用性[10-11]。用例描述的是系统与外部实体的一系列交互,因而,用例经过重构后应该保持这一系列交互不变。G.BUTLER等将用例重构作为软件框架重构的一环,层叠式地重构与应用框架有关的特征模型、用例模型、体系结构、设计和代码 [12]。
在此,作者针对B.REGNELL的用例层次模型[2],提出基于重用的用例层次模型,以最大限度地实现用例描述的重用及其自动化,并给出用例建模和重构工具的设计。
2 基于重用的用例层次模型
2.1 服务层
服务层主要描述系统的总体轮廓,即系统能给用户提供哪些服务,有哪些主要参与者使用这些服务。系统提供的服务由用例来描述,系统通过该层用例向主要参与者提供业务价值。功能相关的用例可以组成服务包。图1描述了服务层各元素之间的关系。
![](/web/fileinfo/upload/magazine/140/5273/image001.jpg)
图 1 服务层各元素之间的关系
Fig. 1 Relationship among elements at service level
在描述服务层各元素间的关系时,采用了UML元模型[6]中的分类器(Classifier)、关系(Relationship)和模型元素(Model Element)等。对于服务层内容的文本描述,采用扩展巴科斯范式进行规范定义,可看成是对图1中的一个补充,如下所示:
用例文档=“系统:”,名称,{(用例描述体|服务包描述体)},{用例片断描述体};
名称=字符,{字符};
用例描述体=“用例:”,名称,[主要参与者],[前提条件],[用例片断],[后置条件];
主要参与者=“主要参与者:”,名称,{“,”,名称};
服务包描述体=“服务包:”,名称,{用例描述体};
其中,对于“用例描述体”和“用例片断描述体”的进一步定义,将在结构层和事件层对应的扩展巴科斯范式中给出。服务层各元素的图形描述如表1所示。
表 1 服务层各元素的图形表示
Table 1 Graphical representation of elements at service level
![](/web/fileinfo/upload/magazine/140/5273/image002.jpg)
2.2 结构层
结构层主要描述用例之间的关系以及用例内部用例片断的组成,各元素间的关系如图2所示。用例片断是一个事件流中功能相关的子事件流。1个用例涉及的事件可能非常多,将功能相关的一系列事件用用例片断来模块化,不仅便于用户理解,而且便于重用[2]。该层描述的用例间的关系有3种:包含、扩展和泛化。在描述单个用例时,用例的前提条件表示用例使用前必须满足的系统状态,而用例的后置条件则表明用例成功执行后系统应该所处的状态。结构层各元素的图形描述如表2所示,结构层各元素间的关系如图2所示。从图2可以看出,结构层元素之间的关系与UML用例图的定义基本相似,不同之处在于UML用例图没有对用例进一步描述,而这里用例由用例片断构成。实际上,UML的用例图对用例的描述只给出了用例名称,对用例的进一步描述须在其他文档中描述,这将为保持文档一致性增加了困难。
在用例描述中,最难处理的是用例间3个关系的描述。包含关系用于提取2个或多个用例共有的部分。在此描述包含关系时,被包含用例没有基用例的信息,只在包含用例描述中用“包含用例:”加被包含用例的用例名即可。扩展关系用于在不修改或很少修改已有用例的情况下扩展已有用例。描述扩展关系时,扩展用例通过引用基用例的扩展点(这里采用用例片断的顺序号)并给出相关的用例片断即可,表示在该扩展点之前扩展基用例的描述。扩展条件在扩展用例的“前提条件”部分中给出。扩展用例一般只用来扩展1个用例[5]。泛化关系描述2个或多个相似用例间的共同行为。为了描述方便,这里只描述单重继承的情况。在泛化关系的描述中,子用例通过重写父用例的有关用例片断(通过顺序号来引用)来改写父用例的行为。结构层描述的扩展巴科斯范式如下:
用例描述体=“用例:”,名称,[主要参与者],[前提条件],[用例片断],[后置条件];
前提条件={“?”,条件表达式};
条件表达式=字符,{字符};
用例片断=(“被扩展用例:”,名称,{扩展段描述})|(“父用例:”,名称,{重写段描述})|{顺序号,“.”,(用例片断名称|(“包含用例:”,名称))};
用例片断名称=名称;
后置条件={“!”,条件表达式};
扩展段描述={顺序号,“@”,顺序号,“.”,(用例片断名称|(“包含用例:”,名称))};
重写段描述={顺序号,“#”,顺序号,“.”,(用例片断名称|(“包含用例:”,名称))};
表 2 结构层各元素的图形表示
Table 2 Graphical representation of elements at structure level
![](/web/fileinfo/upload/magazine/140/5273/image004.jpg)
顺序号=数字,{数字};
2.3 事件层
事件描述层主要用来细化用例片断,各元素间的关系如图3所示。该层描述6类事件:输入、输出、活动以及时钟的设置、重置和终止。每个片断由若干相关的事件组成。事件间的控制流关系主要有:顺序、选择、循环和并发。事件层描述系统与外部参与者之间的交互过程。事件层描述的用例片断可用于不同用例的描述。表3给出了事件层的图形描述符号。
![](/web/fileinfo/upload/magazine/140/5273/image005.jpg)
图 3 事件层各元素之间的关系
Fig. 3 Relationship among elements at event level
事件层描述的扩展巴科斯范式如下:
用例片断描述体=“用例片断:”,用例片断名称,事件流;
事件流={(控制流,{事件流},“END”)|事件描述};
事件描述=顺序号,“.”,((((“OUT”,名称,TO,名称)|(“IN”,名称,FROM,名称)|(“SET TIMER”,名称)|(“ACTION”,名称)),[“WITH”,参数表])|(“RESET TIMER”,名称)|(“KILL TIMER”,名称));
控制流=“SEQUENCE”|“CONCURRENT”|(“LOOP”,条件)|(“ALTERNATE”,条件);
条件={“?”,条件表达式};
参数表=名称,{“,”,名称};
表 3 事件层各元素的图形表示
Table 3 Graphical representation of elements at event level
![](/web/fileinfo/upload/magazine/140/5273/image006.jpg)
3 应用与工具设计
以银行自动柜员机ATM系统的需求分析为例,说明基于重用的用例层次模型的应用。为了叙述方便,只给出结构层的图形描述。
在与用户交谈时,系统应提供“取款”、“存款”和“转账”用例。在描述“存款”用例时,它与“取款”用例有公共部分:“接收银行卡”、“检验银行卡信息”和“客户合法性检查”等用例片断。显然,这些信息用于“鉴别客户”。于是,将这些公共部分形成一个新的用例“鉴别客户”,并在用例“取款”和“存款”中包含该用例,即用包含关系进行用例描述的重用。在描述“转账”用例时,又发现该用例与“取款”用例基本相似,都将资金从用户的账号中取走。于是,从“取款”用例和“转账”用例中抽象出一个“管理提取”用例,再在“取款”和“转账”用例中通过泛化关系实现重用。
在随后的需求分析中,希望在“取款”和“转账”中增加“透支通知”能力,以便当用户定购了“透支通知”服务且在“取款”或“转账”发生透支时及时通知用户。由于对用例描述重用,很容易实现用户要求的“透支通知”扩展,只需用扩展关系扩展“管理提取”用例即可。“取款”和“转账”用例可通过泛化关系来重用“透支通知”的描述,其结果如图4所示。
为了支持基于重用的用例层次模型的建模, 在Drawlet框架的基础上, 设计并实现了建模和重构工具, 其设计方案如图5所示。根据图5给出的用例模型建模与重构工具的设计, 用例建模分为2步: 首先, 用户在绘制用例模型的用户界面描述用例模型; 然后, 根据需要启动用例模型重构工具, 选定重构命令, 并设置有关参数, 用例重构工具界面通过重构框架对模型进行重构,以提高用例描述的重用性。
![](/web/fileinfo/upload/magazine/140/5273/image007.jpg)
图 4 结构层基于层次的用例层次模型的ATM应用
Fig. 4 ATM application of structure level of hierarchical use case model based on reuse
![](/web/fileinfo/upload/magazine/140/5273/image008.jpg)
图 5 用例重构工具设计
Fig. 5 Design of use case refactoring tool
4 结 论
a. 提出了基于重用的用例层次模型,用扩展巴科斯范式定义了用例文本描述规范,并给出了对应的图形表示。该层次模型便于用例内部、用例之间和不同系统间用例描述的重用,降低了用例描述的复杂性,而且模型简单、可视,方便用户理解、使用和维护用例描述,有利于构造工具支持用例描述的修改和验证。
b. 在Drawlet框架的基础上,设计了用例建模和重构工具,以支持用例描述重用的自动化。
参考文献:
[1]JACOBSON I. Use Cases and Aspects-working Seamlessly Together[J]. Journal of Object Technology, 2003, 2(4):7-28.
[2]REGNELL B. Requirements Engineering with Use Cases[D]. Lund: Department of Computer Science, Lund University,1999.
[3]COCKBURN A. Structuring Use Cases with Goals[J]. Journal of Object-Oriented Programming, 1997, 10(7): 35-40.
[4]LEITE J, HADAD G, DOORN J, et al. A Scenario Construction Process[J]. Requirements Engineering, 2000,5(1):38-61.
[5]DIAZ I, LOSAVIO F, MATTEO A, et al. A Specification Pattern for Use Case[J]. Information & Management, 2004, 41:961-975.
[6]RUMBAUGH J, JACOBSON I, BOOCH G. The Unified Modeling Language Reference Manual[M]. MA:Addison-Wesley, 1999.
[7]张世琨,张文娟, 常欣, 等. 基于软件体系结构的可复用构件制作与组装[J]. 软件学报, 2001, 12(9):1351-1359.
ZHANG Shi-kun, ZHANG Wen-juan, CHANG Xin, et al. Building and Assembling Reusable Components Based on Software Architecture[J]. Journal of Software, 2001, 12(9):1351-1359.
[8]徐正权,罗功三. 基于XML的Use Case复用[J]. 华中科技大学学报(自然科学版),2003,31(5):22-24.
XU Zheng-quan, LUO Gong-san. Reuse of Use Case Based on XML[J]. Journal of Huazhong University of Science and Technology (Natural Science Edition), 2003, 31(5):22-24.
[9]ROBERTS D, BRANT J, JOHNSON R. Refactoring Tool for Smalltalk[J]. Theory and Practice of Object Systems, 1997, 3(4):253-263.
[10]REN Sheng-bing, RUI Ke-xing, BULTER G. Refactoring the Scenario Specification: A Message Sequence Chart[A]. KONSTANTAS D, LEONARD M, PIGNEUR Y, et al. Object-oriented Information Systems 2003[C]. Heidelberg: Springer-Verlag, 2003:294-298.
[11]STEPNEY S, POLACK F, TOYN I. Refactoring in Maintenance and Development of Z Specifications and Proofs[J]. Electronic Notes in Theoretical Computer Science, 2002, 70(3):1-20.
[12]BUTLER G, XU L. Cascaded Refactoring for Framework Evolution[A]. DEBAND J. Proceedings of 2001 Symposium on Software Reusability[C]. NY:ACM Press, 2001:51-57.
收稿日期:2004-09-28
基金项目:教育部博士点基金资助项目(20030533011); 国家自然科学基金资助项目(50275150)
作者简介:任胜兵(1969-),男,湖南岳阳人,博士研究生,从事软件工程、智能信息处理研究
论文联系人: 任胜兵,男,博士研究生;电话:0731-8830198(H); E-mail: rsb@mail.csu.edu.cn