系统分析师-软件工程-软件生命周期&瀑布模型&螺旋模型&V模型&RUP&敏捷方法
本文系统介绍了软件工程中的生命周期模型和开发方法。主要内容包括:1)软件生命周期基本过程(获取、供应、开发等)和支持过程;2)传统开发模型如瀑布模型、原型化模型、螺旋模型、V模型和增量模型;3)统一过程模型(RUP)的四阶段和核心概念;4)敏捷方法的核心思想和主要方法(极限编程、Scrum等)。文章全面阐述了各种模型的特点、适用场景及相互关系,为软件开发过程提供了系统的理论框架。
目录
一、软件生命周期
软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,其目的是提高软件生产率、提高软件质量、降低软件成本。
软件工程由方法、工具和过程三个部分组成。
软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程称为软件生命周期或生存周期。软件生命周期过程:
-
基本过程。基本过程供各主要参与方在软件生存周期期间使用,主要参与方是发起或完成软件产品开发、运行或维护的组织。基本过程分为获取过程、供应过程、开发过程、运作过程和维护过程。开发过程包括需求分析、设计 编码、集成、测试以及与软件产品有关的安装和验收等活动;维护过程软件产品的迁移和退役。
-
支持过程。支持过程作为一个有机组成部分支持其他过程,以便取得软件项目的成功,并提高软件项目的质量。支持过程包括文档编制过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审核过程、问题解决过程和易用性过程。
-
组织过程。组织过程可被某个组织用来建立和实现由相关的生存周期过程和人员组成的基础结构,并不断改进这种结构和过程。应用这些过程通常超出特定的项目和合同的范围,但是,这些特定项目和合同的经验教训有助于改善组织状况。组织过程包括管理过程、基础设施过程、改进过程、人力资源过程、资产管理过程、重用大纲管理过程和领域工程过程。
软件生命周期各阶段的任务
二、软件开发方法与模型
2.1 传统软件开发模型
2.2.1 瀑布模型(SDLC)
瀑布模型(SDLC)是一个经典的软件生命周期模型般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护等几个阶段。
瀑布模型特点
-
从上一项开发活动接受该项活动的工作对象作为输入。
-
利用这一输入,实施该项活动应完成的工作内容。
-
给出该项活动的工作成果,作为输出传给下一项开发活动。
-
对该项活动的实施工作成果进行评审。若其工作成果得到确认,则继续进行下一项开发活动;否则返回前一项,甚至更前项的活动。尽量减少多个阶段间的反复。以相对来说较小的费用来开发软件。
2.2.2 原型化模型
原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。
原型法认为在很难一下子全面准确地提出用户需求的情况下,原型应当具备的特点如下:
-
实际可行。
-
具有最终系统的基本特征。
-
构造方便、快速,造价低。
-
原型法对用户的需求是动态响应、逐步纳入的。
原型模型后续也发生了一些演变,按照原型的作用不同,出现了抛弃型原型和演化性原型。抛弃型原型是将原型作为需求确认的手段,在需求确认结束后,原型就被抛弃不用,重新采用一个完整的瀑布模型进行开发。演化性原型是在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。原型的概念也被后续出现的过程模型采纳,如螺旋模型和敏捷方法。
2.2.3 螺旋模型(Spiral Model)
螺旋模型是一个演化软件过程模型,将原型实现的选代特征与线性顺序(瀑布)模型中控制的和系统化的方面结合起来。在螺旋模型中,软件开发是一系列的增量发布。
开发过程具有周期性重复的螺旋线状。四个象限分别标志每个周期所划分的四阶段:制订计划、风险分析、实施工程和客户评估。螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的系统。
2.2.4 V模型
V模型从整体上看起来,就是一个V字型的结构,由左右两边组成。左边的下画线分别代表了需求分析、概要设计、详细设计、编码。右边的上画线代表了单元测试、集成测试、系统测试与验收测试。V模型的特点如下:
-
单元测试的主要目的是针对编码过程中可能存在的各种错误;
-
集成测试的主要目的是针对详细设计中可能存在的问题;
-
系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行;
-
验收测试通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要;
-
V模型用于需求明确和需求变更不频繁的情形。
2.2.5 增量模型
增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付。
特点:但由于并不是从系统整体角度规划各个模块,因此不利于模块划分,难点在于如何将客户需求划分为多个增量。与原型不用的是增量模型的每一次增量版本都可作为独立可操作的作品,而原型的构造一般是为了演示。
2.2.6 其他模型
喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。使开发过程具有迭代性和无间隙性。
基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。
形式化方法模型:建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明。
2.2 统一过程模型(RUP)
统一过程模型(RUP),描述了如何有效地利用商业的、可靠的方法开发和部署软件,是一种重量级过程。RUP 类似个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针、模版以及事例支持。
2.2.1 RUP的生命周期
RUP 软件开发生命周期是一个二维的软件开发模型,RUP 中有9个核心工作流。
-
业务建模:理解待开发系统所在的机构及其商业运作,确保所有参与人员对待开发系统所在的机构有共同的认识,评估待开发系统对所在机构的影响。
-
需求:定义系统功能及用户界面,使客户知道系统的功能,使开发人员理解系统的需求,为项目预算及计划提供基础。
-
分析与设计:把需求分析的结果转化为分析与设计模型。
-
实现:把设计模型转换为实现结果,对开发的代码做单元测试,将不同实现人员开发的模块集成为可执行系统。
-
测试:检查各子系统之间的交互、集成,验证所有需求是否均被正确实现,对发现的软件质量上的缺陷进行归档,对软件质量提出改进建议。
-
部署:打包、分发、安装软件,升级旧系统;培训用户及销售人员,并提供技术支持。
-
配置与变更管理:跟踪并维护系统开发过程中产生的所有制品的完整性和一致性。
-
项目管理:为软件开发项目提供计划、人员分配、执行、监控等方面的指导,为风险管理提供框架。
-
环境:为软件开发机构提供软件开发环境,即提供过程管理和工具的支持。
2.2.2 基于RUP的软件过程
RUP 把软件开发生命周期划分为多个循环,每个循环生成产品的一个新的版本,每个循环依次由4个连续的阶段组成,每个阶段完成确定的任务。这4个阶段如下:
-
初始阶段:任务是为系统建立业务模型并确定项目的边界。必须识别所有与系统交互的外部实体,定义系统与外部实体交互的特性。在这个阶段关注的是整个项目的业务和需求方面的主要风险。其实现过程为明确项目规模、评估项目风险、制订项目计划、阶段技术评审。
-
细化阶段:任务是分析问题领域,建立完善的架构,淘汰项目中最高风险的元素。必须在理解整个系统的基础上,对架构做出决策,包括其范围、主要功能和诸如性能等非功能需求,同时为项目建立支持环境。其实现过程为确定架构、制订构建阶段计划、建立支持环境、选择构件、阶段技术评审。
-
构建阶段:要开发所有剩余的构件和应用程序功能,我把这些构件集成为产品,并进行详细测试。主要任务是通过优化资源和避免不必要的报废和返工,使开发成本降到最低;完成所有所需功能的分析、开发和测试,快速完成可用的版本;确定软件、场地和用户是否已经为部署软件做好准备。
-
移交阶段:把产品提交给用户使用。主要任务是进行β测试,制作产品发布版本;对最终用户支持文档定稿;按用户的需求确认新系统;培训用户和维护人员;获得用户对当前版本的反馈,基于反馈调整产品。
RUP 中定义了如下一些核心概念,理解这些概念对于理解RUP 很有帮助。
-
角色:Who 的问题。角色描述某个人或一个小组的行为与职责。RUP预先定义了很多角色,如体系结构师、设计人员、实现人员、测试员和配置管理人员等,并对每一个角色的工作和职责都做了详尽的说明。
-
活动: How 的问题。活动是一个有明确目的的独立工作单元。
-
制品:What的问题。制品是活动生成、创建或修改的一段信息。
-
工作流::When 的问题。工作流描述了一个有意义的连续的活动序列,每个工作流产生一些有价值的产品,并显示了角色之间的关系。
2.2.3 RUP的特点
-
用例驱动:需求分析、设计、实现和测试等活动都是用例驱动的。
-
以体系结构为中心:包括系统的总体组织和全局控制、通信协议等。是一个多维的结构会采用多个视图来描述。在典型的4+1视图模型中:
-
分析人员和测试人员关心的是系统的行为,会侧重于用例视图。
-
最终用户关心的是系统的功能,会侧重于逻辑视图。
-
程序员关心的是系统的配置、装配等问题,会侧重于实现视图。
-
系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,会侧重于进程视图。
-
系统工程师关心的是系统的发布、安装、拓扑结构等问题,会侧重于部署视图。
-
-
迭代与增量。把整个项目开发分为多个迭代过程。在每次选代中,只考虑系统的一部分需求,进行分析、设计、实现、测试和部署等过程;每次迭代是在已完成部分的基础上进行的,每次增加一些新的功能实现,以此进行下去,直至最后项目的完成。
2.3 敏捷方法
◆敏捷模型
开发宣言:个体和交互 胜过 过程和工具、可以工作的软件 胜过 面面俱到的文档、客户合作 胜过 合同谈判、响应变化 胜过 遵循计划。
◆主要敏捷方法:
(1)极限编程(XP)。基础和价值观是交流、朴素、反馈和勇气,即任何一个软件项目都可以从4个方面入手进行改善:加强交流:从简单做起:寻求反馈;勇于实事求是XP 是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期:通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。◆XP提倡测试先行,为了将以后出现bug的几率降到最低。
(2)动态系统开发方法(DSDM)倡导以业务为核心,快速而有效地进行系统开发。DSDM认为任何事情都不可能一次性圆满完成,应该用20%的时间完成80%的有用功能,以适合商业目的为准。
。是一个增量的、迭代的开发过程。在这个框架中,整个开发过程由(3)并列争球法(Scrum)若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint,每个Sprint的建议长度是2一4周。按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品
敏捷模型(Agile Model),属于敏捷方法的模型。
2.3.1 开发宣言
-
个体和交互 胜过 过程和工具。
-
可以工作的软件 胜过 面面俱到的文档。
-
客户合作 胜过 合同谈判
-
响应变化 胜过 遵循计划
敏捷方法区别于其他方法的两个特点:
-
是“适应性”而非“预设性”。
-
是“面向人的”而非“面向过程的”。
敏捷方法的核心思想:
-
敏捷方法是适应型,而非可预测型拥抱变化,适应变化。
-
敏捷方法是以人为本,而非以过程为本。发挥人的特性。
-
迭代增量式的开发过程。以原型开发思想为基础,采用迭代增量式开发,发行版本小型化。
2.3.2 敏捷方法
敏捷模型的主要敏捷方法:
-
极限编程(XP):高效、低风险、测试先行(先写测试代码,再编写程序)。
-
水晶系列方法:不同的项目,采用不同的策略。
-
并列争球法(Scrum):该方法侧重于项目管理。Scrum 包括一系列实践和预定义角色的过程骨架(是一种流程、计划、模式,用于有效率地开发软件)。在 Scrum 中,使用产品 Backlog来管理产品的需求,产品 Backlog 是一个按照商业价值排序的需求列表。根据 Backlog 的内容,将整个开发过程分为若干个短的迭代周期(Sprint),在 Sprint 中,Scrum 团队从产品Backlog 中挑选最高优先级的需求组成 Sprint Backlog。在每个迭代结束时,Scrum 团队将递交潜在可交付的产品增量。当所有 Sprint 结束时,团队提交最终的软件产品。
-
特征驱动开发方法:该方法会将开发人员分类,分为指挥者(首席程序员)、类程序员等。
相关推荐
更多推荐
所有评论(0)