一、背景知识:
软件开发的基本过程:
需求定义→软件设计→软件实现→软件测试→软件维护
软件的定义:
软件=程序+数据+文档
程序:可以按照设计好的功能和性能要求执行的指令序列
数据:程序能正确处理信息的数据结构
文档:与程序的开发、维护、使用有关的图文资料
软件的特点:
- 包含个人因素的大规模知识型工作
- 有工具辅助的软件开发也尚未实现自动化(即无法像硬件加工一样,机械组装已有部件,软件开发还未达到组装已有模块的程度)
- 对开发和运行的计算机软硬件环境具有依赖性
- 需求往往在变更,开发进度难估算
- 软件测试困难,覆盖所有路径的测试难实现。软件测试只能证明软件中有缺陷,不能证明软件中没有缺陷。
- 软件不会损耗,(参考硬件的磨损和老化),软件维护不再具有经济性时,软件即被淘汰
软件危机:
- 1965年——1985年,20世纪60——80年代
- 于1968年提出
- 催生了软件工程这一学科
- 没有化解软件危机的灵丹妙药,已知的技术和方法都是进一步改进
SWEBOK(软件工程知识体系指南)
PDCA环(戴明环):
二、软件过程:
以质量为中心,以软件工程,方法,工具为三要素。其中软件过程是基础,是联系各层的桥梁,工具为过程和方法提供支持。
软件过程的定义:软件过程定义了软件开发中的一系列活动,所以过程都具有下列活动:
- 沟通
- 建模
- 计划
- 构造
- 部署
- 项目管理(贯穿于以上所有活动)
软件生命周期:
- 定义时期:问题定义,可行性研究,需求分析
- 开发时期:概要设计,详细设计,编码,测试
- 运行/维护时期
软件过程模型:
- 模型不是过程的直接描述,而是过程的抽象。可以用于解释软件产品不同的开发方法。
- 从项目需求定义到运行维护为止,跨越整个生命周期的过程,活动和任务的结构框架。
- 也被称为:软件生命周期模型,软件开发模型,软件工程范型
瀑布模型:
- 20世纪80年代之前被广泛使用,因此被称为经典的生命周期模型。
- 线性模型:软件开发过程与生命周期是一致的,规定了各项工程活动的自上而下,逐级下落的次序。
- 以文档为驱动
传统的瀑布模型:
- 各个阶段都按顺序执行
- 每个阶段完成规定的文档
- 每个阶段结束有一个验证环节,只有通过验证才能进入下一个阶段
- 阶段间具有顺序性和依赖性:前一阶段的输出文档就是后一阶段的输入文档
- 推迟实现的观点(重要思想):区分开逻辑设计和物理设计,推迟程序的物理实现
- 质量保证的观点:每个阶段必须完成规定的文档,并在阶段结束前进行审核
实际的(带反馈的)瀑布模型:
若后面的阶段发现前面阶段的错误,则返回前面阶段进行修改。
瀑布模型的优缺点:
- 每个阶段交出的作品都是经过验证的,每个阶段都有文档。
- 能较好的与其它过程模型结合
- 不够灵活:下一阶段开始前,当前阶段的结果需固定下来
- 整体性太强:分析阶段出现任何失误,交互用户后才能发现,增加了开发的风险
- 严格文档驱动,较为繁琐
- 开发早期投入大量成本,难以应对用户需求变更
瀑布模型适用于:需求很明确且将来没有太大改变的情况。
演化模型: