论迭代式软件开发过程与方法
软件项目的成功实施,离不开有效的软件开发过程与开发方法。相对于传统的瀑布型软件开发过程,迭代式软件开发过程可以在需求被完整确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发,再通过客户的反馈米细化需求,并开始新一轮的迭代。这种方法可以控制项目的风险,提高软件开发的成功率和生产率。目前,主要的迭代式开发过程和方法包括统一开发过程RUP和敏捷开发方法。
请围绕“迭代式软件开发过程与方法”论题,依次从以下三个方面进行论述。
论述迭代式过程模型相对于瀑布式过程模型的优点。详细论述统一软件开发过程RUP的生命周期模型和迭代策略;或者论述敏捷开发方法的特点和适用的情况,并列出目前主要的敏捷开发技术中的四种。 |
参考答案:
解析:二、开发过程模型 1.迭代式过程模型相对于瀑布式过程模型的优缺点。 瀑布式过程模型的缺点: (1)需求或设计中的错误往往只有到了项目后期才能够被发现; (2)对于项目风险的控制能力较弱; (3)软件项目常常延期完成或开发费用超出预算; (4)项目管理人员专注于文档的完成和审核来估计项目的进展情况。 迭代式过程模型的优点: (1)允许变更需求; (2)逐步集成元素: (3)尽早降低风险: (4)有助于提高团队的士气: (5)生成更高质量的产品; (6)保证项目开发进度。 (论文涉及以上优点中的四个即可) 2.统一软件开发过程RUP的生命周期模型和迭代策略。 统一软件开发过程RUP的生命周期模型划分为四个阶段: (1)先启(Inception)。确定项目开发的目标和范围。 (2)精化(Elaboration)。确定系统架构和明确需求。分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。 (3)构建 Construction)。实现剩余的系统功能,所有的功能被详细测试。构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。 (4)交付(Transition)。完成软件的交付工作,将系统移交给客户。重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。 关于迭代计划的安排,通常有以下四种典型的策略模式: (1)增量式(Incremental) 这种模式的特点是项目架构的风险较小(往往是开发一些重复性的项目),所以精化阶段只需要一个迭代。但项目的开发工作量较大,构建阶段需要有多次迭代来实现,每次迭代都在上一次迭代的基础上增加实现一部分的系统功能。 (2)演进式(Evolutionary) 当项目架构的风险较大时(从未开发过类似项目),需要在精化阶段通过多次迭代来建立系统的架构,架构是通过多次迭代的探索,逐步演化而来的。当架构建立时,往往系统的功能也已经基本实现,所以构建阶段只需要一次迭代。 (3)增量提交(Incremental Delivery) 这种模式的特点是产品化阶段的迭代较多,比较常见的例子是项目的难度并不大,但业务需求在不断地发生变化,所以需要通过迭代来不断地部署完成的系统;但同时又要不断地收集用户的反馈来完善系统需求,并通过后续的迭代来补充实现这些需求。 (4)单次迭代(Grand Design) 传统的瀑布模型可以看作是迭代化开发的一个特例,整个开发流程只有一次迭代。但这种模式有一个固有的弱点,由于它对风险的控制能力较差,往往会在产品化阶段产生一些额外的迭代,造成项目的延误。 3.敏捷开发方法的特点和适用的情况,目前主要的敏捷开发技术。 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目成果都经过测试,具备集成和可运行的特征。 敏捷开发技术的特点: (1)个体和交互胜过过程和工具: (2)可以工作的软件胜过面面俱到的文档; (3)客户合作胜过合同谈判; (4)响应变化胜过遵循计划。 与RUP方法相比,敏捷方法的周期可能更短,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强,并且更加强调队伍中的高度协作。 敏捷开发技术的适用情况: (1)项目团队的人数不能太多。适合于规模较小的项目。 (2)项目经常发生变更。敏捷方法适用于需求萌动并且快速改变的情况,如果系统有比较高的关键性、可靠性、安全性方面的要求,则可能不完全适合。 (3)高风险的项目实施。 (4)从组织结构的角度看,组织结构的文化、人员、沟通性决定了敏捷方法是否适用。跟这些相关联的关键成功因素有:组织文化必须支持谈判、人员彼此信任、人少但是精干、开发人员所作决定得到认可、环境设施满足成员间快速沟通之需要。 目前主要的敏捷开发技术: (1)极限编程,XP/eXtreme Programming (2)自适应软件开发,ASD/Adaptive Software Development (3)水晶方法,Crystal (4)特性驱动开发,FDD/Feature Driven Development (5)动态系统开发方法,DSDM/Dynamic Systems Development Method (6)测试驱动开发,TDD/Test-Driven Development (7)敏捷数据库技术,AD/Agile Database Techniques (8)精益软件开发,Lean Software Development (列出以下中的四个即可)