资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,NIHAO,*,软件工程概述,2,主要内容,软件与软件危机,软件工程学,传统软件工程和面向对象软件工程,软件工程的应用,3,1.1,软件与软件危机,(,一,),软件的定义,R.S.Pressman,的定义:,软件是能够完成预定功能和性能的计算机程序和使程序正常执行所需要的数据、加上描述程序的操作和使用的文档。,软件,=,程序,+,数据,+,文档,程序:按事先设计的功能和性能需求执行的指令序列,数据:是程序能正常操纵信息的数据结构,文档:与程序开发、维护和使用有关的图文材料,4,软件,是计算机系统中与硬件相互依存的另一部分,,它是包括程序,数据及其相关文档的完整集合。,程序,是按事先设计的功能和性能要求执行的指令序列,数据,是使程序能正常操纵信息的数据结构,文档,是与程序开发,维护和使用有关的图文材料,什么是软件?,5,(二)软件的特征,软件是,逻辑产品,,而不是物理产品,在开发、生产、维护和使用等方面与硬件有着不同的特征:,失效率,时间,软件失效率曲线,失效率,时间,磨合,调整,磨损,用坏,硬件失效率曲线,理想曲线,修改点,软件的生产与硬件不同,软件产品的生产主要是研制,在它的开发过程中没有明显的制造过程,成本主要体现在软件的开发和研制上,可进行大量的复制。,在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。,6,软件的开发和运行常受到计算机系统的限制,对计算机系统中的软件系统和硬件系统都有着不同程度的依赖性。,软件的开发尚未完全摆脱手工艺的开发方式,主要靠脑力劳动生产,大部分产品是“定做”的。,软件技术进步落后于需求增长,7,软件本身是,复杂,的,其复杂性来自于所反映的实际问题的复杂性和程序逻辑的复杂性。,实际问题的复杂性,所反映的自然规律和人类社会的事务都具有一定的复杂性。,程序逻辑结构的复杂性,例,:1,、,Windows95,程序超过,1000,万行,2,、,WWMCCS,(军事和控制)花费,3500,多人拖了几年,,交付后发现出,100,个错误,最后失败。,3,、城市银行出纳机程序,7.8,万行代码,,150,人年,4,、,VISTA,操作系统,,10,亿行代码,,5,年,,6000,名工程师,,花费,200,亿美元。,8,软件成本相当昂贵,软件的研制工作须投入大量的、复杂的、高强度的脑力劳动。,计算机系统硬、软件成本比例的变化图,9,计算机第一定律,摩尔定律,晶,体,管,数,每,18,个月芯片能力增长一倍。,单,位,时,间,执,行,的,指,令,数,百万条,/,每秒,10,相当多的软件工作涉及到社会因素(包括人的因素)。,如企业信息管理软件的开发和运行涉及企业中机构的重新设置、现有的管理体制及管理方式的改变,这可能会触及到一部分人的利益,因而软件开发如若得不到应有的重视和必要的支持,将造成人力和资金上的困难,直接影响到项目的成败。,11,(三)软件的分类,1.,按软件的,功能,进行划分,2.,按软件的,规模,进行划分,3.,按软件的,工作方式,进行划分,4.,按软件,服务对象,的范围进行划分,5.,按软件,使用的频度,进行划分,6.,按软件,失效的影响,进行划分,12,1.,按软件的功能进行划分,系统软件,能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效的工作的软件。,操作系统,数据库管理系统,设备驱动程序,通信处理程序等,13,支撑软件,是协助用户开发软件的工具性软件,其中包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发的工具。,文本编辑程序,文件格式化程序,磁盘向磁带做数据传输的程序,程序库系统,支持需求分析、设计、实现、测试和支持管理的软件,14,应用软件,是在特定领域内开发,为特定目的服务的一类软件。,商业数据处理软件,工程与科学计算软件,计算机辅助设计制造软件,系统仿真软件,智能产品嵌入软件,医疗、制药软件,事务管理、办公自动化软件,计算机辅助教学软件,15,2.,按软件的规模进行划分,根据参加人员数、研制周期、源程序行数等参数对软件规模进行估计。,类别 参加人员数 研制期限 源程序行数,微型,1 1,4,周,0.5k,小型,1 1,6,月,1k,2k,中型,2,5 1,2,年,5k,50k,大型,5,20 2,3,年,50k,100k,甚大型,100,1000 4,5,年,1M(=1000k),极大型,2000,5000 5,10,年,1M,10M,16,3.,按软件工作方式划分,实时处理软件,在事件或数据产生时,立即予以处理,并及时反馈信号,控制需要监测和控制的过程的软件。,分时软件,允许多个联机用户同时使用计算机,系统把处理机时间轮流分配给各联机用户,使各用户都感到只是自己在使用计算机。,交互式软件,能实现人机通信的软件,.,批处理软件,把一组输入作业或一批数据以成批处理的方式依次运行,按顺序逐个处理的软件。,17,4.,按软件服务对象的范围进行划分,项目软件(定制软件),受客户委托,由软件开发机构在合同的约束下开发出来的软件。,产品软件,由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。,18,5.,按使用的频度进行划分,一次使用,软件开发出来仅供一次使用。,频繁使用,软件在工作中已成为不可或缺的工具,须频繁使用。,19,6.,按软件失效的影响进行划分,一般可靠性软件,软件出现故障或失效时,带来的影响不大的软件。,高可靠性软件,软件出现故障或失效时,将会造成严重后果的软件。,20,(四)软件的发展阶段,程序设计阶段,50,至,60,年代,程序(软件)系统阶段,60,至,70,年代,软件工程阶段,70,年代以后,21,程序设计阶段的特点,生产方式:个体手工劳动,生产工具:机器语言、汇编语言,开发方法:追求编程技巧,追求程序运行效率。 程序难读、难懂、难修改。,硬件特征:价格贵、存储容量小、运行可靠性差,软件特征:只有程序、程序设计概念,不重视程序设计方法。,22,程序(软件)系统阶段的特点,生产方式:作坊式小集团合作生产,生产工具:高级语言,开发方法:仍旧重个人技巧,但开始提出结构化方法。,硬件特征:速度、容量、工作可靠性有明显提高,价格降低,销售有爆炸性增长。,软件特征:程序员数量猛增,但缺乏训练、素质差,软件开发技术没有根本性突破,开发人员素质和开发技术不适应规模大、结构复杂的软件开发,导致了软件危机的产生。,23,软件工程阶段的特点,生产方式:工程化生产,生产工具:使用数据库、开发工具、开发环境、网络、分布式、面向对象技术来开发软件。,硬件特征:向超高速、大容量、微型化以及网络化方向发展。,软件特征:开发技术有很大进步,但未能获得突破性进展,软件价格不断上升,但仍未能完全摆脱软件危机。,24,软件开发中的两个问题,:,1),如何开发软件,以满足日益,增长的需求?,2),如何维护数量不断膨胀的已,有软件?,软件危机出现了,25,(五)软件危机,定义,在计算机软件的开发和维护过程所遇到的一系列严重问题 (诸如:软件开发过程控制困难、软件交工不断延期、开发费用不断上升、软件维护困难、软件质量得不到保证等)。,软件危机的表现,软件开发无计划性,经费预算经常突破,完成时间一再拖延。,软件需求不充分,开发的软件不能满足用户要求。,软件开发过程无规范,软件可维护性差。,软件产品无评测手段,开发的软件可靠性差。,26,软件危机产生的原因,造成软件危机的原因是由于软件本身的特点及开发软件的方式、方法、技术和人员造成的。,软件的规模越来越大,结构越来越复杂。,软件开发管理困难而复杂。,软件开发费用不断增加。,软件开发技术落后。,生产方式落后,仍然采用个体手工方式开发。,开发工具落后,生产率提高缓慢。,27,软件危机的解决途径,组织管理,工程项目管理方法,技术措施,软件开发技术与方法,软件工具,28,Software Crisis,1965 to 1985: The software crisis,Software engineering was spurred by the so-called,software crisis,of the,1960s,1970s, and,1980s, which identified many of the problems of software development. Many,software,projects ran over,budget and schedule,. Some projects caused property damage. A few projects caused,loss of life,. Some used the term,software crisis,to refer to their inability to hire enough qualified programmers. The software crisis was originally defined in terms of,productivity, but evolved to emphasize,quality,.,29,Consequence of SC,Cost and Budget Overruns:,The,OS/360,operating system was a classic example. This decade-long project from the 1960s and 1970s eventually produced one of the most complex software systems ever created. OS/360 was one of the first large (1000 programmer) software projects.,Fred Brooks,claims in,The Mythical Man Month,that he made a multi-million dollar mistake by not developing a coherent,architecture,before starting development.,Property Damage:,Software defects can cause property damage. Poor,software security,allows hackers to steal identities, costing time, money, and reputations.,Life and Death:,Software defects can kill. Some,embedded systems,used in,radiotherapy,machines failed so catastrophically that they administered,lethal doses,of,radiation,to patients.,30,What is Software Crisis,Software Crisis,(,软件危机,),是,计算机软件,在它的开发和维护过程中所遇到的一系列严重问题。概括地说,主要包含两方面的问题:如何开发,软件,,怎样满足对软件日益增长的,需求,;如何维护数量不断膨胀的已有软件。,31,软件危机的主要表现:,1.,对软件开发成本和进度的估计常常很不准确。,实际成本比估计成本有可能高出一个数量级,实际进度比预期进度拖延几个月甚至几年的现象并不罕见。这种现象降低了开发组织的信誉。为赶进度和节约成本所采取的权宜之计往往又损害了软件产品的质量,从而不可避免地引起用户的不满。,2.,用户对,“,已完成的,”,软件系统不满意的现象经常发生。,软件开发人员常常在对,用户需求,只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就仓促上阵匆忙着手编写程序。软件开发人员和用户之间的交流往往很不充分,,“,闭门造车,”,必然导致最终产品不符合用户实际需要。,32,软件危机的主要表现,(,续,),:,3.,软件产品的质量常常靠不住。,软件可靠性和质量保证的确切定量概念刚刚出现,软件质量保证技术(审查、,复审,和测试)还没有坚持不懈地应用到软件开发的全过程中,这些都会导致软件产品发生质量问题。,4.,软件常常是不可维护的。,程序中的错误很难改正,实际上不可能使这些程序适应新的硬件环境,也不能根据用户的需求在原有程序中增加新的功能。,33,软件危机的主要表现,(,续,),:,5.,软件通常没有适当的文档资料。,软件不仅是程序,还应该有一整套,文档资料,。这些文档资料是在软件开发过程中产生出来的,而且应该是,“,最新的,”,(与代码完全一致)。缺乏文档必然给软件的开发和维护带来许多严重的困难和问题。,6.,软件成本在计算机系统总成本中所占比例逐年上升。,随着微电子技术的进步和生产自动化程度的提高,硬件成本逐年下降,然而软件开发需要大量的人力,软件成本随着通货膨胀以及软件规模和数量的不断扩大而逐年上升。美国在,1995,年的调查表明,软件成本大约已占计算机系统总成本的,90%,。,34,Thinking about SC,软件危机的出现,使得人们去寻找产生危机的内在原因,发现其原因可归纳为两方面,,一方面是由软件生产本身存在着复杂性,另一方面却是与软件开发所使用的方法和技术有关。,“,软件危机,”,使得人们开始对软件及其特性进行更深一步的研究,人们改变了早期对软件的不正确看法。早期那些被认为是优秀的,程序,常常很难被别人看懂,通篇充满了程序技巧。现在人们普遍认为,优秀的程序除了功能正确,性能优良之外,还应该容易看懂、容易使用、容易修改和扩充。,软件工程正是为克服软件危机而提出的一种概念,并在实践中不断地探索它的原理,技术和方法。在此过程中,人们研究和借鉴了工程学的某些原理和方法,并形成了一门新的学科软件工程学,但可惜的是时至今日人们并没有完全克服软件危机。,35,IEEE(83),指出:,软件工程是开发、运行、维护和修复软件的系统方法。,IEEE(93),指出:,软件工程是将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化的方法应用于软件开发中。,36,软件工程的定义,Boehm,:,运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料,IEEE,:,软件工程是开发、运行、维护和修复软件的系统方法,Fritz Bauer,:,建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法,37,软件工程,三个要素,工具,质量焦点,过程,Software engineering layers,方法,工 具,38,软件工程三要素:方法、工具和过程,软件工程方法为软件开发提供了 “如何做” 的技术,软件工具为软件工程方法提供了自动的或半自动的软件支撑环境,39,软件工程过程定义了,:,方法使用的顺序,要求交付的文档资料,为保证质量和适应变化所需要的管理,软件开发各个阶段完成的里程碑,40,软件工程的目标,低,成本,满足,功能,满足,性能,易于,移植,维护费用,低,及时交付,使用,简而言之,提高软件,质量,,降低软件 开发和维护,成本,41,B.W.Boehm(1983),:,(1),用分阶段的生存周期计划严格管理软件开发,(2),进行阶段评审,(3),实行产品版本控制,(4),采用现代程序设计技术,(5),结果应能清楚的审查,(6),开发小组成员应少而精,(7),承认不断改进软件工程,实践的必要性,软件工程原则,42,定义,指导计算机软件开发和维护的工程学科,工程管理,+,开发技术,采用工程化的原理与方法对软件进行计划、开发和维护,1.2,软件工程学,软件工程学的范畴,软件开发技术,软件工具,软件工程环境,软件开发方法学,软件工程管理,软件管理学,软件经济学,软件度量学,43,1.,软件开发方法学,软件方法学是指组织软件生产过程的一系列,方法,、,技术,和,规范,。,传统的软件开发方法,结构化方法,面向过程和功能,采用自顶向下逐步分解、逐步细化的方法对问题进行分析、设计。包括结构化分析、结构化设计、结构化程序设计。,面向对象的软件开发方法,采用面向对象技术,将面向对象的观点扩展到软件的分析和设计阶段,包括面向对象分析、面向对象设计、面向对象程序设计。,基于数据结构的开发方法,JACKSON,方法,基于组件的开发方法,把应用逻辑和实现分离,提供标准接口和框架,使软件开发变成组件的组合,基于组件的软件方法学是以接口为中心、面向行为的、基于体系结构设计的 。,44,2.,软件工具,在软件开发的整个过程中,辅助软件开发的软件,。如需求分析工具、软件设计工具、编译程序、编辑程序、软件测试工具、软件配置工具等。,3.,软件工程环境,方法与工具相结合,再加上配套的软、硬件支持就形成环境。,4,、软件工程管理,为了按照进度及预算完成开发计划,实现预期的经济和社会效益。,包括:成本估算、进度安排、人员组织和质量保证等多方面的内容,涉及管理学、度量学和经济学等多项学科。,45,1.3,传统软件工程和面向对象软件工程,程序设计方法的两次飞跃,结构化程序设计,程序,=,数据结构,+,算法,面向对象程序设计,程序,=,对象,+,消息,46,面向过程和面向对象的编码,存款,取款,利息,结算,帐户,余额,帐户,余额,利息结算,存 款,取 款,47,两类软件工程方法,传统软件工程,结构化开发方法,软件分析 总体设计 详细设计 面向过程的编码 测试,面向对象软件工程,面向对象的开发方法,软件分析与对象抽取 对象详细设计 面向对象的编码 测试,48,1.4,软件工程的应用,软件工程指导中小型软件,软件工程指导大型软件,软件工程的成就,使用软件工程的方法,可以极大改善软件开发过程、软件质量和开发效率。,软件工程的局限,软件工程不是灵丹妙药,并不能解决软件开发的根本问题,不能避免软件危机。,49,Any Question,?,Thanks For Coming!,
展开阅读全文