001.第一章.软件工程概述
《软件工程》第一章 软件工程概述

第一章软件工程概述1.1软件工程的产生和发展软件工程是在克服60年代末所出现的“软件危机”的过程中逐渐形成与发展的。
自1968年在北大西洋公约组织(NATO)举行软件可靠性的学术会议上正式提出“软件工程(Software Engineering)”的概念以来,在不到40年的时间里,软件工程在理论和实践两方面都取得了长足的进步。
软件工程是一门指导计算机软件系统开发和维护的工程学科,是一门新兴的边缘学科,它涉及到计算机科学、工程科学、管理科学、数学等多学科,软件工程的研究范围广,不仅包括软件系统的开发方法和技术、管理技术,还包括软件工具、环境及软件开发的规范。
软件是信息化的核心,国民经济、国防建设、社会发展及人民生活都离不开软件。
软件产业关系到国家经济发展和文化安全,体现了国家综合实力,是决定21世纪国际竞争地位的战略性产业。
因此大力推广应用软件工程的开发技术及管理技术,提高软件工程的应用水平,对促进我国软件产业与国际接轨,推动软件产业的迅速发展起着十分重要的关键作用。
1.1.1 软件工程的发展过程软件工程的产生和发展是与软件的发展过程紧密相关的。
自从第一台电子计算机诞生以来,就开始了软件的生产,“软件工程”提出至今,它的发展已经历了四个重要阶段:1.第一代软件工程(60年代末到70年代)60年代末,软件生产主要采用“生产作坊方式”。
随着软件需求量、规模及复杂度的迅速增大,生产作坊的方式已不能够适应软件生产的需要,出现了所谓“软件危机”,即软件生产效率低,大量质量低劣的软件涌入市场或在开发过程中夭折。
由于“软件危机”的不断扩大,对软件生产已经产生了严重危害。
为了克服“软件危机”(Software crisis),在著名的NATO(北大西洋公约组织)软件可靠性会议上第一次提出“软件工程”的名词,将软件开发纳入了工程化的轨道,基本形成了软件工程的概念、框架、技术和方法。
这阶段又称为传统的软件工程。
2.第二代软件工程(80年代中到90年代)80年代中开始,以Smalltalk为代表的面向对象的程序设计语言相继推出,面向对象的方法与技术得到发展,从90年代起,研究的重点从程序设计语言逐渐转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系。
《软件工程》课件——第1章 软件工程概述

软件的分类
图1.3 软件的分类
软件的分类
另外,从软件工程学的角度来划分软件产品,可以分为基础软件、支 撑软件和应用软件等。
基础软件是指保证计算机运行并支撑应用软件运行的基础环境,包括 操作系统、数据库、中间件。
支撑软件是指支撑各种软件的开发与维护的软件,又称减开发环境( Integrated Development Environment, IDE),主要有环境数据库、各 种接口软件和工具组,包括编程工具、建模工具、版本控制、软件测试等 类型。
软件的特性
图1.1 硬件失效曲线图
软件的特性
图1.2 软件失效曲线
软件的特性
⑥ 应用特性。软件的应用极为广泛,如今它 已渗入国民经济和国防的各个领域,现已成为信 息产业、先进制造业和现代服务业的核心,占据 了无可取代的地位。
软件的特性
(2)软件的生产特性 ① 软件开发特性。由于软件固有的特性,使得软件的开发不仅具
有技术复杂性,还有管理复杂性。技术复杂性体现在:软件提供的功能比 一般硬件产品提供的功能多,而功能的实现具有多样性,需要在各种实现 中做出选择,更有实现算法上的优化带来的不同,而实现上的差异会带来 使用上的差别。管理上的复杂性表现在:第一,软件产品的能见度低,要看 到软件开发进度比看到有形产品的进度困难得多;第二,软件结构的合理性 差,结构不合理使软件管理复杂性随软件规模增大而呈指数增长。
软件的特性
③ 软件维护特性。软件在运行过程中的维护工作比硬件复杂得多。
首先软件投入运行后,总会存在缺陷甚至暴露出潜伏的错误,需要进行“纠 错性维护”。其次,用户可能要求完善软件性能,对软件产品进行修改,进 行“完善性维护”。当支撑软件产品运行的硬件或软件环境改变时,也需要 对软件产品进行修改,进行“适应性维护”。软件的缺陷或错误属于逻辑性 的,因此,不需要更换某种备件,而是修改程序,纠正逻辑缺陷,改正错误 ,提高性能,增加适应性。当软件产品规模庞大、内部的逻辑关系复杂时, 经常会发生为纠正一个错误而产生新错误的情况,因此,软件产品的维护往 往比硬件产品的维护工作量大且复杂。
软件工程课件第1章 软件工程概述

