软件工程(1)课件_第1页
软件工程(1)课件_第2页
软件工程(1)课件_第3页
软件工程(1)课件_第4页
软件工程(1)课件_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章 软件工程概述第一节 软件工程的基本概念第二节 软件工程开发模型第三节 软件开发工程过程1第一节 软件工程的基本概念1、软件工程2、软件工程过程3、软件工程的生存周期21、软件工程软件工程这一概念,主要是针对20世纪60年代的“软件危机”而提出的,自这一概念提出以来,围绕软件项目,开展了有关开发模型、方法以及支持工作的研究。1.软件工程的定义软件工程是指导计算机软件开发和维护的一门工程科学。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。31、软件工程41

2、、软件工程随着软件工程的发展过程,出现过对软件工程的各种各样的定义,其中的一些典型的定义有:1968年在第一届NATO会议上曾经给出了软件工程的一个早期定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”PWegner和BBoehm认为:软件工程是科学知识在设计和构造计算机程序以及开发、运作和维护这些程序所要求的有关文档编制中的实际应用。1983年IEEE(国际电气与电子工程师协会)的软件工程术语汇编中,将软件工程定义为:对软件开发、运作、维护、退役的系统研究方法。51、软件工程1993年IEEE进一步给出了一个更全面更具体的定义:“软件工程

3、是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;研究中提到的途径。”从以上对软件工程的不同定义中,我们可以看到对其内容的理解是逐步深入的。发展到今天,软件工程已是一门交叉性学科,它运用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法来创建软件,从而达到提高质量、降低成本的目的。61、软件工程2.软件工程的基本原理1983年B.Weohm提出了软件工程的七条基本原理,他认为,这7条原理是确保软件产品质量和开发效率的最小集合。它们是相互独立、缺一不可的最小集合,同时,它们又是完备的。71、软件工程这七条原理是:用分阶段的生命周期计划严格管理这一条

4、是吸取前人的教训而提出来的。统计表明,50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。在整个软件生命周期中应指定并严格执行六类计划,即项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划和运行维护计划。81、软件工程坚持进行阶段评审统计结果显示,大约63的错误是在编码之前造成的,错误发现的越晚,改正它要付出的代价就越大。因此,软件的质量保证工作不能等到编码结束后再进行,应坚持进行严格的阶段评审,以便尽早发现错

5、误。实行严格的产品控制在软件开发过程中麻烦的事情之一就是改动需求,因为改变一项需求需要付出较高的代价。但是实践告诉我们:需求的改动往往是不可避免的。由于各种客观的需要,不能禁止用户提出改变需求的要求,而只能依靠科学的产品控制技术来适应这种要求。91、软件工程采纳现代程序设计技术从提出软件工程的概念开始,人们主要的精力都用于研究各种新的程序设计技术。从20世纪60年代的结构化软件开发技术,以及随后发展的结构化分析和结构化设计技术,已成为大多数人认为的先进程序设计技术。再加上后来又提出的面向对象技术,从第一、第二代语言到第四代语言等等。总之采用先进的技术即可以提高软件开发的效率,又可以减少软件维护

6、的成本。101、软件工程结果应能清楚地审查软件产品不同于一般的物理产品,软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难于评价和管理。为了更好地进行管理,应根据软件开发的总目标及完成期限,尽量明确地规定开发小组的责任和产品标准,从而使所得到的标准能清楚地审查。111、软件工程开发小组的人员应少而精开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。这一条基于两点原因:高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍;另一方面,开发工作中犯的错误也要少的多。当开发小组为N人时,可能的通讯信道为N(N-1)/2,可见随着人数N增大,通讯开销将急剧

7、增大。121、软件工程承认不断改进软件工程实践的必要性上述六条原理只是对现有经验的总结和归纳,并不能保证赶上技术不断前进发展的步伐。而根据第七条原理,不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据既可以用来评估软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。131、软件工程3.软件工程的目标软件工程是一门工程性学科,目的是成功地建造一个大型软件系统。所谓成功,主要达到以下几个目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护用费;能按时完成开发任务

8、,及时交付使用;以及开发的软件可靠性高等等。4.软件工程的主要内容软件工程研究的主要内容是指软件开发技术和软件开发管理两个方面。在软件开发技术中,它主要研究软件开发方法、软件开发过程、软件开发工具和环境。在软件开发管理中,它主要研究软件管理学、软件经济学和软件心理学等。141、软件工程152、软件工程过程软件工程过程是开发或维护软件及其相关产品的一系列活动。软件工程过程规定了获取、供应、开发、操作和维护软件时,要实施的过程、活动和任务。其目的是为各种人员提供一个公共的框架,以便使用相同的语言进行交流。软件工程过程一般包括开发过程、管理过程、供应过程、获取过程、操作过程、维护过程和支持过程等七个

