软件工程理论与实践 课件 第1章 软件工程概述-1_第1页
软件工程理论与实践 课件 第1章 软件工程概述-1_第2页
软件工程理论与实践 课件 第1章 软件工程概述-1_第3页
软件工程理论与实践 课件 第1章 软件工程概述-1_第4页
软件工程理论与实践 课件 第1章 软件工程概述-1_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第1章软件工程概述目录2第一节软件的概念及特点第二节

软件危机第四节

软件工程第五节

软件开发方法第六节

软件工程工具第七节

职业道德第三节

软件工程软件的概念及特点软件的概念

计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序,运行过程中产生的各种结果,以及以硬复制和电子表格等多种方式存在的软件文档。4软件的特点51)具有抽象性2)无明显的制造过程3)存在退化问题4)对计算机系统有着不同程度的依赖性5)尚未完全摆脱人工的开发方式6)软件本身是复杂的7)成本相当昂贵8)相当多的软件工作涉及社会因素第二节软件危机1.2.1软件危机的表现与原因1.2.2软件危机的启示1.2软件危机1.2.1软件危机的表现与原因在软件开发的过程中,会经常出现一些不能按时完成任务、产品质量得不到保证、工作效率低下和开发经费严重超支等现象。计算机软件的开发、维护和应用过程中普遍出现的这一些严重的问题便是软件危机。主要表现1)产品的功能或特性与需求不符2)相比硬件,软件代价过高3)质量难以保证,难以发挥硬件潜能4)难以准确估计开发、维护的费用和开发周期5)难以控制开发风险,开发速度赶不上市场变化6)软件产品修改、维护困难7)软件文档不完备,存在内容与产品不符的情况71.2软件危机1.2.2软件危机的启示

软件危机给我们的最大启示,是使我们更加深刻的认识到软件的特性以及软件产品开发的内在规律。软件产品是复杂的人造系统,具有复杂性、不可见性和易变性,难以处理。个人或小组在开发小型软件时使用到的非常有效的编程技术和过程,在开发大型、复杂系统时难以发挥同样的作用。从本质上讲,软件开发的创造性成分很大、发挥的余地也很大,很接近于艺术。它介于艺术与工程之间的某一点,并逐步向工程一段漂移,但很难发展到完全的工程。81.2软件危机1.2.2软件危机的启示计算机和软件技术的快速发展,提高了用户对软件的期望,促进了软件产品的演化,对软件产品提出了新的、更多的需求,难以在可接受的开发进度内保证软件的质量。几乎所有的软件项目都是新的,而且是不断变化的。项目需求在开发过程中会发生变化,而且很多原来预想不到的问题会出现,对设计和实现手段进行适当的调整是不可避免的。“人月神话”现象——生产力与人数并不成正比。9第三节软件工程1.3.1软件工程的概念1.3.2软件工程的基本目标和原则1.3.3软件过程1.3软件工程1.3.1软件工程的概念IEEE对软件工程的定义为:1)将系统化、严格约束的、可量化的方法应用于软件的开发、运

行和维护,即将工程化应用于软件2)对1)中所述方法的研究具体说来,软件工程是以借鉴传统工程的原则、方法,以提高质量,降低成本为目的指导计算机软件开发和维护的工程学科。它是一种层次化的技术111.3软件工程工具层方法层过程层质量保证层12工程学计算机科学管理学经济学心理学数学1.3软件工程1.3.1软件工程的概念软件工程的根基在于对质量的关注;软件工程的基础是过程层,它定义了一组关键过程区域的框架,使得软件能够被合理和及时地开发;软件工程的方法提供了建造软件在技术上需要“做什么”,它覆盖了一系列的任务,包括需求分析、设计、编程、测试和支持等;软件工程的工具对过程和方法提供了自动的或半自动的支持。而软件工程本身是一个交叉学科,涉及多种学科领域的相关知识,包括工程学、数学、计算机科学、经济学、管理学、心理学等。1.3软件工程1.3.1软件工程的14关注质量过程方法工具软件工程1.3.2软件工程研究的内容

