系统软件过程模型

软件开发生命周期

软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等

软件开发时期:就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。

软件运行和维护:就是把软件产品移交给用户使用

软件系统文档

用户文档主要描述系统功能和使用方法,并不关系这些功能是怎样实现的;

系统文档描述系统设计、实现和测试等各方面的内容

软件工程设计

软件工程过程

P(Plan):软件规格说明。规定软件的功能及其运行时的限制。

D(Do):软件开发。开发出满足规格说明的软件。

C(Check):软件确认。确认开发的软件能够满足用户的需求。

A(Action):软件演进。软件在运行过程中不断改进以满足客户新的需求。

软件设计活动

数据设计、架构(体系结构)设计、人机界面(接口)设计和过程(功能)设计

能力成熟度模型CMM

能力等级 特点
初始级 软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。
可重复级 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功
已定义级 管理和工程两方面的软件过程已经文档化、标准化
已管理级 制定了软件过程和产品质量的详细度量标准。对软件过程和产品质量有定量的理解和控制
优化级 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进

能力成熟度集成模型CMMI

是若干过程模型的综合和改进,不仅仅软件,而是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率

阶段式模型:

能力等级 特点
初始级 过程不可预测且缺乏控制
已管理级 过程为项目服务
已定义级 过程为组织服务
定量管理 过程已度量和控制
优化级 集中于过程改进和优化

连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级

软件过程模型

软件过程模型是一种规划和组织软件开发过程的方法,过程模型通常由一系列阶段和任务组成,这些任务在软件开发的不同阶段中都有特定的目标。每个阶段都有自己的任务和产出物,这些产出物构成了软件开发的不同部分,最终汇总成完整的软件产品

瀑布模型(SDLC)

是一个经典的软件生命周期模型,一般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码、测试、运行维护等几个阶段

1

模型特点:

从上一项开发活动接受该项活动的工作对象作为输入。利用这一输入,实施该项活动应完成的工作内容。

给出该项活动的工作成果,作为输出传给下一项开发活动

对该项活动的实施工作成果进行评审。若其工作成果得到确认,则继续进行下一项开发活动;否则返回前一项,甚至更前项的活动。尽量减少多个阶段间的反复。以相对来说较小的费用来开发软件,适用于需求明确的情况

原型化模型

第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。适合于需求不明确的情况

模型特点:

实际可行

具有最终系统的基本特征

构造方便、快速,造价低。原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的

螺旋模型

螺旋模型是一个演化软件过程模型,将原型实现的迭代特征与线性顺序(瀑布)模型中控制的和系统化的方面结合起来。在螺旋模型中,软件开发是一系列的增量发布

1

模型特点:

重点是风险控制分析

开发过程具有周期性重复的螺旋线状。四个象限分别标志每个周期所划分的四阶段:制订计划、风险分析、实施工程和客户评估。螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的系统

V模型

V模型从整体上看起来,就是一个V字型的结构,由左右两边组成。左边的下画线分别代表了需求分析、概要设计、详细设计、编码。右边的上画线代表了单元测试、集成测试、系统测试与验收测试

1

模型特点:

单元测试的主要目的是针对编码过程中可能存在的各种错误;

集成测试的主要目的是针对详细设计中可能存在的问题

系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行;

验收测试通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要。

V模型适用于需求明确和需求变更不频繁的情形

增量模型

首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付

1

模型特点:

但由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不用的是增量模型的每一次增量版本都可作为独立可操作的作品,而原型的构造一般是为了演示

喷泉模型

是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。使开发过程具有迭代性和无间隙性

基于构件的开发模型(CBSD)

也称之为快速开发模型,主要是利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软

件构件。特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本

形式化方法模型

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

敏捷模型

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

模型特点:

是“适应性”而非“预设性”。

是“面向人的”而非“面向过程的”。

敏捷方法是适应型,而非可预测型。拥抱变化,适应变化。

敏捷方法是以人为本,而非以过程为本。发挥人的特性。

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

模型方法:

极限编程(XP):基础和价值观是交流、朴素、反馈和勇气,即任何一个软件项目都可以从4个方面入手进行改善:加强交流:从简单做起:寻求反馈;勇于实事求是。

• XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期:通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。

• XP提倡测试先行,为了将以后出现bug的几率降到最低

水晶系列方法。与XP方法一样,都有以人为中心的理念,但在实践上有所不同。其目的是发展一种提倡“机动性的”方法,包含具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。

并列争球法(Scrum)。是一种迭代的增量化过程,把每段时间(如30天)一次的迭代称为个“冲刺”(Sprint),并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。

特性驱动开发方法(FDD)。是一个迭代的开发模型。认为有效的软件开发需要3个要素:人、过程和技术。有5个核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建

统一过程模型(RUP)

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

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

业务建模

需求

分析设计

实现

测试

部署

配置与变更

项目管理

环境

RUP把软件开发生命周期划分为多个循环,每个循环生成产品的一个新的版本,每个循环依次由4个连续的阶段组成,每个阶段完成确定的任务。这4个阶段如下。

初始阶段:定义最终产品视图和业务模型,并确定系统范围。

细化阶段:设计及确定系统的体系结构,制订工作计划及资源要求。

构造阶段:构造产品并继续演进需求、体系结构、计划直至产品提交。

移交阶段:把产品提交给用户使用

模型特点:

用例驱动:需求分析、设计、实现和测试等活动都是用例驱动的。

以体系结构为中心:包括系统的总体组织和全局控制、通信协议等。是一个多维的结构,会采用多个视图来描述

迭代与增量:把整个项目开发分为多个迭代过程。在每次选代中,只考虑系统的一部分需求,进行分析、设计、实现、测试和部署等过程;每次迭代是在己完成部分的基础上进行的,每次增加一些新的功能实现,以此进行下去,直至最后项目的完成

4+1 视图模型:

1

分析人员和测试人员关心的是系统的行为,会侧重于用例视图;

最终用户关心的是系统的功能,会侧重于逻辑视图;

程序员关心的是系统的配置、装配等问题,会侧重于实现视图;

系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,会侧重于进程视图;

系统工程师关心的是系统的发布、安装、拓扑结构等问题,会侧重于部署视图