9、方面。1.开发过程开发过程就是开发者和机构为了定义和开发软件或服务所需的活动。此过程包括需求、分析、设计、编码、集成、测试、软件安装和验收等活动。162、软件工程过程2.管理过程管理过程是指软件工程过程中各项管理的活动,包括项目开始和范围定义;项目管理计划;实施和控制,评审和评价;项目完成。3.供应过程供应过程是供应方按照合同向需求方提供合同中的系统、软件产品或服务所需的活动。4.获取过程根据需要,获取过程是需求方按合同要求获取一个系统、软件产品或服务的活动。172、软件工程过程5.操作过程操作过程是操作者和机构为了在规定的运行环境中为其用户运行一个计算机系统所需要的活动。6.维护过程维护过程

10、是维护者和机构为了管理软件的修改,使它出于良好运行状态需要的活动。7.支持过程支持过程对项目的生存周期过程给予支持。它有助于项目的成功并能提高项目的质量。这个过程没有规定一个特定的生存周期模型或软件开发方法,各软件开发机构可为其开发项目选择一种生存周期模型,并将软件工程过程所含的过程、活动与任务映射到该模型中。182、软件工程过程软件工程过程是一个软件开发组织针对某一类软件产品为自己规定的工作步骤,它应当是科学的、合理的,否则必将影响到软件产品的质量。一个良好的软件工程过程应当具备如下特点:易理解性;可见性,是指每个过程活动都以得到明确的结果而告终,保证过程的进展对外可见;可支持性,是指容易得

11、到CASE工具的支持;可接受性,是指比较容易被软件工程师接受和适用;可靠性,是指不会出现过程错误,或者出现的过程错误能够在产品出错之前被发现;健壮性,是指不受意外发生问题的干扰;可维护性,是指过程可以根据开发组织需求的改变而改进;高效率性,是指从给出软件规格说明开始,就能够较快地完成开发和改进。193、软件工程的生存周期如同任何事物一样,软件也有一个孕育、诞生、成长、成熟和衰老的生存过程,因此称其为软件工程的生存周期。软件工程的方法、工具和管理都是以软件工程的生存周期为基础的。软件工程的生存周期的基本思想是:任何一个软件都是从它的提出开始到最终被淘汰为止,有一个存在期。其主要包括以下六个过程:

12、1.计划计划主要包括确定要开发软件系统的总目标,给出它的功能、性能、可靠性以及接口等方面的要求,这可由系统分析员通过对用户和使用部门负责人的访问和调查,讨论来完成;分析员和用户合作,研究完成该项软件任务的可行性,探究问题的可能方案,并对可利用的资源、成本、可取得的效益、开发的进度做出估计,制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查。203、软件工程的生存周期2.分析和定义分析和定义指待开发软件提出的需求进行分析并给出详细的定义。软件人员和用户共同讨论哪些需求是可以满足的,并对其加以确切地描述。然后编写软件需求说明书或系统功能说明书以及初步的系统用户手册,提交管理机构评审

13、。3.软件设计软件设计的根本任务是将分析时期得出的逻辑模型设计成具体计算机软件方案。具体来说,主要包括设计软件的总体结构和设计软件具体模块的实现算法。软件设计结束之前,也要进行有关评审,评审通过后才能进入编程时期。软件设计时期也可以根据具体软件的规模、类型等决定是否细分成概要设计和详细设计两个阶段。213、软件工程的生存周期4.程序设计这个阶段主要是把每个模块的控制结构转换成计算机可接收的程序代码,即写成以某特定程序设计语言表示的“源程序清单”。当然,写出的程序应是结构好,清晰易读,并且与设计相一致。5.软件测试软件测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个

14、组成部分。测试分为模块测试、组装测试和确认测试。模块测试是查找各模块在功能结构上存在的问题。组装测试是将各模块按一定顺序组装起来进行的测试,主要是查找各模块之间接口上存在的问题。确认测试是按软件需求说明书上的功能逐项进行的,发现不能满足用户需求的问题,决定开发的软件是否合格、能否交付用户使用等。223、软件工程的生存周期6.运行与维护已交付的软件投入正式使用,便进入运行阶段。这一阶段可能持续若干年甚至几十年。软件在运行中可能由于多方面的原因,需要对它进行修改。其原因可能有:运行中发现了软件中的错误需要修正;为了适应变化了的软件工作环境,需做适当变更;为了增强软件的功能需做变更等。23第二节 软

