太原理工大学软件工程-第一章软件工程概述
《软件工程》第一章 软件工程概述

第一章软件工程概述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年代起,研究的重点从程序设计语言逐渐转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系。
软件工程第一章 软件工程概述

试等。
第 六 个 阶 段 : 运 行 / 维 护
(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年代初开始,软件工作者主要围绕软件过程和 开发模型、开发方法和技术、开发工具和环境,开发规 范和标准以及软件管理等各个方面的研究和实践,使 “作坊式生产方式”,逐步过渡到“软件工厂式的生产 方式”,软件的生产步入了系列化、产品化、工程化和 标准化的进程。
软件工程:01 软件工程概述

教材
软件工程
钱乐秋,赵文耘,牛军钰编著 出版社 清华大学出版社
5
主要参考书和参考网站
软件工程—方法与实践. 许家珆 主编. 电子工业出版社 2007 软件工程—实践者的研究方法. Roger S.pressman著,黄柏素,梅 宏等译,机械工业出版社,1999 实用软件工程. 赵池龙编著,电子工业出版社 UML面向对象技术与实践. 宋波等, 科学出版社,2005 面向对象系统分析与设计. Joey George等著,龚晓庆等译,清华 大学出版社,2008
软件工程
(Software Engineering)
概述
1
课程的性质、目的与任务
• 软件工程是本专业的一门必修课程。 • 通过本课程的学习,使学生能从中了解软件开发的整个过
程,掌握相关理论和指导思想。为了让学生真正得以实践 ,结合实际软件开发项目,让学生从问题定义开始,经过 可行性研究、需求分析、概要设计、详细设计、编码直到 最后要对自己开发的软件还要进行测试,这样一个软件开 发过程,从而使学生掌握软件开发的基本技能,培养团队 精神及勾通与协作能力,锻炼文档编写能力,提高独立的 工作能力,通过本课程的学习,为学生后期的毕业设计环 节奠定基础。
(3)作为开发人员在一定阶段的工作成果和结束标志。 (4)记录开发过程中有关信息,便于协调以后的软件开发、使用和维护。 (5)提供对软件的运行、维护和培训的有关信息,便于管理人员、开发人
员、操作人员、用户之间协作、交流和了解,使软件开发活动更科学有 效。 (6)便于潜在用户了解软件的功能、性能等各项指标,为选购符合自己需 要的软件提供依据。
1)文档 = 开发文档 + 管理文档 + 用户文档。
计算机软件产品开发文件编制指南GB 8567-88.doc
第1章软件工程概述

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

计算机应用范围及规模的迅速扩大
– 软件的复杂性随规模呈指数级上升
• 开发一个具有一定规模和复杂性的软件系统及 编写一个简单的程序不一样
– 正如建设狗窝和高楼大厦
软件危机的原因(2)
软件的“实质性”困难:复杂性,一致性、 易变性、不可见性。
– 包括开发和管理,技术及非技术的,等方方面面 – 软件是逻辑产品,系统中的错误难以消除;质量问
徐
《软件工程》
州
SoftwareEngineering
工
程
学
院
2021/3/6 2021/3/6
在一些人眼里,今天的软件开发似乎已 成为简单的事情,已有不少很好的开发工 具和软件库,软件开发人员训练有素,都强 烈渴望去编写很酷的软件,可以在几天的时 间里编写出一个相当复杂的软件。但是为什么 有一些软件能够得到用户的喜欢,而另一些 则不能?为什么有些软件能够在市场上成功 ,而有些则受到冷落?由此可见,开发软件 并不一定难,难就难在如何开发有用的软件。
– 软件的发展还跟不上硬件的步伐。 – {软件生产率提高4%-7%/每年}
Software Crisis:主要表现(4)
软件质量极其低劣
– 例如,60年代IBM的OS/360操作系统。它共有4000 多个模块、100万行指令,共投入5000人年,耗资5 亿美元,但在交付使用的系统中仍找出2000个以上 的错误。
– 据研究结果统计: – 只有15%的项目是按计划完成的。 – 仅有10%的项目是按费用计划完成的。 – 平均超出50%
造成用户不满,开发者丧失信心
Software Crisis:主要表现(2)
软件费用急剧上涨
– 年增长率达12%。原因:硬件性能价格比迅 速下降(在30年内提高了6个数量级,或每 二年翻一翻),扩大了计算机的应用,而 软件的开发成本却十分昂贵。
太原理工大学软件工程教材简介