1.1.1 软件危机爆发的原因
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列 严重问题。
这些问题绝不仅仅是“不能正常运行的”软件才具有的,实际上几 乎所有软件都不同程度地存在这些问题。
软件危机主要表现,如:对软件开发成本和进度估计不准确、软 件产品的质量靠不住、用户对“已完成的”软件系统不满意、软件 开发速度跟不上、软件不可维护以及没有适当的文档资料等等。
60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅 速扩大;高级语言的出现、操作系统的发展和第一代数据库管理系统 的诞生,使得软件系统规模越来越大、软件可靠性问题也越来越突出, 私人化的软件生产方式不能满足社会日益增长的软件需求。
软件的发展速度远远滞后于硬件的发展速度,60年代末软件危机爆发。
1.5 软件生存期模型
1.5.1 瀑布模型
在20世纪80年代之前,瀑布模型一直 是唯一被广泛采用的软件生存期模型。
核心思想:按工序将问题化简,采用 结构化的分析与设计方法将功能的实 现与设计分开,便于分工协作。
将软件生命周期划分为六个基本活动, 并且规定了它们自上而下、相互衔接 的固定次序,如同瀑布流水,逐级下 落。
软件工程方法学包括三要素:方法、工具和过程。
软件工程方法为软件开发提供了 “如何做” 的技术;软件工程工具为 软件开发提供了自动的或半自动的软件支撑环境;软件工程过程是为 了获得高质量的软件所需要完成的一系列任务框架,它规定了完成各 项任务的工作步骤。
1.3 软件工程方法
1.3.1 结构化方法 结构化方法是传统的软件开发方法,面向对象开发方法出现前应用最广泛。 结构化方法的基本思想:用系统工程的思想和工程化的方法,按用户至上
此方法学可以大大提高软件开发的生产率和成功率。
软件工程第一章 软件工程概述

试等。
第 六 个 阶 段 : 运 行 / 维 护
(Running/Maintenance)
该阶段体现软件是否能够持久满足用户的需求。
已交付的软件投入正式使用后,便进入运行和维 护阶段。
软件维护的实质是对软件继续进行查错、纠错、
修改和确认的过程。无论是应用软件或系统软件, 都要在使用期间不断改善和加强产品的功能和性 能、适应运行环境的改变、纠正在开发期间未能 发现的遗留错误。
软件生命周期
软件的生命周期可以归结为以下几个主要阶段:
软件计划、需求分析、软件设计、编码、测试、 维护与运行、退役等。
实际上,每个软件的生命周期有所不同,如有的
软件可能在需求阶段花费几年的时间,有的软件 在设计和实现阶段只需几个月时间,有的软件则 在维护阶段可能长达十几年。
软件生存周期划分的意义
第三个阶段:设计(Software Design)
确定目标系统要“怎么做”。 软件设计是将需求转换成为软件的表示,包括数
据结构、软件结构、接口表示和过程细节。 通常将前三者划为软件的初步(概要)设计,后 者则归为软件的详细设计。 这些软件表示应该按照规定的标准形式加以描述, 形成软件设ndows2000 0
项目经理 开发人员 测试人员 25人 140人 350人 约250人 约1700人 约3200人
第3个阶段:软件工程时期(约为20世纪70年代以后)
为了摆脱软件危机这一困境,北大西洋公约组织 NATO (North Atlantic Treaty Organization ) 于 1968年召开软件研讨会(Conference on Software Engineering),并首次提出“软件工程”这个术语, 从此诞生了软件工程这个新兴学科。 从70年代初开始,软件工作者主要围绕软件过程和 开发模型、开发方法和技术、开发工具和环境,开发规 范和标准以及软件管理等各个方面的研究和实践,使 “作坊式生产方式”,逐步过渡到“软件工厂式的生产 方式”,软件的生产步入了系列化、产品化、工程化和 标准化的进程。
第1章软件工程概述

