[Russell Han] 08 | 软工 0 | 软件工程基础

什么是软件

信息

  1. 信息的记录
  2. 信息的交流
  3. 信息的存储
  4. Information => Computer => Digital Computer => Software

软件的发展

数字基础——30年代

  1. 硬件:各种原型机
    微分计算机、继电器式计算机、ABC原型计算机、Harvard Mark 1等
  2. 理论:
    Alan Turing,《论可计算数及其在判定问题上的应用》
    Claude Elwood Shannon,电子继电器可以实现布尔符号逻辑
    Alonzo Church,Lambda演算

Digital Computer——40年代

ENIAC

  1. 人们认为软件是硬件的一部分
  2. 软件运行场景,如图
    ENIAC机器
    [Russell Han] 08 | 软工 0 | 软件工程基础
    蹲着的拨开关,站着的看图check
  3. 工作流程:
    得到问题——映射到机器上——画出纸——拨开关
    从得到问题到画出纸往往要几星期,根据纸拨开关也要好几天
  4. 调试方法:单步调试

EDVAC

  1. 由冯诺依曼提出冯诺依曼架构,分成五部分:输入、输出、主存、控制单元、计算逻辑单元
  2. 理念:stored-programming concept
    指令存在内存里,每次主存中既有数据又有指令,可被反复利用
  3. 冯诺依曼架构图示
    [Russell Han] 08 | 软工 0 | 软件工程基础

软件工程==硬件工程——50年代

  1. 商用计算机的出现(如Ferranti Mark I,UNIVAC I,LEO I,IBM 701,IBM 650)
  2. 编程语言的出现(FORTRAN,LISP,COBAL)
  3. software一词出现于1958

软件!=硬件——60年代

  1. 大变革:
    美国信息交换标准码(ASCII码)
    ATM机
    IBM的应用管理系统IMS应用于阿波罗航天器
    软件咨询业务
    IBM S/360
    信用卡
    DEC PDP-1小型机
    ——充分接触了商业项目
  2. 软件特性被发现
    软件与现实世界关系更加密切,对需求的规格化更加困难
    软件比硬件容易修改的多,并且不需要昂贵的生产线复制产品
    软件没有损耗
    软件不可见

Program = Algorithm + Data Structure——70年代~80年代

  1. Program = Algorithm + Data Structure的概念由Niklaus Wirth在1976年的书中提出

软件开发远不止编程——90年代

  1. 软件规模越大,编程以外的其他工作越多

软件工作量随应用程序规模变化的情况

[Russell Han] 08 | 软工 0 | 软件工程基础
注:KLOC为千行代码

大型软件系统(规模位100万LOC)的成本因素排序

[Russell Han] 08 | 软工 0 | 软件工程基础

软件类型

系统软件

系统软件有:操作系统,数据库,嵌入式设备,安全软件

应用软件

  1. 针对编程的应用软件有:IDE,持续集成,建模,度量
  2. 针对大众的商业应用软件有:商业,政府,休闲,医疗,教育,国防,个人,专业,科学
  3. 应用软件层次示意图
    [Russell Han] 08 | 软工 0 | 软件工程基础
  4. 应用软件基于现实又高于显示
    应用软件被开发的目的和意图来源于现实世界的问题
    应用软件必须基于显示才能解决问题
    软件最终要被用于现实并改进现实
    最终在现实世界中观察到新的问题,循环往复,继续解决问题
    如图
    [Russell Han] 08 | 软工 0 | 软件工程基础

Summary

  1. 软件独立于硬件
  2. 软件是工具
  3. 软件不同于编程,是程序、文档、知识、数据等的集合
  4. 软件开发比编程复杂得多
  5. 应用软件来源于生活,用来提高现实生活的水平

什么是软件工程

软件工程的定义

  1. 针对系统、有规则的、可量化的方法的应用,对他们的软件开发、操作、维护
  2. 对这类方法的研究

软件工程之工程

  1. 关键词:creative application
  2. 目的:一定的限制范围内(如考虑到经济因素、对生命财产安全因素等),实现功能
  3. 工程师要:
    做决策,折衷与妥协
    使用工具
    善于重用

软件工程知识域

如何学习