第1章软件及其开发概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

高级软件工程AdvancedSoftwareEngineering主讲:魏延E-mail:weiyan@cqnu.edu.cn主要教材:古天龙,软件开发的形式化方法,高等教育出版社,2005杨文龙、古天龙,软件工程(第2版),电子工业出版社,2004齐治昌,谭庆平等,软件工程(第2版),高等教育出版社,2004CarloGhezzi,etal.软件工程基础(第2版),施平安译,清华大学出版社,2003参考教材SoftwareEngineering,TheoryandPractice,ShariLawrencePfleeger,Prentice-Hall,Inc.1998陈松乔等,现代软件工程,清华大学出版社,2004张海藩,软件工程导论(第五版),清华大学出版社,2008本章主要介绍软件、软件开发的历史、软件危机、软件工程的诞生、定义、主要研究内容,软件工程模式以及软件工程与其他学科领域的关系。第1章软件及其开发概述1.1软件开发的历史1、软件的概念计算机世界的软件软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。软件=程序+数据+文档程序=算法+数据结构软件是计算机系统的重要组成部分;软件是逻辑产品,需要计算机硬件和系统软件的支撑;软件是计算机控制系统的指挥中枢;软件是信息转换器,它能对信息进行加工、处理或变换;软件是工具,在人们的生活、工作、休闲,在社会的经济、军事、政治、文化、科学技术、教育中发挥具大作用。2、软件的特点软件是一种逻辑实体,具有抽象性。软件的生产与硬件不同。在软件的运行使用期间,没有磨损,老化问题。软件产品不允许有误差,虽然实际上不可能没有缺陷。软件的开发运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。软件的开发至今尚未完全摆脱手工艺的开发方式。3、软件开发所谓软件开发,实际上就是把现实世界的需求反映成软件的模型化并予以实现的过程。在计算机发展的不同时期,人们对软件的认识不同,相应地,所进行的软件开发也具有不同的特点。软件开发经历的三个时期及其特点时间特点程序设计程序系统软件工程软件所指程序程序及说明书程序、文档、数据主要程序设计语言汇编及机器语言高级语言软件语言软件工作范围程序编写包括设计和测试软件生存期需求者程序设计者本人少数用户市场用户开发软件的组织个人开发小组开发小组及大中型软件开发机构软件规模小型中小型大中小型决定质量的因素个人程序技术小组技术水平管理水平开发技术和手段子程序程序库结构化程序设计数据库、开发工具、开发环境、工程化开发方法、标准和规范、网络及分布式开发、面向对象技术维护责任者程序设计者开发小组专职维护者硬件特征价格高、存储容量小、工作可靠性差降价、速度、容量及工作可靠性有明显提高向超高速、大容量、微型化及网络化方向发展软件特征完全不受重视软件技术的发展不能满足需要,出现软件危机开发技术有进步,但未获突破性进展,价高,未完全摆脱软件危机1.2软件危机(SoftwareCrisis)软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重的问题。这些问题不仅仅是不能正常运行的软件才具有,事实上几乎所有软件都不同程度地存在这些问题。概括说,软件危机包含两方面的问题:如何开发软件,以满足不断增长、日趋复杂的需求。如何维护数量不断膨胀的软件产品。1、软件危机的主要问题2、软件危机的主要表现软件成本日益增长0102030405060708090100195560657075808290952000软件硬件硬件和软件所占费用的比例图1968年,美国花费于软件的投资高达60亿美元,有些系统,特别是军用系统,软件费用要高出硬件费用好几倍,例如美国全球军事指挥控制系统的计算机硬件费用为1亿美元,而软件费用高达7.2亿美元。1980年美国政府的财政年度当中,计算机系统方面(软、硬件与服务)共耗资达570亿美元,其中320亿美元(占总数的56%)用于计算机软件方面(与同年的美国汽车行业进行简单的比较,美国是当时的世界第一汽车生产大国,汽车的年销售量为900万辆,总的销售额仅为720亿美元)。技术的进步使得计算机硬件的成本持续降低,而软件成本则不断增长,软件成本在计算机系统总成本中所占的比例呈现日益扩大的趋势.来自美国空军计算机系统的数据表明,1970年,软件费用约占总费用的60%,1975年达到72%,1980年达到80%,1985年计达到85%。这种增长的速度是惊人的。(1979年,美国的国防预算为1258亿美元,其中9%用于计算机领域,约113亿美元。在这113亿美元当中,91亿美元(约占80%)用于软件投资,仅有22亿美元用于硬件设备)。难于控制开发进度在研究大型系统时,遇到越来越多的困难。有的系统干脆失败了,损失了大量金钱和人力;有的系统虽然完成了,但性能不理想,或推迟了许多年,经费大大超过预算。如一个大项目负责人所说:“软件人员太像皇帝新衣故事中的裁缝了。当我来检查软件开发工作时,所得到的回答好像对我说我们正忙于编织这件带有魔法的织物,只要等一会儿,你就会看到这件织物是极其美丽的。但是我什么也看不到,什么也摸不到,也说不出任何一个有关的数字;没有任何办法得到一些信息说明事情确实进行得非常顺利,而且我已经知道许多人最终已经编织了一大堆昂贵的废物而离去,还有不少人最终什么也没有作出来。”为软件开发制定进度是很困难的事情:通常我们对一个任务根据其复杂性、工作量及进度要求安排人力。如有10人月的工作量,则由一个人完成需要10个月,由10个入完成则需要一个月。但这种工作量估计方式仅对各部分工作互不干扰的情况下才适用,例如当各部分工作尚能很好地划分时,安排由不同人完成不同部分的工作。但作为整体,尚需讨论合作,这种讨论交流活动就增加了工作量。软件系统的结构很复杂,各部分附加联系极大。增加更多人工作,往往不是缩短时间进度,而是会延缓进度。一个软件项目估计需要12人月工作量。指定由3个人,在4个月内完成。假定第1个月的任务花了两个月才完成,如仍需按时完成该怎么办呢?(1)假定此任务只有第一个月的工作量是估计错了,则到第二个工作月结束时,尚有9个人月工作量必需在两个月内完成,则需用4.5个人。需要增加2个人来进行这项工作;(2)假定此任务的工作量在每个月都是估计低了。第二月后,尚有18个人月的工作量要在两个月内完成,则需要9个人工作,即应增加6个人。一个例子:增加人力的结果如何呢?在第一种情况下,不论新增加的人的适应能力有多强,总需要有人去帮助他了解熟悉情况。如果这些工作占用了一个月的时间,这样又有2个人月工作量是在新的计划外。同时,为了由5人共同完成工作,又需要花时间把任务重新划分成五个部。这样,又可能损失一部分已经完成的工作,所以到第三个月结束时实际上虽有5人在工作,而余留下也许至少是7个人月的工作量,使任务仍不能按时完成。如果你仍想按时完成任务,用投入更多人力的方法可能造成更坏的后果。对于一项复杂的任务,通常难于通过增加人力来缩短开发时间。Brook提出的法则“在已拖延的软件项目上增加人力只会使其更难按期完成”。这对于一般的工业产品来说是难于想象的!软件质量无法保证1985年11月21日,由于计算机软件的错误,造成纽约银行与美联储电子结算系统收支失衡,发生了超额支付,而这个问题一直到晚上才被发现,纽约银行当日帐务出现了230亿的短款。Therac-25是加拿大原子能公司AECL和一家法国公司CGR联合开发的一种医疗设备,它产生的高能光束或电子流能够杀死人体毒瘤而不会伤害毒瘤附近的人体健康组织。该设备于1982年正式投入生产和使用,在1985年6月到1987年1月的不到两年的时间里,因为软件缺陷引发了6起由于电子流或X-光束的过量使用的医疗事故,造成4人死亡、2人重伤的严重后果。美国Florida州的福利救济系统用于处理数百万受抚养儿童、食品券、医疗援助等受资助家庭接受者的资格认证,其基于巨型机系统,支持84个数据库、1390个程序、12000多个终端和个人计算机。1992年,该系统的错误使得成千上万的人收到了他们无权收到的救济,而其他成千上万急需食品券的人却排着长队等待了好几天。据后来统计,该错误导致了多支付2.6亿美元以及少支付5800万美元医疗补助的后果。1996年,欧洲航天局阿丽亚娜5型(Ariane5)火箭在发射后40秒钟后发生爆炸,发射基地上2名法国士兵当场死亡,损耗资产达10亿美元之巨,历时9年的航天计划因此严重受挫。事后专家的调查分析报告指出,爆炸原因在于惯性导航系统软件技术要求和设计的错误。2003年5月4日,搭乘俄罗斯“联盟—TMA1”载人飞船的国际空间站第七长期考察团的宇航员们返回了地球,但在返回途中,飞船偏离了降落目标地点约460公里。据来自美国国家航空航天局的消息称,这是由飞船的导航计算机软件设计中的错误引起的。2002年6月28日,美国商务部的国家标准技术研究所(NIST:NationalInstituteofStandardsandTechnology)发表了有关软件缺陷的损失调查报告。报告表示,“据推测,由于软件缺陷而引起的损失额每年高达595亿美元。这一数字相当于美国国内生产总值的0.6%”。对于一些安全悠关的系统,软件的缺陷更是造成了灾难性的后果。随着软件在社会生活中的广泛应用,特别是各种嵌入式软件在各种智能电器中的应用,软件缺陷造成的损失将会更大。软件修改、维护困难软件的维护任务特别重。事实上,正式投入使用的商用软件,总是存在着一定数量的错误。随着时间的延伸,在不同的运行条件下,软件就会出现故障,就需要维护。这种维护与通常意义下的设备(硬件)维护是完全不同的。因为软件是逻辑元件,不是一种实物。软件故障是软件中的逻辑故障所造成的,不是硬件的“用旧”、“磨损”之类问题。软件维护不是更换某种部件,而是要纠正逻辑缺陷。当软件系统变得庞大,问题变得复杂时,常常会发生“纠正一个错误带来更多新的错误!”的问题。BEGINNumber=0Totaltime=0Message=1WHILEMessageGETstatusIFstatus=STotaltime=TotaltimeCurrent-timeNumber=Number+1ELSETotaltime=Totaltime+Current-timeENDIFGETMessage/”1-startthestream;0-endofthestream”ENDWHILEPRINTNumber,Totaltime/NumberEND软件并不像人们想象的那么易于修改!3、造成软件危机的原因规模的复杂性结构的复杂性环境的复杂性领域的复杂性交流的复杂性软件规模的复杂性随着计算机应用的日益广泛,需要开发的软件规模越来越庞大。以美国宇航局的软件系统为例:1963年,水星计划的软件系统约有200万条指令;1967年,双子星座计划系统约为400万条指令;1973年,阿波罗计划系统达到1000万条指令;1979年,哥伦比亚航天飞机系统更是达到了4000万条指令。软件庞大的规模是引起技术上和心理上挫折的一个重要因素;此外,规模的复杂性引起了大量学习和理解上的负担。由于在需求分析及生成规格的阶段需要搜集和分析的信息数量非常巨大,从而可能会使得信息不正确或不完整,并且在审查阶段也未能检查出来。正如Leveson所认为的:几乎所有与计算机过程控制系统有关的事故都是源于这类由软件规模因素所引起的错误。软件结构的复杂性结构复杂性体现在管理和技术两个方面。在管理方面,开发小组用来组织和管理开发活动时所采用的层次的宽度和深度,决定了用来管理系统的结构的复杂性;此外,软件开发机构内部的惯例和制度可能会改变各小组之间的信息流动,从而增加了结构复杂性。在技术方面,软件系统的模块结构愈加复杂,模块之间复杂的调用关系以及接口信息往往超过了人们所能接受的程度。这种结构的复杂性可以用模块之间的耦合度来衡量,耦合度反映了在需求变化的情况下

1 / 77
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功