第1章软件工程概述软件工程的研究领域包括软件的开发方法、软件周期以及软件工程的实践等。
软件危机与软件工程的起源1. 计算机系统的发展历程20 世纪 60 年代中期以前,是计算机系统发展的早期:软件为每个具体应用而专门编写的。
软件实质为规模较小的程序,编写容易,没有系统化的方法,对软件开发工作更没有进行任何管理。
编写者和使用者为同一个(或同一组)人。
软件设计只是一个模糊的过程,除了程序清单之外,没有其他文档资料。
20 世纪 60 年代中期到 70 年代中期,是计算机发展的第二代:硬件发展:多道程序、多用户系统引入了人机交互的新概念,使硬件和软件的配合上了一个新层次。
实时系统能够从多个信息源收集、分析和转换数据,使得进程控制能以毫秒而不是分钟来进行。
在线存储技术的进步导致了第一代数据库管理系统的出现。
软件发展:软件个体化特性。
软件数量极具膨胀。
在程序运行时发生的错误必须设法改正。
用户有了新的需求时必须相应的修改程序。
硬件或操作系统更新时,通常需要修改程序以适应新的环境。
软件维护工作,以令人吃惊的比例耗费资源,许多程序的个体化特性使得它们最终成为不可维护的。
2. 软件定义:软件是由一个完整的配置组成:程序:能够完成预定功能和性能的可执行的指令序列。
数据:是使程序能够适当地处理信息的数据结构。
文档:是开发、使用和维护程序所需要的图文资料。
1983 年 IEEE 对软件的定义:计算机程序、方法、规则、相关的文档资料、运行程序时所必须的数据。
特点:1) 软件是一种逻辑实体,而不是具体的物理实体。
2) 软件的生产与硬件不同。
在软件开发过程中没有明显的制造过程。
3) 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
4) 软件成本相当高。
3. 软件危机介绍软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护,数量不断膨胀的已有软件。
第1章-软件工程概述PPT课件

第1章 概述
教学目标
● 了解软件工程的产生和发展 ● 掌握软件工程的概念、内容和原理 ● 熟悉软件生存周期及阶段任务 ● 掌握软件开发模型
案例1-1 IBM 公司研发初期的OS/360,共约100万条指令,
花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误 多达2000 个以上,系统根本无法正常运行。OS/360 系统的负责 人Brooks 这样描述开发过程的困难和混乱:“像巨兽在泥潭中 垂死挣扎,挣扎得越猛,泥浆沾得越多陷入更深,最后没有一个 野兽能够逃脱淹没在泥潭中的命运” 。
自定 义软
表1-1 软件技术各发展阶段的典型技术
程序 系统 阶段
多 用户
实 时处 理
数 据库
软
软件 工程 阶段
分布 式系 统 嵌入 “智 能” 低成 本硬
创新完 善软 件工程 阶段
强大桌 面系统 面向对 象技术 专家系 统、神 经网络、 8并行计
1.1 软件工程的发展
“软件工程”的发展经历了4个重要阶段: 1.传统软件工程
质量难以保证,甚至在开发过程中就被迫中断。 (3) 软件开发管理差,对成本和进度的估计时常不准确。 (4) 系统时常出现无法维护、升级或更新现象。 (5) 软件开发没有标准、完整、统一规范的文档资料。计算机软件不
仅只是程序,还应当有一整套规范的文档资料和售后服务。 (6) 软件开发效率低,无法满足计算机应用迅速发展与提高的实际需
软件工程原理 软件工程过程
软件工程技术 软件工程方法
软件工程模型 软件工程管理 软件工程度量 软件工程环境 软件工程应用
软件目标、原则、学科基础 开发过程、运作过程、维护过程,如获取、供应、管理、开 发、运作、维护、支持、裁减 开发技术、管理技术、度量技术、维护技术、应用技术
第一章软件工程概述

