【IT168 分析评论】
1、引言
需求是软件开发最困难的部分[1],以需求工程方法学为指导进行需求建模是实现软件需求的重要途径。现有需求工程方法大致分为五大类,即面向过程、面向数据、面向控制、面向目标及面向对象的分析方法[2, 3]。每一种方法都有自己的测重点和局限性,根据具体的软件项目及其环境,从这些方法学的各种软件工具包中提炼出针对性的关键技术,结合应用于不同的问题,用“非常好的方法”[4]建立需求模型,以提高开发效率和软件质量,是软件需求实施的最终目的。
用例技术是面向对象的需求工程方法学中的主要工具。原型法为需求建模提供了强有力的技术。本文在比较二者各自特点的基础上,将面向对象的抽象、封装与可继承、复用的思想[5]应用于原型法,并将用例技术与之相结合,建立一种新的需求模型。
2、用例与原型法比较分析
2.1、用例技术
Jacobson最先提出用例(use case)这一概念[6],经过Rational公司规范后,被UML(Unified Modeling Language)中进一步的采用,目前该技术被广泛的应用于需求分析、系统设计和软件测试。
用例是系统执行一系列的动作,通过这些动作能获得主角 (Actor)有价值的结果[7]。Actor是外部行为者(可以是人或外部系统)与系统交互时可扮演的一组相关角色。用例模型描述的是外部行为者(Actor)所理解的结果即系统功能。以用例图可视化地表达系统的需求,具有直观、规范等优点[8],克服了纯文字性说明的不足,是面向对象方法中需求表达的一种有效手段。
用例着重于对事件流的描述[9],强调的是任务,一般不适用于用户界面设计。同时,用例技术要求开发人员有深入业务领域知识。否则,对于提取用例、精确用例之间的关系、用例的粒度如何确定、如何避免用例冗余等问题难以解决。这时,基于UML的用例图的需求驱动缺乏可操作性。
2.2、原型法
原型法(Prototyping)是在软件开发的早期就建立目标系统的实现化的原型。一个软件原型是所提出新项目的部分实现[4], 建立原型主要原因是为了解决软件项目开发早期的不确定问题,通过用户对原型的评价,以最低的成本解决需求中的二义性和不完整性问题,使系统达到非常好的的可用性。
原型法解决了传统瀑布模型[10]难以胜任需求变化、二义性及不确定性问题,也在某种程度上避免了用例技术对业务领域知识的强依赖。但原型法同时也引入自身的风险,最大的风险在于:(1)、用户把一个正在运行原型视为产品[4],勿视了原型难以实现的非功能性需求,这对用户来讲“不可视”[11],如系统的可靠性与性能(实现中时间延迟与数据规模的扩充)等。(2)、用户不断用新的需求否定旧的需求,软件开发总停留一个重构新原型,造成开发过程的不确定性[12],导致工作效率下降、软件结构变“坏”[11]。
2.3、面向对象的演化原型
演化型原型(Evolutionary Prototype)是相对抛弃型原型而言(Throwaway Prototype)的,后者在用户评价原型后获得较完整的需求说明将其抛弃,没有通常的生存周期;前者是把通过原形的不断增加与扩充,增量式的开发并实现系统全部需求,进而演化为最终产品的一部分或全部。
面向对象的方法把分析建立在系统对象以及对象间交互的基础上,通过对象的属性、分类结构和集合结构定义和描述需求,具有抽象性、封装性、继承性、易维护性的特性,对象之间的独立性好。用面向对象的方法产生的原型,为其在评价后的演化提供了极大的灵活性与自适应性,保证了软件结构的相对一致性,加快了开发周期。同时,演化原型从初始原型不断演化、发展(演进)直到最终产品,贯穿于软件开发的全过程。因此,演化原型是螺旋式软件开发生存周期模型的组成部分,也是面向对象软件开发过程的一部分[13]。目前,互联网的普遍应用和行业信息化的深入发展,使得基于B/S模式下的软件应用项目已成为主流,演化原型因其内在特性,很适用于Web开发项目[4]。
2.4、分析比较
通过上面的比较,得出如下结论:(1)、用例技术与原型法具有互补性:原型法适用于描述非确定的需求,而这类需求,很难直接通过用例图可视化表达,通过原型法可以将以用例为基础构建出来的用户界面机制在计算机上可视实现。原型法由于其快速和粗略的特点,往往达不到系统对健壮和产品质量级代码的需求,而基于UML面向对象的用例技术可进行增量与迭代开发,实现代码重用,同时用例还克服了原型对非功能性需求实现上困难。在原型演进的过程中,由于用例技术在系统测试中的良好表现[9]可以为演化原型提供高效的测试实例,从而加快开发速度。(2)、用例技术与原型法具有一致性:虽然用例注重系统任务的可视表示[4],原型注重软件功能目标的真实实现,但两者都是以系统功能和用户为中心的。尤其是面向对象演化原型与用例技术都需要与用户交互,通过对象的不断的封装、继承、自适应的增量/迭代设计达到向产品模型的演化。
3、复合需求建模技术研究
3.1、复合建模方法
在复合建模技术中,遵循了软件需求工程域的层次关系模型[4],并着重于需求开发中需求获取(elicitation)、分析(analysis)、编写规格说明(SRS),和验证(verification)四阶段[14]的应用,并在此基础上,形成需求基线,同客户达成与软件项目计划一致的契约,以便于能更好地按复合模型对实施需求管理,使得需求管理的过程即是这四个阶段循环演进的过程,又是产品实现的过程。
分析比较表明,单纯的用例技术或原型法难以很好地胜任一些较复杂的大型应用项目。因此,要合理的解决这类项目的需求问题,可以利用其各自的优点,通过用例与原型的复合应用,建立其以用例为基础、以演化原型为引导相互联系、相互补充、相互促进的一致性需求模型,在用例的完善中带动原型演化,原型演化促进用例的发生,这样更好地将面向对象的分析方法从需求阶段向系统设计、实现、测试和维护到产品实现阶段平滑过渡。
3.2、复合建模的实现步骤
按照复合建模方法,通过以下步骤建立用例技术与演化原型复合的需求模型,在每一个步骤中对应了需求开发的不同阶段。图1描述了需求建模及产品实现的活动序列。
(1)、通过项目描述[9],以用例图及用例模板[4]结合实现核心用例建模,形成最初始的对象(需求获取阶段);
(2)、用对话图[4]将初始对象以一种可视的用户界面机制描述出来(需求分析阶段);
(3)、通过演化原型在计算机上实现对话图,进行增量演进(需求分析与软件产品实现过程并行);
(4)、用户对原型进行评价,对用例进行交互,实现演化原型的增量交付,同时,在用户对用例的交互中,实现对用例的递归与迭代(即事件流细化)以及用例技术在软件测试中的应用。(SRS与需求验证阶段)
(5)、如果原型需要改进,转(2);(需求分析阶段)
(6)、如果不是最终产品,引入项目描述,用例扩充与细化,转(2);(需求获取阶段)
(7)、交付最终产品。
在建立复合模型时,同时要注意具体项目及支持环境对现需求建模、详细设计、代码测试及最终产品实现有很大的影响,因此,根据不同类型的开发项目,需要选择适合的建模工具和采用好的开发平台。
4、复合需求建模技术应用
4.1、案例分析
《铁道局通用计量管理信息系统》是基于WEB铁道部及各铁路局相关部门共同应用的计量检定与管理系统,涉及到测量设备、计量标准、计量人员、计量培训等管理功能,还包括了计量网站建设、计量检定等应用方面的内容。在需求准备工作中,我们从项目的复杂度较高、开发人员行业领域难以把握、用户类型众多、数据量庞大等特点分析意识到,在众多的需求建模方法学的工具中,很难找到“非常好的”方法,因此,我们采用了这种用例与演化原型复合的需求建模方法,较好地完成了系统的需求分析和需求建模,为项目的设计、编码、测试各上线运行打好了基础。
4.2、复合建模技术的应用
针对具体案例,结合基于WEB开发企业级应用层次模型[15],在实现复合技术需求建模过程中,我们采用了以下形式化的建模工具和开发平台。复合建模技术在该案例中的应用模型如图2所示,有向实线与虚线构成的一个循环即完成一次增量/迭代过程。
(1)、在用例分析过程中采用RUP(Rational Unified Process)-Rational Rose 2003进行全过程的UML建模分析。RUP是一个使用生命周期迭代法的软件开发过程,是有效使用UML的指南,是实现用例图的强有力工具。 因此,选用该软件作为用例分析过程中建模工具,可以为演化原型直接提供具有健壮性和产品质量级的代码,便于原型的演进、测试、性能调整和增量交付。
(2)、对话图是用例与演化原型之间的桥梁,也是开发者和用户从抽象的视觉界面到真实软件界面达成一致的桥梁。它描述了系统中的对话元素和它们之间的导航理解,对于基于Web网站或B/S的应用系统,在需求分析过程中,对话图的构建充分体现了用户与系统交互作用和任务流的本质。
(3)、在建立演化原型中,一开始就要考虑使用产品级开发工具,这有很多种选择(如Visual Basic, Power builder, Delphi, C++,Java工具,.net工具等)。在该项目中,通过对开发人员的特点、系统特性及安全性要求,选用快速方便的Web开发工具Visual Studio .NET。
(4)、开发工具依赖于相应的支持台。在该案例中,服务器端采用的运行环境为Microsoft .NET Framework1.1 + IIS6.0,数据库服务器是符合用户要求的Oracle 9i企业版,操作系统选择Windows 2000 Advance Server版。
5、结束语
用例技术与演化原型相结合的需求建模方法,是基于面向对象需求建模技术的复合应用,主要着重于需求工程领域的需求开发,同时涵盖了软件工程所涉及的软件生命周期各阶段的内容。该方法建立在用例与原型法的基础上,是二者有机复合,并在同一项目中的交融应用。采用该方法,成功地完成了《铁道局通用计量管理信息系统》的需求建模以及在此基础上的全过程的开发。
参考文献:
[1] Brooks, Frederick. No Silver Bullet: Essence and Accidents of Software Engineering. IEEE Computer (April 1987), PP.10-19.
[2] 李明树. 王青. 需求工程研究现状.中国计算机用户 1999年47期
[3] 甘早斌. 卢正鼎. 软件需求规格说明自动生成工具.小型微型计算机系统. 2004年04期
[4] Karl E. Wiegers著,陆丽娜等译.软件需求.机械工业出版社,2000年7月
[5] F.Martin.UML 精粹(第二版)[M].徐家福译. 北京:清华大学出版社,2002
[6] Jacobson I.Object-Oriented Software Engineering—A Use case Driven Approach [M].Addison-Wesley Press. 1992
[7] RUP:Rational Unified Process. Ration software Corporation[Z]. 2001
[8] Booch G, Rumbaugh J,Jacobson I. The unified modeling language User guide[M]. Addison-Wesley Press. 1999
[9] Schneider.G,Winters J P. 用例分析技术[M]。姚淑珍,李巍 等译。北京:机械工业出版社 2002
[10] 张海藩.软件工程导[M].北京:清华大学出版社,1998.
[11] 屈彦呈.王常虹.以数据流为中心的面向对象快速原型开发方法.高技术通讯 2002.09
[12] 刘伟荣,刘高嵩,张龙祥. MIS系统开发的面向对象自适应生长原型法. 计算技术与自动化第19卷第3期2000年9月
[13] Kruchten,Philippe.A Rational Development Process .Cross Talk. 1996. 9(7)11-16
[14] Thayer,Richard H.,and Merlin Dorfman,eds.Software Requirements Engineering,2d ed. Los Alamitos CA:IEEE Computer Society Press. 1997
[15] Stephen Asbury Sott R. Weiner Jave 企业级应用开发指南(第2版)王强,田原,王军 等译.机械工业出版社2004