软件工程-理论与实践课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《软件工程-理论与实践课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 理论 实践 课件
- 资源描述:
-
1、第 一 部 分 软 件 工 程 概 述 第1章 软件与软件工程1.1 软件 1.1.1 软件的概念及特点概念:计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序,运行过程中产生的各种结果,以及以硬复制和电子表格等多种方式存在的软件文档1.1 软件 特点:1)具有抽象性2)无明显的制造过程3)存在退化问题4)对计算机系统有着不同程度的依赖性5)尚未完全摆脱人工的开发方式6)软件本身是复杂的7)成本相当昂贵8)相当多的软件工作涉及社会因素1.1 软件 1.1.2 软件的分类1.2 软件危机 1.2.1 软件危机的表现与原因 在软件开发
2、的过程中,会经常出现一些不能按时完成任务、产品质量得不到保证、工作效率低下和开发经费严重超支等现象。计算机软件的开发、维护和应用过程中普遍出现的这一些严重的问题便是软件危机 人们对软件产品认识的不足以及对软件开发的内在规律理解的偏差是软件危机出现的本质原因。1.2 软件危机 1.2.2 软件危机的启示 软件危机给我们的最大启示,是使我们更加深刻的认识到软件的特性以及软件产品开发的内在规律。l 软件产品是复杂的人造系统,具有复杂性、不可见性和易变性,难以处理。l 个人或小组在开发小型软件时使用到的非常有效的编程技术和过程,在开发大型、复杂系统时难以发挥同样的作用。l 从本质上讲,软件开发的创造性
3、成分很大、发挥的余地也很大,很接近于艺术。它介于艺术与工程之间的某一点,并逐步向工程一段漂移,但很难发展到完全的工程。1.2 软件危机 l 计算机和软件技术的快速发展,提高了用户对软件的期望,促进了软件产品的演化,为软件产品提出了新的、更多的需求,难以在可接受的开发进度内保证软件的质量。l 几乎所有的软件项目都是新的,而且是不断变化的。项目需求在开发过程中会发生变化,而且很多原来预想不到的问题会出现,对设计和实现手段进行适当的调整是不可避免的。l“人月神化”现象生产力与人数并不成正比。1.3 软件工程 1.3.1 软件工程的概念 IEEE对软件工程的定义为:1)将系统化、严格约束的、可量化的方
4、法应用于软件的开发、运行和维护,即将工程化应用于软件 2)对1)中所述方法的研究 具体说来,软件工程是以借鉴传统工程的原则、方法,以提高质量,降低成本为目的指导计算机软件开发和维护的工程学科。它是一种层次化的技术1.3 软件工程 软件工程层次图1.3 软件工程 1.3.2 软件工程研究的内容 软件工程研究的内容主要包括以下两个部分:软件开发技术。主要研究软件开发方法、软件开发过程、软件开发工具和环境。软件开发过程管理。主要研究软件工程经济学和软件管理学。1.3 软件工程 1.3.3 软件工程目标和原则 软件工程要达到的基本目标包括:达到要求的软件功能 取得较好的软件性能 开发出高质量的软件 付
5、出较低的开发成本 需要较低的维护费用 能按时完成开发工作,及时交付使用1.3 软件工程 软件工程的7条基本原则 用分阶段的生没周期计划进行严格的管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 软件工程结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性1.3 软件工程 1.3.4 软件工程知识体系 IEEE在2014年发布的软件工程知识体系指南中将软件工程知识体系划分为以下15个知识领域。1软件需求2软件设计3软件构建4软件测试5软件维护6软件配置管理7软件工程管理8软件工程过程9软件工程模型和方法10软件质量11软件工程职业实践12软件工程经济学1
6、3计算基础14数学基础15工程基础1.4 软件开发方法 1.4软件开发方法 软件开发方法是一种使用定义好的技术集及符号表示组织软件生产的过程,它的目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件。常见的软件开发方法包括:1)结构化方法2)面向数据结构方法3)面向对象方法4)形式化方法 此外,软件开发方法还有问题分析法、可视化开发方法等。1.5 软件工程工具 软件工程的工具对软件工程中的过程和方法提供自动的或半自动的支持。可以帮助软件开发人员方便、简捷、高效地进行软件的分析、设计、开发、测试、维护和管理等工作。有效地利用工具软件可以提高软件开发的质量,减少成本,缩短工期,方便软件项目
7、的管理。软件工程工具通常有3种分类标准:1.按照功能划分2.按照支持的过程划分3.按照支持的范围划分1.5 软件工程工具 按照功能划分:功能是对软件进行分类的最常用的标准,按照功能划分,软件工程工具可分为可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具等。按照支持的过程划分:根据支持的过程,软件工程工具可分为设计工具、编程工具、维护工具等。1.5 软件工程工具 按照支持的范围划分:根据支持的范围,软件工程工具可以分为窄支持、较宽支持和一般支持工具。窄支持工具支持软件工程过程中的特定任务,一般将其称之为工具;较宽支持支持特定的过程阶段,一般由多个工具集合而成
8、,称之为工作台;一般支持支持覆盖软件过程的全部或大部分阶段,包含多个不同的工作台,称之为环境。谢谢!第2章 软件过程2.1 软件过程概述 软件的诞生和生命周期是一个过程,我们总体上称这个过程为软件过程。软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动,每一项活动又可以分为一系列的工程任务。任何一个软件开发组织,都可以规定自己的软件过程,所有这些过程共同构成了软件过程过程定义了运用方法的顺序,应该交付的文档资料,为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。通常,使用生命周期模型简洁地描述软件过程。生命周期模型规定了
9、把生命周期划分为哪些阶段及各个阶段的执行顺序,因此也称为过程模型2.2 软件生命周期 2.2.1软件生命周期的概念 软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及产品版本的不断更新,到最终该产品被市场淘汰的全过程。软件生命周期这个概念从时间的角度将软件的开发和维护的复杂过程分解为了若干个阶段,每个阶段都完成特定的相对独立的任务。2.2 软件生命周期 2.2.2传统软件生命周期的各个阶段 在传统的软件工程中,软件产品的生命周期一般可以划分为6个阶段,如图所示。传统的软件生命周期2.3 软件过程模型 在软件工程中,人们通过建立抽象的
10、软件开发模型,把软件生命周期中的各个活动或步骤安排到一个框架中,将软件开发的全过程清晰且直观地表达出来。常见的软件开发模型有很多种,这里主要介绍瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、基于组件的开发模型、统一软件开发过程模型以及敏捷模型与极限编程。2.3 软件过程模型 2.3.1 瀑布模型瀑布模型是一种线性的开发模型,具有不可回溯性。开发人员必须等前一阶段的任务完成后,才能开始进行后一阶段的工作,并且前一阶段的输出往往就是后一阶段的输入。由于其不可回溯性,如果在软件生命周期的后期发现并要改正前期的错误,那么需要付出很高的代价。传统的瀑布模型是文档驱动的。如图所示。2.3 软件过程
11、模型 2.3.1 瀑布模型瀑布模型的优点是过程模型简单,执行容易;缺点是无法适应变更。瀑布模型适应于具有以下特征的软件开发项目。在软件开发的过程中,需求不发生或发生很少变化,并且开发人员可以一次性获取到全部需求。否则,由于瀑布模型较差的可回溯性,在后续阶段中需求经常性的变更需要付出高昂的代价。软件开发人员具有丰富的经验,对软件应用领域很熟悉。软件项目的风险较低。瀑布模型不具有完善的风险控制机制2.3 软件过程模型 2.3.2 快速原型模型快速原型的基本思想是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。通常,用户试用原型系统之后会提出许多修改意
12、见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用反反复复地改进,直到原型系统满足用户的要求。2.3 软件过程模型 2.3.2 快速原型模型快速原型模型适用于具有以下特征的软件开发项目。1.已有产品或产品的原型(样品),只需客户化的工程项目2.简单而熟悉的行业或领域3.有快速原型开发工具4.进行产品移植或升级2.3 软件过程模型 2.3.3 增量模型增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提
13、交给用户,而是可以分批次进行提交。2.3 软件过程模型 增量模型的最大特点就是将待开发的软件系统模块化和组件化。基于这个特点,增量模型具有以下优点。将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。开发顺序灵活。开发人员可以对构件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。增量模型的缺点是要求待开发的软件系统可以被模块化。如果待开发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦。2.3 软件过程模型 增
14、量模型适用于具有以下特征的软件开发项目。软件产品可以分批次地进行交付 待开发的软件系统能够被模块化 软件开发人员对应用领域不熟悉,难以一次性地进行系统开发 项目管理人员把握全局的水平较高2.3 软件过程模型 2.3.4 螺旋模型 螺旋模型是一种用于风险较大的大型软件项目开发的过程模型。该模型将瀑布模型与快速原型模型结合起来,并且加入了这两种模型忽略了的风险分析。它把开发过程分为制定计划、风险分析、实施工程和客户评估4种活动。螺旋模型适应于风险较大的大型软件项目的开发。它的优点是将风险分析扩展到各个阶段中,大幅度降低了软件开发的风险。但是这种模型的控制和管理较为复杂,可操作性不强,对项目管理人员
15、的要求较高。2.3 软件过程模型 2.3 软件过程模型 2.3.5 喷泉模型喷泉模型是一种过程模型,同时也支持面向对象开发。在面向对象的方法中,分析模型和设计模型采用相同的符号标示体系,各阶段之间没有明显的界限,而且常常重复、迭代地进行。“喷泉”一词体现了面向对象方法的迭代和无间隙性。迭代是指各阶段需要多次重复,例如,分析和设计阶段常常需要多次、重复进行,以更好的实现需求。无间隙性是指各个阶段之间没有明显的界限,并常常在时间上互相交叉,并行进行。喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。2.3 软件过程模型 2.3.6 基于组
16、件的开发模型基于组件的开发模型使用现有的组件以及系统框架进行产品开发。在确定需求之后,开发人员开始从现有的组件库中筛选合适的组件,并对组件功能进行分析。在对组件分析之后,开发人员可能适当修改需求来适应现有组件,也可能修改组件或寻找新的组件。组件筛选完成之后,开发人员需要根据需求设计或使用现有的成熟开发框架复用这些组件,一些无法利用现有组件的地方,则需要进行单独的开发,新开发的组件在经历时间考验之后也会加入到组件库中。最后将所有组件集成在一起,进行系统测试。基于组件的开发模型充分的体现了软件复用的思想,降低了开发成本和风险,并加快了产品开发。2.3 软件过程模型 2.3.7 统一软件开发过程模型
17、统一软件开发过程(Rational Unified Process,RUP)模型是基于UML(统一建模语言)的一种面向对象软件开发模型。它解决了螺旋模型的可操作性问题,采用迭代和增量递进的开发策略,并以用例驱动为特点,集中了多个软件开发模型的优点。RUP模型是迭代模型的一种。RUP模型的示意图如图所示。2.3 软件过程模型 图1中的纵轴以工作的内容为组织方式,表现了软件开发的工作流程。工作流程可以分为核心工作流程和核心支持工作流程。图1中的横轴以时间为组织方式,表现了软件开发的4个阶段:先启、细化、构建和产品化,每个阶段中都可能包含若干次迭代。这4个阶段按照顺序依次进行,每个阶段结束时都有一个
18、主要里程碑。阶段与里程碑的关系如图2所示。图1 统一软件开发过程模型图2 阶段与里程碑的关系2.3 软件过程模型 统一软件开发过程模型是基于迭代思想的软件开发模型。采用迭代的软件工程思想可以多次执行各个工作流程,有利于更好地理解需求、设计出合理的系统架构,并最终交付一系列渐趋完善的成果。可以说,迭代是一次完整地经过所有工作流程的过程基于统一软件开发过程模型所构造的软件系统,是由软件构件建造而成的。这些软件构件定义了明确的接口,相互连接成整个系统。在构造软件系统时,RUP采用架构优先的策略。软件架构概念包含了系统中最重要的静态结构和动态特征,架构体现了系统的总体设计。架构优先开发的原则是RUP开
19、发过程中至关重要的主题。统一软件开发过程模型适用的范围极为广泛,但是对开发人员的素质要求较高。2.3 软件过程模型 2.3.8 敏捷过程与极限编程1.敏捷过程概述随着计算机技术的迅猛发展和全球化进程的加快,软件需求常常发生变化,强烈的市场竞争要求更快速的开发软件,同时软件也能够以更快的速度更新。传统的方法在开发时效上时常面临挑战,因此,强调快捷、小文档、轻量级的敏捷开发方法开始流行。敏捷方法是一种轻量级的软件工程方法,相对于传统的软件工程方法,它更强调软件开发过程中各种变化的必然性,通过团队成员之间充分的交流与沟通以及合理的机制来有效地响应变化。2.3 软件过程模型 敏捷开发开始于“敏捷软件开
20、发宣言”。在2001年2月,17位软件开发方法学家在美国犹他州召开了长达两天的会议,制订并签署了“敏捷软件开发宣言”,该宣言给出了4个价值观。(1)个体与交互高于过程和工具(2)可运行软件高于详尽的文档(3)与客户协作高于合同(契约)谈判(4)对变更及时响应高于遵循计划“敏捷联盟”为了帮助希望使用敏捷方法来进行软件开发的人们定义了12条原则。2.3 软件过程模型 2.极限编程敏捷模型包括多种实践方法,比如极限编程(eXtreme Programming,XP)自适应软件开发(Adaptive Software Development,ASD)动态系统开发方法(Dynamic System De
21、velopment Method,DSDM)、ScrumCyrstal特征驱动开发(Feature Driven Development,FDD)等下面介绍极限编程的相关内容2.3 软件过程模型 极限编程是一种实践性较强的规范化的软件开发方法,它强调用户需求和团队工作。利用极限编程方法进行软件开发实践的工程师,即使在开发周期的末期,也可以很快地响应用户需求。在团队工作中,项目经理、用户以及开发人员都有责任为提高软件产品的质量而努力。XP特别适用于软件需求模糊且容易改变、开发团队人数少于10人、开发地点集中(比如一个办公室)的场合。极限编程包含了一组相互作用和相互影响的规则和实践。在项目计划阶段
22、,需要建立合理和简洁的用户故事。在设计系统的体系架构时,可以采用CRC(Class,Responsibility,Collaboration)卡促使团队成员共同努力。代码的质量在极限编程项目中非常重要。为了保证代码的质量,可以采用结对编程以及在编码之前构造测试用例等措施。在测试方面,开发人员有责任向用户证明代码的正确性,而不是由用户来查找代码的缺陷。合理的测试用例及较高的测试覆盖率是极限编程项目测试所追求的目标。2.3 软件过程模型 2.3.9 几种模型之间的关系1瀑布模型与RUP模型之间的关系在宏观上,瀑布模型是静态模型,RUP模型是动态模型。RUP模型的每一次迭代,实际上都需要执行一次瀑布
23、模型,都要经历先启、细化、构建、产品化这4个阶段,完成瀑布模型的整个过程。在微观上,瀑布模型与RUP模型都是动态模型。瀑布模型与RUP模型在每一个开发阶段(先启、细化、构建、产品化)的内部,都需要有一个小小的迭代过程,只有进行这样的迭代,开发阶段才能做得更好。瀑布模型中有RUP模型,反过来,RUP模型中也有瀑布模型。2.3 软件过程模型 2瀑布模型与增量模型之间的关系 增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,一个模块接着一个模块地进行开发,直到开发完所有的模块。在开发每个模块时,通常都是采用瀑布模型,从分析、设计、编码和测试这几个阶段进行开发。所以,增量模型中有瀑布模型
24、,即宏观上是增量模型,微观上是瀑布模型。增量模型也体现了迭代思想,每增加一个模块,就进行一次迭代,执行一次瀑布模型,所以,增量模型本质上是迭代的。2.3 软件过程模型 3瀑布模型与快速原型模型之间的关系 快速原型的基本思想是快速建立一个能反映用户主要需求的原型系统,在此基础上之后的每一次迭代,都可能会用到瀑布模型。快速原型模型中不但包含了迭代模型的思想,而且包含了瀑布模型的思想。2.3 软件过程模型 4瀑布模型与螺旋模型之间的关系 螺旋模型是瀑布模型和快速原型模型的结合,快速原型模型是原型模型的简化,原型模型又是迭代模型和瀑布模型的组合,这些模型之间是相互依存的、彼此有关的。螺旋模型每一次顺时
25、针方向旋转,相当于顺时针方向迭代一次,都是走完一次瀑布模型,这就是瀑布模型与螺旋模型之间的关系。实际上,瀑布模型与喷泉模型也有关系。2.3 软件过程模型 2.3.10选择软件过程模型 各种软件过程模型反映了软件生命周期表现形式的多样性。在生命周期的不同阶段也可采用不同的软件过程模型。在具体的软件开发过程中,可以选择某种软件过程模型,按照某种开发方法,使用相应的工具进行软件开发。在选择软件过程模型时需要考虑以下几点。1.符合软件自身的特性,如规模、成本和复杂性等2.满足软件开发进度的要求3.对软件开发的风险进行预防和控制4.具有计算机辅助工具的支持5.与用户和软件开发人员的知识和技能相匹配6.有
展开阅读全文