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