软件工程学概述Chapter1
第1章 软件工程学概述课件

第1章 软件工程学概述
1- 17
消除软件危机的途径…
消除“软件就是程序”的错误观念
一个软件必须由一个完整的配置组成
软件是程序、数据及相关文档的完整集 合
文档是开发、使用和维护程序所需要的 图文资料
软件=程序+数据+文档
第1章 软件工程学概述
1- 18
…消除软件危机的途径
软件开发不是某种个体劳动的神秘技 巧,而应该是一种组织良好、管理严 密、各类人员协同配合、共同完成的 工程项目
1- 37
软件维护
8. 软件维护
使系统持久地满足用户的需要 维护工作分成以下四类
改正性维护 适应性维护 完善性维护 预防性维护
第1章 软件工程学概述
1- 38
内容线索
软件危机 软件工程 软件生命周期 软件过程
第1章 软件工程学概述
1- 39ຫໍສະໝຸດ 软件过程软件过程是为了获得高质量软件所需要完成 的一系列任务的框架,它规定了完成各项任 务的工作步骤
第1章 软件工程学概述
1- 27
软件工程方法学
软件工程包括技术和管理两方面的内容, 是技术与管理紧密结合所形成的工程学科
通常把在软件生命周期全过程中使用的一 整套技术方法的集合称为方法学 (methodology),也称为范型(paradigm)
软件工程基础知识概述

软件工程基础知识概述第一章:软件工程的定义和发展历程软件工程是一门涉及软件开发以及管理的综合学科。
它的出现是为了解决软件开发中遇到的问题和挑战。
在职业领域中,软件工程师使用科学的方法来开发、维护和管理软件。
第二章:软件开发生命周期软件开发生命周期是指软件的构建和维护过程中的各个阶段。
常见的软件开发生命周期模型包括瀑布模型、迭代模型和敏捷开发等。
瀑布模型是最早被提出并广泛应用的一种软件开发流程模型,包括需求分析、系统设计、编码、测试和维护等阶段。
第三章:软件需求分析软件需求分析是软件开发过程中的第一步,它的目的是通过调查和研究用户需求,明确软件产品需要具备的功能和性能要求。
需求分析包括需求获取、需求分析和需求规格说明等步骤,通过使用工具和技术,如面谈、问卷和原型设计等,来获取和分析用户需求。
第四章:软件设计软件设计是软件开发过程中的重要一环,它的目标是将需求转化为可实现的软件系统。
软件设计可以从结构设计、数据设计和接口设计等多个层面进行,通过使用工具和技术,如UML、设计模式和构件式设计等,来实现模块化、可复用和高内聚低耦合的设计。
第五章:软件编码软件编码是将设计好的软件系统转化为计算机可执行的程序代码的过程。
软件编码需要使用一种编程语言,如Java、C++和Python等,通过准确理解设计要求,编写高质量、易于理解和可维护的代码。
第六章:软件测试软件测试是保证软件质量的重要手段。
它的目标是发现和修复软件中的缺陷和错误。
常见的软件测试方法包括单元测试、集成测试和系统测试等。
为了提高测试效率和测试覆盖率,软件工程师可以使用自动化测试工具和技术,如JUnit和Selenium等。
第七章:软件项目管理软件项目管理是指在软件开发过程中对项目进行规划、组织、指导和控制的活动。
它涉及到项目范围、进度、成本和质量等方面的管理。
为了提高软件项目管理的效果,可以采用项目管理方法和工具,如WBS、PERT和甘特图等。
第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. 计算机系统的发展历程20 世纪 60 年代中期以前,是计算机系统发展的早期:软件为每个具体应用而专门编写的。
软件实质为规模较小的程序,编写容易,没有系统化的方法,对软件开发工作更没有进行任何管理。
编写者和使用者为同一个(或同一组)人。
软件设计只是一个模糊的过程,除了程序清单之外,没有其他文档资料。
20 世纪 60 年代中期到 70 年代中期,是计算机发展的第二代:硬件发展:多道程序、多用户系统引入了人机交互的新概念,使硬件和软件的配合上了一个新层次。
实时系统能够从多个信息源收集、分析和转换数据,使得进程控制能以毫秒而不是分钟来进行。
在线存储技术的进步导致了第一代数据库管理系统的出现。
软件发展:软件个体化特性。
软件数量极具膨胀。
在程序运行时发生的错误必须设法改正。
用户有了新的需求时必须相应的修改程序。
硬件或操作系统更新时,通常需要修改程序以适应新的环境。
软件维护工作,以令人吃惊的比例耗费资源,许多程序的个体化特性使得它们最终成为不可维护的。
2. 软件定义:软件是由一个完整的配置组成:程序:能够完成预定功能和性能的可执行的指令序列。
数据:是使程序能够适当地处理信息的数据结构。
文档:是开发、使用和维护程序所需要的图文资料。
1983 年 IEEE 对软件的定义:计算机程序、方法、规则、相关的文档资料、运行程序时所必须的数据。
特点:1) 软件是一种逻辑实体,而不是具体的物理实体。
2) 软件的生产与硬件不同。
在软件开发过程中没有明显的制造过程。
3) 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
4) 软件成本相当高。
3. 软件危机介绍软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护,数量不断膨胀的已有软件。
第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章软件工程 概述

