软件工程概述
软件和软件危机
软件的定义
软件是可以完成特定功能和性能的可执行的应用程序,包括保证程序可以正常运行的数据和描述程序操作和使用的文档。
软件 = 程序 + 文档
软件的特征
软件开发不同于硬件开发:软件是逻辑实体而不是物理实体
软件生产不同于硬件制造:软件开发没有具体的制造过程
软件维护不同于硬件维修:软件不会磨损和老化,但是维护成本比硬件复杂得多
软件危机
落后的软件开发方式难以满足迅速发展的计算机的软件需求,从而导致软件的开发和维护会出现一系列严重的问题。
软件工程学范畴
软件开发学的发展 :
- 60年代 : 结构程序设计
- 70年代 : 工程化阶段
- 80年代 : 可复用软件构件
软件工具 :
- 分析工具
- 设计工具
- 测试工具
- 维护工具
软件工程环境 :
- 硬件 : BS CS
- OS : 批处理 Windows Unix 。。。
- 数据库 : Mysql Oracle SqlServer
- 开发语言 : Java PHP C# C++ C 。。。
软件工程的发展
三种编程范型
过程式编程范型
过程式编程范型遵循 程序 = 数据结构 + 算法 的思路,把程序理解为一组被动的数据和一组能动的操作所构成。
即在编程时先设计数据结构,然后再围绕数据结构进行算法的实现,然后在运行程序后,获得预期的结果的正确操作来满足功能的需求,对于比较大的程序,要先进行分解,把较小的功能编写为子程序,然后子程序再调用子程序,层层调用的模块所构成的应用程序。
缺点 : 随着软件规模的越来越大,即使功能可以满足,但是错综复杂的调用使程序难以维护。
面向对象编程范型
在面向对象的程序设计中,数据及其操作被封装在一个个称为对象的统一体中,对象之间通过消息进行联系, 对象 + 消息 取代了 数据结构 + 算法 的思路。
比较 : 银行储蓄处理事务
过程式编程范型 :
面向对象编程范型 :
通过两者的比对,面向对象的编程范型更具有优势,其一 : 过程式编程范型中的存款取款和利息结算都是分离的各个模块。面向对象编程范型而是一个统一的整体。 其二 : 软件开发人员通过现实世界的分析模型实际上就是为软件系统设计好了基本的框架。其三 :面向对象的编程范型维护性相较于过程式编程规范高,比如如果账户的余额改为 int 类型,过程型编程规范都需要修改,面向对象只需要修改一处即可。
基于构建技术的编程范型
简言之,构建可以理解为标准化的对象类,本质上是一种通用的可支持不同应用程序的组件,正如硬件中的标准性一样,插入不同的平台或者环境后即可直接运行。也就是平时说的造轮子。
三代软件工程
软件工程分代 :
-
传统软件工程或者经典软件工程
特点 : 以结构化程序设计为基础。
开发阶段 :
结构化分析 —> 结构化设计 —> 面向过程编码 —> 软件测试
-
面向对象软件工程
特点 : 以面向对象程序设计为基础。
开发阶段 :
OO 分析与对象抽取 —> 对象详细设计 —> 面向对象的编码与测试
-
基于构件的软件工程
特点 : 以软件复用为目的,领域工程为基础。
开发阶段 :
领域分析和测试计划定制 —> 领域设计 —> 建立可复用构件库 —> 按 “构件集成模型”查找与集成构件
软件规模 :
规模 | 人数 | 完成时间 |
---|---|---|
小型 | 1 | 1~ 6 个月 |
中型 | 2 - 5 | 1 ~ 2 年 |
大型 | 5 - 20 | 2 ~ 3 年 |
甚大型 | 100 - 1000 | 4 ~5 年 |
极大型 | 2000 - 5000 | 5 ~ 10 年 |