附录A UML图总结 附录B UML中定义的常用版型、约束和标记 附录C GOF给出的软件设计模式
建议学时 4
8
小结
本书共分成3篇,全面、详细地讲述软件工程的知识
– 第1篇按照生存周期模型详细阐述面向过程的软件工程; – 第2篇介绍面向对象软件工程的分析、设计和实现; – 第3篇则分别给出面向过程和面向对象软件工程的实验指导和案例。
建议学时 2 6
3
课程安排 (4)
周次
教学章节
9 第9章 面向对象方法学
第10章 面向对象的分 析 10
11 第11章 面向对象的软 件设计与实现
教学内容
9.1 面向对象方法概述 9.2 面向对象的软件工程 9.3 统一建模语言UML 9.4 统一软件开发过程RUP概述 9.5 本章小结和习题 10.1 面向对象的分析过程 10.2 建立用例模型 10.3 建立对象模型 10.4 建立动态行为模型 10.5 建立物理实现模型 10.6 面向对象软件开发过程的案例分析 10.7 本章小结和习题
本课程是一门实践性很强的课程,它是各种软件 开发经验的总结与提炼,学生不但应注重概念、原理、方 法、技术的掌握,也应注重方法、技术的实际应用。通过 本课程的学习,为全面掌握软件开发技术打下坚实的基础。
课程目标
通过本课程的学习,我们还可以了解并掌握:
1.软件工程的产生、软件生产发展史、软件生存周期、各种方法和生存周 期模型、软件工程面临的问题。 2.系统握软件开发最基本的内容:可行性研究和软件计划、需求分析、 概要设计、详细设计、编码、测试、维护,系统掌握这些阶段的目标、任 务、特点、步骤和文档。 3.掌握结构化方法的基本思想,开发过程和步骤,应遵循的原则和准则, 能够应用相应的图形表示工具开发小型软件项目。 4.掌握面向对象方法的基本思想、基本概念、基本模型,面向对象分析、 面向对象设计、面向对象实现的任务、内容和步骤,能够应用相应的图形 工具。 5. 了解软件工程发展中的新进展。
第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)。
4.第四代软件工程
90年代起,基于构件的开发方法取得了重要的进展,软件系统的开发可通过使用 现存的可复用构件组装完成,而无需从头构造,从而达到提高效率和质量、降低 成本的目的,称为构件工程。
1.2软件危机
1.2.1软件危机及其表现
软件危机的定义:软件危机是指在计算机软件的 开发和维护过程中所遇到的一系列严重问题及矛 盾。
3.软件工程时代: 70年代至今
20世纪60-70年代是计算机系统发展的第三阶段.为了克 服软件危机,1968年北大西洋公约组织的专家们在联邦 德国召开国际会议,在这次会上正式提出并使用了“软 件工程”这个名词。这阶段主要采用“工程化的生产方 式”。
软件过程提出至今,它的发展已经经历了4个阶段:
1.第一代软件工程(20世纪60年代到70年代)
3.第三代软件工程
随着规模的不断增大,开发人员的增多,开发时间相应持续增长,加上软件是知 识密集型的逻辑思维产品,这些都增加了软件工程的管理难度,人们在软件开发的 实践中认识到:提高软件生产率、保证软件质量的关键是“软件过程“的控制和管 理,提出了对软件项目管理的计划、组织、成本估算、质量保证、软件配置等技术 和策略,逐步形成了软件过程工程。
1.1.2软件 的发展
自从第一台计算机诞生以来,就开始了软件的生产,到目前为 止,软件发展经历了三个阶段:
1.程序设计时代:20世纪50-60年代,采用“个体生产方 式”,人们认为软件就是程序,没有相关的文档资料。
2.程序系统时代 :20世纪60-70年代是计算机系统发展 的第二阶段,出现了“软件作坊”,软件质量低下, 可靠性差,可维护性差,却价格昂贵,供不应求。在 该阶段的后期,于是出现了“软件危机”。
“将系统化的、规范的、可度量的方法应用于软件的开发、 运行和维护的过程,即将工程化应用于软件中。”这个定义 强调了工程化方法和如何实现这些方法在软件工程中的重要 地位。
软件工程是指导计算机软件开发和维护的一门工程学科。 采用工程的概念、原理、技术和方法来开发及维护软件。把 经过时间考验而证明正确的管理技术和当前最好的技术方法 结合起来,目的是生产出能按期交付的、在预算范围内的、 满足用户需求的、质量合格的软件产品。 软件工程具有下述本质特性:
软件生产采用“生产作坊方式“,在该阶段的后期,出现了“软件危机”。为 了克服软件危机,在著名的NATO软件可靠性会议上提出了软件工程这一名词。
2. 第二代软件工程(20世纪80年代中期到90年代)
在80年代中期开始,面向对象的程序设计语言相继推出,面向对象的方法和技术得 到发展,到了90年代,研究的重点从程序设计语言逐渐转移到面向对象的分析和设 计,演化为一种完整的软件开发方法和系统技术体系,面向对象的方法成为软件开 发的主流,所以这一阶段又称为对象工程。
Fritz Bauer在NATO会议上给出的定义:
“软件工程是为了经济地获得可靠的和能在实际机器上高效运 行的软件,而建立和使用的完善的工程原理(方法)。这个定 义指出了软件工程的目标是经济地开发出高质量的软件,强调 软件工程是一门工程学科,它必须建立和使用的完善的工程原 理。 IEEE【IEE93】给出了一个更加综合的定义:
1.2.3解决软件危机的途径
• 将软件开发看成是一种组织严密、管理严格、各类人员协同配合共同完成的 工程项目。 • 研究和推广成功的软件开发技术和方法。 • 开发和使用好的软件工具。 •建立严格的文档资料,重视软件开发过程的阶段评审。
1.3软件工程
1.3.1软件工程的定义 人们曾从不同的角度,给软件工程下过许多定义,其中典型的 两个为:
软件的特点:
1.软件具有抽象特征。软件是一中逻辑实体,而不是 具体的物理实体,“不可见”。
2.软件开发没有明显的制造过程,软件产品的生产 主要是研制。
3.软件无备件特征。软件不像硬件存在磨损和老化 问题,但存在退化问题。
4.软件对计算机系统有不同程度的依赖性
5.软件成本昂贵,其开发方式目前尚未完全摆脱手 工生产方式。
软件危机包括下述两个方面: 1.如何开发软件,以满足社会对软件日益增长的需要。 2.如何更有效地维护数量不断增长的已有软件。
软件危机的表现
• 开发成本难以控制,进度不可预计; • 产品不符合用户的实际需要 ; • 软件产品的质量不保证,可靠性差.用户难以满意; • 软件的可维护性差 ; • 软件开发生产率很低,软件产品供不应求 ; • 软件缺少合格的文档资料 ; • 软件产品成本十分昂贵。
软件工程导论
2009年7月
第一章软件工程学概述
1.1软件概述 1.2软件危机 1.3软件工程 1.4软件生命周期 1.5软件过程
1.1软件概述
1.1.1软件及其特点 软件是程序、数据和相关文档的完整集合。
软件定义由以下三部分组成: 1.程序是按照设计文档的功能和性能要求所编写的指令 序列,是执行部分; 2.数据是使程序能够正确运行的数据结构和所需的信息; 3.文档是为了程序开发而形成的图文资料,是不可执行 部分。
• 主观原因: (人的问题、技术问题) -软件复杂且规模庞大。 -对软件的开发和维护关系有许多错误认识和做法 •没有准确、全面把握用户需求,忽视软件需求分析的重要性。 •轻视软件维护。 ·不重视阶段审查和复审。
-对大型软件项目缺乏有力的组织和管理。 -开发工具落后,以致软件的生产效率和质量不高。 -软件开发技术落后,来自 1.2.2软件危机产生的原因
在软件开发和维护的过程中存在这么多严重问题,一方面及软件本身的特点有 关,另一方面也和软件开发与维护的方法不正确有关。
• 客观原因: (软件本身的特点) -- 软件是一种逻辑实体,而不是具体的物理实体,具有高度的抽象性; -- 软件是一个逻辑上复杂而规模上庞大的系统,涉及技术、管理等多方面的问 题; -- 软件的生产方式及硬件明显不同,软件开发没有明显的制造过程 。 -- 软件的运行和维护阶段,没有传统意义上的机械磨损、老化问题。 -- 软件与硬件有关,对软件有可移植性的要求。 -- 软件工作涉及许多社会因素。