• •
•
•
一、软件工程概述 软件工程是一类工程。工程是将理论和知识应用于实践的科学。就软件 工程而言,它借鉴了传统工程的原则和方法,以求高效地开发高质量软件。 其中应 用了计算机科学、数学和管理科学。计算机科学和数学用于构造模 型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理 科学用于计划、资源、 质量和成本的管理。 软件工程这一概念,主要是针对20世纪60年代“软件危机”而提出的。 它首次出现在1968年NATO(北大西洋公约组织)会议上。自这一概念提出 以来, 围绕软件项目,开展了有关开发模型、方法以及支持工具的研究。 其主要成果有:提出了瀑布模型,开发了一些结构化程序设计语言(例如 PASCAL语言, Ada语言)、结构化方法等。并且围绕项目管理提出了费用 估算、文档复审等方法和工具。综观60年代末至80年代初,其主要特征是, 前期着重研究系统实现 技术,后期开始强调开发管理和软件质量。 70年代初,自“软件工厂”这一概念提出以来,主要围绕软件过程以及 软件复用,开展了有关软件生产技术和软件生产管理的研究与实践。其主要 成果有:提出了 应用广泛的面向对象语言以及相关的面向对象方法,大力 开展了计算机辅助软件工程的研究与实践。尤其是近几年来,针对软件复用 及软件生产,软件构件技术以及 软件质量控制技术、质量保证技术得到了 广泛的应用。目前各个软件企业都十分重视资质认证,并想通过这些工作进 行企业管理和技术的提升。软件工程所涉及的要 素可概括如下:
2013-7-10 5
• • •
• • • •
框架:四项基本原则是基石 软件工程围绕工程设计、工程支持以及工程管理,提出了以下四项基 本原则: 第一,选取适宜开发范型。该原则与系统设计有关。在系统设计中, 软件需求、硬件需求以及其他因素之间是相互制约、相互影响的,经常需 要权衡。因此,必须认识需求定义的易变性,采用适宜的开发范型予以控 制,以保证软件产品满足用户的要求。 第二,采用合适的设计方法。在软件设计中,通常要考虑软件的模块 化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方 法有助于这些特征的实现,以达到软件工程的目标。 第三,提供高质量的工程支持。“工欲善其事,必先利其器”。在软 件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的 质量与开销直接取决于对软件工程所提供的支撑质量和效用。 第四,重视开发过程的管理。软件工程的管理,直接影响可用资源的 有效利用,生产满足目标的软件产品,提高软件组织的生产能力等问题。 因此,仅当软件过程得以有效管理时,才能实现有效的软件工程。 这一软件工程框架告诉我们,软件工程的目标是可用性、正确性和合 算性;实施一个软件工程要选取适宜的开发范型,要采用合适的设计方法, 要提供高质量的工程 支撑,要实行开发过程的有效管理;软件工程活动主 要包括需求、设计、实现、确认和支持等活动,每一活动可根据特定的软 件工程,采用合适的开发范型、设计方 法、支持过程以及过程管理。根据 软件工程这一框架,软件工程学科的研究内容主要包括:软件开发范型、 软件开发方法、软件过程、软件工具、软件开发环境、计 算机辅助软件工 程(CASE) 及软件经济学等。
第1章软件工程概述

