目录
1. 软件工程的基本概念
1.1 背景
计算无处不在,通过计算技术,来把自然和社会现象进行数字化和计算化,从而对自然和社会的发展规律以及问题进行求解,并且改造世界,那么我们就必须要了解计算机,了解软件以及了解软件工程。
1.2 基本知识
对于计算机,我们要认识:
计算机系统(Computer System):计算机系统及其组成——硬件、软件、网络
计算机软件(Computer Software):计算机指令与程序、计算机软件及其含义
对于软件,我们要认识:
软件系统(Software System):系统软件、支撑软件、应用软件
对于软件工程,我们要认识:
软件工程(Software Engineering):软件工程、软件工程学科及范畴、软件工程知识体系
1.3 计算机系统
计算机(Computer):用于自动计算或信息处理的装置或系统。
通常我们通过计算机的终端把程序和数据输入到计算机中,结果计算机的自动运算和智能处理,产生输出结果来解释自然现象,求解现实世界的问题。
1.3.1 计算机系统的基本构成
- 计算机硬件(Hardware):主机、外部设备
- 计算机软件(Software):系统硬件、支撑软件、应用软件
- 计算机网络(Network):广域网、局域网、移动网
1.4 计算机网络
计算机网络(Computer Network):由地理上分散的多台自主计算互连的集合及系统。
1.5 计算机软件
首先引入指令。
指令(Instruction):指挥计算机工作的知识与指令,在计算机内部用二进制表示,由操作码(操作类型)与操作数(地址)组成。
- 指令系统是所有指令的集合,反映了计算机的基本功能。
有了指令系统就形成了我们的程序。
程序(Program):是为实现特定目标或解决特定问题而用计算机语言描写的命令(指令)序列的集合。
- 程序是为了实现预期目的而顺序排列的指令或语句序列,并按事先设计好的功能和性能要求在计算机中执行。
- 执行程序的过程就是计算机的工作过程。
有了程序就形成了我们的软件。
软件(Software):计算机系统中的程序及其文档。
- 软件可看作是程序系统或程序集合。
- 程序必须装入计算机内部才能工作;文档是给人看的。
1.5.1 软件的含义
- 软件个体:计算机系统中的程序及其文档。
- 软件整体:计算机当中的所有个体含义下的软件的总和。软件可分为系统软件、支撑软件和应用软件。
- 软件学科:软件相关的理论、原则、方法、技术所构成的学科;主要涉及软件语言、软件方法学、软件工程、软件系统等。
1.5.2 软件系统
- 系统软件(System Software):是靠近计算机硬件的一层软件 —— 控制和协调计算及外部设备、支持用软件开发与运行的软件。
- 支撑软件(Support Software):软件系统的中间层,支撑各种软件的开发、运行与维护的软件。
- 应用软件(Application Software):为满足特定应用领域、不同应用问题之需求的专用软件。
1.5.3 软件工程
- 软件(Software):是客观世界问题空间与解空间的具体表达;它追求表达能力强、更符合人类思维模式,具有构建性和易演化性的计算模型。
- 工程(Engineering):是综合运用科学理论和技术方法改造客观世界及其物质特性的一门学科和技艺。工程强调以最短时间、少而精的人力物力做出高效、可靠且有用的东西。
- 软件工程(Software Engineering):研究或应用工程化方法来设计、创造、构建和维护有效、实用和高质量软件的一门学科。
2.计算机的发展历程和趋势
2.1 计算机发展简史
算筹与算盘(追溯到公元前600年,中国东汉时期)
Pascal机械计算机(1642,Blaise Pascal发明):齿轮式计算机器 —— 用机械装置进行十进制自动计算
莱布尼茨计算机 (1694年,Gottfreid W. Leibniz发明):可连续重复自动执行二进制运算
巴贝奇分析机(1834年,Charles Babbage发明):可执行程序的机器
Colossus计算机(1943年,Tommy Flowers领导发明):这是世界上第一部真正意义上的电子计算机;由2400个电子真空管用作逻辑部件,5个纸带阅读取器(reader),处理速度为:5000字符/秒。
ENIAC计算机(1946年,John Mauchly领导发明):Electronic Numerical Integrator And Computer,史称世界上第一部电子计算机;有17468个电子真空管,处理速度为:5000次加法运算/秒。
EDVAC计算机(1948年。 Von Neuman领导发明):Electronic Discrete Variable Automatic Computer,世界上第一部通用计算机;史称首台冯 · 诺依曼结构计算机。
特点:
- 计算机的指令和数据均以二进制形式存储。
- 采用”存储程序“和”程序控制“原理,即程序和数据放在内存中,操作在程序控制下自动完成。
晶体管计算机TRADIC(第二代,1953)
第三代计算机IBM360(1964)
第四代计算机——PC机(1981)
回顾:
第一代(1946~1959):电子管 5千~4万(次/秒)
第二代(1959~1964):晶体管 几十万~百万(次/秒)
第三代(1964~1972):集成电路 百万~几百万(次/秒)
第四代(1972~至今):超大规模集成电路 几百万~几百亿(次/秒)
3. 软件工程的发展及趋势
3.1 软件危机
1960年代后期,随着软件规模及开发难度的增加,软件开发周期长、成本高、质量差、维护难,导致软件危机爆发
问题:对软件开发工作量和成本估计不准;软件开发进度难以控制;软件产品质量与可靠性差强人意。
软件工程的产生:1968年10月,为解决这个问题,Fritz Bauer首次提出”软件工程“概念并强调按照工程化的原则和方法组织软件开发工作。
3.2 软件工程发展历史
1946-1956:程序设计时代;个体手工制作,采用机器语言/汇编语言编程,主要依靠个人编程技巧。
1956-1968:程序系统时代;作坊式小团队合作,采用高级语言编程,以个人编程技巧为主,开始有结构化的方法。
1968年以来:软件工程时代;工程化生产方式,采用软件工程方法,并逐步发展形成了结构化方法、面向数据结构方法、面向对象的方法、构件化方法、面向服务的方法等。
软件工程方法发展历程:
- 1960's-1970's:结构化方法(Fortran语言、C语言、Pascal语言、瀑布模型、螺旋模型等)
- 1980's:面向对象方法(C++、Java、Visual系列语言、面向对象模型及建模工具等)
- 1990's:构件化方法和Web Services(Visual系列语言、Windows操作系统、Web Services、软件复用方法等)
- 2000's:面向服务的SOA方法
- 2010's:基于互联网与云计算的软件开发方法