15、件工程开发模型1、瀑布模型2、原型模型3、螺旋模型4、喷泉模型241、瀑布模型瀑布模型由W.Royce于1970年首先提出。根据软件工程生存周期各个阶段的任务,瀑布模型从可行性研究开始,逐步进行阶段性变换,直至通过确认测试并得到用户确认的软件产品为止。瀑布模型上一阶段的变换结果是下一阶段变换的输入,相邻两个阶段具有因果关系,紧密联系。一个阶段的失误将蔓延到以后的各个阶段。为了保障软件开发的正确性,每一阶段任务完成后,都必须对它的阶段性产品进行评审,确认之后再转入下一阶段的工作。评审过程发现错误和疏漏后,应该及时反馈到前面的有关阶段修正错误或弥补疏漏,然后再重复前面的工作,直至某一阶段通过评审后

16、再进入下一阶段。瀑布模型如图所示。251、瀑布模型261、瀑布模型瀑布模型有许多优点,如可强迫开发人员采用规范的方法;严格规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证等。但瀑布模型也存在缺点,其主要表现在:在软件开发的初始阶段指明软件系统的全部需求是困难的,有时甚至是不现实的。而瀑布模型在需求分析阶段要求客户和系统分析员必须做到这一点才能开展后续阶段的工作。确定需求后,用户和软件项目负责人要等相当长的时间才能得到一份软件的最初版本。如果用户对这个软件提出比较大的修改意见,那么整个软件项目将会蒙受巨大的人力、财力和时间方面的损失。272、原型模型原型模

17、型又称演化模型,主要是针对事先不能完整定义需求的软件项目开发而言的。许多软件开发项目由于人们对软件需求的认识模糊,很难一次开发成功,返工再开发难以避免。因此,人们对需开发的软件给出基本需求,作第一次试验开发,其目标仅在于探索可行性和弄清需求,取得有效的反馈信息,以支持软件的最终设计和实现。通常我们把第一次实验性开发出的软件称为原型(prototype)。这种开发模型可以减少由于需求不明给开发工作带来的风险,有较好的效果。相对瀑布模型来说,原型模型更符合人类认识真理的过程和思维,是目前较流行的一种实用的软件开发方法。原型模型如图所示。 282、原型模型292、原型模型原型化模型有丢弃型、样品型和

18、渐增式演化型三种形式。丢弃型是指原型开发后,已获得了更为清晰的需求反馈信息,原型无需保留而丢弃,开发的原型仅以演示为目的,这往往用在软件的用户界面的开发上。样品型是指原型规模与最终产品相似,只是原型仅供研究用。渐增式演化型是指原型作为最终产品的一部分,它可以满足用户的部分需求,经用户试用后提出精华系统、增强系统能力的需求,开发人员根据反馈信息,实施开发的迭代过程。如果在一次迭代过程中,有些需求还不能满足用户的需求,可以在下一迭代过程中予以修正,整个实现后软件才可最终交付使用。303、螺旋模型螺旋模型是瀑布模型与原型模型相结合,并增加两者所忽略的风险分析而产生的一种模型,该模型通常用来指导大型软

19、件项目的开发,它将开发划分为制定计划、风险计划、实施开发和客户评估四类活动。沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本。如果开发风险过大,开发机构和客户无法接受,项目有可能就此中止;多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品。该模型是由TRW公司的B.Boehm于1988年提出的。下图显示了螺旋模型的原理,沿着螺旋线旋转,在笛卡儿坐标的四个像限上分别表达了四类活动。313、螺旋模型323、螺旋模型制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;风险分析:分析所选方案,考虑如何识别和消除风险;实施开发:实施软件开发;客户评估:评价软件功能

20、和性能,提出修正建议。螺旋模型有许多优点,主要表现在:对可选方案和约束的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标,减少了过多测试或测试不足所带来的风险。但是要求许多客户接受和相信并不容易,使用该模型需要具有相当丰富的风险评估经验和专门知识,如果项目风险较大,又未必能及时发现,势必造成重点损失。目前国内许多软件公司还未能及时掌握和运用这种模型,有待进一步积累经验。334、喷泉模型喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,以面向对象的软件开发方法为基础,它适合面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发

21、过程具有迭代性和无间隙性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演化的系统。无间隙是指在分析、设计和实现等开发活动之间不存在明显的边界。喷泉模型参见下图。344、喷泉模型35第三节 软件开发工程过程1、需求分析2、概要设计3、详细设计4、实现5、软件测试361、需求分析软件需求分析是软件开发中的第一步。只有通过需求分析才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。软件需求分析工作是一个不断认识和逐步细化的过程。该过程将软件调研阶段的需求资料进行分析和设计,使软件范围逐步细化到详细定义的程度,并分析出各种不同的软件元素,然后为这些元素找到