1. 软件=程序+数据+文档程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料了解软件危机: 原因,现象,办法(软件工程学)原因:与软件本身的特点有关(难于维护, 逻辑复杂)与软件开发与维护的方法不正确有关:现象:成本高,软件成本越来越高于硬件软件质量得不到保证,由于软件质量问题导致失败的软件项目非常多进度难以控制,维护非常困难办法:(1)从管理的角度软件开发过程的研究、文档的标准化以及人们的交流方式等(2)软件开发方法的研究结构化软件开发方法, 面向对象的开发软件工程(学): 技术+管理(质,时, 成本)软件工程方法学3个要素:方法、工具和过程。
过程:定义一系列活动:技术方法的采用,工程产品(模型、文档、数据)的产生,里程碑(milestone)的建立,质量的保证及变更的管理。
该层构成了软件项目的管理控制的基础。
方法:提供了建造软件在技术上“如何做”。
方法覆盖了一系列任务:需求分析、设计、编程、测试和支持(如纠错、适应、增强、预防)。
工具:对过程和方法提供了自动或半自动的支持。
软件生命周期: 定义+开发+运行维护软件生命周期的每一阶段都有明确的任务,把规模大、结构复杂、管理复杂的软件开发变得容易控制和管理。
各个阶段的活动如何衔接,开发过程中采用什么样的策略,应遵守什么样的规定和制约,将这些活动框架(忽略不必要的细节)用一种模型表示出来,称为软件过程模型(或软件开发模型或软件生命周期模型)。
也就是说,软件过程模型是软件开发全部过程、活动和任务的结构框架。
典型的软件过程模型(瀑布, 喷泉)可行性研究的任务: 技术, 经济, 操作,社会,抉择可行性研究的主要任务是“了解客户的要求及现实环境,从技术、经济和社会因素等三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。
”(1) 技术可行性度量一个特定技术信息系统解决方案的实用性及技术资源的可用性考虑的问题(1)开发风险分析(2)资源分析(3)相关技术的发展(现有技术能否实现新系统,技术难点、建议采用技术的先进性)(2) 经济可行性度量系统解决方案的性能价格比考虑的问题成本/效益分析(开发、运行的成本/效益)有形成本、效益无形成本、效益价值和成本的关系质量与价值、成本的关系价值/成本的均衡(3) 操作可行性•用户使用可能性•时间进度可行性•组织和文化上的可行性(4) 社会可行性(法律可行性)(5) 抉择可行性研究过程七步骤见课本P36系统流程图:数据在系统(人,软,硬) 各部件之间流动(P38)系统流程图是概括地描绘物理系统的传统工具。
第1章软件工程概述

程序、支持程序运行的数据以及与程序有关的文 档资料的完整集合。 其中: 程序是按事先设计的功能和性能要求执行的指令序
列; 数据是使程序能正常操作信息的数据结构; 文档是与程序开发、维护和使用有关的图文材料。
软件的特点 软件是一种逻辑实体,具有抽象性 软件成本集中在开发上 运行过程中没有磨损、老化。
1.4.2 软件过程模型
1 线性顺序模型(瀑布模型) 按顺序开发软件的方法。
1.4.2 软件过程模型
线性顺序模型的缺点 实际项目很少按照该模型给出的顺序进行 客户常常难以清楚地给出所有需求 客户必须有耐性,只能等到项目开发周期地后期才能
得到程序的运行版本,若有错,则可能是灾难性的。 过分依赖于早期进行的需求调查,不能适应需求的变
介绍了软件的基本概念、定义、特点;
对软件的类别进行了简单的讲解;
简述了软件的3个发展阶段和软件危机 产生的原因;
重点讲解了软件过程及其模型;
简单介绍了CASE工具的概念和主要内 容。
1. 软件工程概念提出的原因?软件危机的表现 有哪些?
2. 什么是软件?什么是软件过程?传统的和最 新的软件过程模型都有哪些?
主要过程
支持过程
组织过程
获供开运维文配质验确联审问管基改培
取应发行护档置量证认合核题理础进训
过过过过过编管保过过评过解过设过过
程程程程程制理证程程审程决程施程程
过过过
过过过
程程程
程程程
1.4.2 软件过程模型
软件过程模型
1.4.2 软件过程模型
软件过程模型是从软件需求定义直至软件交 付使用后报废为止,在这整个生存期中的系 统开发、运行和维护所实施的全部过程、活 动和任务的结构框架。 目前主要有 线性顺序模型(瀑布模型) 原型模型 螺旋模型 快速应用开发模型等
第01章软件工程概述

