软件工程导论概述_第1页
软件工程导论概述_第2页
软件工程导论概述_第3页
软件工程导论概述_第4页
软件工程导论概述_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程导论概述教学目标:让学生理解什么是软件工程提供开发软件的方法和工具学习目的:掌握软件开发的方法和工具,实现软件开发的过程。23第1章软件工程学概述为了更有效地开发与维护软件,软件工作者从20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科—计算机软件工程学。简称软件工程是方法学41.1软件危机计算机系统发展的早期20世纪60年代以前,个体化的软件环境软件发展的第2个时期,20世纪60~70年代,软件作坊由于软件数量急剧膨胀,出现了软件危机,1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机,正式提出了软件工程这个名词51.1.1软件危机的介绍软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。包含两个方面的问题:(1)如何开发软件,以满足对软件日益增长的需求。(2)如何维护数量不断膨胀的已有软件。61.1.1软件危机的介绍软件危机的典型表现(1)对软件的开发成本和进度的估计常常很不准确。(2)用户对已完成的软件系统不满意的现象经常发生。(需求不明确产生)(3)软件产品的质量往往靠不住。(缺少测试)(4)软件往往是不可维护的。错误难改,难于重用,难于增加新功能。71.1.1软件危机的介绍软件危机的典型表现(5)软件没有适当的文档资料。文档资料必须与软件代码一致,是最新版的。(6)软件成本在计算机系统总成本中所占的比例逐年上升。1985年美国占90%(7)软件开发的生产率提高的速度慢。跟不上计算机硬件发展的速度。81.1.2产生软件危机的原因软件是计算机系统中的逻辑部件而不是物理部件。软件在计算机上试运行之前,很难衡量开发进展,很难评估软件的质量。很难发现它包含的错误。软件规模宏大,随着程序的规模增大,软件的复杂度呈指数级增加。分工合作开发软件,如何保证软件集成为一个高质量的软件系统,是一个复杂困难的问题。91.1.2产生软件危机的原因目前相当多的软件开发人员对软件开发和维护还不规范,在实践中采用了错误的方法和技术。这可能是发生软件危机的主要原因。由于历史的原因,错误的表现为:忽视软件需求分析的重要性,认为软件开发就是写程序并设法运行,轻视软件维护。101.1.2产生软件危机的原因忽视软件需求分析的重要性。对用户的需求没有正确认识就匆忙编写程序,就像没有打好地基就盖楼一样,必然垮台。软件开发先要进行软件设计,总体设计,详细设计,然后才能编写程序。最后测试编写程序只占软件开发工作的10%~20%软件产品必须由一个完整的配置,包括程序,文档和数据。必须清除只重视程序而忽视软件配置的其他部分的糊涂观念。111.1.2产生软件危机的原因在软件的不同时期进行修改付出的代价不同,在早期修改成本较低,开发时修改成本增加,完成后修改成本更高。要提高软件的可维护性,维护不可避免,软件本身的错误,随着硬件发展的升级都要修改软件维护费用占软件总费用的55%~70%12131.1.3消除软件危机的途径清除“软件就是程序”的错误观念程序是能够完成预定功能和性能的可执行的指令序列数据是使程序能够适当地处理信息的数据结构文档是开发、使用和维护程序所需要的图文资料141.1.3消除软件危机的途径软件开发是组织良好、管理严密、各类人员协同配合、共同完成的工程项目。要学习计算机软件开发的经验教训,原理、概念、技术方法。应该开发和使用更好的软件工具既要有技术措施又要有管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。151.2软件工程1.2.1软件工程的介绍软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。161.2软件工程软件工程的特性1软件工程关注于大型程序的构造。2软件工程的中心课题是控制复杂性3软件经常变化4开发软件的效率非常重要5和谐地合作是开发软件的关键(纪律)6软件必须有效地支持它的用户7由具有一种文化背景的人替具有另一种文化背景的人创造产品171.2.2软件工程的基本原理软件工程专家于1983年提出了7条软件工程的基本原理。是确保软件产品质量和开发效率的原理的最小集合。它们互相独立,又是相当完备的。可以组合成100多条软件工程的准则18用分阶段的生命周期计划严格管理应该把软件生命周期划分成若干阶段,制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划。191.2.2.2坚持进行分阶段评审错误发现的越晚,改正的代价越高,设计错误占63%,编码错误占37%在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中的错误。3实行严格的产品控制当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制。主要实行基准配置管理。201.2.2.3实行严格的产品控制