软件工程研究的内容主要包括以下两个部分:软件开发技术:主要研究软件开发方法、软件开发过程、软件开发工具和环境。软件开发过程管理:主要研究软件工程经济学和软件管理学。三要素

目标1.3软件工程1.3.2软件工程的基本目标和原则软件工程要达到的基本目标包括:达到要求的软件功能取得较好的软件性能开发出高质量的软件付出较低的开发成本需要较低的维护费用能按时完成开发工作,及时交付使用软件工程的7条基本原则:用分阶段的生命周期计划进行严格的管理坚持进行阶段评审实行严格的版本控制采用现代程序设计技术软件工程结果应能清楚的审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性151.3软件工程1.3.1软件过程软件的诞生和生命周期是一个过程,我们总体上称这个过程为软件过程。软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动,每一项活动又可以分为一系列的工程任务。任何一个软件开发组织,都可以规定自己的软件过程,所有这些过程共同构成了软件过程。过程定义了运用方法的顺序,应该交付的文档资料,为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。通常,使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分为哪些阶段及各个阶段的执行顺序,因此也称为过程模型。16第四节软件过程模型瀑布模型快速原型模型增量模型螺旋模型喷泉模型基于组件的开发模型统一软件开发过程模型几种模型的对比几种模型之间的关系选择软件过程模型FourThreeTwoOne在软件工程中,人们通过建立抽象的软件过程模型,把软件生命周期中的各个活动或步骤安排到一个框架中,将软件开发的全过程清晰且直观地表达出来。软件过程模型的特点:描述了主要的开发阶段定义了每个阶段要完成的主要任务和活动规范了每个阶段的输入和输出提供了一个框架,把必要的活动映射到这个框架中18软件过程模型瀑布模型瀑布模型是一种线性的开发模型,具有不可回溯性。开发人员必须等前一阶段的任务完成后,才能开始进行后一阶段的工作,并且前一阶段的输出往往就是后一阶段的输入。由于其不可回溯性,如果在软件生命周期的后期发现并要改正前期的错误,那么需要付出很高的代价。传统的瀑布模型是文档驱动的。如图所示。19瀑布模型的优点是过程模型简单,执行容易;缺点是无法适应变更。瀑布模型适应于具有以下特征的软件开发项目。在软件开发的过程中,需求不发生或发生很少变化,并且开发人员可以一次性获取到全部需求。否则,由于瀑布模型较差的可回溯性,在后续阶段中需求经常性的变更需要付出高昂的代价。软件开发人员具有丰富的经验,对软件应用领域很熟悉。软件项目的风险较低。瀑布模型不具有完善的风险控制机制。20瀑布模型快速原型模型快速原型的基本思想是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。通常,用户试用原型系统之后会提出许多修改意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用……反反复复地改进,直到原型系统满足用户的要求。21快速原型模型适用于具有以下特征的软件开发项目。已有产品或产品的原型(样品),只需客户化的工程项目简单而熟悉的行业或领域有快速原型开发工具进行产品移植或升级22快速原型模型01020304增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。23增量模型增量模型的最大特点就是将待开发的软件系统模块化和组件化。基于这个特点,增量模型具有以下优点。将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。开发顺序灵活。开发人员可以对构件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。增量模型的缺点是要求待开发的软件系统可以被模块化。如果待开发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦。24增量模型增量模型适用于具有以下特征的软件开发项目。软件产品可以分批次地进行交付待开发的软件系统能够被模块化软件开发人员对应用领域不熟悉,难以一次性地进行系统开发项目管理人员把握全局的水平较高25增量模型螺旋模型26螺旋模型螺旋模型是一种用于风险较大的大型软件项目开发的过程模型。该模型将瀑布模型与快速原型模型结合起来,并且加入了这两种模型忽略了的风险分析。它把开发过程分为制定计划、风险分析、实施工程和客户评估4种活动。螺旋模型适应于风险较大的大型软件项目的开发。它的优点是将风险分析扩展到各个阶段中,大幅度降低了软件开发的风险。但是这种模型的控制和管理较为复杂,可操作性不强,对项目管理人员的要求较高。27喷泉模型是一种过程模型,同时也支持面向对象开发。在面向对象的方法中,分析模型和设计模型采用相同的符号标示体系,各阶段之间没有明显的界限,而且常常重复、迭代地进行。“喷泉”一词体现了面向对象方法的迭代和无间隙性。迭代是指各阶段需要多次重复,例如,分析和设计阶段常常需要多次、重复进行,以更好的实现需求。无间隙性是指各个阶段之间没有明显的界限,并常常在时间上互相交叉,并行进行。喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。喷泉模型28基于组件的开发模型基于组件的开发模型使用现有的组件以及系统框架进行产品开发。在确定需求之后,开发人员开始从现有的组件库中筛选合适的组件,并对组件功能进行分析。在对组件分析之后,开发人员可能适当修改需求来适应现有组件,也可能修改组件或寻找新的组件。组件筛选完成之后,开发人员需要根据需求设计或使用现有的成熟开发框架复用这些组件,一些无法利用现有组件的地方,则需要进行单独的开发,新开发的组件在经历时间考验之后也会加入到组件库中。最后将所有组件集成在一起,进行系统测试。29基于组件的开发模型充分的体现了软件复用的思想,降低了开发成本和风险,并加快了产品开发。统一软件开发过程模型统一软件开发过程(RationalUnifiedProcess,RUP)模型是基于UML(统一建模语言)的一种面向对象软件开发模型。它解决了螺旋模型的可操作性问题,采用迭代和增量递进的开发策略,并以用例驱动为特点,集中了多个软件开发模型的优点。RUP模型是迭代模型的一种。RUP模型的示意图如图所示。30图1中的纵轴以工作的内容为组织方式,表现了软件开发的工作流程。工作流程可以分为核心工作流程和核心支持工作流程。图1中的横轴以时间为组织方式,表现了软件开发的4个阶段:先启、细化、构建和产品化,每个阶段中都可能包含若干次迭代。这4个阶段按照顺序依次进行,每个阶段结束时都有一个主要里程碑。阶段与里程碑的关系如图2所示。

