第1讲 软件工程概述

合集下载

第一讲-软件工程概述(软件危机)

第一讲-软件工程概述(软件危机)
硬件 软件
结论
总之,为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
课堂讨论
请针对一下几种观点发表自己的意见 编程高手不需要懂得软件工程,也能编出很好的软件。 拥有最后的开发工具和计算机就能编写优秀的软件。 软件开发进度落后,只要增加人员就能解决。
一、软件危机
1.1软件危机的介绍 什么是软件危机?
计算机软件的开发和维护过程所遇到的一系列严重问题.
软件危机的特征是什么?
对软件开发成本和进度的估计常常很不准确。 用户对“已完成的”软件系统不满意的现象经常发生。 软件产品的质量往往靠不住。 软件常常是不可维护的。 软件通常没有适当的文档资料。 软件成本在计算机系统总成本中所占的比例逐年上升。 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
(2)软件开发维护中的问题
图 引入同一变动付出的代价随时间变化的趋势
正确的规格说明
错误的规格说明
需求分析
设计
正确的设计
错误的设计
对错误说明的设计
编码
正确编码
对错误说明的编码
错误编码
对错误设计的编码
测试
正确功能
潜伏的错误
不可改正的错误
可改正的错误
(2)软件开发维护中的问题
错误认为:软件开发=程序编写 软件开发只要依靠个别编程高手就能完成 轻视软件维护 Biblioteka 100%0%1955
1970
1985
———— 以上列举的仅仅是软件危机的一些明显的表现,与软件开发和维护有关的问题远远不止这些
软件危机著名案例

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

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

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

第1章 软件工程概述

第1章 软件工程概述