第一章软件工程概述我们知道,计算机软件是整个计算机系统中具体实现各种功能和操作的核心部分。
软件工程即采用工程的概念、原理、技术和方法来开发和维护软件,将工程管理技术成功的经验和思想与具体软件的开发过程、研究技术相结合,形成一整套适合于计算机软件开发的方法、规范和技术。
因此,软件工程这门课程,对于从事软件开发研究的专业人员,特别是高层次的管理、分析、开发人员,显得比以往更加重要。
1.1 软件工程的基本概念、特点、分类1.1.1软件的概念、特点计算机软件是程序、数据及相关文档的完整集合。
其中,程序是按事先设计的功能和性能要求执行的指令序列,数据是使程序能正常操纵信息的数据结构,文档是与程序开发、维护和使用有关的图文材料。
要深入进行计算机软件的开发和研究,首先要了解计算机软件的特点和计算机软件开发的规律。
计算机软件可归结具有如下几个共同特点:1、软件是一种逻辑实体,而不是具体的物理实体。
因此,它具有抽象性。
2、软件的生产与硬件不同,软件是由开发或工程化而形成的,它没有明显的制造过程。
对软件的质量控制,必须立足于软件开发方面。
软件成为产品之后,其制造只是简单的拷贝而已。
3、任何机械、电子设备在运行和使用过程中,其失效率大致遵循如图1-1所示的U型曲线(即浴盆曲线)。
软件的情况与此不同,它不存在磨损和老化问题。
然而,它存在退化问题,设计人员必须多次修改(维护)软件,图1-2(a)给出了软件故障率的理想曲线,图1-2(b)给出了实际的软件故障率曲线。
4、软件的开发和运行往往受到计算机系统的限制,对计算机系统有着不同程度的依赖性。
为了解除这种依赖性,在软件开发中提出了软件移植的问题。
5、迄今为止,软件的开发尚未完全摆脱手工艺的方式。
6、软件本身是复杂的。
软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。
7、软件的成本相当昂贵。
软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它投入的成本是比较高的。
《软件工程》第一章软件工程学概述

《软件⼯程》第⼀章软件⼯程学概述第⼀章软件⼯程学概述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个阶段)——问题定义:需要解决的问题是什么?书⾯报告——可⾏性研究:确定软件系统是否值得去解《可⾏性研究报告》——需求分析:解决这些问题需要系统做什么?《软件需求规格说明书》——总体设计:应该怎样实现⽬标系统?《概要设计说明书》——详细设计:如何具体地实现这个系统?——编码和单元:写代码,测试每个模块!——测试、综合测试:通过各类测试和调试来完善软件《测试计划/⽅案》——软件维护:通过各种必须的维护活动使系统持久地满⾜⽤户的需要。
《软件工程》第1章 软件工程概述

1.1.2 软件的分类
软件多种多样,随着软件复杂程度的增加,软 件的界限越来越不明显。按软件的作用,一般可以 分为以下几类。 1.系统软件
系统软件(system software)是指能与计算机硬件紧 密配合在一起,使计算机系统各个部件、相关的软件、和 数据协调高效地工作的软件。系统软件是计算机系统的重 要组成部分,它支持应用软件的开发和运行。系统软件包 括:操作系统、网络软件、编译程序、数据库管理程序、 文件编辑系统、系统检查与诊断软件等。
1.2 软件工程的概念
1.2.1 软件工程的定义和原理 1.2.2 软件工程的目标 1.2.3 软件工程的原则
1.2.1 软件工程的定义和原理
1.软件工程的定义
软件工程(software engineering)这个名词 是北大西洋公约组织(NATO)科学技术委员会1968 年秋在当时的联邦德国召集了近50名第一流的编程 人员、计算机科学家和工业界巨头,制定摆脱软件 危机的办法时提出来的。尽管当时专家们无法设计 出一张指导软件业走向更牢固阵地的详细路线图, 但他们借鉴硬件工程的办法,确实为解决软件这一 难题,不仅创造了一个新名词—软件工程,还使软 件工程有了方向。从1968年到现在已经40多年,应 该说,在今天,软件工程已发展成为一门独立的学 科。
1.1.2 软件的分类
2.应用软件
应用软件(application software)则是在系统 软件基础上,为解决特定的领域应用而开发的软件。 按其性质不同可以分为以下几类: ①事务软件
事务信息处理是一个最大的软件应用领域。如工资单、收 /支计算、存货盘点报表等。这些独立的系统可以组成管理信 息系统(MIS)软件,它从一个或多个装有事务信息的数据库 中存取数据。在这个领域中的应用是重新建立已有的数据,便 于事务操作或做出管理决策。另外,除了传统的数据处理应用, 事务软件还可以实现交互计算(如营业点的交易处理)。
第01章软件工程概述(精)

