第一章 软件导论
最新软件工程导论(第1章)概要教学讲义ppt课件
2)程序设计方法学:主要应用数学的方法研 究程序的性质以及程序设计的理论和方法的学 科。
1.2 软件工程
1.2.1 软件工程的介绍 1968年NATO会议:软件工程就是为了经济地获 得可靠的且能在实际机器上有效地运行的软件, 而建立和使用完善的工程原理。
③ 需求分析
这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了 解决这个问题,目标系统必须做什么”,主要是确定目标系统必 须具备哪些功能。用户了解他们所面对的问题,知道必须做什么, 但是通常不能完整准确地表达出他们的要求,更不知道怎样利用 计算机解决他们的问题;软件开发人员知道怎样用软件实现人们 的要求,但是对特定用户的具体要求并不完全清楚。因此,系统 分析员在需求分析阶段必须和用户密切配合,充分交流信息,以 得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典 和简要的算法表示系统的逻辑模型。
3. 工具:应该开发和使用更好的软件工具。在软件开
发的每个阶段都有许多繁琐重复的工作需要做,在 适当的软件工具辅助下,开发人员可以把这类工作 做得既快又好。
如果把各个阶段使用的软件工具有机地集 合成一个整体,支持软件开发的全过程, 则称为软件工程支撑环境。
为了解决软件危机产生的问题,软件工程与 方法学逐渐形成,然后出现了两个相互相承又 各有侧重的学科:
② 把所有对象划分为类(Class):每个类定义了一组数据和一组操 作。
③ 按照父类(基类)和子类(派生类)的关系,把若干个相关类 组成一个层次结构的系统。子类能够继承。
④ 对象彼此间仅能通过发送消息互相联系。对象是数据处理的主 体,具有封装性特点。
软件工程导论第一章PPT
2015年5月11日
第1章
概述
第15页
1.2.2 软件工程的研究内容和基本原理
软件工程的研究内容 软件工程的主要研究内容是指软件开发技术和软件开发过程 管理两个方面。
– 在软件开发技术方面主要研究软件开发方法、软件开发过程、软 件开发工具和技术。 – 在软件开发过程管理方面主要研究软件工程经济学和软件管理学。
“软件工程”一词是由北大西洋公约组织(North Atlantic Treaty Organization,NATO)的计算机科学家 在联邦德国召开的国际会议上首次提出来的。产生软件工 程这门学科的时代背景是“软件危机”。软件工程的发展 和应用不仅缓和了软件危机,而且促使一门新兴的工程学 科诞生了。 本章将讲述软件、软件危机及软件工程的相关概念、历史 发展和开发模型。
2015年5月11日
第1章
概述
第10页
1.1.3 软件危机的产生原因及解决途径
产生原因
(1) 软件是计算机系统中的逻辑部件,软件产品往往规模 庞大,结构复杂。 (2) 软件开发的管理困难。 (3) 软件开发费用不断增加,维护费用急剧上升,直接威 胁计算机应用的扩大。 (4) 软件开发技术落后。 (5) 生产方式落后。 (6) 开发工具落后,生产效率提高缓慢。
2015年5月11日 第1章 概述 第6页
1.1.1 软件的定义、特点及分类
二、软件的特点 软件是一种特殊的产品,与传统的工业产品相比,它具有以下 一些独特的特点。 (1)软件是一种逻辑产品,而不是具体的物理实体,具有抽象 性。 (2)软件产品的生产主要是开发研制,没有明显的制造过程。 (3)软件产品在使用过程中,不存在磨损、消耗、老化等问题 (4)软件产品的开发主要是脑力劳动,还未完全摆脱手工开发 方式,大部分产品是“定做的”,生产效率低。
软件工程导论第一章
2013-7-4
liang@
6
软件的规模
类别 微型 小型 参加人员数 1 1 研制期限 1~4周 1~6月 产品规模(源程序行数) 0.5k 1k~2k
中型
大型 甚大型 极大型
2~5
5~20 100~1000 2000~5000
1~2年
2~3年 4~5年 5~10年
5k~50k
2013-7-4 liang@ 4
软件的特点
软件是一种逻辑实体,而非有形的系统元件
因而它具有抽象性,其开发成本和进度难以估算
软件的生产与硬件不同,在它的开发过程中没有 明显的制造过程
一旦开发成功只需复制即可使用,但维护工作量大
在软件的运行和使用期间,没有硬件那样的机械 磨损,老化问题
liang@ 10
Cutter Consortium在2002年的报告
2013-7-4
软件危机的典型表现
对软件开发成本和进度的估计常常很不准确
时常发生用户对“已完成的”软件系统不满意的现象
软件产品的质量不可靠 软件常常是不可维护的 软件通常没有适当的文档资料 软件开发生产率提高的速度,既跟不上硬件的发展速度,也
典型开发:编码:10%-20%;测试:40%-50% 软件产品的完整配置——程序、文档、数据
轻视软件维护
事实上,用于软件维护的费用占总费用的55-70% 开发每一行源代码耗资25美元,维护每一行源代码需要耗资1000美元
提高软件的可维护性,减少软件维护的代价
2013-7-4 liang@ 14
在类等级中,下层派生类自动拥有上层基类中定义的数据和操作——继承 (Inheritance)
软件工程导论(ppt 42页)
1.1 软件产品的概念与特征 1.2 软件危机 1.3 软件工程的产生及其发展
1.1 软件产品的概念与特征
1.1.1 软件产品的概念与分类
就本质而言,软件就是一个信息转换器,它的功能不外是 产生、管理、获取、修改、显示或转换信息。它担任着双重角 色,首先,它是一种产品,表达了由计算机硬件体现的计算潜 能;其次,它又是开发和运行产品的载体,是计算机控制(操作 系统)、信息通信(网络)的基础,也是创建和控制其他软件(软 件工具和开发环境)的基础。
(3) 软件产品不会“磨损”。和硬件产品类似,软件产品 也会出现故障。所不同的是,硬件产品的故障多来自外在条件 导致的“磨损”或“老化”,而软件产品如果发生故障,无一 例外的是在设计开发过程中留有隐患。因此,硬件的故障可以 通过简单的更换部件解决,而软件的故障必须通过全面的软件 维护活动才有望克服。同时,不完善的维护活动又可能在软件 中注入新的故障,导致软件质量的“退化”。也就是说,软件 故障的修复要比硬件故障的修复复杂得多。因此,衡量软件产 品质量的一个重要指标就是它的“可维护性”。图1.1是软、硬 件产品的失效率曲线。
(2) 软件的生产与硬件不同。软件是由开发或工程化而形成 的,不是由传统意义上的制造过程生产的。虽然软件开发和硬件 制造之间有一些相似之处,可是两者在本质上是不同的。这两者 都能够通过良好的设计获得高质量的产品,但即使有了良好的设 计和优秀的样品,硬件在批量制造过程中仍然可能引入质量问题, 这种情况对于软件而言几乎不存在。
1 M 1~10 M
1.1.2 软件产品的特征
在制造硬件时,人的创造性的劳动过程(分析、设计、建 造、测试)能够完全转换成物理的形式,但软件是逻辑的而不 是物理的产品,因此软件具有和硬件完全不同的特征:
软件工程导论_第1章
软件工程
7
王素红
中北大学电子与计算机科学技术学院
3. 软件经常变化 绝大多数软件都模拟了现实世界的某一部
分。现实世界在不断变化,软件为了不被很快 淘汰,必须随着所模拟的现实世界一起变化。 因此,在软件系统交付使用后仍然需要耗费成 本,而且在开发过程中必须考虑软件将来可能 的变化。
软件工程
8
王素红
中北大学电子与计算机科学技术学院
软件工程
6
王素红
中北大学电子与计算机科学技术学院
2. 软件工程的中心课题是控制复杂性 通常,软件所解决的问题十分复杂,以致
不能把问题作为一个整体通盘考虑。人们不得 不把问题分解,使得分解出的每个部分是可理 解的,而且各部分之间保持简单的通信关系。 用这种方法并不能降低问题的整体复杂性,但 是却可使它变成可以管理的。注意,许多软件 的复杂性主要不是由问题的内在复杂性造成 的,而是由必须处理的大量细节造成的。
中北大学电子与计算机科学技术学院
第1章 软件工程学概述
1.1 软件工程
一、为什么要学习软件工程? 软件开发技术限制 开发方法不规范 软件人员本身素质 在软件开发过程中存在着难以解决的
问题,因此研究出的软件产品不能够满足 要求,由此产生了软件危机。
软件工程
1
王素红
中北大学电子与计算机科学技术学院
为解决软件危机,解决开发过程中的高成 本、低质量,提出了“软件工程”。 软件工程的主要思想:
王素红
中北大学电子与计算机科学技术学院
5. 结果应能清楚地审查 软件产品不同于一般的物理产品,它是
看不见摸不着的逻辑产品。 软件开发人员(或开发小组)的工作进展情
况可见性差,难以准确度量,从而使得软件产 品的开发过程比一般产品的开发过程更难于评 价和管理。
(完整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.承认不断改进软件工程实践的必要性。
软件工程:包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。
软件工程导论第一章.ppt
- 软件工程导论(第5版)张海藩 清华大学出版社 - 软件工程(第二版)齐治昌、谭庆平、宁洪 编著,高等教育出版社 - Shari Lawrence P fleeger 软件工程——理论与实践(第2版)(高教出版社 影印版),2003
考核方式:闭卷考试 70% 平时成绩(考勤+作业) 30%
(2) 需求分析
本阶段要回答的关键问题是“目标系统应当做什么?”
(3) 软件设计
设计是软件工程的技术核心。本阶段要回答的关键问题是“如何实现目 标系统?”
1.3 软件生命周期(6)
各个阶段所要完成的基本任务 (4) 程序编码和单元测试
1963年美国飞往火星的火箭爆炸,造成1000万美元的损失 。原因是FORTRAN程序:
DO 5 I=1,3 误写为:DO 5 I=1.3
1967年苏联“联盟一号”载人宇宙飞船在返航时, 由于软件忽略一个小数点,在进入大气层时因打不开降 落伞而烧毁。
1.1 软件与软件危机(5)
产生软件危机的原因
- 在软件开发和维护的过程中存在这么多严重问题,一方面与 软件本身的特点有关,另一方面也和软件开发与维护的方法 不正确有关。 ➢客观:软件本身特点 - 逻辑部件 - 规模庞大 ➢主观:不正确的开发方法 - 忽视需求分析 - 错误认为:软件开发=程序编写 - 轻视软件维护 - …….
1.2 软件工程及其基本原理(2)
软件工程的目标
- 软件工程的目标是运用先进的软件开发的周期、较低的成本
生产出高质量 的软件产品,并最终实现软件的工业化生产。
- 软件的质量特性:功能性、可靠性、可使用性、效率、可维 护性和可移植性。
1.2 软件工程及其基本原理(3)
软件开发时期
《软件工程》第一章导论
《软件工程》软件工程导论软件工程产生的历史背景:时间:1968年原因:当时无法在预算内开发出高质量软件;软件开发者无法制定具体目标,无法实现预测所需的资源,无法实现客户的期望。
软件工程的重点既在软件,也在工程。
软件开发具有复杂性和多变性的特征。
软件产品必须随着终端用户需求和目标环境的变化而变化。
1.1 软件工程的失误软件工程失误主要包括:时间,接口,安全问题,拖延和超支,系统无法正常使用等。
产生失误的原因:软件系统本身的复杂性,功能复杂,涉及各个领域的人,开发周期长;软件项目的不断变化;开发者没有考虑偶发事件;开发者没有考虑用户主动误操作;管理失误。
1.2 什么是软件工程一、软件工程是一种建模活动。
建模即构建系统模型及应用域模型。
一个系统模型是对一个系统的抽象表示。
应用域模型是对现实世界系统中那些与在研问题相关的方面进行的描述,应用域模型可表达为一组相互依存的概念。
建模的前提是理解一个系统的运行环境;其次是理解所能构建的系统,并能评估不同的解决方案。
面向对象建模方法将应用域与解决方案域建模活动合二为一。
解决方案域就是应用域模型的一种转化。
开发软件就转化为找出一个解决最终用户问题的系统并将之描述为模型集合。
具体做法是首先将应用域建模为一组对象和关系,接着这一模型被系统用来表示它所处理的现实世界中的概念;其次解决方案域的概念也被建模为对象。
二、软件工程是一种解决问题的活动。
模型用于寻找一种可接受的解决问题的方法。
这种寻找方法受实验的驱动,并且通常依靠实验方法来评价各种可选方案的有点。
工程是一种解决问题活动。
包括一下5步:1.明确问题;2.分析问题;3.寻找解决方案;4.选定合适的解决方案;5.详细说明解决反案。
软件工程是一种工程活动。
面向对象的软件开发通常包括5种开发活动:需求获取、分析、系统设计、对象设计和实现。
在需求获取和分析阶段,软件工程师与客户把问题明确化并构建问题域模型。
在系统设计过程中,软件工程师分析问题,把它分成小块,并选择一些总体策略来设计系统。
第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章 软件建模导论
第22页
2015年5月14日星期四 11时6分35秒
1.1 UML简介
讨论:
在开发一个大型的复杂的软件系统之前,如果不对 系统建模就着手开发,将会是一个什么情形?
第23页
2015年5月14日星期四 11时6分35秒
1.1 UML简介
讨论:
在开发一个大型的复杂的软件系统之前,如果不对 系统建模就着手开发,将会是一个什么情形?
1.3 面向对象的概念
继承
继承使一个类能够从另一个类那里获得 生物 一些特性。在这个过程中,超类把它的 特性赋给了子类。如: 动物 植物 继承是从老对象生成新对象的一种代码 重用机制。 脊椎动物 无脊椎动物 继承的两个附加作用:
允许扩展一个类,把新的应用程序建立在 已有的功能之上。 允许类似的类共享它们共同的属性和行为。
第7页
1.1 Modeling Notations
Through modeling achieve four aims:
Models help us to visualize a system as it is or as we want it to be. Models permit us to specify the structure or behavior of a system. Models help us to communicate the desired structure and behavior of our system. Models help us to document the decisions we have made. Models help us to manage risk.
第6页
2015年5月14日星期四 11时6分35秒
软件工程导论第一章
软件工程的发展经历了多个阶段,从早期的手工作坊式开发到结构化方法、面 向对象方法,再到现在的敏捷开发方法和DevOps等,不断推动着软件产业的快 速发展。
软件工程的研究对象与范围
研究对象
软件工程的研究对象包括软件开发过程中的各种技术、方法、工具和管理等方面 ,旨在提高软件开发的效率和质量,降低开发成本。
研究范围
软件工程的研究范围涵盖了软件开发的各个阶段,包括需求分析、设计、编码、 测试和维护等,同时也涉及到软件项目管理、软件质量保证和软件测试等方面。
软件工程的重要性
提高软件质量
通过采用先进的软件工程方法和工具,可以显著提高软件的质量,减 少软件中的缺陷和错误,提高软件的稳定性和可靠性。
降低开发成本
针对软件的最小可测试单元进行测试,确保每个单元的功能正 确无误。
将多个单元组合在一起进行测试,验证它们之间的接口和功能 是否正常。
对整个软件系统进行全面的测试,包括功能测试、性能测试、 安全测试等,确保软件满足需求和设计要求。
记录和管理测试过程中发现的缺陷,跟踪缺陷的修复进度和结 果,确保软件质量得到持续改进。
软件开发模型介绍
瀑布模型
瀑布模型是一种线性的软件开发模型,按照固定的顺序进行开发,每个阶段都有明确的输入和输出。它的优点是易于 理解和管理,但缺点是缺乏灵活性,难以应对需求变更。
螺旋模型
螺旋模型是一种迭代式的软件开发模型,强调风险分析和控制。它在每个迭代周期中都包括需求定义、风险分析、工 程实现和评审等步骤,适用于大型、复杂的软件项目。
将软件划分为独立的模块,降低 模块间的耦合度,提高代码的可 重用性和可维护性。
02
版本控制工具
使用版本控制工具(如Git)管理 代码,记录代码的变更历史,方 便团队协作和代码回溯。
软件工程导论_第一章
2.
•
二、软件工程的特性
1. 软件工程关注于大型程序的构造
2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐地合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化背景 的人替具有另一种文化背景的人创造产品
• 1.2.2 软件工程的基本原理
• 软件的特点
– 脑力劳动、逻辑(不会时好时坏)、无损耗、研制成 本大,复制成本低
• 软件的分类
– 基于软件功能的划分
• 系统软件(操作系统、网络软件、编译程序、数据库管理系统、 编辑软件、系统检查与诊断软件等) • 应用软件 • 支撑软件
– 基于软件工作方式的划分
• • • • 实时处理软件 分时软件 交互式软件 批处理软件
• 软件的另一个定义: • 软件是计算机系统中与硬件相互依存的另 一部分,它是包括程序、数据及其相关文 档的完整集合。
– 程序是按事先设计的功能和性能要求编写的指 令序列(源程序,目标程序,脚本程序script) – 数据是使程序能正常操纵信息的数据结构; – 文档是与程序开发、维护和使用有关的图文材 料。
• 这个项目的负责人F. D. Brooks事后总结了他在组织开发过程中的沉 痛教训时说:“......正像一只逃亡的野兽落到泥潭中做垂死的挣扎, 越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。......程序设计工 作正像这样一个泥潭,......一批批程序员被迫在泥潭中拼命挣 扎,......谁也没有料到问题竟会陷入这样的困境......”。IBM360 操作系统的历史教训成为软件开发项目的典型事例为人们所记取。
1.3 软件生命周期
• 软件产品或系统一系列相关活动的全周期
软件工程导论第1章(第4版)
软件工程导论 (第4版)
张海藩 编著
总目录
第1章 软件工程学概述 第8章 维护
第2章 可行性研究
第9章 面向对象方法学引论
第3章 需求分析
第10章 面向对象分析
第4章 形式化说明技术 第11章 面向对象设计
第5章 总体设计
第12章 面向对象实现
第6章 详细设计
第13章 软件项目管理
测试、综合测试又称为系统实现。 设计出实现目标系统的方案,设计程序的体系结构。 确定实现模块功能所需要的算法和数据结构; 设计出程序的详细规格说明; 用适当的程序设计语言写出正确的容易理解、容易维护的
程序模块并进行单元测试; 根据设计的软件结构,把各模块装配起来并进行测试; 通过对软件测试结果的分析预测软件的可靠性; 写出测试计划和详细测试方案并记录实际测试结果; 按照规格说明书的规定,由用户对目标系统进行验收。
第7章 实现
第1章 软件工程学概述
软件成为独立的商品 计算机应用的普及,促使人们对软件的品种、
数量、功能、质量等提出了越来越高的要求 在1970前,计算机硬件工程技术由于电子技术
的发展而建立 重视软件开发过程、方法、工具和环境的研
究—软件工程
1.1 软件危机 一.软件
1.软件的定义 软件是能够完成预定功能和性能的可执行的计算
2. 产生软件危机的原因
(1)软件开发个体化,采用了错误的方法和技术,无设计资 料留存; (2)软件规模的增长,使得软件的复杂度增加,软件的可靠 性随软件规模的增长而下降,质量保证越来越困难; (3)软件维护费用急剧上升。
据统计,软件维护费用大约占到软件总花费的2/3; (4)软件生产技术进步缓慢,是加剧软件危机的重要原因。
第一章 软件工程导论共30页PPT资料
5、可维护性(maintainability) 软件产品交付用户使用后能够对它进行修改,
以便改正潜伏的错误,改进性能和其他属性,使 软件产品适应环境变化。
6、可重用性(reusebility) 概念或功能相对独立的 一个或一组相关模块
计算机软件是与计算机系统操作有关的程序、规程、规则及任 何与之有关的文档和数据。它有两部分组成:一是机器可执行的 程序及有关数据。二是机器不执行的,与软件开发、运行、维护、 使用和培训有关的文档。
软件=程序+文档+(数据)
程序(program)是用程序设计语言描述的,适合于计算机处 理的语句序列,是软件开发人员根据用户需求开发出来的。
1.2.2原因
1、用户对软件需求的描述不精确(遗漏、 二义性、修改)。
2、开发者对用户需求的理解有差异。 3、大型软件项目管理不善(开发者没有管
理经验;管理者,没有开发经验)。 4、开发人员难以独立自主地处理大型软件
的全部关系和各分支。 5、缺乏有力的方法学和工具方面的支持。 6、软件产品的特殊性和人类智力的局限性。
软件工程
软件工程的主要内容包括支持与软件 开发和维护有关的理论、方法、技术、 标准以及计算机辅助工具和环境管理。
软件工程的范围很广,可以覆盖软 件开发技术(形式化和非形式方法)、 软件工程环境、软件经济学、软件心理 学以及软件工程管理等内容。
第一章 软件、软件危机和软件工程
1.1软件
1.1.1软件的组成
优点:不会磨损和老化。 只要需要一个久
经考验的优秀软件可以长期使用下去,这一点 是硬件做不到。(如 Fortran,Basic语言存于第 一代计算机)
(完整word版)软件工程导论(第6版)(word文档良心出品)
第一章、软件工程学概述软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含下述两个方面的问题: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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)实行严格的产品控制:当改变需求时,为了保持软 件各个配臵成分的一致性,必须实行严格的产品控制, 其中主要是实行基准配臵管理。 (4)采用现代程序设计技术。 (5)软件工程结果应能清楚地审查。 (6)开发小组的人员应该少而精。 (7)承认不断改进软件工程实践的必要性。 B.Boehm指出,遵循前六条基本原理,能够实现软 件的工程化生产;按照第七条原理,不仅要积极主动 地采纳新的软件技术,而且要注意不断总结经验。
具体地说,软件危机主要有以下表现: (1)对软件开发成本和进度的估计常常不准确。开发 成本超出预算,实际进度比预定计划一再拖延的现象 并不罕见。 (2)用户对“已完成”系统不满意的现象经常发生。 软件开发人员和用户之间的信息交流往往很不充分,‖ 闭门造车”必然导致最终的产品不符合用户的实际需 要. (3)软件产品的质量往往靠不住。软件质量保证技术 (审查、复审、程序正确性证明和测试)还没有坚持不 懈的应用到软件开发的全过程中,这些都导致软件产 品发生质量问题。
1.1.2 软件危机产生的原因
②危机原因来自于软件开发人员的如下弱点: 其一,软件产品是人的思维结果,因此软件生产水平最 终在相当程度上取决于软件人员的教育、训练和经验的 积累; 其二,对于大型软件往往需要许多人合作开发,甚至要 求软件开发人员深入应用领域的问题研究,这样就需要 在用户与软件人员之间以及软件开发人员之间相互通 讯,在此过程中难免发生理解的差异,从而导致后续错 误的设计或实现,而要消除这些误解和错误往往需要付 出巨大的代价;
传统方法学把软件生命周期的全过程依次划分为若 干个阶段,然后顺序地完成每个阶段的任务. 基本要点:自顶向下、逐步求精、模块化设计。
面向对象方法学 当软件规模庞大,或者对软件的需求模糊、使用传 统方法学开发软件往往不成功. 面向对象建模方法 起源: 面向对象编程语言 OOP(面向对象编程)---〉OOD(面向对象设计)+OOA (面向对象分析)----〉OOM(面向对象的软件开发 方法) 面向对象方法的开发步骤: 1)从问题陈述入手,构造系统模型(对象模型 )。 2)逐层分解成各级子系统。
软件工程研究结果表明,软件危机的原因主要有两方面: ①与软件本身的特点有关。 软件不同于硬件,它是计算机系统中的逻辑部件而 不是物理部件;软件不会因使用时间过长而“老化”或 “用 坏”;运行中发现了错误,很可能是遇到了一个在开发 时 期引入的在测试阶段没能检测出来的错误.这样,软件维 护通常意味着改正或修改原来的设计,这就在客观上使 得软件较难维护.
爱达的手迹
爱达短暂的一生
出生五周,父母离异仅37岁,因多病而早逝。为 纪念她,1979年美国国防部的一种编程语言命名为Ada 语言。
爱达的主要贡献
1、指出分析机可以编程,发现编程的基本要素(如循环、 子程序),被誉为世界上第一位程序员。 2、建议分析机用二进制存储。 3、预言分析机能唱歌、绘画。
软件工程基本原理 著名软件工程专家B.Boehm综合有关专家和学者的 意见并总结了多年来开发软件的经验,于1983年在一 篇论文中提出了软件工程的七条基本原理。 (1)用分阶段的生命周期计划严格管理。 (2)坚持进行阶段评审:根据Boehm等人的统计,设计 错误占软件错误的63%,编码错误仅占37%,错误发现于 改正得越晚,所需付出得代价也越高,因此,在每个阶段 都进行严格得评审,以便尽早发现在软件开发过程中所 犯得错误.
(3)Fritz Bauer在NATO会议上给出的定义:建立并使 用完善的工程化原则,以较经济的手段获得能在实际 机器上有效运行的可靠软件的一系列方法。 (4)《计算机科学技术百科全书》中的定义:软件工程 是应用计算机科学、数学及管理科学等原理,开发软 件的工程。软件工程借鉴传统工程的原则、方法,以 提高质量、降低成本。其中,计算机科学、数学用于 构建模型与算法,工程科学用于制定规范、设计范型 (paradigm)、评估成本及确定权衡,管理科学用于计 划、资源、质量、成本等管理。 目前比较认可的一种定义认为:软件工程是指导 计算机软件开发和维护的一门工程学科.采用工程的概 念,原理,技术和方法来开发与维护软件,把经过时间考 验而证明正确的管理技术和当前能够得到的最好的技 术方法结合起来,以经济地开发出高质量地软件并有效 地维护它,这就是软件工程.
(3)按照父类(或称为基类)与子类(或称为派生类)的 关系,把若干个相关类组成一个层次结构的系统(也称 为类等级)。在类等级中,下层派生类自动拥有上层基 类中定义的数据和操作,这种现象称为继承。 (4)对象彼此间仅能通过发送消息互相联系
软件生命周期
一个软件产品或软件系统也要经历孕育、诞生、 成长、成熟、衰亡等阶段,一般称为软件生存周期 (软件生命周期)。把整个软件生存周期划分为若干 阶段,使得每个阶段有明确的任务,使规模大,结构 复杂和管理复杂的软件开发变的容易控制和管理。通 常,软件生存周期包括可行性分析与开发项计划、需 求分析、设计(概要设计和详细设计)、编码、测试、 维护等活动,可以将这些活动以适当的方式分配到不 同的阶段去完成。 软件生命周期各阶段的主要工作步骤,任务和阶段 性成果:
软件工程导论
李艳
第1章
软件工程 软件危机 软件生命周期 软件工程 小结
软件工程学概述
1.1软件、软件危机
软件 第一个写软件的人是Ada (Augusta Ada Lovelace),在1860 年代他尝试为Babbage(Charles Babbage)的机械式计算机写软件。 尽管他们的努力失败了,但他们的名 字永远载入了计算机发展的史册。 爱达· 奥古斯塔· 拉芙拉斯 1815-1852 伟大诗人拜伦的女儿
从60年代中期到70年代中期是计算机系统发展的 第二个时期,在这一时期软件开始作为一种产品被广 泛使用,出现了“软件作坊” ,应别人的需求写软件。 这一软件开发的方法基本上仍然沿用早期的个体化软 件开发方式,但软件的数量急剧膨胀,软件需求日趋 复杂,维护的难度越来越大,开发成本令人吃惊地高, 而失败的软件开发项目却屡见不鲜。“软件危机”就 这样开始了!
软件工程本质特性 1.软件工程关注于大型程序的构造;通常把一个人在 较短时间内写出的程序称为小型程序,而把多人合作用 时半年以上才写出的程序称为大型程序. 2.软件工程的中心课题是控制复杂性:——许多软件 的复杂性主要不是由问题的内在复杂性造成的,而是 由必须处理的大量细节造成的。人们不得不把问题分 解,使得分解出的每个部分是可理解的,而且各部分之 间保持简单的通信关系,这种方法并不能降低问题的整 体复杂性,但是却可使它变成可以管理的. 3.软件经常变化:现实世界在不断变化,软件为了不被 很快淘汰,必须随着所模拟的现实世界一起变化,因此, 在软件系统交付使用后仍然需要耗费成本,而且在开发 过程中必须考虑软件将来可能发生的变化.
1.2.3 软件工程方法学
软件工程方法学包括三个要素:方法、工具和过程。 方法是完法的运用提供自动 的或半自动的软件支撑环境;过程是为了获得高质量 的软件所需要完成的一系列任务的框架,它规定了完 成各项任务的工作步骤。 目前使用得最广泛的软件工程方法学,分别是传 统方法学和面向对象方法学。 传统方法学也称为生命周期方法学或结构化范型.
1.1.3 消除软件危机的途径
软件开发不是某种个体劳动,而应该是一种组织良 好,管理严密,各类人员协同配合,共同完成的工程项目. 软件工程诞生于60年代末期,它作为一个新兴的工程学 科,主要研究软件生产的客观规律性,建立与系统化软 件生产有关的概念、原则、方法、技术和工具,指导和 支持软件系统的生产活动,以期达到降低软件生产成 本 、改进软件产品质量、提高软件生产率水平的目标。 软件工程学从硬件工程和其他人类工程中吸收了许多 成功的经验,明确提出了软件生命周期的模型,发展了 许多软件开发与维护阶段适用的技术和方法,软件工程 正是从管理和技术两方面研究如何更好地开发和维护计 算机软件地一门新兴学科.
1.1.1 软件危机
在1950年,软件伴随着第一台电子计算机的问世 诞生了。以写软件为职业的人也开始出现,他们多是 经过训练的数学家和电子工程师。1960年代美国大学 里开始出现授予计算机专业的学位,教人们写软件。 本世纪中叶软件产业从零开始起步,在短短的50 年的时间里迅速发展成为推动人类社会发展的龙头产 业,并造就了一批百万、亿万富翁。随着信息产业的 发展,软件对人类社会性越来越重要。
(4)软件常常是不可维护的。很多程序中的错误是非常 难改正的,实际上不可能使这些程序适应新的硬件环境 ,也不能根据用户的需要在原有程序中增加一些新的功 能. ― 可重用的软件”还是一个没有完全做到的、正 在努力追求的目标,人们仍然在重复开发类似的或基 本类似的软件。 (5)软件通常没有适当的文档资料。文档资料应该是在 软件开发过程中产生出来的,而且应该是“最新式 的”。软件开发组织的管理人员可以使用这些文档资 料来管理和评价软件开发工程的进展状况。 (6)软件的成本不断提高。软件成本大约已占计算机系 统总成本的90% (7)软件开发生产率的提高赶不上硬件的发展和人们需 求的增长。
③ 软件维护通常意味着改正或修改原来的设计,这就在 客观上使得软件较难维护.与软件开发和维护有关的 许多错误认识和作法的形成,可以归因于在计算机系 统发展的早期阶段软件开发的个体化特点.错误的认 识和作法主要表现为忽视软件需求分析的重要性,认 为软件开发就是些程序并设法使之运行,轻视软件维 护等.轻视维护是一个最大的错误,许多软件产品的 使用寿命长达10年甚至20年,在这样漫长的时期中不 仅必须改正使用过程中发现的每一个潜伏的错误,而 且当环境变化时还必须相应地修改软件以适应新的 环境,因此维护工作时一项艰巨复杂的工作.统计数 据表明,实际上用于软件为华的费用占软件总费用的 55%-70%.
优点: 符合人们的思维方式 具有封装和继承的特点来支持软件复用,易扩充,具 有高度的连续性,可维护性好.
概括地说,面向对象方法具有下述四个要点。 (1)把对象(0bject)作为融合了数据及在数据上的操作 行为的统一的软件构件。面向对象程序是由对象组成 的,程序中任何元素都是对象,复杂对象由比较简单 的对象组合而成。 (2)把所有对象都划分成类(class)。每个类都定义了一 组数据和一组操作,类是对具有相同数据和相同操作 的一组相似对象的定义。数据用于表示对象的静态属 性,是对象的状态信息,而施加于数据之上的操作用 于实现对象的动态行为。