软件过程模型

软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程称为软件的生命周期。软件生命周期描述了软件从生到死的全过程。

软件过程是制作软件产品的一组活动以及结果,这些活动主要由软件人员来完成,主要包括软件描述、软件开发、软件有效性验证和软件进化

瀑布模型

瀑布模型是经典的软件开发模型,瀑布模型是最早使用的软件生存周期模型之一,其特点是:

因果关系紧密相连,前一个阶段工作的结果是后一个阶段工作的输入。或者说,每一个阶段都是建立在前一个阶段的正确结果之上,前一个阶段的错误和疏漏会隐蔽地带入后一个阶段。这种错误有时甚至可能是灾难性的,因此每一个阶段工作完成后,都要进行审查和确认。其活动之间存在因果关系,前一阶段工作的结果是后一阶段工作的输入描述。

原型模型

原型模型主要包含两个阶段:

Diagram

原型模型后续也发生了一些演变,按照原型的作用不同,出现了抛弃型原型和演化性原型:

  • 抛弃型原型是将原型作为需求确认的手段,在需求确认结束后,原型就被抛弃不用,重新采用一个完整的瀑布模型进行开发。

  • 演化性原型是在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。

螺旋模型

螺旋模型是在原型模型基础上开发而来,它把软件开发流程分为多个阶段,每个阶段都由 4 个部分组成:

Diagram

敏捷模型

敏捷方法的核心思想主要有以下三点。

  • 敏捷方法是“适应性”而非“可预测性”的。而敏捷方法则欢迎变化,其实它的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。

  • 敏捷方法是以人为本,而不是以过程为本。传统方法以过程为本,强调充分发挥人的特性,不去限制它,并且软件开发在无过程控制和过于严格烦琐的过程控制中取得一种平衡,以保证软件的质量。

  • 迭代增量式的开发过程。敏捷方法以原型开发思想为基础,采用迭代增量式开发,发行版本小型化。

与RUP相比,敏捷方法的周期可能更短。敏捷方法在几周或者几个月的时间内完成相对较小的功能,强调的是能尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强,并且更加强调团队中的高度协作。相对而言,敏捷方法主要适合于以下场合:

  • 项目团队的人数不能太多,适合于规模较小的项目。

  • 项目经常发生变更。敏捷方法适用于需求萌动并且快速改变的情况,如果系统有比较高的关键性、可靠性、安全性方面的要求,则可能不完全适合。

  • 从组织结构的角度看,组织结构的文化、人员、沟通性决定了敏捷方法是否使用。

影响比较大的敏捷方法有:

  • 极限编程(Exetreme Programming, XP)

  • 水晶系列方法

  • Scrum

  • 特征驱动方法(Feature Driven Development, FDD)

    致力于短时的迭代。编程开发人员分为首席程序员和“类”程序员(class owner)两种。

  • 开发源码式方式

    适用于开发人员在地域上分布很广的的情况。

统一过程模型

RUP(Rational Unified Process)是一个基于构件 的软件架构,它将项目管理、业务建模、分析与设计等统一起来,贯穿整个开发过程。

RUP中的软件过程在时间上被分解为4个顺序的阶段:

Diagram

每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。

可以看出,基于 RUP 的软件过程是一个迭代和增量的过程。通过初始、细化、构建和移交4个阶段就是一个开发周期,每次经过这 4 个阶段就会产生一代软件。除非产品退役,否则通过重复同样的 4 个阶段,产品将演化为下一代产品,但每一次的侧重点都将放在不同的阶段上。这样做的好处是在软件开发的早期就可以对关键的、影响大的风险进行处理。

RUP 采用 \(4+1\) 视图模型来描述软件系统的体系结构:

Diagram

不同人员关系的视图不同:

视图侧重点关心人员

用例视图

系统的行为

分析人员和测试人员

逻辑视图

系统的功能

最终用户

实现视图

系统的配置、装配等

程序员

进程视图

系统的性能、可伸缩性、吞吐率等

系统集成人员

部署视图

系统的发布、安装、拓扑结构等

系统工程师

RUP 强调采用迭代和增量的方式来开发软件,把整个项目开发分为多个迭代过程。在每次迭代中,只考虑系统的一部分需求,进行分析、设计、实现、测试和部署等过程:每次迭代是在已完成部分的基础上进行的,每次增加一些新的功能实现,以此进行下去,直至最后项目的完成。软件开发采用选代和增量的方式有以下好处。

  1. 在软件开发的早期就可以对关键的、影响大的风险进行处理。

  2. 可以提出一个软件体系结构来指导开发。

  3. 可以更好地处理不可避免的需求变更。

  4. 可以较早得到一个可运行的系统,鼓舞发团队的士气,增强项目成功的信心。

  5. 为开发人员提供一个能更有效工作的开发过程。

软件成熟度模型

能力成熟度模型(Capability Maturity Model,CMM)描述了软件发展的演进过程,从毫无章法、不成熟的软件开发阶段到成熟软件开发阶段的过程。

CMMI(Capability Maturity Model IntegrationforSoftware,软件能力成熟度模型集成)是在 CMM 的基础上发展而来的。

CMMI 将软件过程改进的步骤组织 5 个成熟度等级:

Diagram
Last moify: 2024-12-23 06:52:33
Build time:2025-08-18 18:43:08
Powered By asphinx