基准配置又称为基线配置,是经过阶段评审后的软件配置成份(文档和代码)。基准配置也称为变动控制:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。绝对不能誰想修改软件(包括尚在开发的软件),就随意进行修改。211.2.2.4采用现代程序设计技术研究程序设计新技术。采用各种先进的软件开发与维护技术。5结果应能清楚地审查软件产品是逻辑产品,可见性差。根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使得得到的结果能够清楚地审查。221.2.2.6开发小组的人员应该少而精人员要素质高,高素质的犯错误少,工作效率高人员多了通信开销急剧增加,通信量:N(N-1)/27承认不断改进软件工程实践的必要性注意不断地总结经验,跟上技术的进步,主动地采纳新的软件技术。231.2.3软件工程方法学软件工程包括技术和管理两方面,是技术和管理紧密结合所形成的工程学科技术:软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。241.2.3软件工程方法学软件工程方法学3要素方法:完成软件开发的各项任务的技术方法,回答“怎样做”的问题工具:为运用方法而提供的自动的或半自动的软件工程支撑环境过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤251.2.3软件工程方法学1、传统方法学(生命周期方法学或结构化范型)采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用261.2.3软件工程方法学要点:软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进了更多的实现细节。271.2.3软件工程方法学在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两方面对这个阶段的开发成果进行检查,通过之后这个阶段才算结束审查的一条主要标准就是每个阶段都应该交出“最新式的”(即和所开发的软件完全一致的)高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用。281.2.3软件工程方法学面向对象方法学面向对象方法原理:把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法291.2.3软件工程方法学4个要点:(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件,用对象分解取代了传统方法的功能分解(2)把所有对象都划分成类(class),每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级),继承301.2.3软件工程方法学(4)对象彼此间仅能通过发送消息互相联系,对象与传统数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是数据处理的主体,必须向它发消息请求它执行它的某个操作以处理它的数据,而不能从外界直接对它的数据进行处理对象的所有私有信息都被封装在该对象内,不能从外界直接访问,封装311.2.3软件工程方法学面向对象方法学优点:降低了软件产品的复杂性提高了软件的可理解性简化了软件的开发和维护工作促进了软件重用321.2.3软件工程方法学传统方法学vs面向对象方法学传统方法学:强调自顶向下顺序地完成软件开发的各阶段任务面向对象方法学:一个主动地多次反复迭代的演化过程;面向对象方法普遍进行的对象分类过程,支持从特殊到一般的归纳思维过程;通过建立类等级而获得的继承性,支持从一般到特殊的演绎思维过程331.3软件生命周期软件的生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃,这个漫长的时期称为软件的生命周期。341.3软件生命周期3个时期:软件定义:

问题定义可行性研究需求分析软件开发:总体设计详细设计编码和单元测试综合测试

运行维护软件维护

351.3软件生命周期软件定义时期的任务:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成。361.3软件生命周期开发时期具体设计和实现在前一个时期定义的软件,它通常由4个阶段组成:

总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。371.3软件生命周期维护时期的主要任务是使软件持久地满足用户的需要。具体地说,当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的新需要。381.3软件生命周期1、问题定义主题:“要解决的问题是什么?”任务:通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认391.3软件生命周期2、可行性研究主题:“对于上一个阶段所确定的问题有行得通的解决办法吗?”任务:研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法401.3软件生命周期3、需求分析主题:“为了解决这个问题,目标系统必须做什么”任务:确定目标系统必须具备哪些功能,通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。规格说明书

(specification):准确地记录对目标系统的需求的文档411.3软件生命周期4、总体设计主题:“概括地说,应该怎样实现目标系统?”任务:应该设计出实现目标系统的几种可能的方案;设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系421.3软件生命周期5、详细设计主题:“应该怎样具体地实现这个系统呢?”任务:设计出程序的详细规格说明,详细地设计每个模块,确定实现模块功能所需要的算法和数据结构431.3软件生命周期6、编码和单元测试主题:具体实现任务:写出正确的容易理解、容易维护的程序模块,并且仔细测试编写出的每一个模块441.3软件生命周期7、综合测试主题:“全面测试软件”任务:通过各种类型的测试(及相应的调试)使软件达到预定的要求,应该用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来作为软件配置的一个组成部分451.3软件生命周期8、软件维护主题:“维持软件的正常运行”任务:通过各种必要的维护活动使系统持久地满足用户的需要,包括改正性维护,适应性维护,完善性维护,预防性维护;每一项维护活动都应该准确地记录下来,作为正式的文档资料加以保存461.4软件过程软件工程是有创造力、有知识的人在定义好的、成熟的软件过程框架中进行的,该过程适合开发的软件和市场的需要。软件过程是近十年来人们关注的焦点。定义:软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。471.4软件过程功能:过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。生命周期模型:简洁地描述软件过程,它规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,也称为过程模型481.4.1瀑布模型WaterfallModel

在20世纪80年代之前,瀑布模型一直是惟一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。特点1、阶段间具有顺序性和依赖性①必须等前一阶段的工作完成之后,才能开始后一阶段的工作。②前一阶段的输出文档就是后一阶段的输入文档491.4.1瀑布模型WaterfallModel2、推迟实现的观点:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论