第1章 软件工程学概论
第1章软件工程学概述
1.2.1 软件工程的概念
诸多软件工程的定义所揭示的软件工程 的本质认识是一致的:
软件工程一般更关注于大型软件系统的开发; 其中心任务是控制整个软件系统的复杂性,提高软 件开发的效率,加强人员和技术的管理,更好地满 足用户的需要。
1.2.2 软件工程的基本原理
(1)用分阶段的生命周期计划严格管理
(2)软件产品质量较差,可靠性低。
软件开发过程中不能坚持严格的审查、复审和测试, 使得软件可靠性差、质量问题多。
1.1.2 软件危机的表现
(3)用户对开发出来的软件产品不满意。
开发人员与用户之间的交流不充分,仅对用户需求 有了一个模糊的认识就匆忙开始写程序。这样的结果就 是用户对于所谓已经完成的软件很不满意。
1.1.1 软件危机的定义
➢ 定义
“在计算机软件的开发和维护过程 中所遇到的一系列严重的问题。”
1.1.2 软件危机的表现
(1)对软件开发成本和进度的估计常常很不准确。
实际成本往往大大超过估计成本,或开发进度比计 划推迟几个月或一年以上。这种现象极大地影响了软件 开发组织的信誉,也会引起用户的强烈不满。
1.1.1 软件的定义
➢ 软件的经典定义:
软件=“完成特定功能的程序+数据结构+文档”
➢ 软件的特征:
1、软件是开发的,而不是制造的; 2、软件不磨损,但退化; 3、自定义。
1.1.1 软件的定义
➢ 软件发展中的相关问题:
硬件的发展超过软件; 现有软件与用户的要求矛盾; 软件失败导致“灾难性后果”; 需要高质量、高可靠性的软件; 设计的问题使升级和维护十分困难。
(4)软件常常是不可维护的。
在实际项目中,很多程序的错误往往难以修改,而 且不能适应软硬件环境的变化,也无法添加用户需要的 一些新功能。
软件工程导论复习重点总结很全第六版
第1章软件工程学概述1.1 软件危机1.1.1 软件危机旳简介软件危机(软件萧条、软件困扰): 是指在计算机软件旳开发和维护过程中所碰到旳一系列严重问题。
软件危机包括下述两方面旳问题:怎样开发软件, 满足对软件日益增长旳需求;怎样维护数量不停膨胀旳已经有软件。
软件危机旳经典体现:(1)对软件开发成本和进度旳估计常常很不精确;(2)顾客对“已完毕旳”软件系统不满意旳现象常常发生;(3)软件产品旳质量往往靠不住;(4)软件常常是不可维护旳;(5)软件一般没有合适旳文档资料;(6)软件成本在计算机系统总成本中所占旳比例逐年上升;(7)软件开发生产率提高旳速度, 远远跟不上计算机应用迅速普及深入旳趋势。
1.1.2 产生软件危机旳原因(1)与软件自身旳特点有关(2)与软件开发与维护旳措施不对旳有关1.1.3 消除软件危机旳途径对计算机软件有对旳旳认识。
认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完毕旳工程项目。
应当推广使用在实践中总结出来旳开发软件旳成功技术和措施, 并继续研究探索。
应当开发和使用更好旳软件工具。
总之, 为了处理软件危机, 既要有技术措施(措施和工具), 又要有必要旳组织管理措施。
1.21.2.1 软件工程旳简介软件工程: 是指导计算机软件开发和维护旳一门工程学科。
采用工程旳概念、原理、技术和措施来开发与维护软件, 把通过时间考验而证明对旳旳管理技术和目前可以得到旳最佳旳技术措施结合起来, 以经济地开发出高质量旳软件并有效地维护它, 这就是软件工程。
(期中考)软件工程旳本质特性:软件工程关注于大型程序旳构造软件工程旳中心课题是控制复杂性软件常常变化开发软件旳效率非常重要友好地合作是开发软件旳关键软件必须有效地支持它旳顾客在软件工程领域中是由具有一种文化背景旳人替具有另一种文化背景旳人发明产品1.2.2 软件工程旳基本原理用分阶段旳生命周期计划严格管理坚持进行阶段评审实行严格旳产品控制采用现代程序设计技术成果应能清晰地审查开发小组旳人员应当少而精承认不停改善软件工程实践旳必要性1.2.3 软件工程措施学软件工程包括技术和管理两方面旳内容。
《软件工程》课件——第1章 软件工程概述
软件的分类
图1.3 软件的分类
软件的分类
另外,从软件工程学的角度来划分软件产品,可以分为基础软件、支 撑软件和应用软件等。
基础软件是指保证计算机运行并支撑应用软件运行的基础环境,包括 操作系统、数据库、中间件。
支撑软件是指支撑各种软件的开发与维护的软件,又称减开发环境( Integrated Development Environment, IDE),主要有环境数据库、各 种接口软件和工具组,包括编程工具、建模工具、版本控制、软件测试等 类型。
软件的特性
图1.1 硬件失效曲线图
软件的特性
图1.2 软件失效曲线
软件的特性
⑥ 应用特性。软件的应用极为广泛,如今它 已渗入国民经济和国防的各个领域,现已成为信 息产业、先进制造业和现代服务业的核心,占据 了无可取代的地位。
软件的特性
(2)软件的生产特性 ① 软件开发特性。由于软件固有的特性,使得软件的开发不仅具
有技术复杂性,还有管理复杂性。技术复杂性体现在:软件提供的功能比 一般硬件产品提供的功能多,而功能的实现具有多样性,需要在各种实现 中做出选择,更有实现算法上的优化带来的不同,而实现上的差异会带来 使用上的差别。管理上的复杂性表现在:第一,软件产品的能见度低,要看 到软件开发进度比看到有形产品的进度困难得多;第二,软件结构的合理性 差,结构不合理使软件管理复杂性随软件规模增大而呈指数增长。
软件的特性
③ 软件维护特性。软件在运行过程中的维护工作比硬件复杂得多。
首先软件投入运行后,总会存在缺陷甚至暴露出潜伏的错误,需要进行“纠 错性维护”。其次,用户可能要求完善软件性能,对软件产品进行修改,进 行“完善性维护”。当支撑软件产品运行的硬件或软件环境改变时,也需要 对软件产品进行修改,进行“适应性维护”。软件的缺陷或错误属于逻辑性 的,因此,不需要更换某种备件,而是修改程序,纠正逻辑缺陷,改正错误 ,提高性能,增加适应性。当软件产品规模庞大、内部的逻辑关系复杂时, 经常会发生为纠正一个错误而产生新错误的情况,因此,软件产品的维护往 往比硬件产品的维护工作量大且复杂。
第一章软件工程学概述选择题
第一章软件工程学概述选择题1.软件是一种( )产品。
A.有形 B.逻辑C.物质 D.消耗2.软件工程学的目的应该是最终解决软件生产的( )问题。
A.提高软件的开发效率 B.使软件生产工程化C.消除软件的生产危机 D.加强软件的质量保证3.与计算机科学的理论研究不同,软件工程是一门( )学科。
A.理论性 B.工程性 C.原理性 D.心理性4.软件危机的主要原因有( )。
①软件本身的特点②用户使用不当③硬件可靠性差· ④对软件的错误认识⑤缺乏好的开发方法和手段A.③④ B.①②④C.①⑤ D.①③5.在计算机软件开发和维护中所产生的一系列严重的问题通常称为软件危机,这些问题中相对次要的因素是( )。
A.文档质量 B.开发效率C.软件功能 D.软件性能6.软件工程与计算机科学性质不同,软件工程着重于( )。
A.原理探讨 B.理论研究C.建造软件系统 D.原理的理论7.软件工程学科出现的主要原因是( )。
A.计算机的发展B.其他工程科学的影响C.软件危机的出现D. 程序设计方法学的影响8.软件工程方法学的研究内容包含软件开发技术和软件工程管理两个方面,其期望达到的最终目标是( )。
A.软件开发工程化B.消除软件危机C.实现软件可重用D.程序设计自动化9.由于软件生产的复杂性和高成本性,使大型软件的生存出现危机,软件危机的主要表现包括了下述( )方面。
①生产成本过高②需求增长难以满足③进度难以控制④质量难以保证A.①② B.②③ c.④ D.全部10.软件工程方法学中的软件工程管理是其中的一个重要内容,它包括软件管理学和软件工程经济学,它要达到的目标是( )。
A.管理开发人员,以开发良好的软件B.采用先进的软件开发工具,开发优秀的软件c.消除软件危机,达到软件生产的规模效益D.以基本的社会经济效益为基础,工程化生产软件11.软件工程方法学的目的是使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是( )。
软件工程概论课后习题答案
软件工程概论课后习题答案软件工程概论郑人杰等版第1章软件与软件工程的概念1.1 举出你所知道的应用软件的例子。
办公软件、嬉戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。
1.2 认为“软件就是程序,软件开发就是编程序。
”这种观点是否正确?为什么?认为“软件就是程序,软件开发就是编程序。
”这种观点是错误的。
首先,软件是计算机系统中与硬件互相依存的另一部分,它是包括程序,数据及其相关文档的完整集合,程序只是软件的组成部分之一;第二,在软件开发中,编程只是软件开发过程的一个阶段。
1.3 假如将软件开发比作高楼大厦的建筑,可以将软件的设计比作什么?可以将软件的设计比作建造设计,软件设计的成绩相当于建造设计的设计图纸。
1.4 什么是软件危机?它有哪些典型表现?为什么会浮现软件危机?软件危机:软件危机是指在计算机软件的开发和维护过程中所碰到的一系列严峻问题。
典型表现:(1)对软件开发成本和进度的估量经常很不精确。
(2)用户对“已完成的”软件系统不惬意的现象常常发生。
(3)软件产品的质量往往靠不住。
(4)软件经常是不行维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年升高。
(7)软件开发生产率提高的速度,既跟不上硬件的进展速度,也远远跟不上计算机应用快速普及深化的趋势。
产生软件危机的缘由:除了软件本身的特点,其缘由主要有以下几个方面:(1) 缺乏软件开发的阅历和有关软件开发数据的堆积,使得开发工作方案很难制定。
(2) 软件人员与用户的沟通存在障碍,使得猎取的需求不充分或存在错误。
(3) 软件开发过程不规范。
如,没有真正了解用户的需求就开头编程序。
(4) 随着软件规模的增大,其复杂性往往会呈指数级上升。
需要无数人分工配合,不仅涉及技术问题,更重要的是必需有科学严格的管理。
(5) 缺少有效的软件评测手段,提交给用户的软件的质量不能彻低保证。
1.5 什么是软件工程?软件工程是指导计算机软件开发和维护的工程学科。
软件工程学概论
软件开发维护方法中存在的问题(1)
① 对用户需求的获取不正确 用户的原因 分析人员的原因 对分析人员的要求:沟通能力、归纳总结能力、经验
越是早期产生的错误,付出的代价越大。 图:不同时期引入同一变 动 的代价
软件开发维护方法中存在的问题( 2 )
② 软件开发就是编写程序。 一个完整的软件产品由一整套完整的配置组成,程序只是其中的一个组成部分。 软件开发过程包括多个阶段,每个阶段的产品都是最终的完整的软件产品的一部分。
为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。 2 ) IEEE-CS(电气电子工程师协会/计算机科学分会)
① 1993 年,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化 应用于软件中。 ② 对 ① 中提到的各种方法的研究。
3 ) 其他学者的定义 Boehm :运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的
传统方法学的优缺点
传统方法学的优点 分解任务,分工合作,降低整个软件开发工程的困难; 采用科学的管理技术和良好的技术方法对每个阶段成果都进行严格的审查。保证了软件的质量 。
传统方法学的缺点 把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。
面向对象方法学( OO,Object- oriented )
出现软件危机的原因
主要两个原因: 与软件本身的特点有关 与软件开发与维护的方法不正确有关
软件本身的特点(1)
软件与硬件、一般程序存在很多不同之处。 软件与硬件不同
抽象性:软件生产没有明显的制造过程,难以衡量开发进展,也难以控制软件质量。 问题的隐蔽性:没有硬件的磨损、老化问题,但存在开发早期在分析、设计阶段的错误,修改
第1章-软件工程学概述1-1
• 软件用后不磨损
• 随着时间的推移,应用程序
的某些部分可能会变得不再 相关(例如,需求改变时), 而需要修改
• 但是,没有备件的概念
1.1、软件的定义
硬件和软件故障率曲线
由于副作用造成 故障率的提高 原来的软件已经面目全非了!
故障率
磨损后
生命初期
修改
硬件的故障率曲线 实际曲线
软件故障率的理想曲线
1.2、软件危机
软件危机案例
3 . 软件产品的质量靠不住 [案例]:
ARIANE 5 火箭 1996 年6 月,耗资70 亿美元,发射
本章内容
1.1、软件的定义 1.2、软件危机 1.3、软件工程 1.4、软件生存期 1.5、软件过程
1.2、软件危机
软件危机
Crisis!
“软件危机”(Software crisis) 的出现是由于软件的规模越来越大,复杂 度不断增加,软件需求量增大。而软件开 发过程是一种高密集度的脑力劳动,软件 开发的模式及技术不能适应软件发展的需 要。致使大量质量低劣的软件涌向市场, 有的花费大量人力财力,而在开发过程中 就夭折。
时间
1.1、软件的定义
硬件和软件故障率曲线的比较
软件不会用坏(wear out).
软件会退化( deteriorate)!
1.1、软件的定义
软件的特点-7
要求
软件产品不允许误差
软件产品的高质量取决于好的设计( High quality is achieved through) 依赖于人(Depend on people) 需要对产品进行构造(Require the construction of a “product”)
第1章软件工程学概述
(3)软件经常变化 (4)开发软件的效率非常重要 (5.) 和谐地合作是开发软件的关键 (6.) 软件必须有效地支持它的用户 开发软件的目的就是支持用户的工作,满足 用户对软件的需求 (7. )在软件工程领域中通常由具有一种文 化背景的人替具有另一种文化背景的人创 造产品
37
软件工程的研究内容
软件是计算机系统中与硬件(hardware)相互依存 的另一部分,与硬件合为一体完成系统功能。 软件定义包括如下几点: (1)功能和性能的指令集(即程序); (2)程序能正常操纵信息的数据结构(即相关数 据); (3)与程序开发维护和使用有关的各种图文数据 (即说明文档)。
16
软件=程序+数据+相关文档
软件的发展主要经历了以下3个发展阶段:
第一阶段(20世纪50年代初期至20世纪60年 代中期) 特点:(1)称为程序设计阶段 (2)软件生产以个体化为主 (3)编写程序的工具只有低级语言 (4)软件规模小,几乎没有系统化的 标准可循
11
(5)软件由软件使用者自己开发和编写,适 合个人应用 (6)没有“软件”概念,对于程序有关的文 档的重要性认识不足,开发主要围绕硬件 进行 (7)工程规模小,使用工具单一,开发者之 间没有明确分工 第二阶段(20世纪60年代中期至70年代末期) 称程序系统阶段
7
ENIAC诞生于二战时期,最初是作为辅助炮兵计 算炮弹轨迹的工具,在盟军登陆西欧前一年开始 制造,但直到1945年停火时还没完成。在冷战初 期军方就发现了ENIAC的大量用途,它的17468 根真空管被用来测试氢弹的早期设计的可行性。 这台计算机每秒能执行5000条指令,在当时的情 况下它的运算速度比电动式计算机快1000倍。当 然,现在iPhone 6每秒能响应250亿条指令。
软件工程第1章 软件工程概论
11
1.2 软件危机
软件危机是指在计算机软件开发和维护时所遇到的 一系列问题。软件危机主要包含两方面的问题:一是如 何开发软件以满足社会对软件日益增长的需求,二是如 何维护数量不断增长的已有软件。 (1)软件危机产生的原因 软件危机产生的原因与软件的特点有关,也与软件 开发的方式、方法、技术和软件开发人员本身有关。 ①软件不同于硬件,它是计算机系统中的逻辑部件 而不是物理部件。
6
1.1.3 软件的特性 软件同传统的工业产品相比,由于其本身具有的特 殊性质,因此,软件产品具有以下特性: ①软件是信息产品。 ②软件的生产过程与硬件不同。 ③软件的成本构成和传统工业产品不同。 ④软件没有磨损、老化的问题,只有过时与失效。 ⑤软件的开发和运行常常受到不同的计算机软件和 硬件平台的限制。 ⑥软件具有可剪裁、可扩展、便于分解和组合以及 插入、删除的特性。
15
②推广使用在长期实践中总结出来的开发软件的成 功的技术和方法,探索和研究更好的软件设计、表达技 术及管理方法,消除计算机系统早期发展阶段形成的一 些错误概念和做法;采用面向对象的软件设计方法,使 解决问题的方法空间同客观世界的问题空间完全一致, 降低或化解软件设计的复杂性。 ③使用好的软件开发工具及软件工程环境。正如机 械工具可以“放大”人类的体力一样,软件开发工具及 软件工程环境可以“放大”人类的智力。 ④软件开发不是某种个体劳动,因此应该有良好的 组织、严密的管理,促使各类人员相互配合共同完成任 务。
出版社理工分社软件工程311软件综述随着计算机系统的发展计算机的应用日趋广泛计算机软件自身在开发技术及编程方法上存在严重的滞后和无序导致软件的供给质量与巨大的社会需求之间存在差异的软件危机困扰为了更好地开发和维护软件软件工作者在20世纪60年代后期开始认真研究消除软件危机的新途径从而逐渐形成了一门新兴的工程学科计算机软件工程学简称为软件工程
软件工程课件教案1_软件工程学概论
编辑ppt
12
1.2.1 软件工程的介绍
1993年IEEE进一步给出了一个更全面更具体的定义: “软件工程是: ①把系统的、规范的、可度量的途径应用 于软件开发、运行和维护过程,也就是把工程应用于软件; ②研究①中提到的途径。”
编辑ppt
13
1.2.1 软件工程的介绍
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 3、第三代软件工程 — 过程工程 4、第四代软件工程 — 构件工程
编辑ppt
14
1.2.1 软件工程的介绍
软件工程的发展已经历了四个重要阶段:
1、第一代软件工程 — 传统的软件工程
60 年 代 末 到 70 年 代 为 了
克服“软件危机”
(Software crisis)提出“软
件工程”的名词, 将软件开
发纳入工程化的轨道,基本
形成软件工程的概念、框架、
技术和方法。称为传统的软
90起年代,基于构件(Component)
的开发方法取得重要进展,软件系统的
开发可通过使用现成的可复用构件组装
完成,而无需从头开始构造,以此达到
第一章 软件工程学概述
教学目标
了解软件危机的产生以及解决办法——软件工程的 重要性;了解软件生命周期以及常用软件开发模型。
教学重点
软件工程的基本原理。
教学难点
软件过程中各种模型的特点、使用范围的了解。
编辑ppt
1
第一章 软件工程学概述
1.1 软件危机 1.2 软件工程 1.3 软件生命周期 1.4 软件工程过程
软件生命周期理论:几个阶段 编写程序所占的工作量:10%~20% 软件不同生命周期引入变化的代价:如图所示 软件维护的代价:55%~70%的费用
《软件工程》第一章概论
过程(续1)
• 增量和迭代
– 使用瀑布模型,可以运行的产品很迟才能看到,这就潜伏了巨大 的风险:很可能,集成之日也就是爆炸之日。为了提早获得可以 运行的版本,可以先实现一些功能,再实现一些功能……每个增 量交付一个可以运行的版本。
过程(续2)
• 统一过程
– 97年Rational公司退出了UML。随后开发出了“Rational Unified Process”以及4+1视图模型。RUP的中心思想是:用例驱动、架 构为中心、迭代和增量。虽然是一个商业产品,但详尽的内容和 灵活的组织,使得RUP成为软件团队中流传最广的软件过程模型
程序时代(60年代前)
• 计算机硬件处于电子管时代、应用于科学计算。 • 软件的特点:
– 软件是硬件的附带产品。 – 软件的开发者、使用者、维护者都是同一人——科学工作者。 – 重视编程技巧和运算效率的提高。 – 结构不清晰,不易理解,像一部天书, 是人脑进行的隐含过程。使用机器语言 (后期用汇编语言) 。
工具 方法 过程
过程
• 瀑布
– Winston W. Royce1970年的经典论文“Managing the Development of Large Software Systems”提出
问题定义 计划 时期 可行性论证 及软件计划
需求分析
概要设计 开发 时期
详细设计
编码
测试
运行时期
运行/维护
– (1)将系统化的、规范的、可量化的方法应用于软件的开发、运 行和维护,即,将工程应用于软件。 – (2)在(1)中所述方法的研究。
四十年中究竟发生了什么?
• 软件是为人开发的,软件是由人开发的。正是因为人的心 理难以捉摸,人的大脑处理复杂性时速度和容量的局限, 我们才需要过程来规范人的行为,需要方法来帮助 人脑 面对复杂性,需要工具来贯彻这些过程和方法。所以,软 件工程的知识体系分为以下几层。我们按照这个金字塔结 构,逐层回顾四十年来的历史。
《软件工程》第一章软件工程学概述
《软件⼯程》第⼀章软件⼯程学概述第⼀章软件⼯程学概述1.1 软件危机1.1.1 软件的定义——定义:软件=“完成特定功能的程序+数据结构+⽂档”——特征:(3个)软件是开发的,⽽不是制造的;软件不磨损,但退化;⾃定义。
——发展问题1.1.2 软件危机的表现——定义:在计算机软件的开发和维护过程中所遇到的⼀系列严重的问题。
——表现:(6个)(1)对软件开发成本和进度的估计常常很不准确。
(2)软件产品质量较差,可靠性低。
(3)⽤户对开发出来的软件产品不满意。
(4)软件常常是不可维护的。
(5)软件产品缺少应有的⽂档资料。
(6)软件产品的供不应求。
1.1.3 软件危机的原因——客观原因——主观原因1.2 软件⼯程1.2.1 软件⼯程的概念——定义:指导软件开发与维护的⼯程科学。
采⽤⼯程的概念、原理、技术和⽅法来开发和维护软件,综合运⽤正确的管理技术和最好的技术⽅法,以经济地开发出⾼质量的软件并有效维护它。
IEEE的定义:①软件⼯程是把系统的、规范的、可度量的途径应⽤于软件开发、运⾏和维护过程,也就是把⼯程应⽤于软件;②对这些途径加以研究。
1.2.2 软件⼯程的基本原理(7个)——(1)⽤分阶段的⽣命周期计划严格管理(2)坚持进⾏阶段评审(3)实⾏严格的产品控制(4)采⽤现代程序设计技术(5)结果可以清楚地审查(6)开发⼩组成员少⽽精(7)承认不断改进软件⼯程实践的必要性1.2.3 软件⼯程⽅法学:3个要素(⽅法、⼯具和过程)——传统⽅法学:结构化技术,软件⽣命周期——⾯向对象⽅法学:类+对象+继承+消息,软件开发过程更接近⼈类认知模式1.3 软件⽣命周期1.3.1 软件⽣命周期的概念——定义:⼀个软件从定义、开发、使⽤和维护,直⾄最终被废弃,要经历的漫长的时期称为软件⽣命周期。
——构成:3个时期,8个阶段软件定义:问题定义,可⾏性研究,需求分析软件开发:总体设计,详细设计,编码和单元测试,综合测试;运⾏维护:软件维护1.3.2 各阶段的基本任务(8个阶段)——问题定义:需要解决的问题是什么?书⾯报告——可⾏性研究:确定软件系统是否值得去解《可⾏性研究报告》——需求分析:解决这些问题需要系统做什么?《软件需求规格说明书》——总体设计:应该怎样实现⽬标系统?《概要设计说明书》——详细设计:如何具体地实现这个系统?——编码和单元:写代码,测试每个模块!——测试、综合测试:通过各类测试和调试来完善软件《测试计划/⽅案》——软件维护:通过各种必须的维护活动使系统持久地满⾜⽤户的需要。
软件工程 01概述讲解
软件需要随接口的不同而改变,随时间的推移 而变化,而这些变化是不同的人设计的结果。
许多复杂性来自保持与其他接口的一致,对软 件的任何再设计,都无法简化这些复杂特性。
2019/6/1
软件工程导论
5
1.1 软件危机
2019/6/1
软件工程导论
6
1.1 软件危机
不可见性
软件是不可见的和无法可视化的
软件的客观存在不具有空间的形体特征,定义“需要做什么 ”成为软件开发的根本问题。
人们一直试图使用不同的技术进行软件可视化
如控制流程、数据流、依赖关系、UML等,但这些技术仍然无 法给出准确的、完整的描述。
软件工程就是建立和使用一套合理 的工程原理,从而经济地获得可靠的、 可以在实际机器上高效运行的软件。
2019/6/1
软件工程导论
27
1.2 软件工程定义(2)
Software engineering. (1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1). (IEEE(The Institute for Electrical and Electronic engineers) Std 610-1990.)
软件工程 第1章 概述
软件工程学概述
3. 实行严格的产品控制 基线配置管理(变动控制)
4. 采用现代程序设计技术 结构化分析、设计技术、结构化程序设计技术,面向对
象分析和设计技术。
实践表明,采用先进的技术不仅可以提高软件开发和 维护的效率,而且可以提高软件产品的质量。
5. 结果应该能够清楚地审查 依据开发项目的总目标和完成期限,规定开发小组的
易地改动。”
◦ “软件投入生产性运行以后需要的维护工作并不多,而且维护是一 种很容易做的简单工作。”软件维护的费用占软件总费用的55%- 70%
◦ 不完善的系统定义往往是导致软件项目失败的主要原因。 ◦ 只有质量差的软件产品才需要维护。
◦ 在软件开发的过程中,若能推迟暴露其中的错误,则为修复和改正错误 所花费的代价就会降低。
不全,坚持认为软件开发就是写程序、运行程序; (c)轻视软件维护。
不同阶段修改软件需付出的代价很不相同:
代价
高
中
低
早期 中期 后期 软件开发时期
引入同一修改的代价随时间变化的趋势
关于软件开发的常见观点:√ or X
◦ “有一个对目标的概括描述就足以着手编写程序了,许多细节可以 在以后再补充。”
◦ “所谓软件开发就是编写程序并设法使它运行。” ◦ “用户对软件的要求不断变化,然而软件是柔软而灵活的,可以轻
5. 详细设计 任务:怎样具体实现该系统 ◦ 详细地设计每个模块,确定实现模块功能所需要的算法和数 据结构。
结果: ◦ 每个模块的算法和数据结构(程序流程图、 N-S图、 PAD图
等)。
6. 编码和单元测试 任务:得到正确的程序模块 ◦ 选取一种适当的高级程序设计语言(必要时用汇编语言),把 详细设计的结果翻译成用选定的语言书写的程序; ◦ 并且仔细测试编写出的每一个模块。 结果: ◦ 代码和测试报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件危机的产生的原因及总结
(1) 对软件开发成本和进度的估计常常很不 准确。拖期,项目管理经验欠缺。 准确。拖期,项目管理经验欠缺。 (2) 用户对“已完成的”软件系统不满意的 用户对“已完成的” 现象经常发生。 闭门造车、 现象经常发生。模糊的需求 、闭门造车、忙于 编程,仓促上阵。 编程,仓促上阵。 (3) 软件产品的质量往往靠不住。可靠性和 软件产品的质量往往靠不住。 质量保证欠缺,缺少测试。 质量保证欠缺,缺少测试。 (4) 软件常常是不可维护的。设计死板,没 软件常常是不可维护的。设计死板, 有整体考虑。 有整体考虑。
Software Crisis !
11
•
软件危机
欠缺文档 欠缺设计,急于编程 欠缺设计,
问题出在哪里? 问题出在哪里? 项目没有被很好地理解;计划不周, ⑴ 项目没有被很好地理解;计划不周,最终导致 进度拖延。 进度拖延。
例: 在20世纪 年代后期,一位热情的年青工程师受命为一个自动化 世纪60年代后期 世纪 年代后期, 制造应用项目“编写”计算机程序。选择他的理由非常简单, 制造应用项目“编写”计算机程序。选择他的理由非常简单,因为在整 个技术小组中他是唯一参加过计算机编程培训的人。 个技术小组中他是唯一参加过计算机编程培训的人。这位工程师对汇编 语言的IN和 指令以及Fortran语言有所了解,但是却根本不懂软件 语言有所了解, 语言的 和OUT指令以及 指令以及 语言有所了解 工程,更不要说项目进度安排和跟踪了。 工程,更不要说项目进度安排和跟踪了。 他的老板给了他一大堆相关的手册,以及需要做些什么的口头描述。 他的老板给了他一大堆相关的手册,以及需要做些什么的口头描述。年 口头描述 轻人被告知该项目必须在两个月之内完成。 轻人被告知该项目必须在两个月之内完成。 他阅读了这些手册,想好了解决方法, 立即编写代码。两周后, 他阅读了这些手册,想好了解决方法,就立即编写代码。两周后,老板 将他叫到办公室询问项目进展情况。 将他叫到办公室询问项目进展情况。
14
•
软件危机
⑶ 软件可靠性(reliability)缺少度量的标准,质量 软件可靠性( 缺少度量的标准, 无法保证。 无法保证。 如何保证软件产品的质量,是非常复杂困 如何保证软件产品的质量, 难的问题。特别对于规模庞大的软件。 难的问题。特别对于规模庞大的软件。
软件难以维护(maintainability) ⑷ 软件难以维护(maintainability) 不易升级(evolvability) 不易升级(evolvability)
项目软件 产品软件
8
软件发展阶段: 软件发展阶段:
程序设计阶段 — 50至60年代 50至60年代 程序系统阶段 — 60至70年代 60至70年代 软件工程阶段 — 70年代以后 70年代以后
9
软件开发工具的变迁: 软件开发工具的变迁:
穿孔机打孔编程 汇编语言(Z80、 汇编语言(Z80、 M6800、 M6800、8086/88) 高级语言 (Cobol、Basic、Dbase、Turbo C、 、 、 、 、 FoxBase、Foxpro等) C/S、B/S 、 等 、 体系结构的开发工具(VFP、VC、VB、 体系结构的开发工具 、 、 、 Delphi、Powerbuilder、C++ 、 、 Builder、Oracle Developer/2000、 、 、 Java、MS .net等等 等等) 、 等等
4
软件的分类: 软件的分类:
按软件的功能进行划分: 按软件的功能进行划分:
系统软件
操作系统 数据库管理系统 设备驱动程序 通信处理程序 等
5
•
支撑软件
文本编辑程序 文件格式化程序 磁盘向磁带向数据传输的程序 程序库系统 支持需求分析、设计、实现、测试和支持 支持需求分析、设计、实现、 管理的软件
17
软件开发付出代价分析
根据美国一些软件公司的统计资料, 根据美国一些软件公司的统计资料,在后期引 入一个变动比在早期引入相同变动所需付出的代价 个数量级。 1.1定性地描绘了在不同时期 高2~3个数量级。图1.1定性地描绘了在不同时期 引入一个变动需要付出的代价的变化趋势。 引入一个变动需要付出的代价的变化趋势。
6
•
应用软件
商业数据处理软件 工程与科学计算软件 计算机辅助设计/ 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 医疗、 事务管理、 事务管理、办公自动化软件 计算机辅助教学软件
7
•
即针对特定某个客户的要求, 即针对特定某个客户的要求, 按软件工作方式划分: 按软件工作方式划分: 并仅为其使用的软件。 并仅为其使用的软件。又称工 实时处理软件 程软件,特点是有明确的合同, 程软件,特点是有明确的合同, 严格的工期,约定的维护期等。 严格的工期,约定的维护期等。 分时软件 "XXX公司XXX系统 即针对某一领域客户的共有需 公司XXX系统" 如"XXX公司XXX系统"。 交互式软件 求而开发的软件。特点是通用、 求而开发的软件。特点是通用、 批处理软件 功能丰富而冗余, 功能丰富而冗余,通过一次性的 购买行为获得等。 购买行为获得等。如操作系统软 数据库软件、CAD软件等 软件等。 按软件服务对象的范围划分: 件、数据库软件、CAD软件等。 按软件服务对象的范围划分:
12
•
软件危机
非常好”工程师以年轻人的热情回答道, “非常好”工程师以年轻人的热情回答道,“这个项目远 比我想像的简单。我差不多已经完成了75%的任务。 的任务。 比我想像的简单。我差不多已经完成了 的任务 老板笑了,说道: 真是太棒了” 老板笑了,说道:“真是太棒了”然后他嘱咐年轻人继续 努力工作,准备好一周后再汇报一次工作进度。 努力工作,准备好一周后再汇报一次工作进度。 一周后老板将年轻人叫到办公室,问他说: 一周后老板将年轻人叫到办公室,问他说:“现在进度如 何?” 一切顺利”年轻人回答说, 但是我遇到了一些小麻烦。 “一切顺利”年轻人回答说,“但是我遇到了一些小麻烦。 我会排除这些困难,很快就可以回到正轨上来。 我会排除这些困难,很快就可以回到正轨上来。” 你觉得在最后期限之前能否完成? 老板问道。 “你觉得在最后期限之前能否完成?”老板问道。 没有问题”工程师答道。 我差不多已经完成了90%” “没有问题”工程师答道。“我差不多已经完成了 ” 问题:年轻工程师在整个项目工期内始终停留在90%的进 问题: 年轻工程师在整个项目工期内始终停留在 的进 度上, 在别人的帮助下)直到交付期限之后一个月才做完。 度上,(在别人的帮助下)直到交付期限之后一个月才做完。
软件工程
张聚礼 zhjl@
兰州理工大学计算机与通信学院
第1 章
软件工程学概述
1.0 什么是软件? 什么是软件? 1.1 软件危机 1.2 软件工程 1.3 软件生命周期 1.4 软件过程 1.5 小结 习题
2
§1.0
什么是软件? 什么是软件?
软件是计算机系统中与硬件相互依存的另一 软件是计算机系统中与硬件相互依存的另一 部分,它是包括程序 数据及其相关文档的 程序、 及其相关文档 部分,它是包括程序、数据及其相关文档的 完整集合。 完整集合。 程序是按事先设计的功能和性能要求执行的 程序是按事先设计的功能和性能要求执行的 是按事先设计 指令序列。 指令序列。 数据是使程序能正常操纵信息的数据结构。 数据是使程序能正常操纵信息的数据结构。 是使程序能正常操纵信息的数据结构 文档是与程序开发, 文档是与程序开发,维护和使用有关的图文 是与程序开发 材料。 材料。
13
•
软件危机
⑵ 没有充分的文档资料(documentation) 没有充分的文档资料(documentation) Managers —— 评价, 进程跟踪, ...... 评价, 进程跟踪, Programmers —— 与其它程序的通信接口 Maintainers ——维护 维护 比写程序困难得多。 人与人的交流比写程序困难得多。
16
•
软件通常没有适当的文档资料。 (5) 软件通常没有适当的文档资料。缺少设 计资料、难以维护,写文档嫌麻烦。 计资料、难以维护,写文档嫌麻烦。 (6) 软件成本在计算机系统总成本中所占的 比例逐年上升。软件过于庞大,成本过高。 比例逐年上升。软件过于庞大,成本过高。 软件开发生产率提高的速度, (7) 软件开发生产率提高的速度,远远跟不 上计算机应用迅速普及深入的趋势。 上计算机应用迅速普及深入的趋势。跟不上计算 机和软件技术的发展速度,技术落后。 机和软件技术的发展速度,技术落后。
3
软件的表现形式: 软件的表现形式:
软件分为有形部分和无形部分: 软件分为有形部分和无形部分: 有形部分和无形部分 软件的有形部分: 软件的有形部分:是软件的各种具体表现形 式,包括软件文档,程序代码,二进制代码,用户 包括软件文档,程序代码,二进制代码, 软件文档 界面,输出报表等 界面,输出报表等。 软件的无形部分:是软件的内部逻辑, 软件的无形部分:是软件的内部逻辑,是软件 思想。 本身所包含的思想 本身所包含的思想。
这个项目的负责人事后总结了他在组织开发过程中的沉 这个项目的负责人事后总结了他在组织开发过程中的沉 痛教训时说 时说: ......正像一只逃亡的野兽落到泥潭中做垂 痛教训时说:“......正像一只逃亡的野兽落到泥潭中做垂 死的挣扎,越是挣扎,陷得越深, 死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾 ......程序设计工作正像这样一个泥潭 ......一批批 程序设计工作正像这样一个泥潭, 难。......程序设计工作正像这样一个泥潭,......一批批 程序员被迫在泥潭中拼命挣扎,......” 程序员被迫在泥潭中拼命挣扎,.....公司在1963年至 美国IBM 公司在1963年至1966年开发的IBM360机 年至1966年开发的 年开发的IBM360机 的操作系统。这一项目花了5000人一年的工作量 人一年的工作量, 的操作系统。这一项目花了5000人一年的工作量,最多 时有1000人投入开发工作 写出了近100万行源程序 人投入开发工作, 万行源程序。 时有1000人投入开发工作,写出了近100万行源程序。 据统计,这个操作系统每次发行的新版本都是从前一版 据统计,这个操作系统每次发行的新版本都是从前一版 本中找出1000个程序错误而修正的结果 个程序错误而修正的结果。 本中找出1000个程序错误而修正的结果。......