第一部分 软件与软件工程
1. 软件的概念、特点
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据以及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。
软件的分类
软件危机
计算机软件的开发和维护过程所遇到的一系列严重问题。
软件危机表现
- 对软件开发成本和进度的估算很不准确
- 难以准确获取用户需求,用户不满意
- 质量很不可靠,没有适当的文档
- 缺乏方法指导和工具支持,大型软件系统经常失败
- 供不应求:软件开发生产率跟不上计算机应用的迅速发展
做好软件定义时期的工作,是降低软件成本提高软件质量的关键。
解决途径
- 组织管理
- 工程项目管理方法
- 技术措施
- 软件开发技术与方法
- 软件工具
2. 软件工程
用工程、科学和数学的原则和方法研制、维护计算机软件的有关技术及管理方法。
三要素
- 方法
- 工具
- 过程
软件工程目标之间的关系
软件工程的原则
原则一:抽象
抽取事物最基本的特性和行为,忽略非基本的细节。采用分层次抽象、自顶向下、逐层分解的办法控制软件开发过程的复杂性。例如:软件瀑布模型、结构化分析方法、结构化设计方法,以及面向对象建模技术等都体现了抽象的原则。
原则二:信息隐蔽
将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问。
原则三:模块化
模块是程序在逻辑上相对独立的成分,是独立的编程单位,应有良好的接口定义。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。
原则四:局部化
要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证 模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于加强模块的独立性,控制解的复杂性。
原则五:确定性
软件开发过程中所有概念的表达应该是确定的、无歧义的、规范的。这有助于人们之间在交流时不会产生误解、遗漏,保证整个开发工作协调一致。
原则六:一致性
整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致。
原则七:完备性
软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。
原则八:可验证性
开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统已于检查、测试、评审的原则,以确保系统的正确性。
软件工程的本质特征
- 软件工程关注大型程序的构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件的效率非常重要
- 和谐地合作是开发软件的关键
- 软件必须有效地支持它的用户
- 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人
软件工程的基本原理
原理一:用分阶段的生命周期计划严格管理
把软件生命周期划分为若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发和维护工作进行管理。
原理二:坚持进行阶段评审
软件的质量保证工作不能等到编码阶段结束之后再进行。错误发现与改正越晚,所需付出的代价也越高。因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。
原理三:实行严格的产品控制
原理四:采用现代程序设计技术
采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。
原理五:结果应能清楚地审查
应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。
原理六:开发小组的人员应该少而精
3. 软件工程方法学
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。
方法学三要素
- 方法,回答“怎么做”的问题
- 工具
- 过程
使用最广泛的软件工程方法学
- 传统方法学→面向数据流、结构化
- 软件分析→总体设计→详细设计→面向过程的编码→测试
- 面向对象方法学
- 软件分析与对象抽取→对象详细设计→面向对象的编码→测试