第01章 概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、软件与程序
4.“软件”不等于“程序”
• 几个错误的观念
软件就是程序
软件开发就是编程序 • 软件开发是一项工程 软件工程的由来 没有“银弹”
没有任何一种单纯的技术或管理上的进步, 能够独立地承诺在十年内大幅度地提高软件的生 产率、可靠性和简洁性。 ——Frederick P. Brooks
二、计算机系统发展史
1950
1960
1970
1980
1990
2000
软件结构的发展
指令
控制硬件
无结构
数值算法 数据结构 非数值算法
指令的有序结合
数据如何存储 不同的数据结构有不的算法 程序越来越大危机出现化解危机 高内聚低耦合 程序存储和数据存储分离 过程与数据耦合 将对象概念化
有结构
三种基本结构
模块
数据库结构
体系结构
计算机系统的发展历程
Evolution of software 早期 第二阶段 第三阶段 第四阶段 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 嵌入“智能” 面向对象技术 自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者的影响 人工神经网络 并行计算 网络计算机
一、软件与程序
3.“程序”的变化趋势
• 规模越来越大
软件是播撒梦想和收获噩梦的地方, 逻辑越来越复杂
•
•
编写者与使用者分离
各方需要有效沟通 编写程序不是唯一工作
是一片恶魔与神仙相竞争的抽象而神秘的沼泽, 是一个人狼与银弹共存的矛盾世界。 先理解再构造 产品不能称为程序
----出现了用户和开发者、出现了分工 J.Cox ——Brad
软件的特性
(3)软件业是劳动密集型的
通过使用机器,制造业与建筑业的许多领 域已经实现了自动化;因此其他工程分支可以 用更少的劳动量生产出更多的产品。但是,使 软件的设计与编程完全实现自动化,需要真正 “智能”的机器。目前这个方向上的尝试离成 功还很遥远。
软件的特性
(4)一个没有经过充分训练的软件开发人员很容易编写 出难以理解和修改的软件 编程新手可以创建复杂的系统完成有用的功能, 但它的设计却可能极其紊乱。其他工程领域也可能产 生不良的设计,但是这些缺陷通常比较容易发现,因 为它们不会隐藏在上千页的源代码中。例如,如果土 木工程师设计了一座不安全的桥梁,审查人员一般会 比较容易地发现设计中的缺陷,因为他们清楚地知道 在每张图纸和每次计算中应当寻找什么。
构建一个高层建筑
早期的结构
过程 有限的理论知识
现代的结构
进步 - 先进的原材料和 先进的分析
范围 - Pantheon的五倍范围 Cheops的3倍高度
四、软件工程
1.对“工程”的理解:大事情,施工的过程,
工程学科。
施工的过程:
分析设计 实现 维护
是啥,要啥, 啥样,理解, 搞清楚,弄 明白
二、计算机系统发展史
3.软件工程阶段
70年代中期-90年代
大规模集成电路技术、数据库技术的成熟、分 布式系统、计算机网络、即时访问、微处理器、 PC、计算机大众化、应用于工业界和学术界
----软件工程时代
软件形态:软件 = 程序 + 文档 + 数据
二、计算机系统发展史
3.软件工程阶段 美国当时的统计数据表明:
对象 构件 体系结构
软件的发展趋势
规模:越来越大 复杂性:越来越复杂 应用:越来越广泛 能力:越来越大 形态:越来越多样,不断变化 存储:越来越分布 重用:粒度越来越大 使用:越来越方便 体系结构越来越重要
软件形态的变化
50年代~60年代 软件=程序 60年代~ 70年代 软件=程序+文档 70年代~ 80年代 软件=程序+文档+数据 80年代~ 90年代 软件={构件} 90年代~ 2000年 软件={构件}+体系结构 现在 软件={网构}+体系结构 未来(五年) 软件=模型+体系结构 面向过程的程序=算法+数据结构 面向对象的程序=对象+消息 面向构件的程序=构件+体系结构 软件定义的变化说明了软件形态的变化。
软件出大问题了
三、软件危机
3. 软件危机的概念
软件危机是指在计算机软件的开发和维护过程中所 遇到的一系列严重问题。
即:“两低一高” 问题
三、软件危机
4. 软件危机主要表现
1)开发成本和进度估计不准 2)用户对“已完成的”软件系统不满意 3)软件质量往往靠不住 4)软件常常是不可维护的 5)软件通常没有适当的文档资料 6)软件成本逐年上升 7)软件开发生产率滞后于硬件和计算机应用普及的趋势
未来软件基本形态
自 顶 向 下 逐 步 分 解
传统软件形态
分解
动态目标、渐趋稳态 新的软件形态
有序 无序 有序
服务 服务 服务
自 底 向 上 逐 步 组 合
确定目标、有序控制
无序
站点 元素
站点 元素 站点 元素
站点 元素 站点 元素
软件运行平台
未来软件主要特征
未来软件系统 开放结构 环境感知 实体元素 动态协同 自主适应 在线演化
•
•
软件投资占软硬件总投资的70% 到1985年,软件成本大约占90%
----软件危机仍困扰着我们
应对措施: • 把软件作为一种产品进行批量生产
• • 运用工程学的原理和方法 软件开发技术的进步
= { 构件 }
软件形态:软件
二、计算机系统发展史
4.第四代技术阶段
90年代至今
桌面系统、GUI、Internet、C/S、B/S、信息 共享、应用于各个角落、4GT、4GL、多媒体、 CASE、虚拟现实、网格计算、计算机文化、社会 与道德 ----信息产业(IT)时代
6. 消除软件危机的途径
1)对计算机软件的正确认识 2)认识到软件开发不是个体劳动的神秘技巧,而是一种组织 良好、管理严密、各类人员协同配合、共同完成的工程项目 3)推广使用成功的软件开发技术和方法 4)开发和使用更好的软件开发工具
总之: 为了消除软件危机,既要有技术措施(方法和工具), 又要有必要的组织管理措施。
三、软件危机
2)软件开发与维护的方法不正确
• 对软件开发和维护有关的错误认识和作法
忽视软件需求分析的重要性 认为软件开发就是写程序 轻视软件维护
• 对软件开发过程与方法的认识与应用
软件开发要经历一个漫长的时期(编程占10-20%) 程序仅是完成软件配置的一个组成部分 软件开发方法要有利于软件维护
三、软件危机
分布、自治、异构的“构件” 独立性 主动性 自适应性
实体交互
多种静态连接和动态合作方式 互连、互通、协作和联盟 具有这些新特征的未来软件形态 我们称之为 网构软件
未来软件主要特征
网构软件是Internet开放、动态和多变环境下 软件系统基本形态的一种抽象 既是传统软件结构的自然延伸 又具有区别于传统软件形态的独有的基本特征 自主性: 软件实体具有相对 独立性、主动性和 自适应性 演化性: 元素数目可变性、 结构关系和形态的 动态可调性
开始做:… … 做得怎么样?
做啥,怎么做,用 什么做(工具、技 术),谁作,什么 时候做
持久使用:维修
四、软件工程
1.对“工程”的理解:
大事情,施工的过程,工程学科。 •工程学科的简称。
文、理、法、医、农、工… … 计算机工程、化学工程、机械工程、 电子工程… …
四、 软件工程
• 软件的概念
经典定义:软件 = 程序 + 文档 + 数据
1. 2. 3. 4.
提出
程序设计阶段 “软件=程序+文档”阶段 软件工程阶段 第四代技术阶段
----软件形态的变化、软件危机的产生、软件工程的
二、计算机系统发展史
1.程序设计阶段
20世纪40年代中期--60年代中期
无计划、具体应用、规模小、易编写、无方法、 编用一人、无文档、个体化、数值计算 ----个体化时代
四、软件工程
对“工程 (engineering) ”的理解:
大事情, 施工的过程, 工程学科。
•大事情:大的、复杂的、由众多的人共同完成 的。
如建筑工程、三峡工程、航天工程。
构建一个小狗屋
可以由一个人制造 需求: 最小模型 简单的过程 简单的工具
构造一栋房屋
由一个团体建设,并且需要更高的效率、更精确的时间限制 需求 模型 良好定义的过程 功能强大的工具
Internet平台和环境的出现, 对软件形态 技术发展 提供了新的契机 普适计算 网 软件 形态 构
理论研究 提出了新的问题 网 格
人机 交互
资源 共享 未来软件基本形态
Internet环境及其应用: 基础平台的开放性、动态性和多变性 共享资源的多样性(信息、计算、服务) 产业模式的服务化
一、软件与程序
2.感性认识“软件”
• • Window XP、腾讯QQ、暴风影音、疯狂的小鸟、手 是计算机上运行的程序 ----编写程序很重要 机中的软件
一、软件与程序
3.“程序”
• 一个最简单的C程序
•
•
一个画图程序
操作系统 Windows
#include <stdio.h> int main( ) { printf(“Welcome to Software Institute!\n”); return 0; }
软件形态:软件 = 程序
二、计算机系统发展史
2.“软件=程序+文档”阶段
60年代中期-70年代中期
集成电路技术、多道程序、多用户系统、人 机交互、编用分离、实时系统、在线存储、第一 代DBMS ----作坊式时代 软件形态:软件 = 程序 + 文档
二、计算机系统发展史
2.“软件=程序+文档”阶段
协同性: 软件实体之间多种 方式的互连、互通、 协作和联盟 多态性: 软件实体具有目标 制导和多目标的特 征协同能力 反应性: 软件实体具有感知 外部运行和使用环 境的能力
网构软件 Internetware 反应性
三、软件危机
1. 什么是危机
出大问题了
例子:金融危机、经济危机、婚姻危机
2. 什么是软件危机 (software crisis)
软件的特性
(5)软件本身很容易修改 但由于它的复杂性,又很难正确地修改 人们总是试图在尚未完全了解软件的时候 就去修改它,而这些修改又会带来新的错误。
Baidu Nhomakorabea
软件的特性
(6)软件不像其他的工业产品那样会因使用而磨损,
随着反复修改,它的设计会逐渐退化
上一点提到,对软件的修改很容易引入新 的缺陷,因此修改过的软件从设计角度讲容易 变差。随着时间的流逝,软件后续版本的设计 可能会表现出严重的退化,这时就需要完全重 新设计了。
杂性随着程序规模的增加而呈指数上升
软件的特点
(1)软件是无形的(intangible) 比其他工程产品更加不可捉摸。 你无法感觉软件产品的形状,它的设计也 难以直观表示。因此确定软件产品的质量或者 估计其开发的工作量是非常困难的。这就是人 们总是低估系统开发时间的一个原因。
软件的特性
(2)软件副本的大批量生产轻而易举 绝大多数其他类型的工程师非常关心每一 个部件耗费的成本与劳动量。换句话说,对于 有形产品,设计完成之后的制作过程往往是代 价昂贵的部分。 与之相反,软件产品能通过网络下载或制作 CD以极低的成本进行复制。因此,几乎全部的 软件成本都存在于它的开发过程中,而不是制 造过程中。
三、软件危机
5. 产生软件危机的原因
1)与软件本身的特点有关 2)和软件开发与维护的方法不正确有关
三、软件危机
1)软件本身的特点
• 软件不同于硬件,是逻辑部件而不是物理部件
缺乏可见性 难于测试 管理和控制开发过程困难 不会因使用时间过长而被“用坏” 难以维护
• 软件不同于一般程序,规模庞大,而且程序复
第1章
1. 2. 3. 4. 5. 6.
软件工程学概述
软件与程序 计算机系统发展史 软件危机 软件工程 软件生命周期 软件过程
一、软件与程序
1.“软件”这个词已广为所知
What: 什么东西没有软件? Where:哪里没有软件? When: 什么时候不用软件? Why: Who: 怎么能够不用软件? 谁能不用软件?
Software is a set of items or objects that form a “configuration” that includes • programs • documents • data ...
软件使用广泛、难以维护(存在费用和时间 问题)、质量低下 ----软件危机、软件工程
1968年,北大西洋公约组织(NATO)在联邦 德国召开国际会议,讨论软件危机问题,正式提 出了“软件工程(SE)”的术语。 SE:Software Engineering NATO:North Atlantic Treaty Organization