在了解软件工程之前,我们首先要明白一个很重要的问题
软件的定义
软件是能够完成预定功能和性能的可执行的计算机程序,包括使程序正常执行所需要的数据,以及有关描述程序操作和使用的文档。简而言之,可以表述为
软件 = 程序 + 数据 + 文档
软件危机
它的起因:
- 软件需求量增加,规模也日益增加,带来了它的复杂度的增加,质量难以保证
- 大型软件的开发费用经常超出预算,完成时间也常常脱期
- 软件维护费用上升
- 软件生产技术进步缓慢(重要原因)
软件工程学
为应付软件危机,把软件当作一种工业产品,要求采用工程化的原理与方法对软件进行计划、开发和维护
软件工程学包括
软件开发技术
和
软件工程管理
两部分。
其中软件开发技术又包括
-
软件方法学
早期的程序设计基本上属于个人活动性质,开发人员各行其是,并无统一方法可循。软件工程兴起后,人们开始把软件视为产品,强调以有效的方法思想为指导,对软件开发步骤和文档格式提出了规范化要求,常见的有结构化分析与设计等传统开发技术与目前广泛流行的面向对象程序设计技术等。从此软件工程摆脱了过去随心所欲的个人化状态,进入了有章可循的标准化的工程化阶段
-
软件工具
“工欲善其事,必先利其器”,伴随着软件工程的发展,也研制出了众多帮助开发软件的软件,人们称之为软件工具。它们对提高软件生产率,促进软件生产的自动化都有重要的作用
-
软件工程环境
方法与工具结合、再加上配套的软、硬件支持就形成环境
软件工程管理,它的目的是为了按照进度及预算完成软件计划,实现预期的经济和社会效益。它包括成本估算、进度安排、人员知识和质量保证等多方面内容,设计管理学、度量学和经济学等多个学科方面的知识
软件工程学的发展
三种编程范型
计算机应用离不开编写程序。按不同思路和方法来编写程序,就形成不同的编程范型
-
过程式编程范型
遵循 “ 程序 = 数据结构 + 算法 ” 的思路, 把程序理解为一组被动的数据和一组能动的过程所构成。编程时,先设计数据结构,再围绕数据结构编写其算法过程。程序运行后,获得预期计算结果或正确操作,借以满足程序功能需求。对于较大程序,必须先进行功能分解,把较小的功能编写为子程序,子程序再调用子程序,直至最终将程序做成一组组大小适中、层层调用的模块所构成的应用程序系统
-
面向对象编程范型
数据及其操作被封装再一个个称为对象的统一体中,对象之间通过消息互相联系。从面向过程程序设计到面向对象程序设计,是程序设计方法的又一次飞跃,目前正日益显露出其优越性
-
基于构件技术的编程范型
构件可理解为标准化的对象类,它本质上是一种通用、可支持不同应用程序的组件,正如硬件中的标准件一样,插入不同平台或环境后即可运行。CBD 实际上是 OO 开发的延伸与归宿
三代软件工程
编写程序仅是软件开发过程的一部分,在整个软件开发过程中,通常包括需求分析、软件分析、程序编码、软件测试等多个阶段。但程序编码是建立在编程范型的基础上的,有什么样的编程范型,就对应怎样的软件开发过程
-
经典软件工程(传统软件工程)
结构化分析 – 结构化设计 – 面向过程的编码 – 软件测试
-
面向对象软件工程
OO 分析与对象抽取 – 对象详细设计 – 面向对象的编码与测试
-
基于构件的软件工程
领域分析和测试计划定制 – 领域设计 – 建立可复用构件库 – 按 “构件集成模型” 查找与集成构件