图1统一软件开发过程模型图2阶段与里程碑的关系统一软件开发过程模型统一软件开发过程模型是基于迭代思想的软件开发模型。采用迭代的软件工程思想可以多次执行各个工作流程,有利于更好地理解需求、设计出合理的系统架构,并最终交付一系列渐趋完善的成果。可以说,迭代是一次完整地经过所有工作流程的过程。基于统一软件开发过程模型所构造的软件系统,是由软件构件建造而成的。这些软件构件定义了明确的接口,相互连接成整个系统。在构造软件系统时,RUP采用架构优先的策略。软件架构概念包含了系统中最重要的静态结构和动态特征,架构体现了系统的总体设计。架构优先开发的原则是RUP开发过程中至关重要的主题。统一软件开发过程模型适用的范围极为广泛,但是对开发人员的素质要求较高。32统一软件开发过程模型几种过程模型的对比序号模型名称优点缺点适用范围1瀑布模型

简单好学逆转性差

需求不发生或发生很小变化2快速原型模型

开发速度快不利于创新

已有产品的原型3增量模型

可以分阶段提交有时用户不同意

系统可拆卸和组装4螺旋模型将风险分析拓展到各个阶段中建设周期长庞大、复杂、高风险项目5喷泉模型提高开发效率不利于项目的管理面向对象开发6统一软件开发过程模型

需求可变风险大

