- 名词解释: 软件⼯程
软件工程的定义
- 应用系统的, 规范的, 可量化的方法来开发, 运行, 维护软件, 即将工程应用到软件
- 对1中各方法的研究
软件工程的发展
1950s
- 科学计算
- 以机器为中心编程
- 像生产硬件一样生产软件
- 基础环境
- 虚拟计算机: 大型机, BIOS/硬件裸设备, 汇编编译器
- 抽象软件实体: 机器指令, 汇编指令, 全局式数据
- 现实问题
- 科学计算, 最大化发挥硬件性能
- 以机器为中心
- 开发方法和技术
- 沿用硬件工程方法
1960s
- 业务应用
- 软件不同于硬件
- 用软件工艺的方式生产软件
- 基础环境
- 虚拟计算机: 商业大型机, 操作系统, 高级语言编译器
- 抽象软件实体: 语句, 函数, 数据类型
- 现实问题
- 业务应用, 以批量数据处理和数据计算为主
- 以应用为中心
- 保证程序正确, 清晰和质量
- 开发方法和技术
- 工艺式, “构建-修复”
- 依靠个人能力, 补丁摞补丁式的面条码
1970s
- 结构化方法
- 瀑布模型
- 强调规则和纪律
- 基础环境
- 虚拟计算机: 商业微型计算机, OS, 高级语言编译器, DBMS
- 抽象软件实体: 函数(最大粒度), 类型(复杂, 可自定义), 块结构, 模块(未得到编译器支持, 目前不算是抽象的一层)
- 现实问题
- 业务应用, 控制复杂软件系统的复杂性
- 以应用为中心
- 开发方法和技术
- 结构化编程方法
- 瀑布模型(越早发现错误, 修复代价越低)
1980s
- 生产力最大化
- 现代结构化方法/面向对象编程广泛应用
- 重视过程的作用
- 基础环境
- 虚拟计算机: 商业微型计算机, 个人计算机, 图形用户界面(GUI), OS, DBMS
- 抽象软件实体: 语句, 类型, 函数, 模块, 类和对象
- 现实问题
- 从业务应用转向大众软件
- 主要目标是提高生产力
- 开发方法和技术
- 成熟的结构化方法
- 面向对象编程
- 软件复用
- 过程模型(迭代式的开发, 并行的开发, 快速的开发, 增量或演化模型)
1990s
- 以企业为中心的大规模软件系统开发
- 追求快速开发, 可变更性和用户价值
- Web应用出现
- 基础环境
- 虚拟计算机: 商业微型计算机, 个人计算机, 网络, 网络操作系统, DBMS, 中间件平台
- 抽象软件实体: 语句, 类型, 函数, 模块, 类和对象, 包/组件/进程/物理单元, 部件/连接件/部署
- 现实问题
- 大规模业务应用, 大众产品, web应用
- 大规模复杂度控制, 时间压力(开发周期), 可修改性和用户价值
- 开发方法和技术
- 面向对象方法
- 软件体系结构(部件, 连接件和配置, 比类/对象/模块的抽象层次更高)
- 软件需求工程
- 人机交互(以用户为中心)
- 基于复用的技术(框架, 构件)
- web技术
- RUP(重量级过程方法)
- agile(敏捷开发)
- 过程评价与改进
2000s
- 大规模Web应用
- 大量面向大众的Web产品
- 追求快速开发, 可修改性, 用户价值和创新
- 基础环境
- 虚拟计算机: 商业微型机, PC, 局域网与因特网, 小型设别, 网络操作系统, DBMS, 构件中间件平台
- 抽象软件实体: 语句, 类型, 函数, 模块, 对象与类, 包/组件/进程/物理单元, 部件/连接件/部署
- 现实问题
- 大规模应用(Web), 大众产品(Web和小型终端)
- 大规模复杂度控制, 开发周期, 可修改性, 用户价值, 创新性
- 开发方法和技术
- 软件体系结构
- 软件需求工程
- 人机交互
- 基于复用的技术
- Web技术
- 领域深入的方法