http://www.csai.cn 作者:王如龙 来源:希赛网 2007年8月24日 发表评论 进入社区

摘 要:在需求工程方法学中,用例技术和原型法都是需求建模的主要工具。作者在比较、分析其用例与原型法的基础上,引入基于面向对象的演化原型,提出了一种新的用例与演化原型法相结合的需求应用模型,并对该需求模型的实现进行了详细地描述。

关键词:用例  原型法  面向对象   软件需求模型  复合技术
 
    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],原型注重软件功能目标的真实实现,但两者都是以系统功能和用户为中心的。尤其是面向对象演化原型与用例技术都需要与用户交互,通过对象的不断的封装、继承、自适应的增量/迭代设计达到向产品模型的演化。

[1]  [2]  [3]

面向对象的需求建模复合技术研究[1]相关推荐

  1. 参数化三维地下管线建模关键技术研究

    地下管网设施是现代城市基础设施的基本组成部分,是城市居民日常生活的物质输送和排出通道.城市地下管网的规划.铺设.管理和维护,直接影响着城市居民的日常生活,是现代化城市高质量高效率运转的基础.随着全球气 ...

  2. 提高建模效率,改变手工作坊式生产,AutoML的技术研究与应用进展如何了?

    整理 | 王银 出品 | AI科技大本营(ID:rgznai100) [导读]12 月 5-7 日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN.中科天玑协办的中国大数据技术大会(BD ...

  3. 面向对象的类测试技术研究

    面向对象的类测试技术研究 摘要:类是面向对象软件的基本构成单元,类测试是面向对象软件测试的关键.从基于服务的.基于对象动态测试模型的.基于流图的以及基于规约的四个方面论述了类测试的思想和方法. 关键词 ...

  4. 流体力学深度学习建模技术研究进展

    流体力学深度学习建模技术研究进展 王怡星.韩仁坤.刘子扬.张扬.陈刚 摘要: 深度学习技术在图像处理.语言翻译.疾病诊断.游戏竞赛等领域已带来了颠覆性的变化.流体力学问题由于维度高.非线性强.数据量大 ...

  5. 认知行为技术是计算机技术吗,基于认知行为模型的多Agent建模技术研究与应用_问答库...

    随着计算机技术的发展,建模仿真已经成为继理论研究和实验研究之后的第三种认识.改造客观世界的重要手段.特别在复杂对象的研究方面,通过建模仿真可以促进我们对复杂对象的认识,并基于仿真结果对其进行改进.但由 ...

  6. UML面向对象分析与建模

    UML面向对象分析与建模   2010-07-07 作者:刘朝辉 来源:刘朝辉的Blog   [1]面向对象技术概述 一.软件开发方法 常见的软件开发方法有面向过程的开发方法,面向数据结构的开发方法和 ...

  7. UML与软件建模之面向对象的软件建模概述

    好久没有写写新东西了,最近闲下来了,看了一本名叫<URL与软件建模>这边书,感觉里面讲的不错,现在将我学习到的东西和大家做一个简单的分享. 横竖都是写,建模和不建模有什么区别呢?如果你是一 ...

  8. 区块链技术研究综述:原理、进展与应用

    来源:区块链技术研究综述:原理.进展与应用     期刊:通信学报. #blockchain 相当于对区块链先进行一个系统的了解吧 区块链的层次化技术结构. #未解决的问题 上述文 献虽 然归纳得较为 ...

  9. 灯管实验的em算法_Gamma过程的加速退化试验设计关键技术研究

    Gamma过程的加速退化试验设计关键技术研究 导读:本文在介绍步进应力加速退化试验设计基本理论的基础上,研究基十Gamma过程的步进应力加速退化试验设计相关问题,给出单应力.多应力下步进应力加速退化试 ...

最新文章

  1. BZOJ1720: [Usaco2006 Jan]Corral the Cows 奶牛围栏
  2. 阿里云成为首个通过《面向公有云模式的政务云服务》测评的厂商
  3. 鸿蒙蕴含的哲理,经典别致的人生语录,蕴含哲理,受用一生!
  4. python单元测试mock_Mock 在 Python 单元测试中的使用
  5. Java高质量代码之 — 泛型与反射
  6. boost::filesystem 库的简单使用
  7. android多媒体图文混排,android图文混排
  8. 如何删除档案中的重复的行
  9. php+access源码,php操作access源码
  10. 数学物理方法 数学物理方程
  11. EasyNVR对接EasyCloud视频云平台进行云端录像
  12. js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示
  13. Android 基于 dlib 和 opencv 实现换脸(不需要依赖第三方关键点检测)
  14. deepin20无法启动图形界面_U盘启动盘暗藏推广?用它来打造安全个性的PE工具箱...
  15. 刀片机服务器的虚拟化,刀片机服务器虚拟化
  16. MySQL的二叉树、平衡二叉树、2,3查找树、B树、B+树索引
  17. 长安链---从零到一部署Chainmaker-2.0.0
  18. 敏捷实践 | 浅谈测试金字塔
  19. Android 高德地图自定义线路规划选择方案之后按照方案进行导航
  20. “2013大数据全球技术峰会”,我在现场(4月26日)!

热门文章

  1. 纯属意外(FLASH歌曲)
  2. 全加器门级(结构级),数据流,行为级实现
  3. 使用 PyQT5 来做一个简易版库存管理系统(三)
  4. java教师和学生类的继承代码_继承学生类java
  5. 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim...)
  6. 【免费制作电子杂志】云展网教程 | 上传双页的PDF文档进行切割使杂志单页显示?
  7. 什么是长尾词?怎么查找合适的长尾词?
  8. 一张图搞定项目干系人管理,掌握干系人管理的模型和技能
  9. 巧用for循环绘制各种图形
  10. UnityShader-菲涅尔反射(Fresnel Reflection)