第1章 软件工程概述
第1章软件工程概述
第1章软件工程概述软件工程的研究领域包括软件的开发方法、软件周期以及软件工程的实践等。
软件危机与软件工程的起源1. 计算机系统的发展历程20 世纪 60 年代中期以前,是计算机系统发展的早期:软件为每个具体应用而专门编写的。
软件实质为规模较小的程序,编写容易,没有系统化的方法,对软件开发工作更没有进行任何管理。
编写者和使用者为同一个(或同一组)人。
软件设计只是一个模糊的过程,除了程序清单之外,没有其他文档资料。
20 世纪 60 年代中期到 70 年代中期,是计算机发展的第二代:硬件发展:多道程序、多用户系统引入了人机交互的新概念,使硬件和软件的配合上了一个新层次。
实时系统能够从多个信息源收集、分析和转换数据,使得进程控制能以毫秒而不是分钟来进行。
在线存储技术的进步导致了第一代数据库管理系统的出现。
软件发展:软件个体化特性。
软件数量极具膨胀。
在程序运行时发生的错误必须设法改正。
用户有了新的需求时必须相应的修改程序。
硬件或操作系统更新时,通常需要修改程序以适应新的环境。
软件维护工作,以令人吃惊的比例耗费资源,许多程序的个体化特性使得它们最终成为不可维护的。
2. 软件定义:软件是由一个完整的配置组成:程序:能够完成预定功能和性能的可执行的指令序列。
数据:是使程序能够适当地处理信息的数据结构。
文档:是开发、使用和维护程序所需要的图文资料。
1983 年 IEEE 对软件的定义:计算机程序、方法、规则、相关的文档资料、运行程序时所必须的数据。
特点:1) 软件是一种逻辑实体,而不是具体的物理实体。
2) 软件的生产与硬件不同。
在软件开发过程中没有明显的制造过程。
3) 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
4) 软件成本相当高。
3. 软件危机介绍软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护,数量不断膨胀的已有软件。
软件工程考研大纲
第一章软件工程概述1、1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了。
2、软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
3、软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量日益增长的已有软件。
4、产生危机的原因①与软件本身的特点有关②与软件开发与维护的方法不正确有关。
5、软件的生命周期:一个软件从定义、开发、使用、维护,直到被废弃,要经历一个漫长的时期,这就如同人要经过胎儿、儿童、青年、中年、老年,直到最终死亡的漫长周期一样。
通常把软件经历的这个漫长的时期称为生命周期。
6、软件工程定义:软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发和维护软件。
把经过时间考验而证明正确的管理技术和当前能够得到的最好技术方法结合起来,以经济地开发出高质量的软件并有效的维护它,这就是软件工程。
7、软件工程7个本质特征:①软件工程关注与大型程序的构造②软件工程的中心课题是控制复杂性③软件经常变化④开发软件的效率非常重要⑤和谐地合作是开发软件的关键⑥软件必须有效的支持它的用户⑦在软件工程领域中通常由具有一种文化背景的人替另一种文化背景的人创造产品8、软件工程的7条基本原理:①用分阶段的生命周期计划严格管理②坚持进行阶段评审③实行严格的产品控制④采用现代程序设计技术⑤结果应能清楚的审查⑥开发小组的人员应该少而精⑦承认不断改进软件工程实践的必要性9、通常把软件周期全过程中使用的一整套技术方法的集合称为方法学,也成为范型。
10、软件工程的方法包含3个要素:方法、工具和过程。
其中方法是完成软件开发的各项任务的技术方法回答“怎样做”的问题;工具是为运用方法而提供的自动或半自动的软件工程支撑环境;过程是为了获得质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
第1章软件工程和软件测试概述
1.1软件工程概述- 软件工程
• 1968年北大西洋公约组织的计算机科学家在联邦 德国召开国际会议,讨论软件危机问题,在这次 会议上正式提出并使用了“软件工程”这个名词。 • 软件工程是指导计算机软件开发和维护的一门工 程学科,它是采用工程的概念、原理、技术和方 法来开发与维护软件,把经过时间考验而证明正 确的管理技术和当前能够得到的最好的技术方法 结合起来,以经济地开发出高质量的软件并有效 地进行维护。
• 实际问题的复杂性 实际问题的复杂性 • 程序逻辑结构的复杂性 程序逻辑结构的复杂性
5
1.1软件工程概述- 软件的分类
• 按软件的功能进行划分: 按软件的功能进行划分:
– 系统软件
• • • • • • • • • 操作系统 数据库管理系统 设备驱动程序 通信处理程序等
– 支撑软件
文本编辑程序 文件格式化程序 磁盘向磁带向数据传输的程序 程序库系统 支持需求分析、设计、实现、 支持需求分析、设计、实现、测试和支持管理的软件
• 软件是计算机系统中与硬件相互依存的另一部
它是包括程序 及其相关文档 分,它是包括程序,数据及其相关文档的完整集 它是包括程序,数据及其相关文档的完整集 其中: 合。其中:
– 程序 程序(instructions)是按事先设计的功能和性能要求 是按事先设计的功能和性能要求 执行的指令序列 – 数据 数据(data)是使程序能正常操纵信息的数据结构 是使程序能正常操纵信息的数据结构 – 文档 文档(documents)是与程序开发,维护和使用有关的 是与程序开发, 是与程序开发 图文材料
– 问题定义 – 可行性研究 – 需求分析
18
1.1软件工程概述-软件开发时期
• 开发时期具体设计和实现在前一个时期定 义的软件,它通常由下述4个阶段组成
第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章软件工程概述1、什么是软件工程?为什么会出现软件工程?软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。
软件工作者在20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科——计算机软件工程学(通常简称为软件工程)。
2、软件工程的主要目标是什么?基本目标是什么?软件工程的目标:从管理和技术两个方面开发和维护计算机软件,用低成本,开发出达标、高性能、易于移植、可靠性高的软件。
软件工程的基本目标是:优质、高产。
3、什么是软件工程方法学?软件工程的3要素(软件工程方法学的3要素)是什么?分别包含什么内容?软件工程方法学:软件生命周期全过程中使用的一整套技术方法的集合软件工程方法学包含3个要素:方法、工具和过程。
方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。
4、什么是软件过程?什么是软件周期?常见软件生命周期模型(课件中的前5类)的特点有哪些?软件过程:它是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件生命周期:由软件定义、软件开发和运行维护(也称之为软件维护)3个时期组成①瀑布模型定义:传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。
瀑布模型的特点:1.阶段间具有顺序性和依赖性;2.推迟实现的观点;3.质量保证的观点。
瀑布模型的成功在很大程序上是由于它基本上是一种文档驱动的模型。
瀑布模型的主要优点:a.可强迫开发人员采用规范的技术方法;b.严格地规定了每个阶段必须提交的文档;c.每个阶段结束前必须正式进行严格的技术审查和管理复审。
第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亿条指令。
软件工程的软件工程开发过程
项目交付
交付项目成果 进行最终验收
项目总结
总结项目经验教训 准备项目结案报告
总结
软件项目管理是软件工程开发过程中的重要组成部分,通 过有效的项目计划、资源管理、团队合作和项目交付,可 以提高项目成功的几率,确保项目按时交付且符合质量标
准。
●06
第六章 总结与展望
软件工程发展趋势
追求高质量、高效 率的软件开发过程
如Google、 Apple等知名企业
的软件项目
从软件危机到软件 工程的建立
展望未来
软件工程领域将面临更多挑战,如人工智能、大数据、 云计算等技术的快速发展,我们需要不断学习和创新,
拓展软件工程的边界,为未来的发展做好准备。
参考文献
书籍
各类软件工程经典教材和专著
量改进等方面
衡量软件产品质量 的标准和指标,包 括功能性、可靠性、
性能等方面
CMMI成熟度模型
软件工程领域常用 的能力成熟度模型, 用于评估组织的软
件开发过程能力
质量保证工具
静态分析工具
用于静态代码分析, 发现潜在的代码缺
陷和安全隐患
缺陷管理工具
用于跟踪和解决软 件开发过程中出现
的缺陷和问题
动态分析工具
过程改进计划
制定改进计划以优 化软件开发过程
过程评估方法
通过评估方法对软 件开发过程进行定
性和定量分析
过程改进工具
借助各种工具可以更好地支持软件过程的改进。常用的过 程改进工具包括流程建模工具、流程仿真工具和过程改进 跟踪工具。这些工具能够有效地帮助团队识别问题、制定
解决方案并跟踪改进进度。
持续改进实践
学术论文
软件工程基础知识
●04
第四章 软件设计
结构化设计
结构化设计是软件设计中的重要概念,包括模块 化设计和使用数据流图、DFD等技术来组织和管 理软件系统的结构。通过结构化设计,可以更好 地理清软件的模块,提高软件的可维护性和可扩
展性。
面向对象设计
封装
将数据和操作封装 在一个单元中
多态
同一操作作用于不 同的对象,产生不
模块化、层次化的 编程方法
敏捷开发
迭代、增量式的开 发方法
面向对象编程
将数据和操作封装 在对象中
DevOps
开发和运维的一体 化
软件工程敏捷开发
敏捷开发是一种迭代式的开发方法,注重团队合 作、快速反馈和灵活应对变化。敏捷开发通过持 续交付、用户参与和迭代开发来提高开发效率和
软件质量。
●02
第2章 软件开发方法
总结
重要性
软件需求工程是软件开发的关键阶段,需求获取和验证的准确性直接影响最终 软件质量
持续性
需求工程是一个持续循环的过程,随着项目的发展和变化,需求也会不断更新 和调整
沟通能力
与用户有效沟通是需求获取的关键,能够确保开发团队真正理解用户需求
展望
软件需求工程是软件工程中非常重要的一个环节,随着信息 技术的不断发展,需求工程的重要性也日益凸显。未来,随 着人工智能、大数据等新技术的广泛应用,需求工程也将面 临更多的挑战和机遇。
目标设定
明确团队目标与方 向
冲突解决
及时解决团队内部 矛盾
激励机制
激励团队成员保持 积极性
结语
软件工程实践是软件工程师必备的基础知识之一,通过学习 和实践,我们能够更好地应对各种复杂的软件项目,提高项 目成功率和质量。不断学习和提升技能是软件工程师成长的 关键,希望大家能够在软件工程的道路上不断前行,创造更 加优秀的软件产品。
第一讲软件工程概述
第一讲软件工程概述软件的定义软件是计算机系统中与硬件相互依存的另一局部,它是包括顺序,数据及其相关文档的完整集合。
顺序是按事前设计的功用和功用要求执行的指令序列数据是使顺序能正常操纵信息的数据结构文档是与顺序开发,维护和运用有关的图文资料软件危机软件危机是指计算机软件开发和维护进程中所遇到的一系列严重效果。
概括的说即为:能否满足对软件日益增长的需求?能否维护数量日益增长的现有软件?软件工程的定义B o e h m:运用现代迷信技术知识来设计并结构计算机顺序及为开发、运转和维护这些顺序所必需的相关文件资料I E E E:软件工程是开发、运转、维护和修复软件的系统方法F r i t z B a u e r:树立并运用完善的工程化原那么,以较经济的手腕取得能在实践机器上有效运转的牢靠软件的一系列方法软件工程要素三要素:方法、工具和进程(缺乏一个进程,洗厕所的都有方法和工具,但没有一个好的进程〕软件工程方法为软件开发提供了〝如何做〞的技术软件工具为软件工程方法提供了自动的或半自动的软件支撑环境软件生命周期〔Life Cycle〕软件有一个孕育、降生、生长、成熟、兴起的生活进程。
这个进程即为计算机软件的生命周期软件生活期的六个步骤,即制定方案、需求剖析、设计、完成、测试及运转维护软件生命周期:制定方案确定要开发软件系统的总目的给出功用、功用、牢靠性以及接口等方面的要求完成该软件义务的可行性研讨估量可应用的资源(硬件,软件,人力等)、本钱、效益、开发进度制定出完成开发义务的实施方案,连同可行性研讨报告,提交管理部门审查软件生命周期:需求剖析对用户提出的要求停止剖析并给出详细的定义,失掉系统逻辑模型,可用数据流程图、数据字典和简明算法加以表示。
编写软件需求说明书或系统功用说明书及初步的系统用户手册提交管理机构评审软件生命周期:软件设计概要设计—把各项需求转换成软件的体系结构。
结构中每一组成局部都是意义明白的模块,每个模块都和某些需求相对应。
软件工程课件(全)ppt
第1章 1.2软件工程
1.2.1 软件工程的定义和目标
为了克服软件危机,1968年10月在北大西洋公约组织(NATO)召开的计 算机科学会议上,Fritz Bauer首次提出“软件工程”的概念。
按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一 条主要出路。
软件工程的主要思想是强调软件开发过程中应用工程化原则的重要性。软 件工程的目标是实现软件的优质高产。软件工程的目的是在经费的预算范围内, 按期交付出用户满意的、质量合格的软件产品。
第1章 1.1软件与软件危机
1.1.3 软件危机
2. 软件危机产生的原因
(1)忽视软件开发前期的调研和需求分析工作。 (2)缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划很难制定。 (3)开发过程缺乏统一的、规范化的方法论指导。 (4)忽视与用户、开发组成员间的及时有效的沟通。 (5)文档资料不规范或不准确。导致开发者失去工作的基础,管理者失去管理的依据。 (6)没有完善的质量保证体系。
第1章 1.1软件与软件危机
1.1.1 软件的定义及其特点
2.软件具有下列特点:
比硬件发展慢
是逻辑产品
软件
生产与硬件不同 不会磨损和老化
成本高、风险高
手工开发为主
依赖硬件
第1章 1.1软件与软件危机
1.1.2 软件的发展及其分类
1.软件技术的发展
程序设计
程序系统
软件工程
第1章 1.1软件与软件危机
第1章 1.1软件与软件危机
1.1.3 软件危机
3. 软件危机解决途径
要解决软件危机问题,需要采取以下措施: (1)使用好的软件开发技术和方法。 (2)使用好的软件开发工具,提高软件生产率。 (3)有良好的组织、严密的管理,各方面人员相互配合共同完成任务。 为了解决软件危机,既要有技术措施(好的方法和工具),也要有组织管理措施。软件工 程正是从技术和管理两方面来研究如何更好地开发和维护计算机软件的。
第1章 软件工程概述
因而软件成本相当昂贵;
(6)相当多的软件开发涉及到社会因素。
2017/10/26 第4页 软件工程
3、软件的分类:
(1)按功能分类 a、系统软件:支持计算机系统各个部件、相关的软件
和数据协调、高效地工作的软件。如:OS、DBMS、
DRIVER、COMMUNICATION-SYSTEM。 b、支撑软件:协助用户开发软件的工具性软件,文本 编辑软件。如:PSL/PSA(问题描述语言、问题描述分析 器)、图形软件包、预编译程序、静态分析程序。
是批处理还是人机交互,信息存储是采用文件系统还是数据库?),方案的级
别有:低、中、高等级,每种方案都用系统流程图或其它工具加以描述。推荐 一种方案。最后确定一种方案。 (4)完成的任务:可能的解法(每种解法的系统流程图和成本效益分析),推 荐的系统结构(层次图或结构图)。 总体设计结束的标志是提交总体设计说明书、数据库或数据结构说明书和 集成测试计划等文件。
软件工程
2017/10/26
第1页
软件工程
第一章 软件工程概述
软件 软件危机 软件工程
2017/10/26
第2页
软件工程
1.1 软
1、什么叫软件?
件
(1)广义软件:相对于有形物理实体,把技术条件、管理法
规以及人员素质等无形因素称为软件。 (2)计算机软件:是与计算机硬件相对应的计算机组成部分, 包括程序、数据及其相关文档的完整集合。 Boehm:“软件是程序以及开发、使用和维护程序所需的所有
2017/10/26
第6页
软件工程
(4)按功能软件服务对象分类 a、项目软件:受特定客户委托由一个或多个软件 开发机构在合同的约束下开发出来的软件。 b、产品软件:提供给市场的商品。
SE第1课-软件工程概述
是一个软件从用户需求开始,经过分析、开发、测试、运行维护 的一系列相关活动的全周期。
13
1.3 软件工程
软件的生命周期过程
14
1.3 软件工程
软件工程方法学
软件工程是技术与管理的紧密结合,技术是指方法学问题,管 理是指通过计划、组织和控制等活动,合理配置和使用各种资源, 得到满足质量要求的工作产物(运行系统和支持文档)。
结构化的软件过程模型
1 瀑布模型
特点 阶段的顺序性和依赖性 推迟实现的观点 文档驱动的质量保证
存在问题 不适合需求模糊的系统
17
1.3 软件工程
2 快速原型模型
快速原型方法
原型:
是系统的早期版本,是系统的物理模型,只 实现了系统的一些最基本的功能,反映系统的 行为特性,但不一定满足全部需求。
软件工具是一种自动化系统 用于软件生存周期的某一个阶段或某一个环节
25
1.4 软件工程环境
软件工程环境的定义:
是用以支持需求定义、程序生成,以及软件维护等 整个软件生命周期全部活动的,并把方法、规模和计 算机程序集成在一起的整个体系。 又称为软件开发环境,软件支撑环境,自动开发环境
需求:
集成化的系统 通用的系统 可剪裁又可扩充的系统 实用的、经济合算的系统
3) 组成:
面向对象分析(Object-Oriented Analysis, OOA) 面向对象设计(Object-Oriented Design, OOD) 面向对象程序设计(Object-Oriented Programming, OOP)22
1.3 软件工程
OOA:
任务:ห้องสมุดไป่ตู้析问题域,用相应的符号系统建立系统的概念模型; 通常从三个方面建立系统模型:
软件工程概述
第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-概述
软件工程的基本原理
用分阶段生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性
瀑布模型
瀑布模型(生存周期模型)就是传统的生命 周期方法学(既自顶向下结构化开发模型方 法)。
优点:奠定了软件工程方法的基础;流水依 赖;便于分工协作;推迟现实;文档易修改; 有复审质量保证。
缺点:用户需求明确困难;用户见面晚;纠 错慢;难于克服系统分析员不懂专业领域的 知识,用户不懂计算机的困难,成功率低。 适合于系统要求明确的小系统。
必须按照软件工程开发,有严格的质 量管理措施 同上
7 Neusoft Computer Science and Technology Department copy right
按软件工作方式划分
实时处理软件 分时软件 交互式软件 批处理软件
按软件服务对象的范围划分
项目软件 产品软件
1~4周 500以下
不必有严格的设计和测试文档
小型 1~2
1~6月 1k~2k
通常没有与其他程序的接口
中型 3~5
1~2年 5k~50k
需要有严格的文档和设计规范
大型 5~20
2~3年 50k~100k
需要按照软件工程方法进行管理
超大型 100~1000 4~5年 1M(=1000k) 巨型 2000~5000 5~10年 1M~10M
Neusoft Computer Science and Technology Department copy right
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题
1. 2. 3. 4.
什么是软件工程? 怎样用软件工程消除软件危机? 什么是软件生命周期? 面向对象与传统软件工程有何
软件工程学包括软件开发技术和软件工程管理。 软件开发技术又分为软件开发方法学、软件工具、 软件工程环境。 软件工程管理又分为软件管理学、软件经济学、 软件度量学。
1.2 软件工程学的范畴
软件开发方法学:无固定方法→结构化的软件开发 →面向对象的软件开发(软件复用) 软件工具:帮助开发软件的软件叫做软件工具,在 软件开发的各个阶段都有许多有效的工具,这些工 具结合起来构成“软件箱”或“集成工具”。 软件工程环境:方法和工具相结合,再加上配套的 软、硬件支持就形成环境(Software Engineering Environment ,简称SE2)。
1.1 软件发展和软件危机
软件危机的表现 对软件开发成本和进度的估计常常很不准确。 用户对“已完成的”软件系统不满意的现象经常发生。 软件产品的质量往往靠不住。 软件常常是不可维护的。 软件通常没有相关的文档资料。 软件成本在计算机系统总成本中所占的比例逐年上升。
软件开发生产率提高的速度,远远跟不上计算机应用 迅速普及深入的趋势。
1.1 软件发展和软件危机
为了解决软件危机,既要有技术措施(方法和工具), 又要有必要的组织管理措施。 软件工程正是从管理和技术两方面研究如何更好地 开发和维护计算机软件的一门新兴学科。
软件工程:采用工程的概念、原理、技术和方法来 开发和维护计算机软件,将工程管理技术的成功经 验和思想与具体的软件开发过程、研究技术相结合, 形成一整套适合于计算机软件开发的方法、规范和 技术。
1.1 软件发展和软件危机
定义 软件:能够完成预定功能和性能的可执行的计算机 程序和使程序正常执行所需要的数据,加上描述程 序的操作和使用的文档。 程序:计算任务中的处理对象和处理规则的描述。 文档:为了便于了解程序所需的资料说明。
软件的作用 用户与硬件的接口 计算机系统的指挥者 计算机系统结构设计的重要依据
软件工程管理:目的是按照进度及预算完成软件开 发计划,实现预期的经济效益和社会效益。
1.2 软件工程学的范畴
软件工程 应用计算机科学、数学及管理科学等原理,以工程 化原则、方法解决软件问题的工程。 其中,计算机科学、数学用于构造模型与算法,工 程科学用于制定规范、设计范型、降低成本及确定 权衡,管理科学用于计划、资源、质量、成本等管 理。
1.1 软件发展和软件危机
缓解软件危机的途径 充分吸取和借鉴人类长期以来从事各种工程项目所 积累的行之有效的原理、概念、技术和方法,特别 要吸取几十年来人类从事计算机硬件研究和开发的 经验教训。 推广使用在实践中总结出来的开发软件的成功的技 术和方法,并且研究探索更好更有效的技术和方法 ,尽快消除在计算机系统早期发展阶段形成的一些 错误概念和做法。 开发和使用更好的软件工具。
1.1 软件发展和软件危机
产生软件危机的原因(软件本身的特点) 软件开发进展情况较难衡量,软件开发质量难以评 价,管理和控制软件开发过程相当困难 软件没有“磨损”概念,软件维护通常意味着改进 或修改原来的设计 软件的显著特点是规模庞大
1.1 软件发展和软件危机
产生软件危机的原因(软件开发人员的错误观点) “有一个对目标的概括描述就足以着手编写程序了, 许多细节可以在以后再补充”、“用户对软件的要 求不断变化,然而软件是柔软而灵活的,可以轻易 地改动” “所谓软件开发就是编写程序并设法使它运行” “软件投入生产性运行以后需要的维护工作并不多, 而且维护是一件很容易做的简单工作” 忽视软件需求分析 认为软件开发就是编写程序 忽视软件维护
1.6 软件工程的基本目标
软件工程项目的基本目标: 付出较低的开发成本。 达到预期的软件功能。 取得较好的软件性能。 使开发的软件易于移植。 需要较低的维护费用。 能按时完成开发工作,及时交付使用。
1.6 软件工程的基本目标
软件工程的原则 抽象 信息隐蔽 模块化 局部化 确定性 一致性 完备性 可验证性
1.2 软件工程学的范畴
软件工程的基本原理: 严格按照计划进行管理 坚持进行阶段评审 实行严格的产品控制 采用现代的程序技术 结果要能清晰地审计 开发小组人员素质要好,数量不宜多 要承认不断改善软件工程实践的必要性
1.3 软件开发的生命周期
计算机软件,从决定进行开发到最终退役所经历的 一系列步骤与过程称为软件生命周期。 根据GB8567软件开发国家标准,软件生命周期的一 种典型的阶段划分为:问题定义和可行性研究、需 求分析、概要设计、详细设计、编码、测试、维护 七个阶段。
1.3 软件开发的生命周期
注意:该部分教材的介绍仅做参考,以GB8567软 件开发国家标准为准。 需求分析阶段。 规格说明(分析)阶段。 设计阶段。 实现阶段。又可称为“编码阶段” 。 集成阶段。 测试阶段。 维护阶段。 退役。
1. 2.
3.
4. 5.
6.
7. 8.
1.3 软件开发的生命周期
软件开发周期各阶段的花费比例 因为维护工作非常重要,所以那些能降低维护费用 的技术、工具和实践构成了软件工程的主要方面。
软件工程概论 Software Engineering
杨璐 yanglu@
第1章 软件工程概述
1.1 软件发展和软件危机 1.2 软件工程学的范畴 1.3 软件开发的生命周期 1.4传统软件工程和面向对象软件工程 1.5 软件的特点 1.6 软件工程的基本目标
事物分离原则(Principle of Separation of Concerns)
小结
本章对软件工程的发展过程及背景做了介绍,对软 件工程的一些基本概念、特点以及传统和面向对象 软件工程生命周期进行了讨论,最后简述了软件工 程的基本目标。通过对本章内容的学习,应能对软 件工程的基本概念、方法、原则有一个总体认识和 了解,为进一步学习后续章节的课程打下基础。
1.1 软件发展和软件危机
软件的发展过程 1. 程序设计阶段,约为20世纪五六十年代。 2. 程序系统阶段,约为20世纪六七十年代。 3. 软件工程阶段,约为20世纪70年代以后。 4. 面向对象软件工程阶段,约为20世纪80年代以后。
1.1 软件发展和软件危机
软件危机 20世纪60年代后期 软件工程学提出的起点 主要问题: 如何开发软件来满足对软件的日益成长的需求 如何维护数量不断膨胀的已有软件
存款
账目 余额
取款
取款消息
计算余额
计算余额
进行计算余额消息
1.4 传统软件工程和面向对象软件工程
结构化软件工程 面向对象软件工程
结构化软件开发阶段
问题定义和可行性研究阶段
面向对象软件开发阶段
问题定义和可行性研究阶段
结构化需求分析阶段
结构化概要设计阶段
面向对象需求分析阶段
面向对象设计阶段 结构化详细设计阶段 结构化编码实现阶段 测试阶段 维护阶段 面向对象编码实现阶段 测试阶段 维护阶段
1.3 软件开发的生命周期
在进行软件产品开发的过程中,越早发现错误和问题并 尽早解决,造成的损失越小,所需要的工作量越少。 改进规格说明和设计技术非常重要,这不仅仅是为了能 尽早地发现故障,也因为规格说明故障和设计所占所有 故障的比重特别大。
1.4 传统软件工程和面向对象软件工程
结构化的软件开发范型,即传统软件工程或经典软 件工程。 结构化的程序设计推动了程序设计风格从“追求技 巧与效率”到“清晰第一,效率第二”的转变,从而 提高了程序的易读性和可靠性。 构成结构化范型的技术包括结构化分析、结构化 设计、结构化编程和结构化测试。 结构化范型的主要改进 结构化范型的主要缺陷 “有限成功”
1.4 传统软件工程和面向对象软件工程
面向对象范型 面向对象的程序设计较好地的实现了“解空间”与 “问题空间”的一致性。“对象+消息”的机制取代 了“数据结构+算法”的思路。 面向对象范型的优势: 有效地降低了软件的复杂性,简化了软件的开发。 有利于维护。
存款消息
存款 账目余额 取款
1.5 软件的特点
软件的主要特点:
1.
2.
3.
软件是一种逻辑实体,而不是具体的物理实体。因 此,它具有抽象性。 软件的生产与硬件不同,软件是由开发或工程化而 形成的,它没有明显的制造过程。 软件不存在磨损和老化问题。然而,它存在退化问 题,设计人员必须多次修改(维护)软件。
4.
软件的开发和运行往往受到计算机系统的限制,对 计算机系统有着不同程度的依赖性。
1.5 软件的特点
5. 6. 7. 8. 9.
总体来说,软件的开发尚未完全摆脱手工的方式。 软件本身是复杂的。 软件的成本相当昂贵。 相当多的软件工作涉及社会因素。 从市场上买到的软件,它本身就是一个完整的软件, 而不能作为构件再组装成新的程序。但目前已有大 量支持“软件复用”的软件和中间件作为相对独立 的构件。