软件工程

PPT - 概论与软件发展史

2019-09-05 14:00 CST
2019-12-18 23:02 CST
CC BY-NC 4.0

程序设计

程序设计语言

  • 机器语言
  • 汇编语言
  • 面向过程的高级语言
  • 面向对象的高级语言

程序设计方法

  • 结构化程序设计:程序=算法+数据结构
  • 面向对象程序设计:对象=算法+数据结构,程序=对象+对象+……

软件系统的特点

  • 逻辑产品,逻辑思维活动的结果
  • 创造与制造过程合二为一
  • 管理和控制软件开发过程非常困难
  • 开发依赖于开发人员的业务素质、智力、人员的合作、组织与管理
  • 设计生产(而不是生产制造),生产秩序复制
  • 开发质量难以评价;开发性质(成本、进度)难以估计
  • 软件没有磨损概念,软件维护通常意味着改进或者修改原有设计
  • ……

常见的软件问题

  • 不能满足需求
  • 需求混乱
  • 模块集成混乱
  • 系统难以维护
  • 缺陷发现太迟
  • 低质量、难使用
  • ……

解决办法

  • 迭代式开发
  • 管理需求
  • 基于组件的架构
  • 可视化建模
  • 连续验证质量
  • 管理变更

软件工程的构成要素

  • 过程
  • 方法
  • 工具
  • 质量属性

软件工程目标

  • 可修改性
  • 有效性
  • 可靠性
  • 可理解性
  • 可维护性
  • 可重用性
  • 可适应性
  • 可移植性
  • 可追踪性
  • 可互操作性

简单回顾软件开发的发展历史

  • 以机器为中心
  • 以应用为中心
  • 以企业为中心

语言的演化

  • 从汇编语言到高级语言
    • 在相当长的一段时间内,很多复杂系统仍然由汇编语言编写
  • 高级语言的演进速度和丰富程度极快
    • 从Fortran(第一个高级语言)开始,高级程序语言的发展基本经历了六个过程
    • 主要的范型:过程式、函数式、逻辑语言、面向对象语言
  • 每种语言所支持的抽象机制发生了变化

语言设计的基本思路

每一种语言都带有设计者明确的目标和定位,并主导了该语言的特点(起码是最初时)

  • 偏向于机器运行性能的考虑(运行快)
  • 偏向人的思维方式与习惯(开发快)

里程碑: Pascal

  • 第一个系统地体现了Dijkstra和Hoare定义的结构化程序设计概念的语言
  • 著名公式:“算法+数据结构=程序”
  • Anders Hejlsberg进一步创建了Objective Pascal (Delphi)
  • Anders后来进入微软开发了C#和.NET

C及其标准化

C的祖先语言:

  • CPL、BCPL、B和ALGOL68
  • BCPL和B都是无类型语言
  • 引入类型的B语言:NB随后命名为C语言

C的标准化:

  • 89年ANSI C
  • 99年更新为C99

混合风格C++

  • 最初阶段:C with Class
    • Bjarne Stroustrup
    • 类与派生类、共有和私有成员的区分、构造函数与析构函数、运算符重载……
  • 84年命名为C++
    • 扩展了虚函数、方法名和运算符重载,以及引用类型
  • 85年地一个可用实现Cfront系统
    • 将C++程序翻译为C程序

后C++时代

“C++退出‘一同江湖’的时代”

C/C++退出垄断的根本原因:

  • 机器性能的提升是编程语言的选择开始转向“人”的因素(好用);
  • 使用脚本语言的性能损失对真实世界的程序来讲往往微不足道,因为真实世界的程序往往受到I/O事件等待、网络延迟等限制,而不是CPU的自身效率。

Java的出现

  • Sun公司的纯面向对象的程序设计语言
  • 最初被成为Oak,1995年改名为Java
  • J2EE为编程提供了大量的中间件
  • 最大的成果在于其简单易用,“一次编写到处运行”的跨平台性