第二章 软件过程
软件工程的目标是在规定的时间和预算内开发出高质量软件。
软件项目失败的主要原因几乎与技术和工具没有任何关系,更多的是由于缺少过程规范,只有建立规范的软件开发过程,并持续不断地加以改进,才能管理和控制软件产品的质量。
一.软件过程的概念
1.任务思维与过程思维
软件发展的前期阶段:强调软件开发结果,忽略软件开发过程。(类似于黑盒子)
Watts Humphery首先将过程管理的原则和思想引入软件开发过程中,将软件开发任务看做是一个可控的,可度量的和可改进的过程。
2.软件过程的定义
软件过程的“粘合”性质:软件过程是软件工程人员为了获得软件产品而在软件工具的支持下实施的一系列软件工程活动。
3.软件过程的基本活动
①问题提出
②软件需求规格:明确软件过程。(文档的重要性)
③软件设计
④软件实现
⑤软件确认:先分开测试各个组件,再集成测试。
⑥软件演化:是一个不断演化的过程。
4.软件过程的制品
软件需求:构想文档;需求模型;软件需求规格说明。
软件设计:软件系统结构文档;设计模型。
软件实现:源程序;目标代码;可执行构件。
软件测试:测试规格;测试用例;软件测试报告。
软件实施:相关的运行时文档;用户手册。
开发管理制品:①计划文档:工作分解结构;业务实例;发布规格说明;软件开发计划。
②运行文档:发布版本说明;状态评估;软件变更申请;实施文档;环境(环境包括系统的硬件和软件配置、软件开发工具以及相应的间接培训等)。
什么是脚本?
纯文本保存的文件;是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。
二.软件过程模型
软件过程模型描述软件过程的整体框架,它是软件过程的一种抽象表示。
1.瀑布模型(经典)
由Winston Royce在1970年提出。
它将软件过程划分为需求定义与分析、软件设计、软件实现、软件测试和运行维护等一系列基本活动,并且规定这些活动自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落,严格按照线性的方式进行。
适用于在开发的早期阶段软件需求被完整确定的情况,显然这种要求过于理想化。
2.快速原型模型(快速)
第一步是迅速构建一个可以运行的软件原型;第二步则在第一步的基础上开发客户满意的软件产品。
缺点:开发技术和工具往往不一定符合主流的发展,快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
3.增量模型
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。
第一个增量往往是实现基本需求的核心产品。
缺点:软件需具备开放式的体系结构;
软件过程的控制失去整体性。
4.螺旋模型(重视风险分析)
强调了其他模型所忽视的风险分析,特别适合于大型复杂的软件系统。
缺点:适用于内部的大规模软件开发;
只适用于大规模软件项目;
软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险。
5.形式化方法模型(难掌握)
适用于那些对安全性、可靠性和保密性要求极高的软件系统开发,它采用形式化的数学方法将系统描述转换成可执行的程序。
缺点:难以掌握;
难以用形式化方法进行描述;
在成本和质量等方面并不占有优势。
6.基于组件的开发模型(软件复用)
提高开发效率和产品质量,降低开发风险和成本 ,能够快速交付所开发的软件。
三.案例:微软公司的软件开发过程
1.微软公司的开发管理原则
①以目标驱动的开发过程。
②具有外部可见的里程碑。
③基于多版本的产品发布。
④并行协作的小型化团队。
⑤经常性的同步和稳定。
2.微软公司的软件过程模型
微软公司的软件开发过程模型由规划、设计、开发、稳定和发布5个主要阶段组成,每个阶段都是由里程碑驱动的。
⑴规划阶段:项目团队必须对项目的前景有一个清晰的认识,明确最终要提供给客户的是什么样的产品。
⑵设计阶段:程序经理根据产品的远景目标,完成软件的功能或特性规格说明书,并确定产品开发的主要进度。
⑶开发阶段:开发任务划分为若干阶段,并设置多个内部里程碑,在每个里程碑都提交阶段性的工作成果。
⑷稳定阶段:在产品代码基本完成的情况下,测试人员根据产品规格说明书,对开发人员提交的软件产品进行功能测试和性能测试。
⑸发布阶段:再确认产品质量符合发布标准之后,程序经理将产品的最终发布版发送到软件生产工厂。
3.递进式的软件开发策略
递进式的软件开发模式具有易于管理和适应变化的显著特点:
①解决问题的及时性。
②不确定和变更因素的可控性。
③缩短产品上市周期。