程序、支持程序运行的数据以及与程序有关的文 档资料的完整集合。 其中: 程序是按事先设计的功能和性能要求执行的指令序
列; 数据是使程序能正常操作信息的数据结构; 文档是与程序开发、维护和使用有关的图文材料。
软件的特点 软件是一种逻辑实体,具有抽象性 软件成本集中在开发上 运行过程中没有磨损、老化。
1.4.2 软件过程模型
1 线性顺序模型(瀑布模型) 按顺序开发软件的方法。
1.4.2 软件过程模型
线性顺序模型的缺点 实际项目很少按照该模型给出的顺序进行 客户常常难以清楚地给出所有需求 客户必须有耐性,只能等到项目开发周期地后期才能
得到程序的运行版本,若有错,则可能是灾难性的。 过分依赖于早期进行的需求调查,不能适应需求的变
介绍了软件的基本概念、定义、特点;
对软件的类别进行了简单的讲解;
简述了软件的3个发展阶段和软件危机 产生的原因;
重点讲解了软件过程及其模型;
简单介绍了CASE工具的概念和主要内 容。
1. 软件工程概念提出的原因?软件危机的表现 有哪些?
2. 什么是软件?什么是软件过程?传统的和最 新的软件过程模型都有哪些?
主要过程
支持过程
组织过程
获供开运维文配质验确联审问管基改培
取应发行护档置量证认合核题理础进训
过过过过过编管保过过评过解过设过过
程程程程程制理证程程审程决程施程程
过过过
过过过
程程程
程程程
1.4.2 软件过程模型
软件过程模型
1.4.2 软件过程模型
软件过程模型是从软件需求定义直至软件交 付使用后报废为止,在这整个生存期中的系 统开发、运行和维护所实施的全部过程、活 动和任务的结构框架。 目前主要有 线性顺序模型(瀑布模型) 原型模型 螺旋模型 快速应用开发模型等
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程定义(2/3) 软件工程定义(2/3)
软件工程是一类求解软件的工程,它 • 应用计算机科学、数学(用于构造模型和算法) 应用计算机科学 数学(用于构造模型和算法) 计算机科学、 管理科学(用于计划、资源、 和管理科学(用于计划、资源、质量和成本等的 管理)等原理, 管理)等原理, • 借鉴传统工程(用于制定规范、设计范型、评 借鉴传统工程 用于制定规范、设计范型、 传统工程( 估成本、权衡结果)的原则和方法, 估成本、权衡结果)的原则和方法, • 创建软件以达到提高质量、降低成本的目的。 创建软件以达到提高质量 降低成本的目的 提高质量、 的目的。
2011-2-27
12
3、什么是软件危机
软件危机: 软件危机:在计算机软件的开发和维护过程中所 遇到的一系列严重问题。 遇到的一系列严重问题。
1968年 1968年,北大西洋公约组织的计算机科学家在联邦 德国召开的国际学术会议上第一次提出了“软件危机” 德国召开的国际学术会议上第一次提出了“软件危机” crisis)这个名词。 (software crisis)这个名词。 软件危机包含两方面问题: 软件危机包含两方面问题: • 如何开发软件,以满足不断增长,日趋复杂的需求; 如何开发软件,以满足不断增长,日趋复杂的需求;
2011-2-27
11
2、软件危机的典型事例
IBM 360机的操作系统 360机的操作系统 • 开发时间:1963-1966年 开发时间:1963-1966年
• 投入人力:5000人年 投入人力:5000人年 • 代码量:100万行 代码量:100万行
“……正像一只逃亡的野兽落到泥潭 “……正像一只逃亡的野兽落到泥潭 中作垂死挣扎,越是挣扎, 中作垂死挣扎,越是挣扎,陷得越 深,最后无法逃脱灭顶的灾 ……程序设计工作正像这样一 难,……程序设计工作正像这样一 个泥潭……一批批程序员被迫在泥 个泥潭……一批批程序员被迫在泥 潭中拼命挣扎,……, 潭中拼命挣扎,……,谁也没有料 到问题竟会陷入这样的困境……。 到问题竟会陷入这样的困境……。”
Frederick P. Brooks, Jr.
2011-2-27
8
拉布雷阿的焦油坑( 拉布雷阿的焦油坑(Mural of La Brea Tar Pits) Pits)
过去几十年的大型系统开发就犹如这样一个 焦油坑, 焦油坑,很多大型和强壮的动物在其中剧烈 地挣扎。 地挣扎。
2011-2-27 9
2011-2-27 18
1.2 软件工程 (Software Engineering) Engineering)
2011-2-27
19
1、软件工程定义(1/3) 、软件工程定义(1/3)
Boehm: Boehm:运用现代科学技术知识来设计并构造计算机程序及 为开发、运行和维护这些程序所必需的相关文件资料。 IEEE: IEEE:将系统化的、规范的、可度量的方法应用于软件的开 发、运行和维护的过程,即将工程化应用于软件中。 发、运行和维护的过程,即将工程化应用于软件中。 Bauer:建立并使用完善的工程化原则,以较经济的手段获得 Bauer:建立并使用完善的工程化原则,以较经济的手段获得 能在实际机器上有效运行的可靠软件的一系列方法。 能在实际机器上有效运行的可靠软件的一系列方法。 Software engineering is a profession and field of study dedicated to designing, implementing, and modifying software so that it is of designing, implementing, higher quality, more affordable, maintainable, and faster to build. (From Wikipedia) Wikipedia)
2011-2-27 24
软件工程的历史(略)
2、80年代初~现在 80年代初~现在 • 状况:“软件工厂”的概念已经提出。 状况:“软件工厂” • 研究:软件生产技术,特别是软件复用技术和软件 生产管理的研究和实践。 • 成果:提出了具有广泛应用前景的面向对象方法和 相关的编程语言。 • 事件:软件过程改进(SPI)。在工业实践中建立 事件:软件过程改进(SPI)。在工业实践中建立 起一种量化的评估程序,判定软件组织成熟的程度。 • 焦点:软件过程
No Silver Bullet?软件项目 vs.人狼 Bullet? vs.人狼
There is no single development, in either technology or management technique, which by itself promises even one order-oforder-ofmagnitude improvement within a decade in productivity, in reliability, in simplicity.
2011-2-27 16
引入同一变化付出的代价 随时间变化的趋势
2011-2-27
17
6、产生软件危机的原因及解决途径
原因: • 软件生产本身存在着复杂性; 软件生产本身存在着复杂性; • 与软件开发所使用的方法和技术有关。 与软件开发所使用的方法和技术有关。 解决途径—— 解决途径—— 软件工程 • 管理措施 • 技术措施
Wiki 2001
2007
Semantic Computing Web
2000
1999
1995
2011-2-27
Everything is over
V4
3
从电子邮件变迁看软件由制造业到服务业的趋势
电子邮件 诞生,用 @符号隔 离用户名 和邮箱服 务器 Eudora 是 第一个有 图形界面 的电子邮 件管理系 统
Thunderbird, Outlook和 和 Foxmail等邮件管理软件也 等邮件管理软件也 提供基于Web的服务。 的服务。 提供基于 的服务
4
软件开发的现状
2011-2-27
5
软件开发的现状
2011-2-27
6
1、软件是什么
软件:计算机系统中与硬件相互依存的另一部分, 它是包括程序,数据及其相关文档的完整集合。
《There Is a Silver Bullet 》
“重用和交互的构件开发 是解决软件根本困难的 一种方法。 一种方法。” — Broad Cox
“复杂性是我们行业的属性, 复杂性是我们行业的属性, 而且复杂性是我们的主要 限制。 限制。 软件开发是一件棘手的事 情,前方并不会有魔术般 的解决方案。 的解决方案。现在是从业 者研究和分析革命性进展 的时候, 的时候,而不是等待或希 望他的出现“ 望他的出现“ — Frederick Brooks
Mosaic WWW 1993 Internet TCP/IP ARPANET Packet Switching 1964 IP Hypertext 1969 1965 WEB web1.0 V6 1974 1984 WEB Services web2.0 , web3.0 1989
eCommerce Utility Cloud Computing
2011-2-27
23
软件工程的历史(略)
1、60年代末~80年代初 60年代末~80年代初 • 状况:软件系统的规模、复杂性以及在关键领域的广 泛应用促进了软件开发过程采纳工程化的方法进行管 理。 • 研究:开发模型、支持工具、开发方法。 • 成果:瀑布模型、结构化语言(Pascal等)、结构 成果:瀑布模型、结构化语言(Pascal等)、结构 化方法、各种管理方法(如费用估算、文档复审)。 • 事件:前期主要研究系统实现技术;后期则开始强 调管理和软件质量。 • 焦点:软件项目
2011-2-27 15
软件危机仍在继续
——影响软件质量的糊涂认识(2/2) ——影响软件质量的糊涂认识(2/2)
虽然发布了软件标准和规范,但在实践中执行 需要额外的开销,划不来; 虽然开发了许多软件工具,但很多开发者对使 用这些工具兴趣不大; 为了开发软件人们不惜用重金购买最新型号的 主机和工作站而不愿意购买软件工具; 在软件开发过程中,进度迟后就增派更多的程 序员突击,赶进度; ………
Chapter 1 软件工程学概述
• 1.1 软件危机 • 1.2 软件工程 • 1.3 软件生命周期 • 1.4 软件开发模型
2011-2-27
1
1.1 软件危机 (Software Crisis)
2011-2-27
2
从图灵计算到网络计算的演化
图灵论文 计算机 软件工程 互联网 万维网 网络科学 维基百科 74年 1936年 74年 (1936年) 66年 1944年 66年 (1944年) 42年 1968年 42年 (1968年) 26年 1984年 26年 (1984年) 21年 1989年 21年 (1989年) 12年 1998年 12年 (1998年) 9年 (2001年) 2001年
WebMail 诞生, 用户可 通过任 何联网 计算机 获得邮 件服务
WebMail
Hotmail 流行, 并纳入 MSN
用户不再关心 邮件管理软件 自身, 自身,在同一个 帐户下,用户 可使用网络日 历、文档处理、 照片存储和协 作等在内的多 种服务。
1971
1988
1995
1996
2004
2011-2-27
软件 = 程序+数据+文档 程序+数据+ • 程序(一组计算机指令) 程序(一组计算机指令) • 数据(操作对象) 数据(操作对象) • 文档(设计报告、规格说明、使用维护手册) 文档(设计报告、规格说明、使用维护手册)