第1章 软件工程学概述
软件工程-张海藩 编著 复习提纲1-6章
第一章软件工程学概述第一节软件危机1.为了消除软件危机,20世纪60年代后期形成了新学科:计算机软件工程学。
2.软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
(这些问题不是不能运行的软件才仅仅具有的,几乎所有的软件都不同程度存在这些问题。
)3.软件危机包含两个方面的问题:1.如何开发软件,以满足对软件日益增长的需求。
2.如何维护数量不断膨胀的已有软件。
4.产生软件危机的原因(page4—图1.1)1.一方面与软件本身的特点有关2.另一方面也和软件开发与维护的方法不正确有关。
5.软件不同于一般程序,它的一个显著特点是:“规模庞大”。
6.软件开发流程:1. 问题定义:(确定要求解决的问题是什么)2. 可行性研究:(决定该问题是否存在一个可行的解决办法)3. 需求分析:(深入具体的了解用户需求)进入开发时期:对软件设计概要设计详细设计编写程序(全部工作量10%—20%)测试交付使用7.软件产品的配置:包括:程序、文档、数据8.软件危机的一些典型表现:1.对软件开发成本和进度的估计常常不准确2.用户对“已完成的”软件系统不满意的现象经常发生3.软件产品的质量往往靠不住4.软件常常是不可维护的5.软件通常没有适当的文档资料。
6.软件成本在计算机系统总成本中所占的比例逐年上升。
7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
第二节软件工程1.软件工程定义软件工程是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;2. 软件工程方法学包含3个要素:方法、工具和过程。
3. 软件工程方法学: 1. 传统方法学2. 面向对象方法学4. 面向对象方法学的4个特点:(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
(2)把所有的对象都划分成类(class)。
(3)按照父类(基类)与子类(派生类)的关系,把若干个相关类组成一个层次结构的系统(也成为类的等级)。
(完整word版)软件工程导论(第6版)
第一章、软件工程学概述软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含下述两个方面的问题:1.如何开发软件,以满足对软件日益增长的需求。
2.如何维护数量不断膨胀的已有软件。
具体的说,软件危机主要有以下一些典型表现:1.对软件开发成本的进度的估计常常很不准确。
2.用户对“已完成的”软件系统不满意的现象经常发生3.软件产品的质量往往靠不住。
4.软件常常是不可维护的。
5.软件通常没有适当的文档材料。
6.软件成本在计算机系统总成本中所占的比例逐年上升。
7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
软件生命周期:一个软件从定义、开发、使用和维护,知道最终被废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生命周期。
软件配置:程序、文档和数据。
软件工程学的一个重要的目标:就是提高软件的可维护性,减少软件维护的代价。
软件:是程序、数据及相关文档的集合。
程序:是能够完成预定功能和性能的可执行的指令序列。
数据:是使程序能够适当地处理信息的数据结构。
文档:是开发、使用和维护程序所需要的图文资料。
软件工程:指导计算机软件开发和维护的一门工程学科。
软件工程具有下属的本质特性:1.软件工程关注于大型程序的构造。
2.软件工程的中心课题是控制复杂性。
3.软件经常变化。
4.开发软件的效率非常重要。
5.和谐地合作是开发软件的关键。
6.软件必须有效地支持它的用户。
7.在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。
软件工程的7条基本原理:1.用分阶段的生命周期计划严格管理。
2.坚持进行阶段评审。
3.实行严格的产品控制4.采用现代程序设计技术。
5.结构应能清楚的审查。
6.开发小组的人员应该少而精。
7.承认不断改进软件工程实践的必要性。
软件工程:包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。
第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章 软件工程学概述
Robert Martin Arie van Bennekun Alistair Cockburn Ward Cunningham Martin Fowler
31
软件过程:敏捷开发
开发原则
尽早地、持续地交付有价值的软件来使客户满意。
即使到了开发后期,也欢迎改变需求。敏捷过程利用变化来为客户创造 竞争优势。 经常交付可工作的软件,其时间间隔可以是几周到几个月。 开发期间,业务人员和开发人员必须天天在一起工作。 最有效果的、最有效率的传递信息的方法,就是面对面的交谈。 首要的进度度量标准是工作的软件。 简单是根本的 ……
2013-7-16
重构:建造产品的过程中不断地调整设计 上海大学计算机学院
33
各种生命周期模型的比较
第1章 软件工程学概述
软件危机
软件工程
软件生命周期
软件过程
2013-7-16
上海大学计算机学院
1
软件危机
软件发展的四个阶段
1. 1950’s~1960’s中
规模较小,个体开发
2. 1960’s中~1970’中
软件作坊,产品软件 “软件危机” 出现,“软件工程” 学科诞生(1968年)
3. 1970’中 ~1980’s
方法
2013-7-16
上海大学计算机学院
10
软件工程
传统方法学
也称为生命周期方法学或结构化范型
采用结构化技术(结构化分析、设计和实现) 结构化范型要么面向行为,要么面向数据
面向对象方法学
把数据和行为看成同等重要,以数据为主线, 把数据和对数据的操作紧密地结合
4个要点
面向对象方法=对象+类+继承+用消息通信
Swe1
第一章软件工程学概述电子计算机发展史第一代:电子管计算机,开始于1946年,结构上以CPU为中心,使用机器语言,速度慢、存储量小,主要用于数值计算。
第二代:晶体管计算机,开始于1958年,结构上以存储器为中心,使用高级语言应用范围扩大到数据处理和工业控制。
第三代:中小规模集成电路计算机,开始于1964年,结构上仍以存储器为中心,增加了多种外部设备,软件得到一定发展,计算机处理图像、文字和资料功能加强。
第四代:大、超大规模集成电路计算机,开始于1971年,应用更加广泛,出现了微型计算机。
世界上第一台现代电子计算机ENIAC ENIAC:长30.48米,宽1米,占地面积170平方米,30个操作台,约相当于10件普通房间的大小,重达30吨,耗电量150千瓦,造价48万美元。
它使用18000个电子管,70000个电阻,10000个电容,1500个继电器,6000多个开关,每秒执行5000次加法或400次乘法,是继电器计算机的1000倍、手工计算的20万倍。
我国早期研制的计算机亿次计算机——银河计算机系列计算机软件发展史1.1 软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。
概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
软件危机的典型表现(1)对软件开发成本和进度的估计很不准确。
(2)需求不明确,导致用户对“已完成的”软件系统不满意。
(3)软件产品质量不可靠。
(4)软件常常不可维护。
(5)软件没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占比例逐年上升。
(7)软件开发产率提高的速度远远跟不上计算机应用普及深入的趋势。
软件技术面临的问题规模复杂性生产率例:•Windows 95有1000万行代码•Windows 2000有5000万行代码,3000多个工程师,几百个小团队。
第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、产品软件:提供给市场的商品。
张海藩《软件工程导论》(第6版)配套题库【章节题库(1-13章)】【圣才出品】
第三部分章节题库第1章软件工程学概述一、选择题1.与计算机科学的理论研究不同,软件工程是一门()学科。
A.理论性B.工程性C.原理性D.心理性【答案】B【解析】软件工程要用工程科学中的观点来进行费用估算、制定进度、制定计划和方案。
2.软件危机的主要原因有()。
①软件本身的特点②用户使用不当③硬件可靠性差④对软件的错误认识⑤缺乏好的开发方法和手段A.③④B.①②④C.①⑤D.①③【答案】C【解析】软件危机的主要原因是软件本身的特点和缺乏好的开发方法和手段。
用户使用不当,硬件可靠性差,对软件的错误认识属于软件危机的表现。
3.软件工程与计算机科学性质不同,软件工程着重于()。
A.原理探讨B.理论研究C.建造软件系统D.原理的理论【答案】C【解析】计算机科学中的研究成果均可用于软件工程,但计算机科学着重于原理和理论,而软件工程着重于如何建造一个软件系统。
4.软件工程方法学的研究内容包含软件开发技术和软件工程管理两个方面,其期望达到的最终目标是()。
A.软件开发工程化B.消除软件危机C.实现软件可重用D.程序设计自动化【答案】A【解析】软件工程方法学是根据不同的软件类型,按不同的观点和原则,对软件开发中应遵循的策略、原则、步骤和必须产生的文档资料都做出规定,从而使软件的开发能够进入规范化和工程化的阶段,以克服早期的手工方式生产中的随意性和非规范性做法。
5.软件生存周期模型有多种,下列选项中,()不是软件生存周期模型。
A.螺旋模型B.增量模型C.功能模型D.瀑布模型【答案】C【解析】主要的软件生存周期模型有瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。
6.软件生存周期包括可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、()、维护等活动。
A.应用B.测试C.检测D.以上答案都不正确【答案】B【解析】软件生存周期是指一个软件从提出开发要求开始直到该软件报废为止的整个时期。
通常,软件生存周期包括可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等活动,可以将这些活动以适当的方式分配到不同阶段去完成。
软件工程知识点归纳
软件工程知识点归纳第1章软件工程学概述 (3)1.1 软件危机 (3)1.2 软件工程 (3)1.3 软件生命周期 (3)1.4 软件过程 (3)第2章可行性研究 (4)2.1 可行性研究的任务 (4)2.2 可行性研究过程 (4)2.3 系统流程图 (4)2.4 数据流图 (4)2.5 数据字典 (5)2.6 成本/效益分析 (5)第3章需求分析 (5)3.1 需求分析的任务 (5)3.2 与用户沟通获取需求的方法 (5)3.3 分析建模与规格说明 (5)3.4 实体-联系图 (5)3.5 数据规范化 (5)3.6 状态转换图 (6)3.7 其他图形工具 (6)3.8 验证软件需求 (6)第4章形式化说明技术 (6)第5章总体设计 (6)5.1 设计过程 (6)5.2 设计原理 (7)5.3 启发规则 (7)5.4 描绘软件结构的图形工具 (7)5.5 面向数据流的设计方法 (8)第6章详细设计 (8)6.1 结构程序设计 (8)6.2 人机界面设计 (8)6.3 过程设计的工具 (8)6.4 面向数据结构的设计方法 (8)6.5 程序复杂程度的定量度量 (8)第7章实现 (9)7.1 编码 (9)7.2 软件测试基础 (9)7.3 单元测试(模块测试) (10)7.4 集成测试(子系统测试和系统测试) (10)7.5 确认测试(验收测试) (10)7.6 白盒测试技术 (10)7.7 黑盒测试技术 (11)7.8 调试(修改测试发现的错误) (11)7.9 软件可靠性 (11)第8章维护 (11)8.1 软件维护的定义 (11)8.2 软件维护的特点 (11)8.3 软件维护过程 (12)8.4 软件的可维护性 (12)8.5 预防性维护 (12)8.6 软件再工程过程 (12)参考书目 (12)第1章软件工程学概述1.1 软件危机1. 软件危机的定义、表现、产生原因2. 消除软件危机的途径3. 软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。
软件工程概述
第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)需求分析:弄清用户对软件系统的全部需求, 主要是确定目标系统必须具备哪些功能。
软件生命周期需求分析
第3章需求分析
主要内容
主要内容
8
3.1需求分析的任务 3.2与用户沟通获取需求的方法 3.3分析建模与规格说明 3.4实体联系图 3.5数据规范化 3.6状态转换图 3.7其他图形工具 3.8验证软件需求
第3章需求分析
3.1需求分析的任务
3.1 需求分析的任务
9
3.1.1 确定对系统的综合要求
虽然功能需求是对软件系统的一项基本需求,但却并不 是唯一的需求。通常对软件系统有下述几方面的综合要求。
第3章需求分析 3.1.1 确定对系统的综合要求
3.1 需求分析的任务
13
逆向需求 逆向需求说明软件系统不应该做什么。理论上有无限
多个逆向需求,人们应该仅选取能澄清真实需求且可消除 可能发生的误解的那些逆向需求。
将来可能提出的要求 应该明确地列出那些虽然不属于当前系统开发范畴,但
是据分析将来很可能会提出来的要求。这样做的目的是, 在设计过程中对系统将来可能的扩充和修改预做准备,以 便一旦确实需要时能比较容易地进行这种扩充和修改。
功能需求 性能需求 可靠性和可用性需求 出错处理需求
接口需求 约束 逆向需求 将来可能提出的要求
第3章需求分析 3.1.1 确定对系统的综合要求
3.1 需求分析的任务
10
功能需求
这方面的需求指定系统必须提供的服务。通过需求分 析应该划分出系统必须完成的所有功能
性能需求
性能需求指定系统必须满足的定时约束或容量约束, 通常包括速度(响应时间)、信息量速率、主存容量、磁盘 容量、安全性等方面的需求。
第3章需求分析 3.2.3 简易的应用规格说明技术
3.2 与用户沟通获取需求的方法 24
简易的应用规格说明技术分析需求的典型过程如下
张海藩《软件工程导论》(第6版)笔记和课后习题详解
第 3 章 需求分析 ......................................................................................................................................... 28 3.1 复习笔记 ........................................................................................................................................ 28 3.2 课后习题详解 ................................................................................................................................. 32
太原科技大学软件工程考试重点知识(一)
太原科技大学软件工程考试重点知识(一)第1章软件工程学概述1.1软件危机概念:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
实际上,几乎所有软件都不同程度地存在这些问题。
原因:1.与软件本身的特点有关。
1)软件不同于硬件,缺乏“可见性”,它是计算机系统的逻辑部件而不是物理部件。
2)软件不同于一般程序,规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。
2.与软件开发与维护的方法不正确有关。
1)忽视软件需求分析的重要性。
对用户要求没有完整准确的认识就匆忙着手编写程序。
2)认为软件开发就是写程序并设法使之运行。
3)在软件开发的不同阶段进行修改需要付出的代价是很不相同的。
4)轻视软件维护。
消除途径:1.对计算机软件有正确的认识:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
即Software=Program+Data+Document。
2.必须充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
3.推广使用在实践中总结出来的开发软件的成功技术和方法,并继续研究探索。
4.开发和使用更好的软件工具。
1.2软件工程软件工程:是指导计算机软件开发和维护的一门工程学科。
软件工程的本质特性:1.软件工程关注于大型程序的构造;2.软件工程的中心课题是控制复杂性;3.软件经常变化;4.开发软件的效率非常重要;5.和谐地合作是软件开发的关键;6.软件必须有效地支持它的用户;7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。
软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
软件工程方法学的3要素:方法、工具和过程。
目前使用最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。
1.传统方法学也称为生命周期方法学或结构化范型。
结构化方法(StructureMethod)有:1)结构化设计方法(SD);2)结构化分析方法(SA);3)结构化分析与设计技术(SADT);4)JACKSON方法;5)WARNIER方法。
软件工程参考资料【最新】
第一章、软件工程学概述软件是程序、数据及相关文档的完整集合。
软件危机是指在就是那几软件的开发和维护过程中所遇到的一系列严重问题。
其表现有:1.对软件开发成本和进度的估计常常很不准确。
2.用户为“已完成的”软件系统不满意的现象经常发生。
3.软件产品质量往往靠不住。
4.软件常常不可维护。
5.软件通常没有适当的文档资料。
6.软件成本在计算机系统总成本总所占的比例逐年上升。
7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
软件工程正式从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
软件工程的定义:概括地说,软件工程是指计算机软件卡发和维护的一门工程学科。
采用工程的概念、原理、技术方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件工程的7条基本原理及其关系:1.用分阶段的生命周期计划严格管理。
2.坚持进行阶段评审。
3.实行严格的产品控制。
4采用现代程序设计技术。
5.结果应能清楚地审查。
6.开发小组的人员应该少而精。
7.承认不断改进软件工程实践的重要性。
关系:这7条原理是互相独立的,其中任意6条原理的组合都不能代替另一条原理,因此,它们是缺一不可的最小集合,然而这7条原理又是相当完备的,人们虽然不能用数学方法严格证明它们是一个完备的集合,但是,可以证明在此之前已经提出的100多条软件工程原理都可以由这7条原理的任意组合蕴含或派生。
软件工程包括技术和管理两方面的内容,是技术于管理紧密结合所形成的工程学科。
所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,已达到既定目标的过程。
软件工程方法学包含3个要素:方法、工具和过程。
软件生命周期:概括地说,软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干阶段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1968年在第一届NATO会议上曾经给出 了软件工程的一个早期定义:“软件工程就 是为了经济地获得可靠的且能在实际机器上 有效地运行的软件,而建立和使用完善的工 程原理。” 1993年IEEE进一步给出了一个更全面更 具体的定义:“软件工程是: ①把系统的、 规范的、可度量的途径应用于软件开发、运 行和维护过程,也就是把工程应用于软件; ②研究①中提到的途径。”
6. 编码和单元测试 这个阶段的关键任务是写出正确的 容易理解、容易维护的程序模块。 7. 综合测试 这个阶段的关键任务是通过各种类 型的测试(及相应的调试)使软件达到预 定的要求。 最基本的测试是集成测试和验收测试。
8. 软件维护 维护阶段的关键任务是,通过各种必要的维护 活动使系统持久地满足用户的需要。 通常有4类维护活动: 改正性维护,也就是诊断和改正在使用过程中 发现的软件错误; 适应性维护,即修改软件以适应环境的变化; 完善性维护,即根据用户的要求改进或扩充软 件使它更完善; 预防性维护,即修改软件为将来的维护活动预 先做准备。
1.2 软件工程
1.2.1 软件工程的介绍
概括地说,软件工程是指导计算机软件开发和 维护的一门工程学科。采用工程的概念、原理、技 术和方法来开发与维护软件,把经过时间考验而证 明正确的管理技术和当前能够得到的最好的技术方 法结合起来,以经济地开发出高质量的软件并有效 地维护它,这就是软件工程。 人们曾经给软件工程下过许多定义,下面给出 两个典型的定义。
著名的软件工程专家B.W.Boehm综 合这些学者们的意见并总结了TRW公 司多年开发软件的经验,于1983年在一 篇论文中提出了软件工程的7条基本原 理。他认为这7条原理是确保软件产品 质量和开发效率的原理的最小集合。
下面简要介绍软件工程的7条基本原理: 1. 用分阶段的生命周期计划严格管理 2. 坚持进行阶段评审 3. 实行严格的产品控制 4. 采用现代程序设计技术 5. 结果应能清楚地审查 6. 开发小组的人员应该少而精 7. 承认不断改进软件工程实践的必要性
1.4 软件过程
软件过程是为了获得高质量软件所 需要完成的一系列任务的框架,它规定 了完成各项任务的工作步骤。 通常使用生命周期模型简洁地描述 软件过程。生命周期模型规定了把生命 周期划分成哪些阶段及各个阶段的执行 顺序,因此,也称为过程模型。
1.4.1 瀑布模型
在20世纪80年代之前,瀑布模型一 直是惟一被广泛采用的生命周期模型, 现在它仍然是软件工程中应用得最广泛 的过程模型。传统软件工程方法学的软 件过程,基本上可以用瀑布模型来描述。 图1.2所示为传统的瀑布模型。按照 传统的瀑布模型开发软件,有下述的几 个特点。
1.1 软件危机
1.1.1 软件危机的介绍
软件危机包含下述两方面的问题: 如何开发软件,以满足对软件日益增长 的需求;如何维护数量不断膨胀的已有 软件。 具体地说,软件危机主要有以下一 些典型表现。
(1) 对软件开发成本和进度的估计常常很不 准确。 (2) 用户对“已完成的”软件系统不满意的 现象经常发生。 (3) 软件产品的质量往往靠不住。 (4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。 (6) 软件成本在计算机系统总成本中所占的 比例逐年上升。 (7) 软件开发生产率提高的速度,远远跟不 上计算机应用迅速普及深入的趋势。
在不同时期引入一个变动需要付出的代价的变化趋势。
图1.1 引入同一变动付出的代价随时间变化的趋势
1.1.3 消除软件危机的途径
软件是程序、数据及相关文档的完整集合。其 中,程序是能够完成预定功能和性能的可执行的指 令序列;数据是使程序能够适当地处理信息的数据 结构;文档是开发、使用和维护程序所需要的图文 资料。 1983年IEEE为软件下的定义是:计算机程序、 方法、规则、相关的文档资料以及在计算机上运行 程序时所必需的数据。 为了解决软件危机,既要有技术措施(方法和 工具),又要有必要的组织管理措施。软件工程正 是从管理和技术两方面研究如何更好地开发和维护 计算机软件的一门新兴学科。
普通高校本科计算机专业特色教材精选
软件工程导论
总 目 录
第1章 第2章 第3章 第4章 第5章 第6章 软件工程学概述 可行性研究 需求分析 总体设计 详细设计 实现
总 目 录
第7章 维护 第8章 面向对象方法学引论 第9章 统一建模语言UML简介 第10章 面向对象分析 第11章 面向对象设计 第12章 面向对象实现 第13章 软件项目管理
1.3 软件生命周期
概括地说,软件生命周期由软件定义、软件开 发和运行维护(也称为软件维护)3个时期组成,每 个时期又进一步划分成若干个阶段。 软件定义时期的任务是: 确定软件开发工程 必须完成的总目标;确定工程的可行性;导出实现 工程目标应该采用的策略及系统必须完成的功能; 估计完成该项工程需要的资源和成本,并且制定工 程进度表。这个时期的工作通常又称为系统分析, 由系统分析员负责完成。软件定义时期通常进一步 划分成3个阶段,即问题定义、可行性研究和需求 分析。
图1.4 快速原型模型
快速原型模型是不带反馈环的,这正是这种过程模 型的主要优点: 软件产品的开发基本上是线性顺 序进行的。 能做到基本上线性顺序开发的主要原因如下: (1) 原型系统已经通过与用户交互而得到验证, 据此产生的规格说明文档正确地描述了用户需求, 因此,在开发过程的后续阶段不会因为发现了规格 说明文档的错误而进行较大的返工。 (2) 开发人员通过建立原型系统已经学到了许多 东西(至少知道了“系统不应该做什么,以及怎样 不去做不该做的事情”),因此,在设计和编码阶 段发生错误的可能性也比较小,这自然减少了在后 续阶段需要改正前面阶段所犯错误的可能性。 快速原型的本质是“快速”。
1.4.3 增量模型
增量模型也称为渐增模型,如图1.5所示。 使用增量模型开发软件时,把软件产品作为 一系列的增量构件来设计、编码、集成和测 试。每个构件由多个相互作用的模块构成, 并且能够完成特定的功能。使用增量模型时, 第一个增量构件往往实现软件的基本需求, 提供最核心的功能。第二个增量构件提供更 完善的编辑和文档生成功能;第三个增量构 件实现拼写和语法检查功能;第四个增量构 件完成高级的页面排版功能。
软件工程方法学包含3个要素:方法、 工具和过程。其中,方法是完成软件开 发的各项任务的技术方法,回答“怎样 做”的问题;工具是为运用方法而提供 的自动的或半自动的软件工程支撑环境; 过程是为了获得高质量的软件所需要完 成的一系列任务的框架,它规定了完成 各项任务的工作步骤。 目前使用得最广泛的软件工程方法 学,分别是传统方法学和面向对象方法 学。
1.2.3 软件工程方法学
软件工程包括技术和管理两方面的内容, 是技术与管理紧密结合所形成的工程学科。 所谓管理就是通过计划、组织和控制等 一系列活动,合理地配置和使用各种资源, 以达到既定目标的过程。 通常把在软件生命周期全过程中使用的 一整套技术方法的集合称为方法学 (methodology),也称为范型(paradigm)。在 软件工程领域中,这两个术语的含义基本相 同。
4. 总体设计 这个阶段必须回答的关键问题是:“概括地说, 应该怎样实现目标系统?”总体设计又称为概要设计。 5. 详细设计 总体设计阶段以比较抽象概括的方式提出了解 决问题的办法。详细设计阶段的任务就是把解法具 体化,也就是回答下面这个关键问题:“应该怎样 具体地实现这个系统呢?” 详细设计也称为模块设计,在这个阶段将详细 地设计每个模块,确定实现模块功能所需要的算法 和数据结构。
1. 传统方法学 传统方法学也称为生命周期方法学或结构化范 型。它采用结构化技术(结构化分析、结构化设计 和结构化实现)来完成软件开发的各项任务,并使 用适当的软件工具或软件工程环境来支持结构化技 术的运用。 2. 面向对象方法学 当软件规模庞大,或者对软件的需求是模糊的 或会随时间而变化的时候,使用传统方法学开发软 件往往不成功,此外,使用传统方法学开发出的软 件,维护起来仍然很困难。
概括地说,面向对象方法学具有下述4个要点。 (1) 把对象(object)作为融合了数据及在数据上的操 作行为的统一的软件构件。 (2) 把所有对象都划分成类(class)。 (3) 按照父类(或称为基类)与子类(或称为派生类)的 关系,把若干个相关类组成一个层次结构的系 统(也称为类等级)。在类等级中,下层派生类自 动拥有上层基类中定义的数据和操作,这种现 象称为继承。 (4) 对象彼此间仅能通过发送消息互相联系。
1.1.2 产生软件危机的原因
在软件开发和维护的过程中存在这么多 严重问题,一方面与软件本身的特点有关, 另一方面也和软件开发与维护的方法不正确 有关。 一个软件从定义、开发、使用和维护, 直到最终被废弃,要经历一个漫长的时期, 这就如同一个人要经过胎儿、儿童、青年、 中年和老年,直到最终死亡的漫长时期一样。 通常把软件经历的这个漫长的时期称为生命 周期。
软件工程具有下述的本质特性: 1. 软件工程关注于大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐地合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化 背景的人替具有另一种文化背景的人
1.2.2 软件工程的基本原理
下面扼要介绍软件生命周期每个阶段的基本任务。 1. 问题定义 问题定义阶段必须回答的关键问题是:“要解 决的问题是什么?” 2. 可行性研究 这个阶段要回答的关键问题是:“对于上一个 阶段所确定的问题有行得通的解决办法吗?” 3. 需求分析 这个阶段的任务仍然不是具体地解决问题,而 是准确地确定“为了解决这个问题,目标系统必须 做什么”,主要是确定目标系统必须具备哪些功能。
ቤተ መጻሕፍቲ ባይዱ
第1章 软件工程学概述
1.1 软件危机 1.2 软件工程 1.3 软件生命周期 1.4 软件过程 1.5 小结 习题
迄今为止,计算机系统已经经历了4 个不同的发展阶段,但是,我们仍然没 有彻底摆脱“软件危机”的困扰,软件 已经成为限制计算机系统发展的瓶颈。 为了更有效地开发与维护软件,软 件工作者在20世纪60年代后期开始认真 研究消除软件危机的途径,从而逐渐形 成了一门新兴的工程学科——计算机软 件工程学(通常简称为软件工程)。