22、可行的解决方法。需求分析可分为:商业建模、问题获取、分析、规格说明和验证5个阶段。这些子项包括软件类产品中需求收集、评价、编写文档等所有活动。371、需求分析382、概要设计在概要设计阶段,开发人员要将确定的各项功能需求转换成需要的体系结构,在该体系结构中,每个成分都是意义明确的模块,即每个模块都和某些功能需求相对应。因此,概要设计就是设计软件的结构,该结构由哪些模块组成,这些模块的层次结构是怎样的,这些模块的调用关系是怎样的,每个模块的功能是什么。同时还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。392、概要设计通

23、常,在软件的概要设计中,系统分析员可根据软件需求规格说明书,采用自顶而下、逐步求精、抽象、模块化、局部化、信息隐藏的途径来实现。软件系统的设计采用层次结构并用结构图表示。在此过程中系统分析员可以使用Rationa Rose,WitClass,VisualModel等工具解决此阶段的问题。概要设计还应提供概要设计说明书、数据库或数据结构设计说明书、组装测试计划等文件。403、详细设计概要设计确定了软件系统的总体结构,详细设计则对概要设计结果进一步细化,给出目标系统的精确描述,以便在编码阶段直接翻译成计算机的程序代码。详细设计的任务是通过对概要设计产生的功能逐步细化,形成若干个可编程的程序模块,通

24、过过程设计语言PDL设计程序模块的内部细节,包括算法、数据结构和各程序模块之间的详细接口信息,为编写源代码提供必要的说明,建立模块开发卷宗,拟定模块测试方案。413、详细设计详细设计按照时间进程应该分为两个阶段:模块功能阶段和程序流程编写说明。在模块功能阶段主要工作内容为:模块需求、功能细化、数据结构、数据操作和界面设计,主要是说明功能实现和数据操作的目的,而程序流程编写说明的主要工作内容包括:程序流程、关键技术等,主要目的是为编写程序提供方便。详细设计需根据软件需求规格说明和概要设计的结果进行,可以选用的方法和工具是比较多的,如结构化的设计方法、面向对象的设计等方法和Rstion Rose、

25、WitClass、VisualModel及Microsoft Visio等工具。软件开发人员可以根据实际情况选用适当的方法和工具。详细设计应该遵循的原则是:设计应与软件需求保持一致,设计的软件结构应支持模块化、信息隐藏等。详细设计应该提供详细设计规格说明书和单元测试计划。424、实现实现的主要任务是为每个模块编写程序,它将详细设计的结果转换成某种程序设计语言书写的源程序,并对这些程序进行调试和程序单元测试。在编写程序代码时,需注意两点:第一,在开发一个软件系统时,软件人员应该克制急于去编程的愿望,必须先经过需求分析确定拥护要求,再经过软件设计完成绘制蓝图,然后才能进行程序编写。第二,编写程序必

26、须讲究规范和风格,由于读程序仍然是改正错误主要手段,风格好的程序必然易懂、易改、易理解。434、实现程序员以详细设计规格说明书为依据,基于某种程序设计语言进行编码。可以使用Visual Basic、Visual C、Visual Java等集成开发环境进行开发。值得指出的是,系统分析方法、系统设计方法、编程方法及选用的程序设计语言应尽可能匹配。如采用结构化的分析方法就应该采用结构化的编程技术,选用支持结构化编程的Pascal语言、C语言。若采用面向对象的分析方法、面向对象的设计方法就应该选用面向对象的编程技术和支持面向对象的编程语言,如C、Java等。 444、实现为了保证模块测试的质量,测试

27、之前应制定测试方案并产生相应的测试数据。不仅要对合法数据进行测试,而且还要对非法输入数据进行测试,既要对正常处理路径进行测试,也要对异常或出错处理路径进行测试。程序模块测试方案、用例、预期的测试结果是软件文档的重要组成部分,必须及时整理并存档。实现的阶段性产品是软件系统的源程序代码。455、软件测试在软件开发过程中,特别是在开发大型软件系统的过程中,面对的问题是极其复杂。因此,在软件生命周期的每个阶段就不可避免地会产生差错。但是,经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误。如果在软件运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果。软件测试的目的就是要在软件投入生产运行之前,尽可能多地发现软件中的错误。大量

温馨提示

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

评论

0/150

提交评论