《软件工程与开发环境》第一章软件危机与软件工程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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."
护工作以令人吃惊的比例耗费资源。更严重的是,许多程 序的个体化特性使得它们最终成为不可维护的。“软件危 机”就这样开始出现了。 在1968年和1969年北大西洋公约组织成员国软件工作者两 次召开会议(NATO会议),讨论摆脱软件危机的办法, 提出了软件工程的概念。 1972年IEEE的计算机协会第一次出版了《软件工程学报》, 软件工程术语被接受、流行。
6
不仅涉及许多技术问题,诸如分析方法、设计方法、 形式说明方法、版本控制等,更重要的是必须有严格而 科学的管理。
目前相当多的软件专业人员对软件开发和维护还有 不少糊涂观念,忽视软件需求分析的重要性,认为软件 开发就是写程序并设法使之运行,轻视软件维护等。
在实践过程中或多或少地采用了错误的方法和技术, 这可能是使软件问题发展成软件危机的主要原因。
一个软件从定义、开发、使用和维护,直到最终被废 弃,要经历一个漫长的时期,这就如同一个人要经过胎 儿、儿童、青年、中年、老年,直到最终死亡的漫长时 期一样。通常把软件经历的这个漫长的时期称为生命周 期。
7
严重的问题是,在软件开发的不同阶段进行修改需要付 出的代价是很不相同的。根据美国一些软件公司的统计资 料,在后期引入一个变动比在早相期引入同变动所需付出 的代价高2--3个数量级。
(2)用户对“已完成的”软件系统不满意的现象 经常发生。对用户要求了解有限,交流不充分,仓促编 写程序。 “闭门造车”必然导致最终的产品不符合用 户的实际需要。
4
(3)软件产品的质量往往靠不住。软件质量保证技术 (审查、复审和测试)还没有坚持不懈地应用到软件开发 的全过程中,这些都导致软件产品发生质量问题。
3
1.l .1 什么是软件危机 软件危机是指在计算机软件的开发和维护过程中所遇 到的一系列严重问题。 概括地说,软件危机包含下述两方面的问题: 如何开发软件; 如何维护软件。 软件危机主要有下述一些表现:
(1)对软件开发成本和进度的估计常常很不准确 。这种现象降低了软件开发组织的信誉。损害软件产品 的质量,用户的不满。
6. 软件必须有效地支持它的用户
目的:是有效地协助用户完成其工作。
用户不满意,弃用系统,或立即提新需 求。仅用正确方法不够,还必须构造出 正确系统。
20
7. 在软件工程领域中是由具有一种文 化背景的人替具有另一种文化背景的人 工作
软件工程师是诸如Java程序设计等方面 专家,他们不是图书馆管理、航空控制 或银行事务等领域的专家,他们却不得 不为这些领域开发应用系统。缺乏应用 领域的相关知识,是软件开发项目出现 问题的常见原因。
13
NASA NASA, for example, carried out a project to develop "perfect" software, software that is close to error-free. It succeeded, at a cost of $1,000 per line of program code. The cost for a commercial organization is typically between $20 and $50 per line. NASA reported that it found no high-tech tools or new techniques that ensured the level of quality it sought; its approach was the tried and true "inspect, test, retest."
17
2. 软件工程的中心课题是控制复杂性
软件所解决的问题十分复杂,没有办法 作为一个整体通盘考虑。
不得不分解,分解出的每个部分可理解, 且保持简单通信关系。不能降低问题的 整体复杂性,但是却可使它变成可以管 理。
注意,许多软件的复杂性主要不是由问 题的内在复杂性造成的,而是由必须处 理的大量细节造成的。
第一章 软件危机与软件工程
自从20世纪40年代中期出现第一台计算机开始,就 有程序的概念。 计算机硬件:经历了电子管、晶体管、大规模集成电路 、超大规模集成电路四代,并以1.5年为更新周期的速 度发展。 软件经历了由个体化生产、作坊式生产、软件工厂的发 展过程。
计算机硬件性能/价格比平均每十年提高二个数量 级,而且质量稳步提高;
在计算机系统发展的早期时代(60年代中期以前),通
用硬件相当普遍,软件却是个体编写,编写的程序技巧越 多越好,可读性极差。
从60年代中期到70年代中期是计算机系统发展的第二 代时期。
重要特征:是“软件作坊”。基本上仍然沿用早期形 成的个体化软件开发方法。广泛使用产品软件。
2
随着计算机应用的日益普及,软件数量急剧膨胀。软件维
Edsger Dijkstra: The Humble Programmer
11
How expensive!
--A staggering 31.1% of projects will be canceled before they ever get completed. --Further results indicate 52.7% of projects will cost 189% of their original estimates. · --In USA, more than $250 billion each year for 175,000 projects. --31% are cancelled, 53% are challenged, 16% successful. --The average cost of a project for a large company is $2,322,000; --For a medium company, it is $1,331,000; --For a small company, it is $434,000
12
projects types:
The Standish Group classifies projects into three resolution types: ·Successful: The project is completed on time and on budget, with all features and functions as originally specified. ·Challenged: The project is completed and operational, but over budget, over the time estimated, and with fewer features and functions than initially specified. ·Failed: The project is cancelled before completion .
与此同时,计算机软件成本却在逐年上升,质量没 有可靠的保证,软件开发的生产率也远远跟不上普及计 算机应用的要求。软件已经成为限制计算机系统发展的 关键因素。
1
1.1 软件危机 在计算机系统发展的早期时代的一些错误概念和做法 ,已经严重地阻碍了计算机软件的开发。用错误方法开发 出来的许多大型软件几乎根本无法维护和升级,只好提前 报废,造成大量人力、物力的浪费。
18
3. 软件经常变化 软件必须随着所模拟的现实世界一起变 化。投产软件仍然需要耗费成本。 在开发过程中必须考虑将来可能的变化。 4. 开发软件的效率非常重要 软件供不应求的现象日益严重。 寻求开发与维护软件的更好更有效的方 法和工具。
19
5. 和谐地合作是开发软件的关键
软件庞大,必须多人合作。有效:明确 责任,相互沟通。严格按规定行事。运 用标准和规程。用工具来支持标准和规 程。纪律关键!
图 1.2 改正一个问题的代价 (越早代价越小)
图1.2是美国贝尔实 验室统计得出的定量结 果。统计数据表明,实 际上用于软件维护的费 用占软件总费用的55 %--70%。 软件工程学的一个重要 目标就是提高软件的可 维护性,减少软件维护 的代价。
8
引入同一变动付出的代价随时间变化的趋势
9
1.1.3 解决软件危机的途径 1983年IEEE定义--软件:计算机程序、方 法、规则、相关的文档资料以及在计算机上 运行程序时所必需的数据。 定义中列出了软件的5个配置成分。 软件开发不是某种个体劳动的神秘技巧, 而应该是一种组织良好、管理严密、各类人 员协同配合、共同完成的工程项目。 解决软件危机,既要有技术措施(方法和 工具),又要有必要的组织管理措施。 软件工程=管理+技术 蓬勃发展学科
5
1.1.2 产生软件危机的原因 一方面与软件本身的特点有关,另一方面也和软件开 发与维护的方法不正确有关。
软件不同于硬件,它是计算机系统中的逻辑部件而 不是物理部件。
软件的一个显著特点是规模庞大。美国70年代末穿梭 号宇宙飞船的软件包含4000万行目标代码。假设一个人 一年开发一万行的程序,为了开发一个4000万行的软件 ,是否集中4000人的力量一年就可以完成呢?绝对做不 到!因为代码长度增加丁4000倍,程序复杂程度的增加 远远超过4000倍。
Peter Keen - Managing the Economics of Information Capital
14
1.2软件工程 1.2.1软件工程简介
软件工程是工程学科。 1968年第一届NATO会议定义:
软件工程:采用工程的概念、原理、 技术和方法来开发与维护软件,把经 过时间考验而百度文库明正确的管理技术和 当前能够得到的最好的技术方法结合 起来,这就是软件工程。
21
访谈、阅读,了解应用领域知识。 然后用软件实现。 决定软件系统成功与否的关键问 题:用户组织是否真正遵守这个 工作流程。对于局外人来说,这 个问题更难回答。
22
1.2.2 软件工程的基本原理 1968年在联邦德国召开的国际会议上正 式提出井使用了“软件工程” 以来,陆 续提出了100多条关于软件工程的准则或 “信条”。 著名的软件工程专家N.W.Boehm综合各 种意见和多方软件开发经验,于1983年 在一篇论文中提出了软件工程的七条基 本原理。他认为这七条原理是确保软件 产品质量和开发效率的原理的最小集合 。
15
1993年IEEE进一步给出了一个更全 面更具体的定义:“软件工程是: ①把系统的、规范的、可度量的途径 应用于软件开发、运行和维护过程, 也就是把工程应用于软件; ②研究 ①中提到的途径。”
16
软件工程的本质特性: 1. 软件工程关注于大型程序的构造 “大”与“小”的分界线不十分清晰 小型程序 大型程序 传统的程序设计技术和工具支持小型 程序设计,不能简单地用于开发大型 程序。 大粒度软件复用技术,软件架构,组 件复用等。
(4)软件常常是不可维护的。很多程序中的错误是非 常难改正的。“可重用的软件”还是一个没有完全做到 的、正在努力追求的目标,人们仍然在重复开发类似的 或基本类似的软件。
(5)软件通常没有适当的文档资料。 (6)软件成本在计算机系统总成本中所占的比例逐年 上升。美国在1985年软件成本大约已占计算机系统总成 本的90%。 (7)软件开发生产率提高的速度,远远跟不上计算机 应用迅速普及深入的趋势。软件产品“供不应求”的现 象使人类不能充分利用现代计算机硬件提供的巨大潜力 .
相关文档
最新文档