第2章 软件过程
软件项目的失败更多是由于缺少过程规范。只有建立规范的软件开发过程,并持续不断的加以改进,才能管理和控制软件产品的质量。
一、软件过程的概念
在软件发展的前期阶段,人们强调软件开发的结果而忽略软件开发的过程,即任务思维的模式。这种模式下,用户交互只发生在确定需求知识和产品发布之后,不符合实际。
Watts Humphrey 认为“为了解决软件的问题,首要的步骤是将整个软件开发任务看做是一个可控的、可度量的和可改进的过程”。即过程思维的模式。整个软件开发过程被划分成若干可管理的开发阶段,让用户的声音和过程的声音吻合。
软件过程定义:软件工程人员为了获得软件产品而在软件工具的支持下实施的一系列软件工程活动。
软件过程的基本活动:问题提出、软件需求规格说明、软件设计、软件实现、软件确认和软件演化等活动。
软件过程的制品涉及软件需求、软件设计、软件实现、软件测试和软件实施等活动产生的结果。具体如下:
软件需求:构想文档、需求模型、软件需求规格说明;
软件设计:软件体系结构文档、设计模型;
软件实现:源代码、目标代码、可执行构件;
软件测试:测试规程、测试用例、软件测试报告;
软件实施:相关的运行时文件、用户手册;
开发管理制品:计划文档:工作分解结构、业务案例、发布规格说明、软件开发计划;运行文档:发布版本说明、状态评估、软件变更申请、实施文档、环境。
二、软件过程模型
瀑布模型:将软件过程划分为需求定义与分析、软件设计、软件实现、软件测试和运行维护等一系列基本活动,并且规定这些活动自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。适用于在开发的早期阶段软件需求被完整确定的情况。
快速原型模型:第一步是迅速构建一个可以运行的软件原型,实现客户和未来的用户与系统的交互,有用户和客户对该原型进行评价,并进一步细化待开发软件的需求。经过逐步调整原型使其满足客户的需求之后。开发人员可以将客户的真正需求确定下来;第二步则在第一步的基础上开发客户满意的软件产品。
增量模型:软件被作为一系列的增量构件来设计、实现、集成和测试。在各个阶段交付满足客户需求的一个子集的可运行产品。第一个增量往往是实现基本需求的核心产品,核心产品交付用户使用后,经过评价形成下一个增量的开发计划,其中包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,知道产生最终的完善产品。
螺旋模型:将软件过程划分为若干个开发回线,每一个回线表示开发过程的一个阶段,每一个回线又被分为4个步骤,即首先确定该阶段的目标,完成这些目标的选择方案及其约束条件;其次从风险角度分析方案的开发策略,努力排除各种潜在的风险,在需求不合适的情况下可能需要原型系统;如果风险不能排除,该方案可能立即终止,否则继续启动下一步的软件开发和验证工作;最后,评价该阶段的结果,并规定下一个开发阶段。它将瀑布模型和快速原型模型结合起来,强调风险分析,特别适合于大型复杂的软件系统。
形式化方法模型:首先将软件需求描述提炼成采用数学符号表示的形式化描述,然后经过一系列的形式化转换将形式化描述自动转换成可执行程序,最后将整个系统集成起来测试。适合于那些对安全性、可靠性和保密性要求极高的软件系统开发。
基于组件的开发模型:在确定需求描述的基础上,开发人员首先寻找满足要求的现成组件,并对所得到的组件信息进行分析;在组件分析的基础上,开发人员可能适当修改需求以适应所选择的组件,也可能修改现有的组件或继续寻找新的组件;在组件选择完成之后,开发人员开始设计或者选用已有的体系结构框架,复用所选择的组件,必要时也可能设计开发一些新的组件;最后,将所有的组件继承在一起,并完成系统测试。
三、案例:微软公司的软件开发过程
微软公司的开发管理原则:以目标驱动的开发过程;具有外部可见的里程碑;基于多版本的产品发布;并行协作的小型化团队;经常性的同步和稳定。
微软公司的软件过程模型:由规划、设计、开发、稳定和发布5个主要阶段组成,而且每个阶段都是由里程碑驱动的。
微软公司的软件开发过程采用递进式的开发策略,即产品的功能并不是在一次开发过程中全部完成,而是在不断推出的多个版本中逐渐形成和完善。