软件产品不能按时交付.
1.1.2 软件危机 (Cont.)
3. 软件工作量难以估计
一般工作可以估算其工作量. 软件工作量很难估计
软件开发属于逻辑思维过程,在程序装入计算机运行之前,无法 估计其是否完全正确; 有些逻辑错误查找和排除困难,而且常常顾此失彼; 大型软件结构复杂,工作量巨大,需要多人合作完成,人们互相 之间的通信、配合及协调增大了工作量; 无法准确估计工作量将导致对软件开发和维护的成本估计不 足,使成本超过预算.
金融
2006年05月日本最大美资银行花旗银行出现重
大交易系统故障,约27.5万宗公用事业款项的交
易遭重复扣数,或在完成交易后未有更新月结纪
录。
军事
海湾战争中美军使用的“爱国者”导弹由于未能拦截
的“飞毛腿”导弹命中一个美军阵地,28名美国士
兵全部丧生。事后分析问题与“爱国者”的内置时钟
有关,它用以预测下一枚飞毛腿”何时出现。“爱国
1.2.1 软件工程的定义(Cont.)
将各种定义的共性归纳有下几点:
针对软件而言; 研究对象涉及到软件的开发和维护过程; 重视规范化的文档和资料. 规范化:多人共同开发和维护软件时,人人都必须遵循 相同的约束规范. 文档化:在软件开发的各阶段都要有相关的文档,用于 描述设计思想、设计过程和具体实现技术等信息,以便 开发和维护时参考. 工程化:按照工程化的思想开发和维护软件产品.
程序:处理过程的描述 数据:处理加工的对象 文档:理解程序和数据所需的资料
1.1.1 软件的发展(Cont.)
特点
微处理器的出现和广泛应用导致一系列智能产品的出 现,计算机更加大众化; 分布式系统极大地增加了计算机软件系统的复杂性; 广域网、局域网、宽带数字通信访问需求增加;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
小结—生命周期
• 生命周期方法学把软件生命周期划分为若干个相对独立的 阶段,每个阶段完成一些确定的任务,交出最终的软件配置 的一个或几个成分;基本上按顺序完成各阶段任务,在完成 每个阶段的任务时采用行之有效的结构化技术和适当的辅 助工具;在每个阶段结束时都进行严格的技术审查和管理复 审。
小结—面向对象方法学
• 面向对象方法简化了软件的开发和维护工作,提高了软件的可重 用性。
– 如何开发软件,以满足对软件日益增长的需求 – 如何维护数量不断膨胀的已有软件
软件危机的典型表现
软件危机的典型表现
对软件开发成本和进度的估计常常很不准确 用户对“已完成的”软件系统不满意的现象经常发生 软件产品的质量往往靠不住 软件常常是不可维护的 软件通常没有适当的文档资料 软件成本在计算机系统总成本中所占的比例逐年上升 软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算 机应用迅速普及深入的趋势 这些还仅仅是软件危机的一些特别明 显的表现,与软件开发和维护相关的问 题在实际中远远不止于此
软件工程方法学的三要素
• 软件工程方法学包括三个要素,这就是方法、工具和过程。
– 方法是完成软件开发的各项任务的技术方法,回答“如何做”的问 题; – 工具是为方法的运用提供自动的或半自动的软件支撑环境; – 过程是为了获得高质量的软件所需要完成的一系列任务的框架, 它规定了完成各项任务的工作步骤。
面向对象方法学的四个要点 2
• 对象彼此之间仅能通过发送消息互相联系。对象与传统数 据有本质区别,它不是被动地等待外界对它施加操作,相反, 它是进行处理的主体,必须向它发消息请求它执行它的某 个操作以处理它的数据,而不能从外界直接对它的数据进 行处理。也就是说,对象的所有私有信息都被封装在该对象 内,不能从外界直接访问,这就是通常所说的封装性。面向 对象方法学的出发点和基本原则,是尽可能模拟人类习惯 的思维方式,使开发软件的方法与过程尽可能接近人类认 识世界解决问题的方法与过程,从而使描述问题的问题空 间(也称为问题域)与实现解法的解空间(也称为求解域)在 结构上尽可能一致。
常用的软件工程方法学
• 传统方法学:传统方法学也称为生命周期方法学或结构化范 型
– 当软件规模较大,或者对软件的需求是模糊的或随时间变化的时 候,使用结构化范型开发软件往往不成功;此外,使用传统方法学 开发出的软件,维护起来通常都很困难。
• 面向对象方法学
– 把数据和行为看成是同等重要的, – 是一种以数据为主线,把数据和对数据的操作紧密结合的方法。
面向对象方法学的四个要点 1
• 把对象(Object)作为融合了数据及在数据上的操作行为的 统一的软件构件。面向对象程序是由对象组成的,程序中任 何元素都是对象,复杂对象由比较简单的对象组合而成。 • 把所有对象都划分成类(Class)。每个类都定义了一组数据 和一组操作,类是对具有相同数据和相同操作的一组相似 对象的定义。数据用于表示对象的静态属性,是对象的状态 信息,而施加于数据之上的操作用于实现对象的动态行为。 • 按照父类(或称为基类)与子类(或称为派生类)的关系,把 若干个相关类组成一个层次结构的系统(也称为类等级)。 在类等级中,下层派生类自动拥有上层基类中定义的数据 和操作,这种现象称为继承。
• 根据经验,下图描述了在软件开发的不同时期引入变化的 代价。
代价
高 中 低 早期 中期 后期
软件开发时期
引入同一修改的代价随时间变化的趋势
消除软件危机的途径
• 为了消除软件危机,首先应该对计算机软件有一个正确的 认识。 • 软件不是个体劳动或者作坊式工作的产物。
• 学习前人总结的经验,探索新的技术和方法。
60年代中期到 70年代中期
• 计算机系统发 展的早期时代, 统称第一代
60年代中期以 前
• 计算机系统发 展的第二代
• 计算机系统发 展的第三代
• 第四代,硬件 和软件的综合 效果
20世纪70年代 中期开始
什么是危机
• “危机”是当人们面对重要生活目标的阻碍时产生的一种状 态。这里的阻碍,是指在一定时间内,使用常规的解决方法 不能解决的问题。危机是一段时间的解体和混乱,在此期间 可能有过多次失败的解决问题的尝试。 • “危机”发展的四个不同时期
软件工程导论
基于面向对象方法学的软件开发过程
计算机科学学院
夏 羽 , Ph.D.
软件工程导论
第一篇
软件工程与软件过程
软件工程导论
第一章
软件工程概述
第一节 软件危机
计算机系统的发展历程
• 所谓计算机系统就是指适当地组织在一起的一系列系统元 素的集合,这些系统元素互相配合、相互协作,通过对信息 的处理而完成预先定义的目标。 • 迄今为止,计算机系统已经经历了四个不同的发展阶段。
面向对象方法学的特点 1
• 用面向对象方法学开发软件的过程,是一个主动地多次反 复迭代的演化过程。 • 面向对象方法在概念和表示方法上的一致性,保证了在各 项开发活动之间的平滑(无缝)过渡。 • 面向对象方法普遍进行的对象分类过程,支持从特殊到一 般的归纳思维过程;通过建立类等级而获得的继承性,支持 从一般到特殊的演绎思维过程。 • 正确运用面向对象方法学开发软件,则最终的软件产品由 许多较小的基本上独立的对象组成,而且大多数对象都与 现实世界中的实体相对应,因此,降低了软件产品的复杂性, 提高了软件产品的可理解性,简化了软件的开发和维护工 作。
软件工程的基本原理
用分阶段的生命周
期计划严格管理 承认不断改进软件工 坚持进行阶
程实践的必要性
段评审
开发小组的人
基本原理
实行严格的 产品控制
员应该少而精
结果应能清楚 地审查
采用现代程序 设计技术
软件工程方法学
• 软件工程包括技术和管理两方面的内容,是技术与管理紧 密结合所形成的工程学科。 • 通常把在软件生命周期全过程中使用的一整套技术的集合 称为方法学(methodology),也称为范型(paradigm)。在软 件工程范畴中,这两个词的含义基本相同。 • 把在软件生命周期全过程中使用的一整套技术方法的集合。 包括:方法(完成软件开发各项任务的技术方法)、工具(为 运用方法而提供的支持环境)和过程(为获得高质量软件所 需完成的一些列任务的框架)。
• 当软件规模较大或对软件的需求模糊易变时,采用生命周期方法 学开发往往不能成功,近年来在许多应用领域面向对象方法学已 经迅速地取代了传统方法学。 • 面向对象方法有四个要点
– 对象+类+继承+用消息通信 – 面向对象方法就是既使用对象又使用类和继承等机制,而且对象之间仅 能通过传递消息实现彼此通信。 – 如果仅使用对象和消息,则这种方法可以称为基于对象的(Objectbased)方法,而不能称为面向对象的方法;如果进一步要求把所有对象 都划分为类,则这种方法可称为基于类的(Class-based)方法,但仍然不 是面向对象的方法。只有同时使用对象、类、继承和消息的方法,才是真 正面向对象的方法。
产生软件危机的原因
• 在软件开发和维护的过程中存在这么多严重问题,
– 一方面与软件本身的特点有关 – 另一方面也和软件开发与维护的方法不正确有关。
• 缺乏可见性 • 软件不是程序,规模庞大 • 开发人员的错误观念 • 为了赶进度匆忙着手开发 • 不遵守软件开发的阶段性
软件开发过程中引入变动的代价
– 出现了一个关键的境遇,并分析人的正常应付机制是否能够满足 这一境遇的需要; – 随着紧张和混乱程度的增加,逐渐超越人的应付能力; – 需要解决问题的额外资源(如咨询); – 可能需要转诊才能解决主要的人格解体问题。
软件危机
• 软件危机是指在计算机软件的开发和维护过程中所遇到的 一系列严重问题。这些问题绝不仅仅是不能正常运行的软 件才具有的,实际上,几乎所有软件都不同程度地存在这些 问题。 • 包含两方面的问题
• 应该开发和使用更好的软件工具。 • 总之,为了消除软件危机,既要有技术措施(方法和工具), 又要有必要的组织管理措施。软件工程正是从管理和技术 两方面研究如何更好地开发和维护计算机软件的一门新兴 学科。
软件工程导论
第一章
软件工程概述
第二节 软件工程
什么是软件工程
• 概括地说,软件工程是指导计算机软件开发和维护的工程 学科。采用工程的概念、原理、技术和方法来开发与维护软 件,把经过时间考验而证明正确的管理技术和当前能够得 到的最好的技术方法结合起来,以经济地开发出高质量的 软件并有效地维护它,这就是软件工程。 • 1968,NATO:“软件工程就是为了经济地获得可靠的且能在 实际机器上有效地运行的软件,而建立和使用完善的工程 原理。” • 1993,IEEE:“软件工程是:① 把系统的、规范的、可度量的 途径应用于软件开发、运行和维护过程,也就是把工程应用 于软件;②学的特点 2
• 由于对象是相对独立的实体,容易在以后的软件产品中重 复使用,因此,面向对象范型的另一个重要优点是促进了软 件重用。 • 面用对象方法特有的继承性,进一步提高了面向对象软件 的可重用性。
软件工程导论
第一章
第三节 小结
软件工程概述
小结—软件危机
• 本章对计算机软件工程学作了一个简短的概述。