您好, 访客   登录/注册

论迭代式软件开发过程与方法

来源:用户上传      作者: 李月军

   [摘要] 本文阐述了迭代式过程模型相对于传统瀑布式过程模型的优点,及统一软件开发过程RUP的生命周期模型和迭代策略。通过使用UML和RUP为宿舍管理系统进行可视化建模,重点讨论了在本系统中,RUP生命周期的四个阶段:先启、精化、构建和交付各阶段迭代过程的实现。
  [关键词] RUP 增量式 迭代 软件开发
  
  传统的软件开发模型――瀑布式过程模型,将软件生命周期划分为可行性分析、需求分析、软件设计、代码编写、软件测试和运行维护等六个基本活动。该模型给出了一个固定的顺序,将生存期活动从上一个阶段向下一个阶段逐级过渡,如同瀑布流水,最终得到所开发的软件产品,投入使用。瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
  1.需求或设计中的错误往往只有到了项目后期才能够被发现;
  2.对于项目风险的控制能力较弱;
  3.软件项目常常延期完成或开发费用超出预算;
  4.项目管理人员专注于文档的完成和审核来估计项目的进展情况。
  在软件开发的早期阶段就想完全、准确捕获用户的需求几乎是不可能的。我们经常遇到的问题是需求在整个软件开发工程中经常会改变。迭代式开发允许在每次迭代过程中需求可能有变化,通过不断精化来加深对问题的理解。与传统的瀑布过程模型相比较,迭代过程具有以下优点:
  1.允许变更需求;
  2.逐步集成元素;
  3.尽早降低风险;
  4.有助于提高团队的士气;
  5.生成更高质量的产品;
  6.保证项目开发进度。
  RUP(统一开发过程)是目前主要的迭代式开发过程和方法之一。根据迭代计划的安排,典型的迭代策略模式通常有以下四种:
  1.增量式(Incremental)
  这种模式的特点是项目架构的风险较小(往往是开发一些重复性的项目),所以精化阶段只需要一个迭代。但项目的开发工作量较大,构建阶段需要有多次迭代来实现,每次迭代都在上一次迭代的基础上增加实现一部分的系统功能。
  2.演进式(Evolutionary)
  当项目架构的风险较大时(从未开发过类似项目),需要在精化阶段通过多次迭代来建立系统的架构,架构是通过多次迭代的探索,逐步演化而来的。当架构建立时,往往系统的功能也已经基本实现,所以,构建阶段只需要一次迭代。
  3.增量提交(Incremental Delivery)
  这种模式的特点是产品化阶段的迭代较多,比较常见的例子是项目的难度并不大,但业务需求在不断地发生变化,所以需要通过迭代来不断地部署完成的系统;但同时又要不断地收集用户的反馈来完善系统的需求,并通过后续的迭代来补充实现这些需求。
  4.单次迭代(Grand Design)
  传统的瀑布模型可以看作是迭代化开发的一个特例,整个开发流程只有一次迭代。但这种模式有一个固有的弱点,由于它对风险的控制能力较差,往往会在产品化阶段产生一些额外的迭代,造成项目的延误。
  本文的宿舍管理系统主要利用UML和RUP增量式迭代开发过程实现可视化建模。系统要求:每年新生入学前,招生就业处将预录新生名单送交宿舍管理处,宿舍管理人员负责为新生分配宿舍,新生入住后,再根据个别情况(如录取但未报到)调整宿舍及床位的分配;再有每年毕业生毕业前夕,招生就业处将毕业生名单送交宿舍管理处,管理人员负责毕业生退房处理。在学生入住期间,后勤管理人员负责后勤管理,如收水电费,房产管理等。下面介绍本系统在RUP软件生命周期中各阶段的迭代的过程实现。
  RUP中的软件生命周期在时间上被分解为四个顺序的阶段,分别是:先启阶段(Inception)、精化阶段(Elaboration)、构建阶段(Construction)和交付阶段(Transition)。每个阶段结束于一个主要的里程碑(Major Milestones);每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。
  1.先启阶段
  确定项目开发的目标和范围。为了达到该目的必须识别所有与系统交互的外部实体,在较高层次上定义交互的特性。本阶段具有非常重要的意义,在这个阶段中所关注的是整个项目进行中的业务和需求方面的主要风险。先启阶段结束时是第一个重要的里程碑:生命周期目标里程碑。生命周期目标里程碑用于评价项目基本的生存能力。
  在宿舍管理系统的先启阶段,主要是进行需求分析,产生用例模型,用以描述待开发的功能需求。建立的用例模型的过程如下:
  首先,分析活动者。根据系统范围,可以确定三类活动者:查询者、宿舍管理员、后勤管理员。另外有两个外部活动:财务管理系统和招生就业系统。查询者的活动是查询住宿情况;后勤管理员的活动是给入住的学生分配宿舍,毕业生退房时回收宿舍,也可查询住宿情况等,收住宿费;后勤管理员的活动是后勤管理,如桌椅租用费、维修费,宿舍水电费用的收取等;财务管理系统的活动是将收取的住宿费提交财务系统管理;招生就业系统的活动是提供入住新生和毕业生名单。
  然后,拾取用例。本系统共确定了七个用例,分别是:身份验证、查询住宿情况、入住分配、退宿管理、收住宿费管理、学生信息管理和后勤管理。
  最后,画用例图。在绘制用例时,不仅要把用例与活动者之间的联系表示出来,还应把用例之间的联系表示出来。
  2.精化阶段
  确定系统架构和明确需求。为了达到该目的,必须在理解整个系统的基础上,分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。精化阶段结束时第二个重要的里程碑:生命周期结构里程碑。生命周期结构里程碑为系统的结构建立了管理基准并使项目小组能够在构建阶段中进行衡量。此刻,要检验详细的系统目标和范围、结构的选择以及主要风险的解决方案。
  在宿舍管理系统的精化阶段,将其又分为两个子阶段,第一阶段进行概要分析,第二阶段进行详细设计,每个阶段都是迭代的过程。第一阶段主要完成剩下的需求分析,根据需求进行静态建模,静态建模一般用类图表示。第二阶段精化类图,然后用序列图或协作图描述出对象间的交互关系,实现系统的动态建模。
  建立静态模型。分析系统用例模型和功能需求,找出其中的实体类,确定类之间的关系。静态模型一般用类图表示。类图不仅显示了信息的结构,同时还描述了系统的行为。类图是定义其它图的基础。系统中抽象出的实体类如:楼栋、寝室、床位、学生、物业费用、住宿费用、员工等。
  建立动态建模。在接下来的精化阶段,仍然要重复迭代的过程,即从精化用例出发,根据和实体类的上下文关系,加入控制类和接口类,完善为图,然后用交互图描述对象之间的交互关系,最终形成设计模型。如“入住分配”用例,首先分析该用例,抽出参与此次用例的以下几个实体类:宿舍管理员、学生、楼栋、床位,对过数据分析,可以将这些实体类映射为数据表,同时进行数据库设计。另外宿舍管理员通过用户界面和系统交互,因此,还要加入一个接口类:宿舍分配界面,这个接口则通过一个控制类:宿舍分配程序来执行分配任务。最后“怎么做”还需建立动态模型来描述,动态模型可用序列图或状态图表示。
  3.构建阶段
  实现剩余的系统功能,所有的功能被详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。构建阶段结束时是第三个重要的里程碑:初始功能里程碑。初始功能里程碑决定了产品是否可以在测试环境中进行部署。此刻,要确定软件、环境、用户是否可以开始系统的运作。
  在宿舍管理系统中,主要将精化阶段的模型扩展到所有组件,将设计结果付诸实施,测试产品性能,开发出一个可以提交给最终用户的完整产品。主要使用的UML工具是构件图和配置图。
  4.交付阶段
  完成软件的交付工作,将系统移交给用户。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。在交付阶段的终点是第四个里程碑:产品发布里程碑。此时,要确定目标是否实现,是否应该开始另一个开发周期。在一些情况下这个里程碑可能与下一个周期的初始阶段的结束重合。
  在宿舍管理系统中,主要活动是进行产品测试,系统实施,用户培训,产品提交销售市场等。
  RUP是高效灵活的增量式迭代开发过程,对项目进行有效的计划和管理,降低风险,提高了团队生产力、软件质量、开发效率。针对所有关键的开发活动,为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
  
  参考文献:
  [1]叶俊民.软件工程[M].清华大学出版社,2008.
  [2]潘加宇,朱剑平.敏捷与秩序――RUP最佳实践[M].清华大学出版社,2006.
  [3]袁涛,孔蕾蕾.统一建模语言UML[M].清华大学出版社,2010.
  [4]王慧.Joel谈优秀软件开发方法[M].清华大学出版社,2007.
  [5]张昭玉.基于UML和RUP的软件开发实例分析[J].微计算机应用,2004,(6).


转载注明来源:https://www.xzbu.com/9/view-1009829.htm