《软件工程与开发环境》第一章软件危机与软件工程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
与此同时,计算机软件成本却在逐年上升,质量没 有可靠的保证,软件开发的生产率也远远跟不上普及计 算机应用的要求。软件已经成为限制计算机系统发展的 关键因素。
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会议定义:
软件工程:采用工程的概念、原理、 技术和方法来开发与维护软件,把经 过时间考验而证明正确的管理技术和 当前能够得到的最好的技术方法结合 起来,这就是软件工程。
18
3. 软件经常变化 软件必须随着所模拟的现实世界一起变 化。投产软件仍然需要耗费成本。 在开发过程中必须考虑将来可能的变化。 4. 开发软件的效率非常重要 软件供不应求的现象日益严重。 寻求开发与维护软件的更好更有效的方 法和工具。
19
5. 和谐地合作是开发软件的关键
软件庞大,必须多人合作。有效:明确 责任,相互沟通。严格按规定行事。运 用标准和规程。用工具来支持标准和规 程。纪律关键!
3
1.l .1 什么是软件危机 软件危机是指在计算机软件的开发和维护过程中所遇 到的一系列严重问题。 概括地说,软件危机包含下述两方面的问题: 如何开发软件; 如何维护软件。 软件危机主要有下述一些表现:
(1)对软件开发成本和进度的估计常常很不准确 。这种现象降低了软件开发组织的信誉。损害软件产品 的质量,用户的不满。
(4)软件常常是不可维护的。很多程序中的错误是非 常难改正的。“可重用的软件”还是一个没有完全做到 的、正在努力追求的目标,人们仍然在重复开发类似的 或基本类似的软件。
(5)软件通常没有适当的文档资料。 (6)软件成本在计算机系统总成本中所占的比例逐年 上升。美国在1985年软件成本大约已占计算机系统总成 本的90%。 (7)软件开发生产率提高的速度,远远跟不上计算机 应用迅速普及深入的趋势。软件产品“供不应求”的现 象使人类不能充分利用现代计算机硬件提供的巨大潜力 .
6
不仅涉及许多技术问题,诸如分析方法、设计方法、 形式说明方法、版本控制等,更重要的是必须有严格而 科学的管理。
目前相当多的软件专业人员对软件开发和维护还有 不少糊涂观念,忽视软件需求分析的重要性,认为软件 开发就是写程序并设法使之运行,轻视软件维护等。
在实践过程中或多或少地采用了错误的方法和技术, 这可能是使软件问题发展成软件危机的主要原因。
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
一个软件从定义、开发、使用和维护,直到最终被废 弃,要经历一个漫长的时期,这就如同一个人要经过胎 儿、儿童、青年、中年、老年,直到最终死亡的漫长时 期一样。通常把软件经历的这个漫长的时期称为生命周 期。
7
严重的问题是,在软件开发的不同阶段进行修改需要付 出的代价是很不相同的。根据美国一些软件公司的统计资 料,在后期引入一个变动比在早相期引入同变动所需付出 的代价高2--3个数量级。
在计算机系统发展的早期时代(60年代中期以前),通
用硬件相当普遍,软件却是个体编写,编写的程序技巧越 多越好,可读性极差。
从60年代中期到70年代中期是计算机系统发展的第二 代ቤተ መጻሕፍቲ ባይዱ期。
重要特征:是“软件作坊”。基本上仍然沿用早期形 成的个体化软件开发方法。广泛使用产品软件。
2
随着计算机应用的日益普及,软件数量急剧膨胀。软件维
(2)用户对“已完成的”软件系统不满意的现象 经常发生。对用户要求了解有限,交流不充分,仓促编 写程序。 “闭门造车”必然导致最终的产品不符合用 户的实际需要。
4
(3)软件产品的质量往往靠不住。软件质量保证技术 (审查、复审和测试)还没有坚持不懈地应用到软件开发 的全过程中,这些都导致软件产品发生质量问题。
图 1.2 改正一个问题的代价 (越早代价越小)
图1.2是美国贝尔实 验室统计得出的定量结 果。统计数据表明,实 际上用于软件维护的费 用占软件总费用的55 %--70%。 软件工程学的一个重要 目标就是提高软件的可 维护性,减少软件维护 的代价。
8
引入同一变动付出的代价随时间变化的趋势
9
1.1.3 解决软件危机的途径 1983年IEEE定义--软件:计算机程序、方 法、规则、相关的文档资料以及在计算机上 运行程序时所必需的数据。 定义中列出了软件的5个配置成分。 软件开发不是某种个体劳动的神秘技巧, 而应该是一种组织良好、管理严密、各类人 员协同配合、共同完成的工程项目。 解决软件危机,既要有技术措施(方法和 工具),又要有必要的组织管理措施。 软件工程=管理+技术 蓬勃发展学科
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."
护工作以令人吃惊的比例耗费资源。更严重的是,许多程 序的个体化特性使得它们最终成为不可维护的。“软件危 机”就这样开始出现了。 在1968年和1969年北大西洋公约组织成员国软件工作者两 次召开会议(NATO会议),讨论摆脱软件危机的办法, 提出了软件工程的概念。 1972年IEEE的计算机协会第一次出版了《软件工程学报》, 软件工程术语被接受、流行。
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 .
5
1.1.2 产生软件危机的原因 一方面与软件本身的特点有关,另一方面也和软件开 发与维护的方法不正确有关。
软件不同于硬件,它是计算机系统中的逻辑部件而 不是物理部件。
软件的一个显著特点是规模庞大。美国70年代末穿梭 号宇宙飞船的软件包含4000万行目标代码。假设一个人 一年开发一万行的程序,为了开发一个4000万行的软件 ,是否集中4000人的力量一年就可以完成呢?绝对做不 到!因为代码长度增加丁4000倍,程序复杂程度的增加 远远超过4000倍。
第一章 软件危机与软件工程
自从20世纪40年代中期出现第一台计算机开始,就 有程序的概念。 计算机硬件:经历了电子管、晶体管、大规模集成电路 、超大规模集成电路四代,并以1.5年为更新周期的速 度发展。 软件经历了由个体化生产、作坊式生产、软件工厂的发 展过程。
计算机硬件性能/价格比平均每十年提高二个数量 级,而且质量稳步提高;
21
访谈、阅读,了解应用领域知识。 然后用软件实现。 决定软件系统成功与否的关键问 题:用户组织是否真正遵守这个 工作流程。对于局外人来说,这 个问题更难回答。
22
1.2.2 软件工程的基本原理 1968年在联邦德国召开的国际会议上正 式提出井使用了“软件工程” 以来,陆 续提出了100多条关于软件工程的准则或 “信条”。 著名的软件工程专家N.W.Boehm综合各 种意见和多方软件开发经验,于1983年 在一篇论文中提出了软件工程的七条基 本原理。他认为这七条原理是确保软件 产品质量和开发效率的原理的最小集合 。
17
2. 软件工程的中心课题是控制复杂性
软件所解决的问题十分复杂,没有办法 作为一个整体通盘考虑。
不得不分解,分解出的每个部分可理解, 且保持简单通信关系。不能降低问题的 整体复杂性,但是却可使它变成可以管 理。
注意,许多软件的复杂性主要不是由问 题的内在复杂性造成的,而是由必须处 理的大量细节造成的。
6. 软件必须有效地支持它的用户
目的:是有效地协助用户完成其工作。
用户不满意,弃用系统,或立即提新需 求。仅用正确方法不够,还必须构造出 正确系统。
20
7. 在软件工程领域中是由具有一种文 化背景的人替具有另一种文化背景的人 工作
软件工程师是诸如Java程序设计等方面 专家,他们不是图书馆管理、航空控制 或银行事务等领域的专家,他们却不得 不为这些领域开发应用系统。缺乏应用 领域的相关知识,是软件开发项目出现 问题的常见原因。
15
1993年IEEE进一步给出了一个更全 面更具体的定义:“软件工程是: ①把系统的、规范的、可度量的途径 应用于软件开发、运行和维护过程, 也就是把工程应用于软件; ②研究 ①中提到的途径。”
16
软件工程的本质特性: 1. 软件工程关注于大型程序的构造 “大”与“小”的分界线不十分清晰 小型程序 大型程序 传统的程序设计技术和工具支持小型 程序设计,不能简单地用于开发大型 程序。 大粒度软件复用技术,软件架构,组 件复用等。
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会议定义:
软件工程:采用工程的概念、原理、 技术和方法来开发与维护软件,把经 过时间考验而证明正确的管理技术和 当前能够得到的最好的技术方法结合 起来,这就是软件工程。
18
3. 软件经常变化 软件必须随着所模拟的现实世界一起变 化。投产软件仍然需要耗费成本。 在开发过程中必须考虑将来可能的变化。 4. 开发软件的效率非常重要 软件供不应求的现象日益严重。 寻求开发与维护软件的更好更有效的方 法和工具。
19
5. 和谐地合作是开发软件的关键
软件庞大,必须多人合作。有效:明确 责任,相互沟通。严格按规定行事。运 用标准和规程。用工具来支持标准和规 程。纪律关键!
3
1.l .1 什么是软件危机 软件危机是指在计算机软件的开发和维护过程中所遇 到的一系列严重问题。 概括地说,软件危机包含下述两方面的问题: 如何开发软件; 如何维护软件。 软件危机主要有下述一些表现:
(1)对软件开发成本和进度的估计常常很不准确 。这种现象降低了软件开发组织的信誉。损害软件产品 的质量,用户的不满。
(4)软件常常是不可维护的。很多程序中的错误是非 常难改正的。“可重用的软件”还是一个没有完全做到 的、正在努力追求的目标,人们仍然在重复开发类似的 或基本类似的软件。
(5)软件通常没有适当的文档资料。 (6)软件成本在计算机系统总成本中所占的比例逐年 上升。美国在1985年软件成本大约已占计算机系统总成 本的90%。 (7)软件开发生产率提高的速度,远远跟不上计算机 应用迅速普及深入的趋势。软件产品“供不应求”的现 象使人类不能充分利用现代计算机硬件提供的巨大潜力 .
6
不仅涉及许多技术问题,诸如分析方法、设计方法、 形式说明方法、版本控制等,更重要的是必须有严格而 科学的管理。
目前相当多的软件专业人员对软件开发和维护还有 不少糊涂观念,忽视软件需求分析的重要性,认为软件 开发就是写程序并设法使之运行,轻视软件维护等。
在实践过程中或多或少地采用了错误的方法和技术, 这可能是使软件问题发展成软件危机的主要原因。
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
一个软件从定义、开发、使用和维护,直到最终被废 弃,要经历一个漫长的时期,这就如同一个人要经过胎 儿、儿童、青年、中年、老年,直到最终死亡的漫长时 期一样。通常把软件经历的这个漫长的时期称为生命周 期。
7
严重的问题是,在软件开发的不同阶段进行修改需要付 出的代价是很不相同的。根据美国一些软件公司的统计资 料,在后期引入一个变动比在早相期引入同变动所需付出 的代价高2--3个数量级。
在计算机系统发展的早期时代(60年代中期以前),通
用硬件相当普遍,软件却是个体编写,编写的程序技巧越 多越好,可读性极差。
从60年代中期到70年代中期是计算机系统发展的第二 代ቤተ መጻሕፍቲ ባይዱ期。
重要特征:是“软件作坊”。基本上仍然沿用早期形 成的个体化软件开发方法。广泛使用产品软件。
2
随着计算机应用的日益普及,软件数量急剧膨胀。软件维
(2)用户对“已完成的”软件系统不满意的现象 经常发生。对用户要求了解有限,交流不充分,仓促编 写程序。 “闭门造车”必然导致最终的产品不符合用 户的实际需要。
4
(3)软件产品的质量往往靠不住。软件质量保证技术 (审查、复审和测试)还没有坚持不懈地应用到软件开发 的全过程中,这些都导致软件产品发生质量问题。
图 1.2 改正一个问题的代价 (越早代价越小)
图1.2是美国贝尔实 验室统计得出的定量结 果。统计数据表明,实 际上用于软件维护的费 用占软件总费用的55 %--70%。 软件工程学的一个重要 目标就是提高软件的可 维护性,减少软件维护 的代价。
8
引入同一变动付出的代价随时间变化的趋势
9
1.1.3 解决软件危机的途径 1983年IEEE定义--软件:计算机程序、方 法、规则、相关的文档资料以及在计算机上 运行程序时所必需的数据。 定义中列出了软件的5个配置成分。 软件开发不是某种个体劳动的神秘技巧, 而应该是一种组织良好、管理严密、各类人 员协同配合、共同完成的工程项目。 解决软件危机,既要有技术措施(方法和 工具),又要有必要的组织管理措施。 软件工程=管理+技术 蓬勃发展学科
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."
护工作以令人吃惊的比例耗费资源。更严重的是,许多程 序的个体化特性使得它们最终成为不可维护的。“软件危 机”就这样开始出现了。 在1968年和1969年北大西洋公约组织成员国软件工作者两 次召开会议(NATO会议),讨论摆脱软件危机的办法, 提出了软件工程的概念。 1972年IEEE的计算机协会第一次出版了《软件工程学报》, 软件工程术语被接受、流行。
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 .
5
1.1.2 产生软件危机的原因 一方面与软件本身的特点有关,另一方面也和软件开 发与维护的方法不正确有关。
软件不同于硬件,它是计算机系统中的逻辑部件而 不是物理部件。
软件的一个显著特点是规模庞大。美国70年代末穿梭 号宇宙飞船的软件包含4000万行目标代码。假设一个人 一年开发一万行的程序,为了开发一个4000万行的软件 ,是否集中4000人的力量一年就可以完成呢?绝对做不 到!因为代码长度增加丁4000倍,程序复杂程度的增加 远远超过4000倍。
第一章 软件危机与软件工程
自从20世纪40年代中期出现第一台计算机开始,就 有程序的概念。 计算机硬件:经历了电子管、晶体管、大规模集成电路 、超大规模集成电路四代,并以1.5年为更新周期的速 度发展。 软件经历了由个体化生产、作坊式生产、软件工厂的发 展过程。
计算机硬件性能/价格比平均每十年提高二个数量 级,而且质量稳步提高;
21
访谈、阅读,了解应用领域知识。 然后用软件实现。 决定软件系统成功与否的关键问 题:用户组织是否真正遵守这个 工作流程。对于局外人来说,这 个问题更难回答。
22
1.2.2 软件工程的基本原理 1968年在联邦德国召开的国际会议上正 式提出井使用了“软件工程” 以来,陆 续提出了100多条关于软件工程的准则或 “信条”。 著名的软件工程专家N.W.Boehm综合各 种意见和多方软件开发经验,于1983年 在一篇论文中提出了软件工程的七条基 本原理。他认为这七条原理是确保软件 产品质量和开发效率的原理的最小集合 。
17
2. 软件工程的中心课题是控制复杂性
软件所解决的问题十分复杂,没有办法 作为一个整体通盘考虑。
不得不分解,分解出的每个部分可理解, 且保持简单通信关系。不能降低问题的 整体复杂性,但是却可使它变成可以管 理。
注意,许多软件的复杂性主要不是由问 题的内在复杂性造成的,而是由必须处 理的大量细节造成的。
6. 软件必须有效地支持它的用户
目的:是有效地协助用户完成其工作。
用户不满意,弃用系统,或立即提新需 求。仅用正确方法不够,还必须构造出 正确系统。
20
7. 在软件工程领域中是由具有一种文 化背景的人替具有另一种文化背景的人 工作
软件工程师是诸如Java程序设计等方面 专家,他们不是图书馆管理、航空控制 或银行事务等领域的专家,他们却不得 不为这些领域开发应用系统。缺乏应用 领域的相关知识,是软件开发项目出现 问题的常见原因。
15
1993年IEEE进一步给出了一个更全 面更具体的定义:“软件工程是: ①把系统的、规范的、可度量的途径 应用于软件开发、运行和维护过程, 也就是把工程应用于软件; ②研究 ①中提到的途径。”
16
软件工程的本质特性: 1. 软件工程关注于大型程序的构造 “大”与“小”的分界线不十分清晰 小型程序 大型程序 传统的程序设计技术和工具支持小型 程序设计,不能简单地用于开发大型 程序。 大粒度软件复用技术,软件架构,组 件复用等。