软件危机与软件工程教材
软件危机与软件项目工程培训教程
参考教材
软件工程 -实践者的研究方法
(英文版 第五版)
S.
机械工业出版社
教材
软件工程导论(第三版) 张海 藩 清华大学出版社(1997)
第1讲 软件危机与软件工程
内容提要
软件的特点 软件的分类 软件工程产生的背景:软件危机与神话 软件工程的概念 软件工程现状
计算机软件已经成为一种驱动力。它是进行商业决策的引
软件的分类
应用软件 商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
软件的分类
按软件规模进行划分:
类别 参加人员数 序行数
研制期限 源程
微型
1 1~4周
0.5k
小型
软件的分类
按软件的功能进行划分: 系统软件 使计算机系统各个部件、相关软件和
数据协调、高效地工作的软件 操作系统 数据库管理系统 设备驱动程序 通信处理程序等
软件的分类
支撑软件
协助用户开发软件的工具软件
文本编辑程序
文件格式化程序
磁盘向磁带进行数据传输的程序
程序库系统
支持需求分析、设计、实现、测试和 支持管理的软件
支持,它的开发工作是不可想象的。
• 极大型 2000~5000 5~10年 1M~10M
• 军事指挥、弹道导弹防御系统。
• 只是对软件工程技术依赖的程度不同而已。
软件的分类 按软件工作方式划分:
实时处理软件 交互式软件 批处理软件 分时软件
软件的分类
按软件服务对象的范围划分:
项目软件 产品软件
在软件的运行和使用期间,没有硬件那样的机械 磨损,老化问题
第一章软件工程与软件危机
软件生存周期也可分为三个大的阶段:计 划阶段、开发阶段和维护阶段 1、计划阶段—— 分两步:软件计划和需 求分析 2、开发阶段——开发阶段要经过三个步 骤:设计、编码和测试。 3、维护阶段——配置评审与确定维护组 织与职责。
二、软件开发模型
1.瀑布模型 2.螺旋模型 3.第四代技术模型 4.原型模型 5.构件组装模型 6.混合模型
软件工程的六条基本原则
用分阶段的生存周期计划严格管理; 坚持进行阶段评审; 实行严格的产品控制; 采用现代程序设计技术; 应能清楚地审查结果; 合理安排软件开发小组的人员。
二、软件工程的基本内容与目标
1、从内容上划分,软件工程学可分为理论、结 构、方法、工具、环境、管理、规范等。 2、软件工程学研究的基本目标是: 定义良好的方法学 确定的软件成分 可预测的结果 软件工程学的最终目的,是以较少投资获得 易维护、易理解、可靠、高效率的软件产品。
一、进行审查和复审的必要性 二、技术审查的标准和方法
1、软件是一种逻辑体,具有抽象性。 2、软件是通过人们智力活动,把知识与技术转换为信息 的一种产品,是在研制和开发中创造出来的。 3、软件的运行和使用期间,没有硬件那样的机械磨损、 老化问题。 4、软件的开发和运行经常受到计算机系统的限制,对计 算机系统有着不同程度的依赖。 5、软件的开发尚未完全摆脱手工的开发方式。 6、软件的开发费用越来越高。 7、软件开发是一个复杂的过程。
多用户 实时 数据库 软件产品
第一节 一、软件的发展四个阶段
二、软件的定义
强大的桌面系统 分布式系统面向对象技术 在运行中能提供所希望的功能和性能的指令集 嵌入“智能” 专家系统 使程序能够正常运行的数据结构 低成本硬件并行计算 描述程序研制过程和方法所用的文档 网络计算机 消费者的影响
软件工程与项目管理案例教程 第1章 软件危机与软件工程
(3) 原型模型的工作过程
软件开发者和用户以较小的代价,快速确定用户最基 本的需求,开发者对核心需求进行抽取、精简和描述。
然后,开发者在较短的时间内,采用一些适当的开发 工具设计一个可以运行的原型系统,交付用户试用;
用户根据试用情况,提出修改意见; 开发者采用迭代法或者增量法反复修改、完善产品的 功能,最终形成令用户满意的完整的软件产品。
软件产品除了源代码清单外,几乎没有其他文档 资料
软件开发方式随意,采用“手工作坊”的开发方 式
4
(2) 软件危机的产生 • 60年代中后期,软件开发需求急剧增长; • 高级语言开始出现,软件系统的规模越来越大, 复杂程度越来越高,软件数量急剧膨胀; • “手工作坊”式的单打独斗的软件生产方式已经 不能够适应日益增长的软件需求; • 软件供求关系严重失调,最终形成了不可调和的 尖锐矛盾,软件危机开始爆发。 (3) 软件危机的定义 “手工作坊”式的生产方式无法满足迅速增长的计算 机软件需求,从而导致了软件开发和维护过程中的 一系列严重问题,这一现象叫做软件危机 (Software Crisis)。
29
(4) 螺旋模型的特点
每一个周期的产品都较前一周期的产品更细化更完善。 螺旋模型强调风险分析。整个开发过程的主要风险都 得到识别和控制该模型特别适用于规模大,风险高的软 件项目。 用户可以有更多机会参与到开发过程中,有助于提供 关键决策。
30
4、软件生命周期
(1) 软件生命周期
又称作软件生存周期、系统开发生命周期,是指从提 出开发软件产品开始,直到软件报废为止的全过程。
2
本章要点 :
什么是软件危机
软件危机的表现及其产生原因
软件工程的基本原理 软件生命周期与软件生命周期模型 项目管理与软件项目管理 影响软件项目成功的因素
软件工程导论第5版
1.1 软件危机
(2)应该推广使用在实践中总结出来的开发软件的成 功的技术和方法。研究探索更好更有效的技术和方法 ,尽快消除在计算机系统早期发展阶段形成的一些错 误概念和做法。 (3)应该开发和使用更好的软件工具。在适当的软 件工具辅助下,开发人员可以把这类工作做得既快又 好。如果把各个阶段使用的软件工具有机地集合成一 个整体,支持软件开发的全过程,则称为软件工程支 撑环境。
1.1 软件危机
一系列软件相关的问题在计算机系统的整个发展过程 中一直存在着,而且这些问题还会继续恶化: 硬件的发展超过软件,建造的软件难以发挥硬件的潜能; 现有软件与用户的要求矛盾; 软件失败导致“灾难性后果”; 需要高质量、高可靠性的软件; 设计的问题使得升级和维护十分困难;
1.1 软件危机
1.2 软件工程
2. 坚持进行阶段评审:错误有放大效应
当时已经认识到,软件的质量保证工作不能等 到编码阶段结束之后再进行。因为:第一,大部分错 误是在编码之前造成的,据统计,设计错误占软件错 误的63%,编码错误仅占37%;第二,错误发现与改正 得越晚,所需付出的代价也越高。因此,在每个阶段 都进行严格的评审,以便尽早发现在软件开发过程中 所犯的错误是一条必须遵循的重要原则。
1.2 软件工程
4. 采用现代程序设计技术
从提出软件工程的概念开始,人们一直把主要精力用于研究 各种新的程序设计技术,并进一步研究各种先进的软件开发与 维护技术。实践表明,采用先进的技术不仅可以提高软件开发 和维护的效率,而且可以提高软件产品的质量。
5. 结果可以清楚地审查
软件产品不同于一般的物理产品,它是看不见摸不着的逻 辑产品。软件开发人员(或开发小组)的工作进展情况可见性差 ,难以准确度量,从而使得软件产品的开发过程比一般产品的 开发过程更难于评价和管理。为了提高软件开发过程的可见性 ,应该根据软件开发项目的总目标及完成期限,规定开发组织 的责任和产品标准,从而使得所得到的结果能够清楚地审查。
第 1 章 软件危机与软件工程
这种分级的思路在于把一个组织执 行软件过程的成熟程度分成循序渐进的几 个阶段, 个阶段,这与软件组织提高自身能力的实 际推进过程相吻合。 际推进过程相吻合。这种成熟度分级的优 点在于级别明确而清楚地反映了过程改进 活动的轻重缓急和先后顺序。 活动的轻重缓急和先后顺序。这一点很重 要,因为大多数软件组织只能在某一段时 间里集中开展少数几项过程改进活动。 间里集中开展少数几项过程改进活动。
软件可靠性模型通常有 1.正比于遗留故障的宏观模型 程序的故障率与遗留错误的数量成正比, 所以根据程序中的遗留错误的多少,就可以预 测程序的可靠性。 2.平均故障时间模型 用平均故障的时间来衡量软件的可靠性。 3.错误植入模型 测试之前在程序中植入一批人为的错误, 在测试中分别统计出通过测试发现的原有错误 和植入的错误,然后计算原有的错误,进而衡 量软件可靠性
软件过程
过程(Process):为实现既定目标的一 过程(Process):为实现既定目标的一 ): 系列操作步骤。 系列操作步骤。 软件过程( ):指人们 软件过程(Software Process):指人们 ): 用于开发和维护软件及其相关产品的一系列活 方法、时间和革新。 动、方法、时间和革新。其中相关产品是指项 目计划、设计文档、编码、测试和用户手册。 目计划、设计文档、编码、测试和用户手册。 当一个企业逐步走向成熟, 当一个企业逐步走向成熟,软件过程的定义也 会日趋完善, 会日趋完善,其企业内部的过程实施将更具有 一致性。 一致性。
1.4 软件可靠性
可靠性(reliablility)是其整个质量的一个极 是其整个质量的一个极 可靠性 其重要的元素。 其重要的元素。 软件可靠性是指: 软件可靠性是指:在特定环境下和一定时 间内,一个计算机程序无故障运行的概率。 间内,一个计算机程序无故障运行的概率。 注意4个方面的问题 注意 个方面的问题 1. 研究对象 2. 规定的功能和失败的含义 3. 规定品从形成概念开始,经过开发、 一个软件产品从形成概念开始,经过开发、 使用和维护, 使用和维护,直到最后退出使用的全过程称为软 件生存周期。软件生存周期根据软件所处的状态, 件生存周期。软件生存周期根据软件所处的状态, 以及软件开发活动的目的和任务, 以及软件开发活动的目的和任务,可划分为若干 个阶段。一般软件生存周期包括软件定义、 个阶段。一般软件生存周期包括软件定义、软件 开发以及软件使用与维护3个部分。 开发以及软件使用与维护 个部分。 个部分
第一讲软件危机与软件工程
我国软件业的现状
2001年,世界软件产品市场销售额超过 1865亿美元,我国当年的销售额为285亿 元人民币,只占世界市场不到2%的份额。
国内软件市场有限的份额中大部分为国外 软件厂商所瓜分,国内所开发的软件产品 仅占小部分。
我国软件业的现状
2001年我国软件销售总额96.3亿美元,软件企业约 5000家,从业人员29万。
High level languages were invented
User Programmer Computer
Early 1960s:
Very few large software projects were done by some experts.
Middle to late 1960s:
软件工程
Fritz Bauer:建立并使用完善的工程化原 则,以较经济的手段获得能在实际机器上 有效运行的可靠软件的一系列方法
IEEE:软件工程是开发、运行、维护和修 复软件的系统方法
软件工程的本质特性
1. 软件工程关注于大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化
错误 ➢ 为什么在软件开发过程总是难以度量其进展
造成以上问题的原因主要是:
➢ 软件行业发展的速度太快,对经验总结不足 ➢ 人们对自身处理能力的认识不清
解决的方法:
➢ 多实践,积累成功和失败的案例 ➢ 总结、思考、提取经验 ➢ 建立软件的模型和模式
软件工程
软件工程是指导计算机软件开发和维护的 工程学科。采用工程的概念、原理、技术 和方法来开发与维护软件,把经过时间考 验而证明正确的管理技术和当前能够得到 的最好的技术方法结合起来,以经济地开 发出高质量的软件并有效地维护它
软件危机与软件工程
软件危机与软件工程第一章引言软件危机是指在软件开发过程中出现的一系列问题,如超出预算、延期交付、功能缺失等。
该问题的根本原因在于软件开发过程缺乏规范和有效管理。
为了解决软件危机问题,软件工程作为一门学科应运而生。
第二章软件工程的定义与范围软件工程是一门将工程原理、方法和工具应用于软件开发的学科。
它涵盖了软件开发的整个生命周期,包括需求分析、设计、编码、测试和维护等阶段。
第三章软件危机的原因1.需求不清晰:需求不明确或不完整导致软件项目后期出现功能缺失和修改需求的情况。
2.规模估算不准确:对软件项目的规模估算不准确会导致资源分配不合理,进而引发预算超支和进度延误。
3.项目管理不善:软件项目缺乏有效的管理方法和工具,导致资源分配不均衡,任务分配不明确,人员合作不协调。
4.技术选型不当:选择不合适或技术过时的开发工具和平台会导致开发效率低下和后期维护困难。
5.缺乏测试与质量保证:软件开发过程中忽视测试环节和质量保证措施,导致系统稳定性和可靠性问题。
第四章软件工程的方法与实践1.需求分析:通过对用户需求进行深入调研和分析,建立准确的需求文档,为后续设计与开发提供准确的参考。
2.结构化设计:采用模块化开发的方式,将系统划分为多个独立可测试的模块,提高开发和维护的效率。
3.敏捷开发:采用敏捷开发方法,将开发过程划分为多个迭代周期,每个周期交付可用的软件产品,持续优化和改进。
4.质量管理:通过严格的测试和质量保证流程,确保软件系统的稳定性、可靠性和安全性。
5.风险管理:通过风险分析和风险控制策略,预测和应对潜在的开发风险,减少项目失败的风险。
第五章软件工程的工具与框架1.需求管理工具:如JIRA、TFS等,用于管理和追踪需求的变更和进度。
2.设计工具:如Axure、Visio等,用于绘制系统架构图和界面设计。
3.编码工具:如IDE、代码管理工具等,用于编写、管理和调试代码。
4.测试工具:如Selenium、Junit等,用于进行自动化测试和质量监控。
第一讲 软件工程概述(软件危机)
第一讲软件工程概述(软件危机)软件危机在计算机科学发展的早期,软件开发的过程中出现了一系列严重的问题,被称为软件危机。
软件危机主要表现在以下几个方面:1. 项目延期和超预算软件开发项目常常会因为技术、人员或者需求变更等原因导致延期和超预算。
这让开发者和客户都感到沮丧,并对软件开发过程的可行性和有效性产生质疑。
2. 软件质量低下由于软件开发的复杂性,很容易出现缺陷和错误。
软件质量低下会导致系统不稳定、易于崩溃、功能不完备等问题。
3. 缺乏可维护性和可重用性由于缺乏系统化的工程方法和设计规范,很多软件很难进行维护和重用。
这不仅增加了开发者的工作量,也浪费了大量的时间和资源。
4. 项目管理困难软件开发涉及多个工作环节和不同的团队成员,项目管理的难度非常大。
缺乏有效的管理方法和工具,往往导致项目进度难以掌控,人员协调困难等问题。
软件工程的出现为了解决软件危机所带来的问题,软件工程这一概念应运而生。
软件工程旨在通过系统化的方法和工程化的思维来开发和维护软件。
1. 系统化的方法软件工程提供了一套系统化的方法,包括需求分析、系统设计、编码、测试等环节,以确保软件开发过程的可控和可靠性。
2. 工程化的思维软件工程借鉴了工程学科的思维方式,将软件开发过程看作是一个工程项目,强调规划、设计、组织和管理等方面。
3. 软件开发生命周期软件工程将软件开发过程划分为不同的阶段,形成了软件开发生命周期的概念,包括需求分析、设计、编码、测试、发布等阶段。
每个阶段都有不同的任务和目标,确保软件开发的高质量和高效率。
4. 软件工程的原则和方法软件工程提出了一系列原则和方法,如模块化、结构化、面向对象、迭代开发、敏捷开发等,用来指导和规范软件开发过程。
软件工程是解决软件危机的一种有效途径。
通过系统化的方法和工程化的思维,可以提高软件开发的质量和效率,降低项目风险和成本。
软件工程对于现代社会的发展具有重要的意义,对于软件开发者和项目管理者来说,也是必不可少的知识和技能。
第一讲 软件工程概述(软件危机)
第一讲软件工程概述(软件危机)软件危机的背景和概念软件危机是指在软件开发过程中,出现了大量的开发延期、超出预算和质量问题的现象。
这种危机主要是由于软件工程领域在早期阶段的蓬勃发展,导致了开发过程的混乱和不规范,也暴露了软件复杂性带来的挑战。
软件危机的存在对于软件行业的发展和应用产生了重要的影响。
软件危机的原因和表现软件危机的产生主要有以下几个原因:1. 项目管理不规范:许多早期软件项目缺乏清晰的目标和明确的需求,在项目开发过程中缺乏有效的管理和控制手段,导致项目进展缓慢和低效。
2. 软件复杂性增加:随着软件规模的不断扩大和功能的不断增加,软件系统变得越来越复杂,而人类对于复杂系统的认知和理解能力有限,这给软件开发带来了很大的困难。
3. 缺乏有效的开发方法和工具:早期的软件开发方法和工具相对较为简单和粗糙,无法满足软件开发过程中的需求,导致开发过程存在很多不确定性和风险。
软件危机的表现主要体现在以下几个方面:1. 延期交付:很多软件项目无法按照原定的计划和时间要求准时交付,导致项目进度拖延和成本增加。
2. 超出预算:由于开发过程中存在不确定性和风险,许多软件项目的开发成本超出了最初的预算,给项目管理带来了很大的压力。
3. 质量问题:软件开发过程中的不规范和管理不足导致了软件质量的下降,出现了很多的缺陷和bug。
软件工程的发展和作用为了解决软件危机带来的问题,软件工程作为一门新兴的学科逐渐兴起并取得了长足的发展。
软件工程的主要目标是通过建立一套科学的方法论和规范,来管理和控制软件开发过程,以提高软件开发的效率和质量。
软件工程的发展主要经历了以下几个阶段:1. 软件危机阶段:这个阶段主要是软件工程学科的起源阶段,人们开始意识到软件开发过程中存在的问题和挑战,并提出了一些初步的解决方案。
2. 软件工程方法论阶段:在这个阶段,软件工程学科逐渐形成了一套方法论体系,包括需求分析、设计、编码、测试等各个方面的方法和技术。
《软件工程与开发环境》第一章软件危机与软件工程
1
1.1 软件危机 在计算机系统发展的早期时代的一些错误概念和做法 ,已经严重地阻碍了计算机软件的开发。用错误方法开发 出来的许多大型软件几乎根本无法维护和升级,只好提前 报废,造成大量人力、物力的浪费。
10
software crisis The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem."
Peter Keen - Managing the Economics of Information Capital
14
1.2软件工程 1.2.1软件工程简介
软件工程是工程学科。 1968年第一届NATO会议定义:
软件工程:采用工程的概念、原理、 技术和方法来开发与维护软件,把经 过时间考验而证明正确的管理技术和 当前能够得到的最好的技术方法结合 起来,这就是软件工程。
第一次课一软件危机与软件工程ppt课件
——第一章——第一
软件工程 软件设计阶段示意图
——第一章——第一
软件工程 软件系统设计阶段示意图
——第一章——第一
软件工程 软 件 工 程 阶 段 示 意 图
——第一章——第一
软件工程
二、什么是软件工程?
软件工程是计算机软件的一个分支学科,主要 研究软件开发全过程中的各种技术。
是一门指导计算机软件开发和维护的工程学科。 以计算机科学、数学为方法原理,以工程科学为 工具,利用管理科学来构成软件。
——第一章——第一
对应的a:
软件工程
对应的b:
——第一章——第一
软件工程
软件发开应做什么工作呢? 上面求和的例子非常简单,现在考虑下“网
上购书系统”的开发。大家都能想到: a.买书,建数据库
可数据库里有哪些字段呢? b.查询…… c.支付…… ……
——第一章——第一
软件工程
这里应该这样考虑:前台和后台两个大的平 台。前台包括注册、登录、查询(、标记、转入 购物车、支付书款等;后台包括系统管理员的登 录、入库、查询、接受订单等等。也可以这样表 示:
——第一章——第一
软件工程
软件的特点
软件是一种逻辑实体,而不是具体的物理实体, 因而它具有抽象性。
软件的生产与硬件不同,在它的开发过程中没 有明显的制造过程。
在软件的运行和使用期间,没有硬件那样的机 械磨损,老化问题。
——第一章——第一
软件工程
——第一章——第一
软件工程
软件的分类
• 按软件的功能进行划分 – 系统软件(例如:操作系统) – 支撑软件(例如:文本编辑程序) – 应用软件(例如:Office办公软)
——第一章——第一
软件工程 原书第十版
软件工程原书第十版软件工程是一门涉及软件开发和维护的学科,它着眼于构建高质量、可靠和可维护的软件系统。
《软件工程》原书第十版是一本经典教材,它详细介绍了软件工程的基本概念、原则和方法。
本书第一章从软件危机引入,指出了软件开发面临的挑战和困难。
随着软件规模不断增大,软件工程的重要性也日益凸显。
本书提出了软件工程的核心原则,如模块化、可重用性、可测试性等,以及相关的开发方法和工具。
在软件工程中,需求分析是至关重要的一环。
本书详细介绍了需求分析的方法和技巧,帮助开发人员准确理解用户需求,并将其转化为可执行的软件规范。
通过需求分析,开发者能够更好地规划项目,合理分配资源,并确保最终交付的软件能够满足用户的期望。
接下来,本书介绍了软件设计的基本原则和方法。
软件设计是将需求转化为具体的软件结构和模块的过程。
合理的软件设计能够提高软件的可读性、可维护性和可扩展性。
本书还介绍了常见的设计模式,如工厂模式、单例模式等,帮助开发人员设计出高效、可靠的软件系统。
软件测试是保证软件质量的重要手段。
本书详细介绍了软件测试的方法和技术,包括功能测试、性能测试、安全测试等。
通过充分的测试,开发人员能够发现和修复软件中的缺陷,提高软件的稳定性和可靠性。
软件维护是软件工程中不可忽视的一环。
本书强调了软件维护的重要性,并介绍了常见的维护技术和策略。
通过合理的维护工作,开发人员能够及时修复软件中的问题,提供更好的用户体验。
除了基本的软件工程概念和方法,本书还介绍了软件开发过程中的管理技术和工具。
例如,敏捷开发、迭代开发等方法,以及版本控制、项目管理等工具。
这些技术和工具能够帮助开发人员更好地组织和管理软件项目,提高开发效率和质量。
《软件工程》原书第十版是一本权威而全面的软件工程教材,它涵盖了软件工程的各个方面。
通过学习本书,读者能够深入了解软件工程的基本原理和方法,并将其应用于实际的软件开发和维护工作中。
无论是初学者还是有经验的开发人员,都能从本书中获得宝贵的知识和经验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件开发过程
▪ 计算机软件的数量以惊人的速度急剧 膨胀。
▪ 计算机硬件的性能/价格比,每10年提高 2个数量级,且质量稳步提高。
▪ 软件生产跟不上计算机应用的要求,开 发成本增加,质量没有保证,已成制约 计算机发展的关键因素。
2021/2/7
6
软件危机的产生
软件危机
▪ 软件危机(crisis):是指在计算机软 件开发和维护过程中所遇到的一 系列的严重问题。
2021/2/7
17
软件工程基本原理
解决软件危机的途径
6.开发人员应少而精
软件开发小组的人员应该是素质高, 人员不宜过多。人员素质低和人员过多, 都会导致软件的错误率高,且开发效率下 降,成本增加。
2021/2/7
7.承认不断改进软件工程的必要性
软件工程是一门不断迅速发展的学科,
必须学习和跟踪先进的技术和方法,也要
2021/2/7
7
软件危机的产生
软件危机的具体表现
① 对软件开发成本和进度估计不准确。 ② 用户对已完成的“软件系统”不满意。 ③ 软件产品的质量不可靠。 ④ 软件维护困难,维护的人员与费用不断 增加。 ⑤ 缺乏完整、正确的文档资料。 ⑥ 软件成本在计算机系统 中所占比例逐年上升。 ⑦ 软件的发展跟不上硬件的发展和用户的要求。
软件维护的任务是,通过各种必
要的维护活动使系统持久地满足用户 的需要。
通常有4类维护活动:改正性维护; 适应性维护;完善性维护;预防性维 护。
每一项维护活动都应该准确地记
录下来,作为正式的文档保存。
2021/2/7
35
软件过程
▪ 软件过程:为了获得高质量软件所需要完 成的一系列任务的框架,它规定了完成各 项任务的工作步骤。
骤。
2021/2/7
20
软件工程方法学
1.传统方法学 ▪ 也称为生命周期方法学或结构化范型。 ▪ 把 软件生命周期的全过程依次划分为若干
阶段,然后顺序地完成每个阶段的任务。 ▪ 传统方法学应用十分广泛。
2021/2/7
21
软件工程方法学
▪ 2.面向对象方法学 ▪ 该方法把数据和行为看成同等重要,它是
2021/2/7
39
软件工程开发模式
➢ 推迟实现的观点:
不要急于求成,对于规模较大、较复杂 的系统,过早地急于编程实现,往往导 致大量返工,甚至开发失败。应该把前 面几个阶段的工作做得比较扎实,再进 行后续的工作。
2021/2/7
40
软件工程开发模式
➢质量保证的观点:
(1)每个阶段都必须交出合格的文档。这 是下一阶段开发设计的依据和开发交互的 媒介,也是对软件进行维护的重要依据。
2021/2/7
3.需求分析
本阶段确定为解决该问题,目标系统必 须应具备哪些功能。
系统分析员在本阶段必须与用户密切配
合,充分交流,得到经用户确认的系统逻辑 模型,用数据流图、数据字典等描述系统的 逻辑模型。
需求分析阶段所确定的系统逻辑模型是
以后设计和实现目标系统的基础,必须准确、
完整的体现用户的需求。
软件工程
(Software Engineering)
第一章 绪论
——软件危机与软件工程
2021/2/7
1
本章主要内容
▪ 软件开发过程 ▪ 软件危机的产生 ▪ 解决软件危机的途径 ▪ 软件工程
2021/2/7
2
计算机硬件与软件
软件开发过程
▪ 任何计算机系统都包含硬件(hard)和软件 (software)两大部分。
前述含义下的软件所涉及的理论、方法、技术所 构成的学科。
2021/2/7
4
软件开发过程的演化
软件开发过程
▪ 第一个时期:40—60年代,个体时期 (程 序时期)
▪ 第二个时期:60—70年代,软件作坊时 期(程序+文档)
▪ 第三个时期:70年代以后,软件工程时 期。
2021/2/7
5
软件开发过程的演化
▪ 硬件只是提供了计算的可能性 ▪ 必须有支持和管理计算机的软件,系统才能
实现计算
2021/2/7
3
软件的三层含义
软件开发过程
▪ 个体含义:指计算机中的程序及其文 档。
▪ 整体含义:指在特定计算机系统中所有上述
个体含义下的软件的总称,即计算机系统中硬件 除外的所有成分。
▪ 学科含义:指在研究、开发、维护以及使用
30
生命周期各阶段的任务
2021/2/7
4.总体设计
本阶段 确定目标系统的主要功能如何完 成。采用流程图或其他工具描述出每种可能 的系统,推荐出一个最佳的方案,并制定出 实现该系统的详细计划。
本阶段的另一个主要任务是设计软件的 结构,确定软件应由哪些模块构成,以及模 块之间的关系。
还应考虑系统的开发和应用环境,如计 算机系统的配置,计算机网络等。
在不同的阶段对软件修改而付出的 代价是不同的!在后期引入一个变动的 代价比在早期引入要高的多,甚至高达 2─3个数量级。
2021/2/7
27
生命周期各阶段的任务
1.问题定义
本阶段需要明确回答:“要解决的 问题是什么?”。
系统分析员应该提出问题的性质、 目标和规模的书面报告。通过对实际用 户和使用部门的调查、研究,以及讨论、 交流,得出一份双方都满意的文档。
2.坚持进行阶段评审 设计的错误占软件错误的63%,编码错
误只占37%。而且在后期纠正错误的代价 非常高。因此,必须严格坚持阶段评审, 及早发现和纠正错误。
2021/2/7
15
解决软件危机的途径
软件工程基本原理
3.实行严格的产品质量控制 在现实中由于外部原因要求对需
求等进行修改是难免的。但必须有严 格的管理制度和措施,其中主要是实 行基准配置管理。
2021/2/7
16
解决软件危机的途径
软件工程基本原理
4.采用现代程序设计技术和软件工程技术 如结构化程序分析(Structured Analysis)
和结构化设计(Structured Design)等。 5.结果应能清楚地审查
由于软件是一种看不见摸不着的逻辑 产品,对它的检验和审查很困难。因此, 应提供可视化的检验标准和方法。
(2)每个阶段完成前都要对完成的文档进 行评审,以便及时发现和改正错误。对错 误的修改越早越好,越晚代价越高。
2021/2/7
41
软件工程开发模式
▪ 瀑布模型的优缺点: ▪ 优点:强迫采用规范化的方法;每个阶段
必须提交文档;产品都要经过验证。 ▪ 缺点:该模型几乎完全依赖书面的规格说
2021/2/7
11
软件工程的本质特性
解决软件危机的途径
① 软件工程关注于大型程序的构造。 ② 软件工程的中心课题是控制复杂性。 ③ 软件经常变化。 ④ 开发软件的效率非常重要。 ⑤ 和谐地合作是开发软件的关键。 ⑥ 软件必须有效的支持他的用户。 ⑦ 在软件工程领域中通常由具有一种文化背景的
人替具有另一种文化背景的人创造产品。
2021/2/7
28
生命周期各阶段的任务
2 .可行性分析
本阶段需要回答的是:“上一阶段 确定的问题有无可行的解决方案,是 否值得解决?”。
更进一步明确项目的规模和目标, 从技术可行性、经济可行性、操作可 行性、法律可行性、社会可行性等方 面进行研究,确定是否开发本项目。
2021/2/7
29
生命周期各阶段的任务
传统的生命周期方法学可以用瀑 布模型来模拟,犹如瀑布,各个阶段 从上到下,奔流不息。
2021/2/7
37
软件工程开发模式
2021/2/7
38
软件工程开发模式
按照传统的瀑布模型来开发软件, 有如下几个特点:
▪ 各阶段具有顺序性和依赖性,必须 等上一阶段结束后,才能开始下一阶段; 前一阶段的输出文档就是下一阶段的输 入。
▪ 每个阶段都要形成详尽、规范、完整的文档,提 供下一阶段以及本阶段评审之用。
2021/2/7
19
软件工程方法学
▪ 通常把在软件生命周期全过程中使用的一整套 技术方法的集合称为方法学(Methodology)
▪ 软件工程方法学3要素: a. 方法:完成开发的技术,解决“怎样做”; b. 工具:为运用方法提供的软件工程环境; c. 过程:任务的框架,规定了完成各项任务的步
件下,能否完成指定的任务?包括:技
术可行性、经济可行性、法律可行性、
社会可行性。
2021/2/7
25
软件的生命周期
解决软件危机的途径
软件开发(development)阶段
▪ 需求分析
▪ 总体设计
▪ 详细设计
▪ 编码
▪ 测试
▪ 运行
2021/2/7
26
解决软件危机的途径
软件的生命周期
软件维护(maintenance)阶段
发。
2021/2/7
9
解决软件危机的途径
软件工程
软件工程
是一门指导计算机软件开发和维 护 的工程学科,是一类求解软件包的工程。 它应用计算机科学、数学及管理科学等原 理,借鉴传统工程的原则、方法,创建软 件以达到提高质量、降低成本的目的。
2021/2/7
10
解决软件危机的途径
软件工程
计算机科学、数学用于构造模型与 算法,工程科学用于制定规范、设计范 型、评估成本及确定权衡,管理科学用 于计划、资源、质量、成本等管理。
▪ 过程定义了运用方法的顺序、应交付的文 档资料、为保证软件质量和协调变化所需 要采取的管理措施,以及标志软件开发各 个阶段任务完成的里程碑。
▪ 使用生命周期模型简洁地描述软件过程。
2021/2/7
36