有高素质软件团队7基于组件的开发模型提高开发效率封装的过程需要编写大量代码可组装构件的系统8敏捷模型提高开发效率不适合大团队、大项目小团队,小项目331.瀑布模型与RUP模型之间的关系在宏观上,瀑布模型是静态模型,RUP模型是动态模型。RUP模型的每一次迭代,实际上都需要执行一次瀑布模型,都要经历先启、细化、构建、产品化这4个阶段,完成瀑布模型的整个过程。在微观上,瀑布模型与RUP模型都是动态模型。瀑布模型与RUP模型在每一个开发阶段(先启、细化、构建、产品化)的内部,都需要有一个小小的迭代过程,只有进行这样的迭代,开发阶段才能做得更好。瀑布模型中有RUP模型,反过来,RUP模型中也有瀑布模型。34几种过程模型之间的关系2.瀑布模型与增量模型之间的关系增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,一个模块接着一个模块地进行开发,直到开发完所有的模块。在开发每个模块时,通常都是采用瀑布模型,从分析、设计、编码和测试这几个阶段进行开发。所以,增量模型中有瀑布模型,即宏观上是增量模型,微观上是瀑布模型。增量模型也体现了迭代思想,每增加一个模块,就进行一次迭代,执行一次瀑布模型,所以,增量模型本质上是迭代的。35几种模型之间的关系3.瀑布模型与快速原型模型之间的关系快速原型的基本思想是快速建立一个能反映用户主要需求的原型系统,在此基础上之后的每一次迭代,都可能会用到瀑布模型。快速原型模型中不但包含了迭代模型的思想,而且包含了瀑布模型的思想。36几种模型之间的关系4.瀑布模型与螺旋模型之间的关系螺旋模型是瀑布模型和快速原型模型的结合,快速原型模型是原型模型的简化,原型模型又是迭代模型和瀑布模型的组合,这些模型之间是相互依存的、彼此有关的。螺旋模型每一次顺时针方向旋转,相当于顺时针方向迭代一次,都是走完一次瀑布模型,这就是瀑布模型与螺旋模型之间的关系。实际上,瀑布模型与喷泉模型也有关系。37几种模型之间的关系

各种软件过程模型反映了软件生命周期表现形式的多样性。在生命周期的不同阶段也可采用不同的软件过程模型。在具体的软件开发过程中,可以选择某种软件过程模型,按照某种开发方法,使用相应的工具进行软件开发。在选择软件过程模型时需要考虑以下几点。符合软件自身的特性,如规模、成本和复杂性等满足软件开发进度的要求对软件开发的风险进行预防和控制具有计算机辅助工具的支持与用户和软件开发人员的知识和技能相匹配有利于软件开发的管理和控制38选择软件过程模型一般来说,结构化方法和面向数据结构方法可采用瀑布模型或增量模型进行软件开发;而面向对象方法可采用快速原型模型、喷泉模型或RUP模型进行软件开发。在实际的软件开发过程中,选择软件过程模型并非是一成不变的,有时还需要针对具体的目标要求进行裁剪、修改等,从而构成完全适合开发目标要求的软件过程模型。现实中的软件系统有各种各样,软件开发方式也千差万别。对同一个问题,不同的开发组织可能选择不同的开发模型(过程模型)去解决,开发出的软件系统也不可能完全一样,但是其基本目标都是一致的,即应该满足用户的基本功能需求,否则,再好的软件系统也是没有意义的。39选择软件过程模型40软件过程模型实例第五节软件开发方法1.5.1基本的软件开发方法1.5.2开源软件开发方法1.5.3群体化软件开发方法1.5软件开发方法1.5.1基本的软件开发方法软件开发方法是一种使用定义好的技术集及符号表示组织软件生产的过程,它的目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件。常见的软件开发方法包括:1)结构化方法2)面向数据结构方法3)面向对象方法4)形式化方法此外,软件开发方法还有问题分析法、可视化开发方法等。421.5软件开发方法1.5.2开源软件开发方法开源软件开发指的是由开源软件项目开发开源软件或类似原件的过程,其中,开源软件的源代码是公开可用的。这些软件产品及其源代码在开源许可下可用,它们常常被用于研究、更改和改进其设计。开源项目可分为以下4类:1)各种各样的软件程序和库2)发行版3)其他开源项目4)书籍或独立文档项目431.5软件开发方法1.5.2开源软件开发方法开源项目的工作方式:1)意识到项目需求的个人宣布了公开开发项目的意图2)开发人员在代码库上工作,将其作为开源程序的第一个版本发布3)到期项目的源代码向公众发布4)一个完善的开源项目可以由感兴趣的外部用户派生441.5软件开发方法1.5.3群体化软件开发方法群体化软件开发方法最大的特点是面向公众。核心原则:1)开放2)平等3)共享4)全局行动相关模型:1)代码与证据紧密耦合的可信软件演化模型2)创作与生产紧密耦合的软件开发过程模型3)协同、共享、监控与分析紧密耦合的服务支撑模型451.5软件开发方法1.5.3群体化软件开发方法群体化软件开发方法将软件开发过程全面开放并快速迭代,不断发布系统原型,吸引互联网大众体验,借助互联网平台开展各种形式的交流、协同和共享,实现群体需求及创意的汇聚。软件开发团队对大众需求创意进行识别审查,借助工业化生产的强组织模式来组织软件开发过程,实现高质量软件产品的输出。群体化软件方法将大众群体的软件创作过程有机融入开发团队的软件产品的输出。群体化软件方法将大众群体的软件创作过程有机融入开发团队的软件生产流程中,能够充分发挥大众群体和开发团队在软件开发过程中各自的优势,有效地支持网络环境下的软件开发。46基本的软件开发方法对比471.5软件开发方法序号方法名称优点缺点适用范围1面向过程的方法