1.2 软件工程
种子定义: 软件工程是建立和使用一套合理的工程原则,以便经济地获得可靠的、可以在实际机器
上高效运行的软件。
软件工程定义:
软件工程是:(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护, 即将工程化方法应用于软件。(2)在(1)中所述方法的研究。
—— IEEE
软件工程的特点
1.5 经典软件过程模型 (2)原型模型 —快速原型模型(Rapid Prototype Model)
在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适 应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运 行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要 做的事情有更好的理解。
软件工程实践的精髓
Polya 建议: 1.理解问题(沟通分析)。 2.计划解决方案(建模和软件设计)。 3.实施计划 (代码生成)。 4.检查结果的准确性(测试和质量保证)。
1.5 经典软件过程模型 (1)瀑布模型(Waterfall Model )
传统瀑布模型
1.5 经典软件过程模型
传统瀑布模型的特点
(2)软件开发技术、方法的研究 如结构化软件开发方法,面向对象的开发
1.解决危机的管理途径
20世纪80年代末,美国DoD和工业界开始认识到管理的重要性。 美国DoD的一项研究表明,70%的项目由于管理不善导致难以控制进步、成本和质量 进一步的研究发现:管理是影响软件项目成功开发的全局性因素,而技术只影响局部 如果软件开发组织不能对软件项目进行有效管理,就不能充分发挥软件开发方法和工具的潜力,
数据挖掘 网格计算 认知机 纳米技术软件

软件工程:01 软件工程概述

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

第一讲软件工程概述

第一讲软件工程概述

第一讲软件工程概述软件的定义软件是运算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。

程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,爱护和使用有关的图文材料软件危机软件危机是指运算机软件开发和爱护过程中所遇到的一系列严峻问题。

概括的说即为:能否满足对软件日益增长的需求?能否爱护数量日益增长的现有软件?软件工程的定义B o e h m:运用现代科学技术知识来设计并构造运算机程序及为开发、运行和爱护这些程序所必需的相关文件资料I E E E:软件工程是开发、运行、爱护和修复软件的系统方法F r i t z B a u e r:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法软件工程要素三要素:方法、工具和过程(缺乏一个过程,洗厕所的都有方法和工具,但没有一个好的过程)软件工程方法为软件开发提供了“如何做”的技术软件工具为软件工程方法提供了自动的或半自动的软件支撑环境软件生命周期(Life Cycle)软件有一个孕育、产生、成长、成熟、衰亡的生存过程。

那个过程即为运算机软件的生命周期软件生存期的六个步骤,即制定打算、需求分析、设计、实现、测试及运行爱护软件生命周期:制订打算确定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究估量可利用的资源(硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施打算,连同可行性研究报告,提交治理部门审查软件生命周期:需求分析对用户提出的要求进行分析并给出详细的定义,得到系统逻辑模型,可用数据流程图、数据字典和简要算法加以表示。

编写软件需求说明书或系统功能说明书及初步的系统用户手册提交治理机构评审软件生命周期:软件设计概要设计—把各项需求转换成软件的体系结构。

结构中每一组成部分差不多上意义明确的模块,每个模块都和某些需求相对应。

第1章_软件工程概述

第1章_软件工程概述

70年代初,自“软件工程”这一概念提出以来,主要围绕软件 过程以及软件复用,开展了有关软件生产技术和软件生产管 理的研究与实践。
其主要成果有:提出了应用广泛的面向对象语言以及相关的 面向对象方法,大力开展了计算机辅助软件工程的研究与实 践。
尤其是近几年来,针对软件复用及软件生产,软件构件技术 以及软件质量控制技术、质量保证技术得到了广泛的应用。
④ 利用一些试探性原则来改进系统的初始结构图,直到得到符合 要求的结构图为止。即在数据流图的基础上逐步分解高层模块 ,设计中下层模块,并对软件模块结构进行优化,最终得到更 为合理的软件结构。
⑤ 描述模块接口。 ⑥修改和补充数据词典。 ⑦ 制定测试计划。
•2020/7/23
•25
1.5.2 模块化开发方法
而且还容易实现同一个系统不同部分的并行开 发,从而提高了软件的生产效率。
•2020/7/23
•26
将模块定义为多大较合适,下面五条标准可供参考

(1) 模块可分解性:如果一种设计方法提供了将问题分解成子问 题的系统化机制,它就能降低整个系统的复杂性,从而实现一 种有效的模块化解决方案。
•2020/7/23
•24
结构化设计步骤:
① 首先研究、分析和审查数据流图。从软件的需求规格说明中弄 清数据流加工的过程。
② 然后根据数据流图决定问题的类型。数据处理问题有两种典型 的类型:变换型和事务型。针对两种不同的类型分别进行分析 处理。
③ 由数据流图推导出系统的初始结构图。也就是把数据流图映射 到软件模块结构,设计出模块结构的上层。
•2020/7/23
•16
1.3.6 软件工程涉及的人员
•2020/7/23
•17

第1章软件工程概述

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

第一章软件工程概述

第一章软件工程概述

第一章软件工程概述第一章软件工程概述1.1软件危机1.1.1软件危机的介绍1)软件危机在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机的两个主要问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。

软件危机的典型表现:(2)用户对“已完成的”软件系统不满意的现象经常发生。

(3)软件产品的质量往往靠不住。

(4)软件常常是不可维护的。

(5)软件通常没有适当的文档资料。

(6)软件成本在计算机系统总成本中所占的比例逐年上升。

(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入趋势。

1.1.2产生软件危机的原因软件本身特点:缺乏可见性,在运行之前往往难以衡量,质量也难以评价不会因为长期使用而用坏,软件维护通常意味着修正或修改原来的设计,较难维护。

规模庞大,需分工合作,如何保证每个人的工作合在一起是极端复杂的问题。

软件开发与维护的方法不正确产生软件危机的原因可归结为两个重要的方面:软件生产本身存在的复杂性;软件开发所使用的方法和技术。

软件生命周期:一个软件从定义、开发、使用和维护直到最早被废弃。

软件产品必须由一个完整的配置组成(程序、文档、数据)1.1.3消除软件危机的途径正确认识计算机软件认识到软件开发是一个协同配合、共同完成的工程项目并吸取经验。

推广使用已总结的开发软件成功的技术和方法开发使用更好的软件工具1.2软件工程的介绍软件工程是指导计算机软件开发和维护的一门工程学科。

采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的软件并有效地维护它,这就是软件工程。

软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。

第一讲 软件工程概述(软件危机)

第一讲 软件工程概述(软件危机)

第一讲软件工程概述(软件危机)软件危机的背景和概念软件危机是指在软件开发过程中,出现了大量的开发延期、超出预算和质量问题的现象。

这种危机主要是由于软件工程领域在早期阶段的蓬勃发展,导致了开发过程的混乱和不规范,也暴露了软件复杂性带来的挑战。

软件危机的存在对于软件行业的发展和应用产生了重要的影响。

软件危机的原因和表现软件危机的产生主要有以下几个原因:1. 项目管理不规范:许多早期软件项目缺乏清晰的目标和明确的需求,在项目开发过程中缺乏有效的管理和控制手段,导致项目进展缓慢和低效。

2. 软件复杂性增加:随着软件规模的不断扩大和功能的不断增加,软件系统变得越来越复杂,而人类对于复杂系统的认知和理解能力有限,这给软件开发带来了很大的困难。

3. 缺乏有效的开发方法和工具:早期的软件开发方法和工具相对较为简单和粗糙,无法满足软件开发过程中的需求,导致开发过程存在很多不确定性和风险。

软件危机的表现主要体现在以下几个方面:1. 延期交付:很多软件项目无法按照原定的计划和时间要求准时交付,导致项目进度拖延和成本增加。

2. 超出预算:由于开发过程中存在不确定性和风险,许多软件项目的开发成本超出了最初的预算,给项目管理带来了很大的压力。

3. 质量问题:软件开发过程中的不规范和管理不足导致了软件质量的下降,出现了很多的缺陷和bug。

软件工程的发展和作用为了解决软件危机带来的问题,软件工程作为一门新兴的学科逐渐兴起并取得了长足的发展。

软件工程的主要目标是通过建立一套科学的方法论和规范,来管理和控制软件开发过程,以提高软件开发的效率和质量。

软件工程的发展主要经历了以下几个阶段:1. 软件危机阶段:这个阶段主要是软件工程学科的起源阶段,人们开始意识到软件开发过程中存在的问题和挑战,并提出了一些初步的解决方案。

2. 软件工程方法论阶段:在这个阶段,软件工程学科逐渐形成了一套方法论体系,包括需求分析、设计、编码、测试等各个方面的方法和技术。

软件工程概述

软件工程概述
世界经济中已经占有举足轻重的地位。
第1章 软件工程概述
二、软件危机
20世纪60年代末70年代初,西方工业发达国 家经历了一场“软件危机”。这场软件危机表现 在:一方面软件十分复杂,价格昂贵,供需差日 益增大,另一方面软件开发时又常常受挫,质量 差,指定的进度表和完成日期很少能按时实现, 研制过程很难管理,即软件的研制往往失去控制。 我们称软件开发和维护过程中所中遇到的这一系 列严重问题为软件危机。
1.2 软件的发展和软件危机
一、计算机系统的发展历程 第一代(20世纪60年代中期以前):程序设计阶段。 第二代(从20世纪60年代中期到70年代中期):程
序系统阶段——“软件工程” 学科诞生。 第三代(从20世70年代中期到80年代中期):软
件工程阶段。 第四代(从20世纪80年代中期至今):软件产业在
第1章 软件工程概述
二、软件开发模型
1.瀑布模型:将软件生存周期的各项活动规定为依 照固定顺序连接的若干阶段工作,形如瀑布流水, 最终得到软件产品。
如同任何其他事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程,一般称之为计算机软件的生存期。
第1章 第1章
软软软件件件工工程程概概工述述 程下的定义为:软件工程是开发、运
行、维护和修复软件的系统方法,其中“软
件”的定义为:计算机程序、方法、规则、
相关的文档资料以及在计事机上运行时所必
第1章 软件工程概述
(2)可行性研究:任务是为前一阶段提出的问 题寻求一种至数种在技术上可行、且在经济上有 较高效益的解决方案。
第1章 软件工程概述
2.软件开发时期
(1)需求分析:弄清用户对软件系统的全部需求, 主要是确定目标系统必须具备哪些功能。

软件工程讲义

软件工程讲义

软件工程讲义在当今信息时代,软件产业已经成为了世界经济发展的重要组成部分。

软件工程作为软件产业的基石,扮演着不可忽视的角色。

本文将以软件工程讲义的形式,系统介绍软件工程的基本概念、原理和方法,助力读者全面理解和掌握软件工程的知识体系。

第一章:软件工程概述1.1 软件工程的定义和意义1.2 软件生命周期1.3 软件工程的基本原则第二章:软件开发过程2.1 瀑布模型2.2 快速原型模型2.3 敏捷开发模型2.4 喷泉模型第三章:需求工程3.1 需求获取3.2 需求分析与规约3.3 需求验证和确认第四章:设计工程4.1 结构化设计4.2 面向对象设计4.3 软件体系结构设计第五章:编码与测试5.1 编码规范5.2 测试策略与方法5.3 软件质量保证与评估第六章:软件项目管理6.1 项目计划与组织6.2 软件配置管理6.3 软件项目风险管理第七章:软件工程的新兴技术7.1 云计算与软件工程7.2 大数据与软件工程7.3 物联网与软件工程结语软件工程是软件产业持续发展的保障,掌握软件工程的基本原理和方法对于从事软件开发和软件项目管理的人员来说至关重要。

通过本讲义的学习,读者将了解软件工程的核心概念、开发过程和各个阶段的具体内容。

同时,本讲义也对软件工程的新兴技术进行了简要介绍,帮助读者掌握行业的最新动态。

期望读者能够通过学习软件工程,提升软件开发和管理的能力,为软件产业的发展做出更大的贡献。

总结起来,软件工程讲义涵盖了软件工程的概述、软件开发过程、需求工程、设计工程、编码与测试、软件项目管理以及软件工程的新兴技术等内容。

通过细致而系统的学习,读者将逐步掌握软件工程的知识体系,为未来在软件产业中的发展打下坚实的基础。

SE第1课-软件工程概述

SE第1课-软件工程概述
8
1.2 软件危机
▪ 软件危机的表现
对软件开发成本和进度的估算很不准确 用户很不满意 质量很不可靠 没有适当的文档,维护困难 软件成本比重上升 供不应求
9
1.2 软件危机
软件危机产生的原因
客观:软件本身特点
逻辑部件 规模庞大
成本昂贵、本质复杂、没 有明显的制造过程,运行 期间存在退化问题。
结构化的软件过程模型
1 瀑布模型
特点 阶段的顺序性和依赖性 推迟实现的观点 文档驱动的质量保证
存在问题 不适合需求模糊的系统
17
1.3 软件工程
2 快速原型模型
快速原型方法
原型:
是系统的早期版本,是系统的物理模型,只 实现了系统的一些最基本的功能,反映系统的 行为特性,但不一定满足全部需求。
3
1.1 软件技术概述
软件的发展历史
个性化的程序
工程化的产品(软件)
1 早期阶段(60年代中期以前)
关键词:面向批处理,有限的分布,自定义软件。
2 第二阶段(60年代中期~70年代中期) 关键词:多用户,实时,数据库,软件产品。
3 第三阶段(70年代中期~80年代末) 关键词:分布式系统,嵌入“智能”,低成本硬件,消费者影响。
方法学的三个要素:方法、工具和过程
➢ 方法:是完成软件开发各项任务
的技术方法,是回答“如何做” 的问题;
➢ 工具:为方法的运用提供自动的
或半自动的软件支撑环境;
➢ 过程:一系列工作步骤。 15

1.3 软件工程
方法学的分类
结构化方法 :以算法和数据结构为核心 ➢ 起源于结构化程序设计思想,注重系统组成要素之间的
第二篇 软件工程
主要内容:

《软件详细设计教程》课件第1章

《软件详细设计教程》课件第1章

第1章 软件工程概述
(3) 第三阶段:20世纪80年代。微处理器的出现与应用 使计算机真正成为大众化的东西,而软件系统的规模、复杂 性以及在关键领域的广泛应用,促进了软件开发过程的管理 及工程化开发。在这一时期,软件工程开发环境CASE及其 相应的集成工具大量涌现,软件开发技术中的度量问题受到 重视,出现了著名的软件工作量估计COCOMO模型、软件 过程改进模型CMM等。20世纪80年代后期,以Smalltalk、 C++等为代表的面向对象技术重新崛起,传统的结构化技术 受到了严峻的考验。
第1章 软件工程概述
在著名的《没有银弹:软件工程中的根本和次要问题》 一文中,Fred Brooks认为正是软件固有的复杂性造成了软件 开发的诸多问题。由于复杂性,人们难以全面理解问题,团 队成员之间的沟通也变得非常困难,从而导致了产品缺陷、 成本超支和进度拖延;由于复杂性,描述和理解软件系统所 有可能的状态是极其困难的,影响了产品的可靠性;由于软 件结构及其依赖关系的复杂性,软件的任何更改和扩充都有 可能带来灾难性的后果,形成所谓的“雪崩效应”。
第1章 软件工程概述
(3) 软件是不断变化的。软件是纯粹思维活动的产物, 它不会像硬件一样发生磨损,而是需要随着应用、硬件、用 户和社会等各种因素的变化不断地被修改和扩展。由于软件 是人类思维和智能的一种延伸,因此当软件被真正应用之后, 人们往往希望超越原有的应用边界进行软件功能的提升或扩 展;另外,由于软件必须依附于硬件平台,因此需要随着硬 件设备的更新和接口的不同而变化。
第1章 软件工程概述 图1.3 软件成本在系统总成本中所占比例
第1章 软件工程概述
(4) 软件维护极其困难,而且很难适应不断变化的用户 需求和使用环境。在软件交付使用的初期,需要识别和纠正 软件的错误,改正软件性能上的缺陷,避免实施中的错误使 用。即使软件进入了正常的使用期,由于计算机新技术的出 现和用户新需求的提出,也需要修改和改进软件。然而,软 件维护依然是一件非常困难的工作,常常出现诸如错误难以 修改或者修改又带来新的错误等现象,长期不断的修改也引 起了软件的退化。

《软件工程》第1章 软件工程概述

《软件工程》第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)软件,它从一个或多个装有事务信息的数据库 中存取数据。在这个领域中的应用是重新建立已有的数据,便 于事务操作或做出管理决策。另外,除了传统的数据处理应用, 事务软件还可以实现交互计算(如营业点的交易处理)。

第一讲 软件工程概述

第一讲 软件工程概述

第一讲软件工程概述在当今数字化的时代,软件已经成为我们生活和工作中不可或缺的一部分。

从我们日常使用的手机应用程序,到企业运行所依赖的复杂系统,软件的身影无处不在。

而软件工程,作为一门致力于开发高质量软件的学科,对于确保这些软件的可靠性、有效性和可维护性起着至关重要的作用。

软件工程并非是简单的编写代码,它是一个综合性的、有组织的、规范化的过程。

就好像建造一座大厦,不仅需要有优秀的建筑工人(程序员),还需要有精心设计的蓝图(软件架构)、严格的施工规范(开发流程)以及有效的质量监督(测试和维护)。

那么,软件工程到底包含哪些关键的方面呢?首先,需求分析是软件工程的起点。

这就好比在出发旅行前,我们要明确目的地和路线。

在需求分析阶段,开发团队需要与客户或者用户进行深入的沟通,了解他们的期望和需求。

这些需求可能包括功能需求,比如软件要实现什么样的具体操作;性能需求,例如软件的响应速度、处理能力等;还有可用性需求,比如界面的友好程度、操作的便捷性等。

只有清晰地理解了这些需求,才能为后续的开发工作指明方向。

接下来是软件设计。

这是构建软件架构的重要阶段,类似于大厦的框架设计。

在这个阶段,开发人员要根据需求分析的结果,确定软件的整体结构、模块划分以及它们之间的关系。

好的软件设计能够提高软件的可扩展性、可维护性和可重用性。

比如,采用分层架构可以使不同层次的功能相互独立,便于修改和扩展;使用设计模式可以提高代码的复用率,减少重复开发。

然后是编码实现。

这是将设计转化为实际代码的过程,就像建筑工人根据设计图纸进行施工。

在编码过程中,程序员需要遵循一定的编程规范和最佳实践,以保证代码的质量和可读性。

同时,他们还需要运用合适的算法和数据结构来提高软件的性能。

测试是软件工程中不可或缺的环节。

就像大厦建成后需要进行各种质量检测一样,软件也需要经过严格的测试。

测试包括单元测试、集成测试、系统测试和用户验收测试等。

通过测试,可以发现软件中的缺陷和错误,并及时进行修复,确保软件能够满足用户的需求和期望。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

17
3. 基于软件工作方式划分:

实时处理软件
分时软件 交互式软件 批处理软件



18



按软件服务对象的范围划分: 项目软件 产品软件 按使用的频度进行划分: 一次使用 频繁使用 按软件失效的影响进行划分: 高可靠性软件 一般可靠性软件
19
软件的种类如此众多,软件的功能 这么强大,软件是如何发展起来的 呢?从最初的软件到现在的巨型系 统软件,软件的发展是不是一帆风 顺呢?
33
1993 年 IEEE 进一步给出了一个更全面的 定义: 软件工程是:(1)把系统化的、规范的、 可度量的途径应用于软件开发、运行和维护 的过程,也就是把工程化应用于软件中;(2) 研究(1)中提到的途径。
34
2004年由IEEE/ACM联合发布的Software Engineering2004报告强调了对软件工程的新 定义,即软件工程是:以系统的、学科的、 定量的途径,把工程应用于软件的开发、运 营和维护;同时,开展对上述过程中各种方 法和途径的研究。
35
软件工程是指导计算机软件开发和维护的 工程学科.采用工程的概念、原理、技术和方 法来开发和维护软件,把经过时间考验而证明 正确的管理技术和当前能够得到的最好的技 术方法结合起来,以经济地开发出高质量的软 件并有效地维护它,这就是软件工程.
36
软件工程的内容
软件工程是一种层次化的技 术,如图1-1 所示。和其他工 程方法一样,软件工程是以 质量为关注焦点,以相关的 现代化管理为理念。 软件工程的基础是过程层。 软件工程的过程是为获得软 件产品,在软件工具支持下 由软件人员完成的一系列软 件工程的活动,贯穿于软件 开发的各个环节。它定义了 方法使用的顺序、要求交付 的文档资料,是软件开发各 个阶段完成的标志。
11
软件的分类
1.按软件的功能进行划分:

系统软件 支持软件


应用软件
13
软件的分类

系统软件
控制和协调计算机及外部设备,支 持应用软件开发和运行的系统
操作系统

数据库管理系统 设备驱动程序 通信处理程序等
14

支持软件
支撑各种软件的开发与维护的软件, 又称为软件开发环境
文本编辑程序 文件格式化程序 程序库系统 支持需求分析、设计、实现、测试和支持
32
2.1 软件工程的定义和内容
1983年IEEE给软件工程的定义:“软件工程是开发、 运行、维护和修复软件的系统方法。” 强调“系统方法” 不是“个人技巧”。 专家观点: Fairly认为:“软件工程学是为了在成本限额以内按 时完成开发和修复软件产品所需要的系统生产和维护技术及 管理学科”。强调“成本限额以内”及“技术和管理两个方 面” 。 Fritz Bauer认为:“软件工程是为了经济地获得可靠 的且能在实际机器上有效地运行的软件,而建立和使用的完 善的工程化原则”。强调“经济地开发出高质量的软件,应 建立和使用的完善的工程化原则”。
失效率
修改点 实际曲线
理想曲线 硬件产品 时间 软件产品 时间
硬件/软件产品失效率曲线
27
改正一个问题的 估算费用/美元 2000 1000
改正一个问题的 估算工作量/人日 5 2.5
改正一个问题 需付出的代价
代价 高 中 低
200 20
0.5 0.05
需 求 分 析
结 构 设 计
详 细 设 计
编 码
20
3 软件的发展




第一阶段,程序设计阶段,从1946年到20世纪60 年代初。 第二阶段,程序系统阶段,从20世纪60年代初到 20世纪70年代初。程序的规模已经发展的很大, 需要多人分工协作,小组模式。 第三阶段,软件工程阶段,从20世纪70年代中期 至80年代中期。在这个阶段,软件工程师把工程 化的思想加入到软件的开发过程中。 第四阶段,面向对象阶段, 80年代中期至今
软件必须和运行软件的硬件保持一致(当 前这个特点变的突出了!) 软件的运行受计算机系统的影响 软件一旦研制开发成功,其生产过程就变 成复制过程。


10
软件开发成本昂贵



软件的开发至今尚未完全摆脱手工艺的开发 方式。软件成本相当昂贵,软件开发需要投 入大量的、高强度的脑力劳动,人员成本很 高,开发人员的工资大于运维等部门。 两面性 原因1:软件本身是复杂的 实际问题的复杂性 程序逻辑结构的复杂性 原因2:人际关系等非技术原因更复杂 软件成本超过硬件
1
软件工程技术基础 ——流程与方法
第一章 软件工程概述
北京邮电大学计算机学院 芦效峰
2
计算机相关专业学生应具备的素质

掌握一门以上程序开发语言
掌握编程技巧(数据结构、算法) 掌握软件开发方法论 掌握专业知识

如果只能选择一个,你会怎么选择?
3
《软件工程技术基础》学习目的
掌握软件开发方法论 体验软件工程各阶段的主要工作,特别注 意吸取教训; 学会与他人合作,培养团队精神。 成为一名项目经理/产品经理的必修课
集 成 测 试
系 现 统 场 测 试
变更代价随时 间变化的趋势
早期 中期 晚期 时间
28
软件危机的原因
(1)没有统一的、规范的方法论的指导。 文件资料不全,忽视交流,缺乏方法论的指导 (2)忽视软件开发前期的需求分析。 编程越早,需求分析不充分,完成时间越长 (3)忽视软件文档也是造成开发效率低下的原因。 对软件开发、维护、用户都很重要 (4)忽视测试阶段的工作,或不负责任的测试员,提 交用户的软件质量差。 “错误是不可避免的”,该如何理解这句话? (5)轻视软件的维护。 (6)开发计划不合理,缺乏经验和数据积累。 29
22

1963年美国飞往火星的火箭爆炸,造成1000万美 元的损失。原因是FORTRAN程序:
DO 5 I=1,3 误写为:DO 5 I=1 . 3
1967年苏联“联盟一号”载人宇宙飞船在返航时, 由于软件忽略一个小数点,在进入大气层时因打不 开降落伞而烧毁。
23

IBM公司的 OS/360,共约100万条指令,花 费了5000个人年;经费达数亿美圆,而结果 却令人沮丧,错误多达2000个以上,系统根 本无法正常运行。 OS/360系统的负责人 Brooks这样描述开发过程的困难和混乱: “…像巨兽在泥潭中作垂死挣扎,挣扎得越 猛,泥浆就沾得越多,最后没有一个野兽能 够逃脱淹没在泥潭中的命运。”
21
软件神化


20 世纪60年代以前,计算机刚刚投入实际使用,软 件设计往往只是为了一个特定的应用而在指定的计 算机上设计,基本上是个人设计、个人使用。 60年代中期,大容量、高速度计算机的出现,使计 算机的应用范围迅速扩大,软件开发急剧增长。高 级语言开始出现;操作系统的发展引起了计算机应 用方式的变化。软件系统的规模越来越大,复杂程 度越来越高,软件可靠性问题也越来越突出。 原来的个人设计、个人使用的方式不再能满足要求 ,在计算机软件的开发和维护过程中遇到的一系列 严重的问题。
到底什么是工程化呢? 类比我们较熟悉的建筑工程,盖一个大楼 IEEE定义:工程化是把系统的、受训到、 可以计量的方法应用到结构、机械、产品 、系统或处理过程。
软件开发工程化的目标是通过规范软件开 发的步骤和每一步的要求,使软件开发像 在流水线上生产机械零件一样
40

2.3
软件工程的基本原理
软件支撑 环境
工具 方法 过程 质量保证
图1-1 软件工程层次图
如何做?
37
软件工程的目标




付出较低的开发成本; 达到要求的软件功能; 取得较好的软件性能; 开发的软件易于移植; 需要较低的维护费用; 能按时完成开发工作,及时交付使用。
38
目标之间的关系
39
2.2 工程化思想

8
2.软件的特点



软件是一种逻辑实体,而不是具体的物 理实体。因而它具有抽象性 在软件的运行和使用期间,没有硬件那 样的机械磨损,老化问题。但存在退化 问题。 软件的生产与硬件不同,在它的开发过 程劳动的结果。 这是好还是不好?
9

可变性,软件在生产过程中甚至在投入运 行之后,也还可以再改变。
24
60年代后期软件开发出现的问题

①软件开发费用和进度失控。费用超支、进度 拖延的情况屡屡发生。

②软件的可靠性差。尽管耗费了大量的人力物 力,而系统的正确性却越来越难以保证,出错 率大大增加,造成的损失惊人。
③生产出来的软件难以维护。很多程序缺乏相 应的文档资料,程序中的错误难以定位,难以 改正,有时改正了已有的错误又引入新的错误 ④用户对“已完成”的系统不满意现象经常发 生。
2.解决软件危机的途径达成共识
1 、软件开发应该是一种组织良好、管理严密、各 类人员协同配合、共同完成的工程项目。 2 、必须充分吸收和借鉴人类长期以来从事各种工 程项目所积累的行之有效的原理、概念、技术和方 法,特别是要吸取几十年来从事计算机硬件研究和 开发的经验教训。 3 、应该推广使用在实践中总结出来的开发软件的 成功的 技术和方法。 4、应该开发和使用更好的 软件工具。
4
授课内容



软件工程概述 可行性研究 需求分析(UML) 概要设计(UML) 详细设计 人机交互 编码 软件测试 软件维护
5
主要学习内容:



软件 软件工程 软件生存周期 常用软件开发过程模型 软件开发方法简述 软件文档
6
1 软件 1.1软件的概念及特点
30
相关文档
最新文档