©️ OverlookArt

软件过程模型

软件过程模型习惯上称为软件开发模型,它是软件开发的全部过程、活动和任务的结构框架。典型的软件过程模型有瀑布模型螺旋模型增量模型喷泉模型基于构件的开发模型形式化方法模型敏捷模型统一过程模型

瀑布模型

瀑布模型将软件生命周期中的各个活动规定为依据线性顺序连接的若干阶段模型,包括需求分析、设计、编码、测试、运行与维护。如瀑布流水逐级下落。

flowchart TD 需求分析 --> 设计 --> 编码 --> 测试 --> 运行与维护

瀑布模型以项目的阶段性评审和文档控制为手段有效地对整个开发过程进行指导,所以它是以文档作为驱动、适合软件需求很明确的软件项目的开发。

  • 优点:容易理解、成本低、强调开发的阶段性早起计划及需求调查和产品测试。
  • 缺点:客户必须能完整、正确和清晰地表达需求;难以评估项目进度状态;项目快结束时出现大量的集成与测试工作;需求或设计的错误往往只有到了项目后期才能被发现,对项目风险的控制能力较弱,通常会导致项目延期,开发费用超出预算。

原型模型

原型模型也称为快速原型模型,通过快速构建原型并交付用户使用,收集客户反馈意见,目的是明确当前系统的需求

原型模型适用于用户需求不明确需要经常变化系统规模不太大、不太复杂的软件项目

特点:

  1. 实际可行。
  2. 具有最终系统的基本特征。
  3. 构造方便、快捷、造价低。
    原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的。

螺旋模型

螺旋模型(Spiral Model)是在原型模型的基础上扩展而成。对于一个复杂的大项目,开发一个原型往往达不到要求。螺旋模型将瀑布模型和原型模型结合起来,加入两种模型均忽略的风险分析。

螺旋模型中的每个螺旋周期分为4个步骤:

  • 目标设定
  • 风险分析
  • 开发和有效验证
  • 评审

螺旋模型强调风险分析,与瀑布模型相比,支持用户需求的动态变化
螺旋模型适用于庞大、复杂且具有高风险的系统

增量模型

增量模型将需求分段为一系列产品,每一个增量都可以分别开发

flowchart LR 增量1:分析 --> 设计 --> 编码 --> 测试 --> 交付客户
flowchart LR 增量2:分析 --> 设计 --> 编码 --> 测试 --> 交付客户
flowchart LR 增量n:分析 --> 设计 --> 编码 --> 测试 --> 交付客户
  • 优点:第一个可交付的版本成本和时间很少;降低了适应用户需求变更的成本;具有瀑布模型所有优点。
  • 缺点:若没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量不稳定;由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量
  • 与原型模型不同的是增量模型的每一次增量版本都可作为独立可操作的产品,而原型的构建一般是为了演示。

喷泉模型

喷泉模型以用户需求为动力、以对象为驱动模型,适用于面向对象的开发方法。它克服了瀑布模型不支持重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性

flowchart TD 分析 --> 设计 --> 实现 --> 维护 --> 演化
  • 优点:各个阶段没有明显的界限,开发人员可以同步进行,可以提高软件项目的开发效率,节省开发时间。
  • 缺点:由于在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理;要求严格管理文档,使得审核难度加大。

基于构件的开发模型

基于构件的开发模型CBSD是指利用预先封装构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。
特点是增强了可复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。

构件(Component)是面向软件体系架构的可复用软件模块。构件是可复用的软件组成部分,可被用来构建其他软件。它可以是被封装的对象类、功能模块、软件框架、软件架构、文档、设计模式等。

形式化方法模型

形式化方法建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机形式化的数学规格说明

敏捷开发模型

敏捷开发宣言:个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、响应变化胜过遵循计划。

敏捷开发的核心思想:

  1. 敏捷方法是适应型,而非可预测型。拥抱变化,适应变化。
  2. 敏捷方法是以人为本,而非以过程文本。发挥人的特性。
  3. 迭代增量式的开发过程。以原型开发思想为基础,采用跌倒增量式开发,发行版本小型化。

特点:

  1. 是"适应性"而非"预设性"。
  2. 是"面向人的"而非"面向过程的"

