软件工程学概述
1.软件危机
在计算机系统发展早期(29世纪60年代以前),软件知识为每个具体应用而专门编写的。规模小,编写和使用者都是同一个(或一组)人。所以人们基本没有保留任何的文档资料。
但是从60年代到70年代中期,出现了“软件作坊”,软件数量极度彭藏。使得没有文档的软件难以维护。“软件危机”出现。进而促发了“软件工程”这个词。
1.1.软件危机介绍
软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。
概括的说,软件危机包含:如何开发软件,以满足软件日益增长的需求;如何维护数量不断膨胀的已有软件。
具体的典型表现:
- 对软件开发成本和进度的估计不准确。
- 用户对“已完成的”软件系统不满意。
- 软件产品的质量往往靠不住。
- 软件不可维护。
- 软件通常没有适当的文档资料。
- 软件成本在计算机系统成本中所占比例逐年上升。
- 软件开发生产率提高的速度,亚UN亚UN跟不上计算机应用迅速普及以及深入的趋势。
1.2软件危机产生的原因
归因于计算机系统发展初期开发的个体化。忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等。实际上软件真正开发时间只占全部工作量的10%~20%。
一个软件产品必须由一个完整的配置组成:程序,文档,数据等。必须清除只重视程序而忽视软件配置其余成分的糊涂观念。
后期引入一个变化比在早期引入相同变动所需付出的代价高23个数量级。所以重视维护很重要,实际上用于软件维护的费用占软件总费用的55%70%。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。
2.软件工程
2.1.软件定义
软件是程序,数据以及相关文档的完整集合。
- 程序是能够完成预定功能和性能的可执行的指令序列
- 数据是使程序能够适当的处理信息的数据结构
- 文档是开发,使用和维护程序所需要的图文资料
2.2.软件工程定义
概括讲是指导软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验和证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地高质量的软件并有效地维护它,这就是软件工程。
2.3.软件工程本质特征
- 软件工程关注大型程序的构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件效率非常重要
- 和谐地合作是开发软件的关键
- 软件必须有效地支持它的用户
- 在软件工程领域中通常由一种文化背景的人替具有另一种文化背景的人创造产品
2.4.软件工程的基本原理
- 用分阶段的生命周期计划严格管理
- 生命周期分若干阶段,指定可行计划,然后严格按照计划管理。
- 坚持进行阶段评审
- 质量保证工作不能等到编码阶段结束后再进行。设计错误占软件错误的63%,编码仅占37%,错误发现与改正的越晚,付出的代价就越高。因此每个阶段一定要进行严格的评审。
- 实行严格的产品控制
- 开发过程中不应随意改变需求,因为一项需求往往需要付出较高的代价。当改变需求时,必须实行严格的产品控制,其中主要是实行基准配置管理(经过极端评审后的软件配置成分,包括文档和程序代码)。需求变更必须按照严格的规程进行评审,获得批准后才能实施修改。
- 采用现代程序设计技术
- 采用先进的技术不仅可以提高软件开发和维护的效率,还可以提高软件产品的质量。
- 结果应能清除地审查
- 应该根据总目标以及完成期限,规定开发组织的责任和产品标准。
- 开发小组的人员应该少而精
- 好的开发人员的开发效率是素质低的几倍甚至是几十倍,而且出错率明显少于低素质的。随之开发人员的增加,因为交流讨论问题而造成的通信开销也急剧增加。
- 承认不断改进软件工程实践的必要性
- 不仅要积极主动的采纳新的软件技术,而且要不断总结经验。如:收集进度和资源耗费数据,收集出错类型和问题报告数据等并且进行分析总结。
2.5.软件工程方法学
2.5.1.传统方法学
把软件生命周期的全过程一次划分为若干个阶段,然后顺序的完成每个阶段的任务。
2.5.2.面向对象方法学
4个要点:
- 把对象作为融合了数据及在数据的操作行为的统一的软件构件。
- 把所有的对象都分成类。
- 按照父类与子类的关系,把若干相关类组成一个层次结构的系统。
- 对象彼此间能通过发送消息互相联系。
面向对象方法学促进了软件重用,进一步提高了面向对象软件的可重用性。