简单好学不适应窗口界面,维护困难

大型工程计算,实时数据跟踪处理,各种自动化控制系统,以及系统软件实现等领域2面向对象的方法

功能强大,易于维护不易掌握

互联网络时代,完全由用户交互控制程序执行过程的应用软件和系统软件的开发3面向数据的方法

通俗易懂不适于窗口界面

以关系数据库管理系统为支撑环境的信息系统建设4形式化方法准确、严谨难于上手和应用对安全性要求极高,不容许出错的软件系统,如军事、医药、交通等领域第六节软件工程工具1.6软件工程工具软件工程的工具对软件工程中的过程和方法提供自动的或半自动的支持。可以帮助软件开发人员方便、简捷、高效地进行软件的分析、设计、开发、测试、和管理等工作。有效地利用工具软维护件可以提高软件开发的质量,减少成本,缩短工期,方便软件项目的管理。软件工程工具通常有3种分类标准:按照功能划分按照支持的过程划分按照支持的范围划分491.6软件工程工具按功能划分可视化建模工具程序开发工具自动化测试工具文档编辑工具配置管理工具项目管理工具50按支持的过程划分设计工具维护工具编程工具1.6软件工程工具按支持的范围划分可以分为窄支持、较宽支持和一般支持工具。窄支持工具支持软件工程过程中的特定任务,一般将其称之为工具。较宽支持支持特定的过程阶段,一般由多个工具集合而成,称之为工作台较宽支持支持特定的过程阶段,一般由多个工具集合而成,称之为工作台一般支持支持覆盖软件过程的全部或大部分阶段,包含多个不同的工作台,称之为环境。511.6软件工程工具在需求分析与系统设计阶段,常用的CASE(计算机辅助软件工程)工具有面向通用软件设计的MicrosoftVisio、用于面向对象软件设计的RationalRose、用于数据库设计的PowerDesigner,除此之外近几年还出现了更加集成化的工具,如EnterpriseArchitect、RationalSoftwareArchitect和StarUML等。这些工具通过简化UML图的绘制工作,以及强大的模型转换功能(诸如正向工程、反向工程、数据库模型转化等),大大简化了设计以及从设计向编码转化的工作。521.6软件工程工具名称编程语言TurboPascalPascalDevC++C/C++CodeblocksC/C++CLionC/C++/C#VisualStudioC++/VB/C#/JavaScript等VisualStudioCodeC++/VB/C#/JavaScript等GoLandGoRubymineRubyWebstormJavasciptPHPstormPHPPycharmPythonEclipseJavaIntelliJIdeaJavaXCodeObjective-C/Swift在编码阶段,集成开发环境(IDE)通过提供代码高亮、补全,内置调试工具等功能,大大提高了效率。IDE主流的实例如表所示。531.6软件工程工具名称编程语言CUnitCCppUnitC++JUnitJAVANUit.NETPerlTestingPerlMocha/Should.jsNode,js内置unittest模块/pytestPythonPHPUnitPHP内置Test::Unit模块Ruby在测试阶段,通常会使用自动化测试工具进行测试。除单元测试工具外,较为流行的自动化测试工具包括C/S功能测试工具WinRunner,性能测试工具LoadRunner、Jmeter,测试管理工具TestDi

温馨提示

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

评论

0/150

提交评论