主要的敏捷方法:

  1. 极限编程(XP):四大价值观:交流朴素反馈勇气。即任何一个软件项目都可以从4个方面入手进行改善:加强交流、从简单做起、寻求反馈、用于实事求是。
  2. 水晶法(Crystal):与 XP 方法一样,都是以人为中心的理念,但在实际上有所不同。其目的是发展一种提倡“机动性的”方法,包含具有共性的核心元素,每个都含有独特的角色过程模型工作产品实践。认为人对软件质量有重要影响,随着开发人员素质的提高,项目和过程的质量也随之提高。
  3. 并列争球法(Scrum):一种迭代增量化的过程,把每段时间(如30天)一次的迭代称为一个冲刺,并按需求的优先级别来实现产品,多个自组织和自洽的小组并行地递增实现产品。
  4. 特征驱动开发方法(FDD):是一个迭代开发模型。FDD 认为有效的软件开发需要3个要素:人、过程、技术。FDD5个核心过程:开发整体对象模型构造特征列表计划特征开发特征设计和特征构建

统一过程模型

统一过程模型(RUP)描述了如何有效地利用商业的、可靠的方法开发和部署软件,是一种重量级过。RUP类似一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针、模版以及事例支持。

RUP 的生命周期是一个二维的软件开发模型,有9个核心工作流:

  • 业务逻辑:理解待开发系统所在的机构及其商业运作,确保所有参与人员对待开发系统所在的机构有共同的认识,评估待开发系统对所在机构的影响。
  • 需求:定义系统功能及用户界面,使客户知道系统的功能,使开发人员理解系统的需求,为项目预算及计划提供基础。
  • 分析与设计:把需求分析的结果转化为分析与设计模型。
  • 实现:把设计模型转化为实现结果,对开发的代码做单元测试,将不同实现人员开发的模块集成为可执行系统。
  • 测试:检查各子系统之间的交互、集成,验证所有需求是否均被正确实现,对发现的软件质量上的缺陷进行归档,对软件质量提出改造建议。
  • 部署:打包、分发、安装软件、升级就系统;培训用户及销售人员,并提供技术支持。
  • 配置与变更管理:跟踪并维护系统开发过程中产生的所有制品的完整性和一致性。
  • 项目管理:为软件开发项目提供计划、人员分配、执行、监控等方面的指导,为风险管理提供框架。
  • 环境:为软件开发机构提供软件开发环境,即提供过程管理和工具的支持。

统一过程模型RUP把软件开发生命周期划分为多个循环,每个循环生成产品的一个新的版本,每个循环由4个连续的阶段组成,每个阶段完成特定的任务,这4个阶段如下:

  1. 初始阶段:定义最终产品视图和业务模型,并确定系统范围。
  2. 细化阶段:设计及确定系统的体系结构,制定工作计划及资源要求。
  3. 构造阶段:构造产品并继续演进需求、体系结构、计划直至产品提交。
  4. 移交阶段:把产品提交给用户使用。

统一过程模型 RUP 的核心概念:

  • 角色:角色描述某个人或一个小组的行为与职责。RUP 预先定义了很多角色,如体系结构师、设计人员、实现人员、测试人员和配置管理人员等,并对每一个角色的工作和职责做详尽的说明。
  • 活动:活动是一个有明确目的的独立工作单元。
  • 制品:制品是活动生成、创建或修改的一段信息。
  • 工作流:描述了一个有意义的连续的活动序列,每个工作流产生一些有价值的产品,并显示了角色之间的关系。

统一过程模型 RUP 是用例驱动、以体系结构为中心、迭代和增量的软件开发过程。其特点为:

  1. 用例驱动:需求分析、设计、实现和测试等活动都是用例驱动。
  2. 以体系结构为中心:包括系统的总体组织和全局控制、通信协议等。是一个多维的结构,会采用多个视来描述。在典型的4+1视图模型中:
    • 分析人员和测试人员关心的是系统的行为,会侧重于用例视图
    • 最终用户关心的是系统的功能,侧重于逻辑视图。
    • 程序员关心的是系统的配置、装配等问题,侧重于实现视图
    • 系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,侧重于进程视图。
    • 系统工程师关心的是系统的发布、安装、拓扑结构等问题,侧重于部署视图。
  3. 迭代与增量:把整个项目开发分为多个迭代过程。在每次迭代中只考虑系统的一部分需求,进行分析、设计、实现、测试和部署等过程;每次迭代是在已完成部分的基础上进行的,每次增加一些新的功能实现,以此进行下去,直至最后项目的完成。