💡
  • 名词解释: 软件⼯程

软件工程的定义

  1. 应用系统的, 规范的, 可量化的方法来开发, 运行, 维护软件, 即将工程应用到软件
  1. 对1中各方法的研究

软件工程的发展

1950s

💡
  • 科学计算
  • 以机器为中心编程
  • 像生产硬件一样生产软件
  1. 基础环境
      • 虚拟计算机: 大型机, BIOS/硬件裸设备, 汇编编译器
      • 抽象软件实体: 机器指令, 汇编指令, 全局式数据
  1. 现实问题
      • 科学计算, 最大化发挥硬件性能
      • 以机器为中心
  1. 开发方法和技术
      • 沿用硬件工程方法

1960s

💡
  • 业务应用
  • 软件不同于硬件
  • 用软件工艺的方式生产软件
  1. 基础环境
      • 虚拟计算机: 商业大型机, 操作系统, 高级语言编译器
      • 抽象软件实体: 语句, 函数, 数据类型
  1. 现实问题
      • 业务应用, 以批量数据处理和数据计算为主
      • 以应用为中心
      • 保证程序正确, 清晰和质量
  1. 开发方法和技术
      • 工艺式, “构建-修复”
      • 依靠个人能力, 补丁摞补丁式的面条码

1970s

💡
  • 结构化方法
  • 瀑布模型
  • 强调规则和纪律
  1. 基础环境
      • 虚拟计算机: 商业微型计算机, OS, 高级语言编译器, DBMS
      • 抽象软件实体: 函数(最大粒度), 类型(复杂, 可自定义), 块结构, 模块(未得到编译器支持, 目前不算是抽象的一层)
  1. 现实问题
      • 业务应用, 控制复杂软件系统的复杂性
      • 以应用为中心
  1. 开发方法和技术
      • 结构化编程方法
      • 瀑布模型(越早发现错误, 修复代价越低)

1980s

💡
  • 生产力最大化
  • 现代结构化方法/面向对象编程广泛应用
  • 重视过程的作用
  1. 基础环境
      • 虚拟计算机: 商业微型计算机, 个人计算机, 图形用户界面(GUI), OS, DBMS
      • 抽象软件实体: 语句, 类型, 函数, 模块, 类和对象
  1. 现实问题
      • 从业务应用转向大众软件
      • 主要目标是提高生产力
  1. 开发方法和技术
      • 成熟的结构化方法
      • 面向对象编程
      • 软件复用
      • 过程模型(迭代式的开发, 并行的开发, 快速的开发, 增量或演化模型)

1990s

💡
  • 以企业为中心的大规模软件系统开发
  • 追求快速开发, 可变更性和用户价值
  • Web应用出现
  1. 基础环境
      • 虚拟计算机: 商业微型计算机, 个人计算机, 网络, 网络操作系统, DBMS, 中间件平台
      • 抽象软件实体: 语句, 类型, 函数, 模块, 类和对象, 包/组件/进程/物理单元, 部件/连接件/部署
  1. 现实问题
      • 大规模业务应用, 大众产品, web应用
      • 大规模复杂度控制, 时间压力(开发周期), 可修改性和用户价值
  1. 开发方法和技术
      • 面向对象方法
      • 软件体系结构(部件, 连接件和配置, 比类/对象/模块的抽象层次更高)
      • 软件需求工程
      • 人机交互(以用户为中心)
      • 基于复用的技术(框架, 构件)
      • web技术
      • RUP(重量级过程方法)
      • agile(敏捷开发)
      • 过程评价与改进

2000s

💡
  • 大规模Web应用
  • 大量面向大众的Web产品
  • 追求快速开发, 可修改性, 用户价值和创新
  1. 基础环境
      • 虚拟计算机: 商业微型机, PC, 局域网与因特网, 小型设别, 网络操作系统, DBMS, 构件中间件平台
      • 抽象软件实体: 语句, 类型, 函数, 模块, 对象与类, 包/组件/进程/物理单元, 部件/连接件/部署
  1. 现实问题
      • 大规模应用(Web), 大众产品(Web和小型终端)
      • 大规模复杂度控制, 开发周期, 可修改性, 用户价值, 创新性
  1. 开发方法和技术
      • 软件体系结构
      • 软件需求工程
      • 人机交互
      • 基于复用的技术
      • Web技术
      • 领域深入的方法
Loading...