软件与软件工程第一讲
第一讲软件工程概述
第一讲软件工程概述软件的定义软件是运算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,爱护和使用有关的图文材料软件危机软件危机是指运算机软件开发和爱护过程中所遇到的一系列严峻问题。
概括的说即为:能否满足对软件日益增长的需求?能否爱护数量日益增长的现有软件?软件工程的定义B o e h m:运用现代科学技术知识来设计并构造运算机程序及为开发、运行和爱护这些程序所必需的相关文件资料I E E E:软件工程是开发、运行、爱护和修复软件的系统方法F r i t z B a u e r:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法软件工程要素三要素:方法、工具和过程(缺乏一个过程,洗厕所的都有方法和工具,但没有一个好的过程)软件工程方法为软件开发提供了“如何做”的技术软件工具为软件工程方法提供了自动的或半自动的软件支撑环境软件生命周期(Life Cycle)软件有一个孕育、产生、成长、成熟、衰亡的生存过程。
那个过程即为运算机软件的生命周期软件生存期的六个步骤,即制定打算、需求分析、设计、实现、测试及运行爱护软件生命周期:制订打算确定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究估量可利用的资源(硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施打算,连同可行性研究报告,提交治理部门审查软件生命周期:需求分析对用户提出的要求进行分析并给出详细的定义,得到系统逻辑模型,可用数据流程图、数据字典和简要算法加以表示。
编写软件需求说明书或系统功能说明书及初步的系统用户手册提交治理机构评审软件生命周期:软件设计概要设计—把各项需求转换成软件的体系结构。
结构中每一组成部分差不多上意义明确的模块,每个模块都和某些需求相对应。
第1讲 软件工程概述
集 成 测 试
系 现 统 场 测 试
变更代价随时 间变化的趋势
早期 中期 晚期 时间
28
软件危机的原因
(1)没有统一的、规范的方法论的指导。 文件资料不全,忽视交流,缺乏方法论的指导 (2)忽视软件开发前期的需求分析。 编程越早,需求分析不充分,完成时间越长 (3)忽视软件文档也是造成开发效率低下的原因。 对软件开发、维护、用户都很重要 (4)忽视测试阶段的工作,或不负责任的测试员,提 交用户的软件质量差。 “错误是不可避免的”,该如何理解这句话? (5)轻视软件的维护。 (6)开发计划不合理,缺乏经验和数据积累。 29
26
3 、软件不同于一般程序 :规模庞大,必须有严格 而科学的管理。
4、软件专业人员对软件开发和维护有不少的糊涂 观念,在实践过程中或多或少地采用了错误的方法和技术, 忽视软件需求分析的重要性,认为开发软件就是写程序并 使之运行,轻视软件维护,这可能是软件危机的主要原因。
失效率 磨合 调整 磨损 用坏
24
60年代后期软件开发出现的问题
①软件开发费用和进度失控。费用超支、进度 拖延的情况屡屡发生。
②软件的可靠性差。尽管耗费了大量的人力物 力,而系统的正确性却越来越难以保证,出错 率大大增加,造成的损失惊人。
③生产出来的软件难以维护。很多程序缺乏相 应的文档资料,程序中的错误难以定位,难以 改正,有时改正了已有的错误又引入新的错误 ④用户对“已完成”的系统不满意现象经常发 生。
4
授课内容
软件工程概述 可行性研究 需求分析(UML) 概要设计(UML) 详细设计 人机交互 编码 软件测试 软件维护
5
主要学习内容:
软件工程讲义第一章课件
什么是软件工程
❖ 软件工程是建立和使用一套合理的工程 原则,以便经济地获得可靠的、可以在 实际机器上运行的软件。
❖ 软件工程:(1)将系统化的、严格约束 的、可量化的方法应用于软件的开发、 运行和维护,即将工程化应用于软件。 (2)在(1)中所定义的过程中的方法 研究。
❖ 神话:如果我将一个软件外包给另 一家公司,则我可以完全放手不管 。
❖ 事实:如果一个组织对软件项目的 内部组织和控制毫无了解,那无一 例外地讲在外包项目中遇到困难。
软件神话的几个例子
客户:
• 软件改起来简单,你们先做着,做好 了我看看,不合适再改。
• 我就需要你们做一个类似Excel的功能, 但是要符合我的要求。
➢ 开发方式逐步由个体合作方式转向工程方式
➢ 软件工程方面的研究主要包括软件开发模型、软件 开发方法及技术、软件工具与环境、软件过程、软 件自动化系统等
➢ 软件方面研究以智能化、自动化、集成化、并行化、 以及自然化为标志的软件开发新技术
软件的本质
❖现在的软件技术具有产品和产品交付载体的双 重作用。作为一个产品,它显示了由计算机硬件 体现的计算能力。而作为产品生产的载体,软件 提供了计算机控制、信息通信以及应用程序开发 和控制的基础平台。 ❖软件提供了我们这个时代最重要经 济中的主导因素。
❖ 引起软件危机的诸多原因可以追溯到软件 开发的早期阶段产生的神话。它不象古代 的神话那样可以给人以经验和教训,软件 神话使人产生误解和混乱。软件神话具有 一些特征使得它们很有欺骗性:例如,它 们表面上看很有道理(有时含有一定真实 的成份);它们符合人的直觉;它们常常 是有经验的实践者发布出来的。
软件工程第一章-软件和软件工程
一份统计数据
1995 年,美国斯坦迪申咨询公司对美国 365 位信息
技术高层经理人员所管理的 8380 个项目进行了调查 研究,得到如下结论:
信息技术项目正处于一个混沌的状态
平均成功率为16% 50%的项目需要补救
34%的项目彻底失败
平均超出时间为 222% 实际成本是估计成本的 189%
与维护的方法、工具和管理。 软件工程的目的:经济地开发出高质量的软件并有效 地维护它。
软件工程的定义
1968年,Fritz Bauer在NATO会议上:建立并使用一套合
理的工程原则,以便经济地获得可靠的、可以在实际件工程是①将系统化的、规范的、可量化
市场用户
开发小组及大中型软件开发机构 大中小型 管理水平
数据库、开发工具、开发环境、工程化 开发方法、标准和规范、网络及分布式 开发、面向对象技术、软件复用
专职维护人员 快速向超高速、大容量、微型化及网络 化发展 开发技术有进步,但未获突破性进展, 价高,未完全摆脱软件危机
软件危机
软件工程的概念源自软件危机(Software Crisis)——
60年代后期,在软件的开发和维护过程中存在一系列 严重问题,如:
成本难以估计:开发成本常严重超标;
无法制定合理的进度计划:开发周期常大大超过规定
日期;
用户对完成的软件常不满意:错误多,质量差,不能
保证可用性和可靠性;
系统无法增加新功能,难于维护和扩充。
有些系统彻底失败。
一个实例
几个实例
系统名称 水星计划系统(1963年) 双子星座计划系统(1967年) 规模 200万条指令 400万条指令
阿波罗计划系统(1973年)
第01讲软件工程概念与过程
工
程 定义---Boehm
运用现代科学技术知识来设计并构造计算机程
序设计及为开发,运行和维护这些程序所必须
的相关文件资料
定义---IEEE[93]
将系统化的、严格约束的、可量化的方法应用 于软件的开发、运行和维护中,即将工程化应 用于软件;上面所述方法的研究
薛 建 民
软 件
软件工程定义3
工 程
分析
设计
实现
测试
实施
维护
项目管理
范围 时间 成本 质量
薛 建 民
人力 资源
沟通
风险
采购
共通
软 件
软件工程--目标
工 程
目标----成功的(大型)软件系统
付出较低的开发成本;
达到要求的软件功能;
取得较好的软件性能;
易于移植
需要较低的维护费用;
能按时完成开发工作,及时交付使用;
开发软件质量指标高; 薛 统一为——“如何提高软件生产率” 建
并发开发模型优缺点
工 程
优点
适用所有类型的软件开发
尤其适用客户端/服务器应用程序
在实际项目中使用是成功的
将降低整个过程的风险
缺点
对管理要求较高
薛
建
民
软 件
形式化方法模型1
工 通过一组指定的活动来产生计算机软件的数 程 学规约。
软件工程师应用一个严格的、数学的符号体 系来进行规约、开发和验证基于计算机的系统
软件的生产与硬件不同
大多数软件是定制的
在软件的运行和使用期间,没有 硬件那样的机械磨损、老化问题(
薛 图示)
建 民
软 件 工 程
薛 建 民
软 件
第一章软件与软件工程
4. 组装测试
任务 组装测试应满足概要设计的要求。 途径 测试模块连接的正确性; 测试系统或子系统的I/O; 测试系统的功能和性能。 产品 满足概要设计要求的程序、组装测试报告。
5. 确认测试
任务
根据软件需求规格说明书,测试软件系统是否 满足用户的需求
方法
用户参与,以软件需求规格说明书为依据进行 确认测试 工具 专用测试工具
软件开发成本过高 软件质量得不到保证 软件开发效率低 难以控制开发进度,工作量估计困难
软件不能满足社会发展的需求,成为 社会、经济发展的制约因素
2. 软件危机原因
软件的规模加大、复杂性提高、性能增强
软件是逻辑产品, 尚未完全认识其本质和特点 缺乏有效的、系统的开发、维护大型软件项目的
用户手册概要。
软件开发
1. 概要设计
任务
根据SRS建立目标软件系统的总体结构、设计 全局数据库和数据结构,规定设计约束,制定组 装测试计划等等。
方法
根据软件需求规格说明书, 自顶向下、逐步求精、 抽象、 模块化、 局部化、信息隐藏 …
坚持功能模块内部紧耦合,功能模块之间松耦合 的原则;
坚持与需求规格说明书的一致性
软件工程管理
目的 为了按照进度和预算完成软件开发计划
内容 成本估算 进度安排 人员组织 质量保证
软件工程的方法
软件工程方法是完成软件工程项目的技术 手段。它支持项目计划和估算、系统和软 件需求分析、设计、编程、测试和维护。
软件工程方法依赖一组原则,它贯穿软件 工程的各个环节。
软件工程方法分两类:传统方法和面向对 象方法
传统软件工程与面向对象软件工程
传统软件工程 以结构化程序设计为基础 结构化分析(SA)→结构化设计(总体设计、 详细设计) →面向过程的编码→测试
第1章 软件与软件工程课件
第1章 软件与软件工程
计算机科学的原有定义
• (1) 面向学科的思维能力 发现本领域新的特性的能力,这些特性导致新的活动 方式和新的工具,以便这些特性能被其他人所利用。 (2) 使用工具的能力 使用本领域的工具有效地进行其他领域时间活动的能 力。
• 建议: 把面向学科的思维能力作为计算专业课程设置的主要 目的。 同时,计算专业工作者必须充分熟悉工具,以便与其 他学科的人们有效地合作,进行那些学科的设计活动。
第1章 软件与软件工程
软件方法学和工程 –设计
• 软件方法学和工具领域设计和实验的主要内容是: (1) 技术要求描述语言(如PSL 2,IMA JO) 、构造管理系统(如 在Ada APSE) 和修改控制系统(如 RCS,SCCS) 。 (2) 指向语法的编辑器、行编辑器、屏幕编辑器和字处理系统。 (3) 在软件开发实践中倡导和使用的特定方法,如HDM,及 Dijkstra,Jackson,Mills或Yourdon等人倡导的方法。 (4) 测试的过程和实践(例如,遍历、手模拟、模块间接口的检 查、测试集的程序通路列举和事件跟踪) ,质量保证和计划管 理。 (5) 程序开发和查错,剖面分析,文本格式化和数据库操作的 软件工具。 (6) 像国防部那样的安全计算系统的标准级和验证过程的技术 要求。 (7) 用户接口的设计。 (8) 设计非常大的、可靠的、容错的和可信的系统的方法。
第1章 软件与软件工程
软件方法学和工程 –理论
软件工程―软件与软件工程介绍课件
软件需求
差距
软件技术
成本%
硬件
软件
时间 软件技术的发展落后于需求
1950 1970 1985 1995 年份 硬、软件成本比例的变化
第一章 软件与软件工程
软件的分类
1、按软件的功能进行划分
系应支 统用撑 软软软 件件件
第一章 软件与软件工程
软件的分类
系统软件
操作系统 数据库管理系统 设备驱动程序 通信处理程序等
软件工程管理
软件开发方法学 软件工具 软件工程环境
软件工程管理学 软件经济学
软件工程学的范畴
第一章 软件与软件工程
第四节 软件工程的产生及发展
3、软件的演变(即从传统软件开发到现代软件开发)
程序
软件
传统软件开发
软件产品 现代软件开发
240
80 0.00016
1975
营业额增长曲线 1989
2000
第一章 软件与软件工程
第二节 软件生存期
(6) 运行/维护
改正性维护 运行中发现了软件中的错 误需要修正 适应性维护 为了适应变化了的软件工 作环境,需做适当变更 完善性维护 为了增强软件的功能需做 变更
第一章 软件与软件工程
第二节 软件生存期
第一章 软件与软件工程
第三节 软件危机
所谓软件危机,就是指在软件开发和软件维 护过程中所存在的一系列严重问题。
第一章 软件与软件工程
软件的分类
支撑软件
文本系统 支持需求分析、设计、实现、 测试和支持管理的软件
第一章 软件与软件工程
软件的分类
应用软件
商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
南邮 软件工程-Unit_01_软件与软件工程
软件复杂性的增长
实例:
1963年 水星计划系统200万条指令 1967年 双子星座计划系统400万条指令 1973年 阿波罗计划系统1000万条指令 1979年 哥伦比亚航天飞机系统4000万条指令 Windows Vista:3000开发人员,59个开发节点,愈6千万行代码 每个汽车系统代码量:10万行(1970s)-1亿行(2010s) 波音飞机:总代码量超过400万行;宇宙飞船:软件代码2000万行 ;空间站:软件代码10亿行
磨损与退化
如果希望降低软件退化,需要改进软件的设计 软件工程方法的目的:降低变更突变的幅度,及其实 际失效曲线的斜率
6
软件的应用领域
系统软件 应用软件 工程 / 科学软件 嵌入式软件 产品线软件 (包括娱乐软件) Web应用软件 人工智能软件
7
应用软件
1. 文字处理软件
设计:需求规约 设计规约
实现:设计规约 代码
验证/确认
软件工程
范畴
27
软件工程的几个简单事实
在制定软件的解决方案之前,必须尽力理解问题 设计已经成为一项关键的软件工程活动 软件必须保证高质量 软件需具备可维护性
质量和可维护性都来自于好的设计
28
软件工程
弗里茨·鲍尔 建立和使用一套合理的工程原则,以便经济地获得可 靠的、可以在实际机器上高效运行的软件 IEEE ① 将系统化的、规范的、可量化的方法应用于软件的 开发、运行和维护,即将工程化方法应用于软件。 ② 在(1)中所述方法的研究。 《Cross Talk》 软件工程是一种层次化的技术,包括过程、方法和工 具
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
d e liv e ry o f 2 n d in cre m e n t
d e liv e ry o f 1 st in cre m e n t
project calendar t ime
2速应用开发
Te am # n
M o d e lin g
b u s in e s s m o d e lin g d a t a m o d e lin g p r o c e s s m o d e lin g
in crem ent # 2
Co m m u n i c a t i o n P l a n n i n g M o d e l i n g analy s is des ign
d e liv e ry o f n t h in cre m e n t
Co n s t ru c t i o n c ode t es t De p l o y m e n t d e l i v e ry fe e d b a c k
2007年9月7日
软件教研室
软件生命周期
三个阶段七个环节: 三个阶段七个环节:
软件定义阶段:可行性研究和需求分析 软件开发阶段:概要设计、详细设计、编码和测试 和综合测试 软件维护:
2007年9月7日
软件教研室
一个典型的一般性框架
1.通讯(问题定义、可行性研究、需求分析) 2.计划(总体设计) 3.建模(详细设计) 4.构造(编码和测试、综合测试) 5.部署(综合测试和软件维护) 注:这些过程在具体实施时可能会有些不同,但 过程的框架行为始终不变。
2007年9月7日
软件教研室
软件工程方法学
传统方法学 面向对象方法学 面向方面的软件工程方法 面向组件的软件工程方法 面向Agent的软件开发方法 面向 的软件开发方法 敏捷软件工程开发方法
• • • • • •
2007年9月7日
软件教研室
基于组件的开发模型
这种模型结合了一些螺旋模型的特性,应用 该模型的主要目的是对现有组件对象的复用 主要步骤: 研究可用的基于问题领域的组件产品; 怎样集成组件; 设计合适组件应用的软件体系结构; 将组件集成进软件架构; 对于组件功能的综合测试工作;
2007年9月7日
软件教研室
软件工程定义
软件工程是 1.把系统的、规范的、可度量的方法应用于软 件开发、运行和维护过程,也就是把工程应用 于软件; 2.将第一点提到的方法作为对象的研究活动;
2007年9月7日
软件教研室
PressMan的软件工程定义 的软件工程定义
Software Engineering
第一讲 软件与软件工程
本讲主要介绍软件和软件工程两个概 本讲主要介绍软件和软件工程两个概 软件 很好地理解这两个概念是非常重要。 念,很好地理解这两个概念是非常重要。 软件概念重点在于理解软件系统不同与 软件概念重点在于理解软件系统不同与 其他系统的特点, 其他系统的特点,软件工程概念重点在 于理解为什么会产生软件工程 为什么会产生软件工程, 于理解为什么会产生软件工程,软件工 程与一般工程有什么不同, 程与一般工程有什么不同,软件工程的 软件过程概念等 软件过程概念等
Planning
estimating scheduling tracking
Modeling
analysis design
Const ruct ion
code t est
Deployment
delivery support f eedback
2007年9月7日
软件教研室
增量模型
increm ent # n
2007年9月7日
软件教研室
第一节
软件
软件是多种术语和对象的集合, 软件是多种术语和对象的集合,并将 这些术语和对象有效地配置在一起。 这些术语和对象有效地配置在一起。 一般包括程序、文档和数据。 一般包括程序、文档和数据。
2007年9月7日
软件教研室
软件的两种角色
1.首先, 1.首先,软件作为一种服务社会的产品 首先
2007年9月7日
软件教研室
面向方面的软件开发方法
面向方面直观的理解就是对软件组件做一 次垂直的分解,提取其中的那些具有交叉 性的功能和一些非功能属性,建立方面; 一些公共的系统方面有:用户接口、协作 工作、分布、内存管理、安全管理等。
2007年9月7日
软件教研室
思考题
• 通过以上学习 说说你理解的软件工程概念 通过以上学习,说说你理解的软件工程概念 说说你理解的软件工程概念? • 说说软件工程三个要素之间的关系 说说软件工程三个要素之间的关系? • 例举出您所知道的一些软件工程方法? 例举出您所知道的一些软件工程方法
2007年9月7日
软件教研室
2007年9月7日
软件教研室
2007年9月7日
软件教研室
2007年9月7日
软件教研室
软件的分类 传统分类: 传统分类: 系统软件、应用软件、工程和科学软件 、嵌入式软件、专用产品软件、Web应 用软件、人工智能软件
2007年9月7日
软件教研室
现代分类: 现代分类: 随处计算软件(Ubiquitous computing); 网络源软件(Netsourcing); 开源软件; 数据挖掘(data mining); 网格计算(grid computing); 认知机器(cognitive machines); 软件新经济研究(电子商务技术); SOA(多种老应用的整合和新应用的灵活性);
2007年9月7日
软件教研室
第三节 软件过程
当建造一个产品或系统时,采用一系列可 推断的步骤是非常重要的,这样一个路径 表能够帮助你建立一个及时的、高品质的 结果。这个所谓的路径表就是我们所说的 软件过程。
2007年9月7日
软件教研室
软件过程框架
软件过程框架通过封装一些阶段性行为 ,并将这些行为普遍应用到各类软件项 目中,而不需要考虑该项目的大小和复 杂性等。
2007年9月7日
软件教研室
软件工程的基本原理
1.用分阶段的生命周期计划严格管理; 2.坚持进行阶段评审(早发现问题); 3.实行严格的产品控制(适应需求变化,并控 制变化) ; 4.采用现代程序设计技术; 5.结果应该能够清楚地审查; 6.开发小组的人员应该少而精; 7.承认不断改进软件工程实践的必要性;
2.其次,软件也可以作为其他产品的承载工具 2.其次, 其次
2007年9月7日
软件教研室
软件的特点
1.软件是被工程化的逻辑系统; 软件是被工程化的逻辑系统; 软件是被工程化的逻辑系统 2.软件一般没有磨损; 软件一般没有磨损; 软件一般没有磨损 3.软件具有不同于一般实物系统的复杂性 软件具有不同于一般实物系统的复杂性
2007年9月7日
软件教研室
思考题
1.什么是软件; 2.软件的特点及其问题; 3.今天软件危机是否已经解决了,你认为软件 危机是否可以最终解决; 4.例举一些在现实生活中的软件观点;
2007年9月7日
软件教研室
第二节 软件工程
任何学科从产生到成熟必须经历的四个层次: 1.解决哲学问题; 2.基础科学建立; 3.技术科学建立; 4.系统的管理工程方法(学科成熟的标志);
2007年9月7日
软件教研室
软件过程中的雨伞行为
软件工程中存在一些始终贯穿整个软件过程的 雨伞行为,主要表现有: 1.软件项目的跟踪和控制; 2.风险管理; 3.软件品质保障; 4.形式化技术分析; 5.软件度量; 6.软件配置管理; 7.重用管理;
2007年9月7日
软件教研室
典型的软件过程模型
2007年9月7日
软件教研室
软件危机
软件危机是指在软件发展过程中遇 到的一系列严重问题。这些问题不 是在解决具体问题时遇到的,而是 软件开发过程所面临的具有普适性 的问题。
2007年9月7日
软件教研室
软件危机的表现
1.对软件开发成本和进度的评估常常很不 准确; 2.用户对“已完成的”软件系统不满意; 3.软件产品的质量无法保证; 4.软件难以维护; 5.相关的开发文档不健全; 6.软件的重要性在不断提高; 7.软件开发工作量的提高; 8.软件需求越来越复杂;
2007年9月7日
软件教研室
软件管理者
1.对于软件开发有一些通用的能够适应所有需求的 准则或程序,可满足所有的开发需求; 2. 2.如果软件产品的开发周期拖后了,可以通过增加 人手来加快软件的开发速度; 3.通过从第三方采购软件项目,就可以轻松地什么 都不用做地完成项目;
2007年9月7日
软件教研室
2007年9月7日
软件教研室
遗留软件与软件进化
所谓遗留软件是指多年之前开发的, 所谓遗留软件是指多年之前开发的,能够继 续被修改以满足商业需要和计算平台的系统, 续被修改以满足商业需要和计算平台的系统, 对于这些系统的增殖处理常常是让一些大的组 织头痛的事情, 织头痛的事情,系统的维护费用和风险都将增 大。
通过使用模型简洁地描述软件过程中的各项 活动、任务、中间产品和里程碑的完成过程 ,如软件生命周期。 包括两类软件过程模型,说明性过程模型和 敏捷过程模型
2007年9月7日
软件教研室
说明性过程模型 瀑布模型
Communicat ion
project init iat ion requirement gat hering
软件用户
1.一般对于需求的描述就足够开始编写程序了,详 细的细节将由开发人员在开发过程中补充完善; 2.项目需求在不断改变,但由于软件是灵活的因此 这种变化可以轻易地被在软件中进行调整;
2007年9月7日
软件教研室
开发者角度
1.一旦完成软件的编写,并成功上线运行,那 么软件开发的工作就完成了; 2.对于软件的好坏,只有到软件编写完成后才 可以看到。 3.仅仅可运行的软件产品才是用户需要的东西 4.在编写软件过程中编写文档和其他一些工作 都是在浪费时间