文章目录
软件危机
软件危机值在计算机软件的开发和维护过程中所遇到的一系列严重问题。
问题
1、如何开发软件,增长需求
2、如何维护软件
现象
- 对软件开发成本和进度估计往往很不准确
- 用户对“已完成“的软件系统不满意的现象经常发生
- 软件产品的质量往往靠不住
- 软件通常没有适当的文档资料
- 软件成本在计算机系统总成本中所占的比例逐年上升
- 软件开发产率提高的速度远远比不上计算机应用迅速普及深入的趋势
危机产生的原因
(1)软件的本身特点
- 不同于硬件,管理和控制软件开发过程较为困难
- 软件在运行过程中不会因为使用时间过长而被“用坏”,运行时发现的错误是在开发时期未能检测出来的错误。
- 不同于程序,规模大,且复杂性随程序规模的增加指数上升
(2)软件开发和维护的方法不正确:
- 忽视软件需求分析
- 认为软件开发就是写程序并设法使之运行
- 轻视软件维护
途径
- 良好的组织管理措施
- 推广使用在实践中总结出来的软件技术和方法并且调研探索更好的有效技术和方法
- 应该开发和使用更好的软件工具
软件
定义
软件是程序、数据及文档的完整集合
特点
- 软件是一种逻辑实体而不是具体的物理实体
- List item
软件工程方法学
3要素:方法、工具、过程
传统方法学:生命周期法
面向对象方法学:方法=对象+分类+继承+通过消息通讯------原因:当软件规模庞大或对软件需求模糊易变时,采用传统方法往往不成功
软件生命周期(过程模型)
软一个软件从提出直到最终被废弃的整个过程。
软件定义时期
- 问题定义 2. 可行性研究 3. 需求分析
软件开发时期
- 总体设计 2. 详细设计 3. 编码和单元测试 4. 综合测试
运行维护
软件过程
通常用LC来描述软件过程
理想瀑布模型
特点
阶段间具有顺序性和依赖性。必须等到前一个阶段工作完成后才能开始后一阶段的工作;只有前一阶段的工作正确后后一阶段才能得到正确的结果。
推迟实现的观点:在编码之前设置里系统分析与系统设计的阶段
质量保证的观点:每个阶段都有文档,每个阶段结束前都要尽早发现问题改造错误
实际瀑布模型
实线:开发过程 ; 虚线:维护过程
优点
- 强迫开发人员使用规范方法
- 严格规定了每个阶段必须提交的文档
- 要求每个阶段交出的所有产品都必须经过质量保证
缺点
- 不适合需求变化,只能用户需求不改变或很少改变的场合
- 最终才能看到可执行系统,风险较大
- 由文档驱动,用户只能通过文档来了解产品,而不能满足用户的真正需求
快速原型模型
解释:快速建立起来可以在计算机上运行的程序,让用户试,用户提出一堆建议,然后修改程序,如此反复。直到用户满意,写文档。
优点
不带负反馈环,软件开发基本上线性顺序进行----原因:原型系统通过与用户交互而得到验证;
缩短了开发周期,加快了工程进度。
降低成本。
.
缺点
减少由于需求不明确而带来的风险
不适合大型软件系统适合小的
增量模型
适用增量开发时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。
软件逐次交付
优点
能在较短时间内向用户提交可完成部分工作的产品
逐步增加产品功能,可以使用户有充裕的时间学习和适用新产品
缺点
将每个新的增量构件集成到现有团建体系结构中时,必须不破坏原来已经开发出的产品
软件体系架构非常重要,易于拓展
ATT
- 在开始构件前,必须全部完成需求分析、规格说明和概要设计的工作。
风险更大的增量模型
先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部的系统需求
风险在于:无法集成
螺旋模型
思想:使用原型及其他方法来尽量降低风险,在每个阶段前都加了风险分析过程的快速原型模型。
** 缺点**
- 多次迭代增加开发成本,延迟提交时间
- 若未能及时表示风险,会造成重大损失
优点
- 减少过多测试或测试不足带来的风险
- 维护只是模型的一个周期,维护与开发没有本质区别
螺旋线的每个周期 = 一个开发阶段
喷泉模型
面向对象
软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。
各个开发阶段没有特定的次序要求,并且可以交互进行。
优点
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
Rational统一过程
-
RUP软件开发
迭代是开发:每次迭代只考虑部分需求
使用基于构件的体系结构
管理需求:用户的需求可能不断发生变化
可视化建模
验证软件质量
控制软件变更将生命周期划分成4个阶段
-
敏捷过程和极限过程
极限编程属于敏捷编程,有对变化和不确定性的更快速更敏捷的反应特性,能在快速的同时保持可持续开发的速度。
-
微软过程
微软过程是RUP的精简版本包含若干个生命周期的持续递进循环,每个生命周期5各阶段构成;微软过程是敏捷过程的一个扩充版本,扩充了每个生命周期的各个阶段的具体工作流程
-
网构化软件过程
问题定义
问题指:软件的最基本问题
例如:
- 软件的总体目标是什么
- 有什么用途
- 为哪些用户设计