《《现代软件工程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《现代软件工程》PPT课件.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、现代软件工程现代软件工程第一章 现代软件工程概述 从软件到软件工程:进入一个新的境界-1 生命周期:软件工程的基本思路-2技术与方法:软件工程的基本过程-3软件企业的现代软件工程实践-4 第一章第一章 现代软件工程概述现代软件工程概述第一章第一章 现代软件工程概述1.2 生命周期:软件工程的基本思路 软件生存周期-2.1瀑布模型-2.2 原型模型-2.3喷泉模型-2.4增量模型-2.5螺旋模型-2.6构件组装模型-2.7统一软件过程RUP模型-2.82.1 软件工程的生存周期 1.“生存周期”的起源 人类解决复杂问题时普遍采用的一个策略是“各个击破”,也就是对问题进行分解,然后再分别解决各个子
2、问题的策略。软件工程采用的“生存周期法”,就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后再逐步完成每个阶段的任务。定义软件生存周期的另一个目的,是提供一个公共的框架,以便软件人员可以用相同的语言,在各自的环境中,开展工作。这是传统软件工程的基本想法。2.生存周期划分的原则各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。3.“生存周期法”的特点阶段具有顺序性和依赖性推迟实现的观点不到最后阶段,不知道真正的结果质量保证
3、的观点每个阶段都必须完成规定的文档每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。4.生存周期的划分传统软件生存周期一般分为:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码和单元测试、综合测试)、软件维护等三个时期。2.1 软件工程的生存周期生存周期各阶段的工作生存周期各阶段的工作2.2 软件开发过程模型瀑布模型一、瀑布模型(waterfall Model)传统的生命周期模型70年由Royce提出典型瀑布模型具有顺序性和依赖性问题定义问题定义软件需求软件需求总体设计总体设计详细设计详细设计编程调试编程调试运行维护运行维护定义阶段开发阶段维护
4、阶段瀑布模型的特征1.从上一项活动中接受该项活动的工作成果(工作产品),作为输入。2.利用这一输入实施该项活动应完成的内容3.给出该项活动的工作成果,作为输出传给下一项活动4.对该项活动实施的工作进行评审。若其工作得到确认,则继续下一项活动。瀑布模型的优点:1.强调开发的阶段性;2.强调早期计划及需求调查;3.强调产品测试。2.2 软件开发过程模型瀑布模型瀑布模型与全生命周期瀑布模型与全生命周期另一种看法另一种看法产品的观点产品的全生命周期要长于(开发)项目的生命周期瀑布模型的缺点:1.从认识论角度看,人的认识是一个多次反复循环的过程,不可能一次完成。但瀑布模型中划分的几个阶段,没有反映出这种
5、认识过程的反复性。特别是瀑布模型过于依赖早瀑布模型过于依赖早期进行的唯一一次需求调查,不能适应需求的变化期进行的唯一一次需求调查,不能适应需求的变化;2.软件开发是一个知识密集型的开发活动,需要相互合作完成,但瀑布模型没有体现这一点。特别是由于瀑布模型是瀑布模型是单一流程,开发中的经验教训不能反馈应用于本产品的过单一流程,开发中的经验教训不能反馈应用于本产品的过程。程。1.思考题:2.1、我们的日常生活中,有哪些活动是符合瀑布模型的?3.2、为什么我们的小型开发团队连瀑布模型都不能坚持做到?客观因素是什么?4.3、瀑布模型的现实实用价值在哪里?2.2 软件开发过程模型瀑布模型瀑布模型造成软件错
6、误的积累和放大效应分析分析正确的规格说明正确的规格说明原始要求原始要求错误的规格说明错误的规格说明设计设计编码编码测试测试正确编码正确编码正确功能正确功能正确设计正确设计对错误说明的设计对错误说明的设计错误编码错误编码可纠正错误可纠正错误错误设计错误设计错误设计的编码错误设计的编码 错误说明编码错误说明编码不可纠正和潜伏的错误不可纠正和潜伏的错误交付的软件产品交付的软件产品软件的变更、维护往往经历软件生存期的各个阶段,因此,瀑布模型也有反馈,构成生存期循环。下图:上下阶段间循环:2.2 软件开发过程模型瀑布模型具有维护阶段循环的软件生存期的瀑布模型2.2 软件开发过程模型瀑布模型二、原型(迭代
7、)模型1.基本思想基本思想在获取一组基本的需求定义后,利用高级软件工具的可开发环境,快速地建立一个目标系统的最初版本-原型,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。经过这样一个反复补充和修改的过程,应用系统的“最初版本”就逐步演变为系统的“最终版本”。原原型型:一个真实的可执行模型,它实现了系统的若干基本功能。原原型型法:不断地运行系统“原型”来进行启发、揭示和判断的系统开发方法。2.3 软件开发过程模型原型模型2.原型(迭代)模型的来源:l利用相应原型开发工具快速开发l已经完成核心产品开发和试点,进行本地化、客户化的过程
8、,称为二次开发(迭代和演化)2.3 软件开发过程模型原型模型3.快速建立原型的目的,是获取需求2.3 软件开发过程模型原型模型开发要求开发要求分析评价分析评价软件环境软件环境用户用户开发团队开发团队构造原型构造原型原型开发的例子在“需求分析”阶段,开发团队和用户一起为想象中的系统的某些主要部分,定义需求和规格说明,并由开发团队在规格说明级用原型描述语言构造一个系统原型,它代表了部分系统,包括哪些为满足用户需求的必要属性。该原型可用来帮助分析和设计工作,而不是一个软件产品。2.3 软件开发过程模型原型模型通过演示原型,用户可以根据他所期望的系统行为来评价原型的实际行为。如果原型不能满意地运行,用
9、户能立刻找出问题和不可接受的地方,并与开发团队重新定义需求。该过程一直持续到用户认为该原型能成功地体现想象中的系统的主要部分功能为止。在这期间,用户和开发团队都不要为程序算法或设计技巧等枝节问题分心,而是要确定开发团队是否理解了用户的意思,同时试验实现它们的若干方法。有了满意的系统原型,同时也积累了使用原型的经验,用户常会提出新目标,从而进一步重新原型周期。新目标的范围要比修改或补充不满意的原型大。2.3 软件开发过程模型原型模型4.原型特征软件原型是软件的最初版本,以最少的费用、最短的时间开发出的、反映最后软件的主要特征的系统。它具有以下特征:(1)它是一个可实际运行的系统。(2)它没有固定
10、的生存期。一种极端是扔掉原型(以最简便方式大量借用已有软件,做出最后产品的模型,证实产品设想是成功的,但在产品中并不使用这些模块);另一种极端是最终产品的一部分即增量原型(先做出最终产品的核心部分,逐步增加补充模块),演进原型居于其中(每一版本扔掉一点,增加一点,逐步完善至最终产品)。2.3 软件开发过程模型原型模型(3)从需求分析到最终产品都可作原型,即可为不同目标作原型。(4)它必须快速、廉价。(5)它是迭代过程的集成部分,即每次经用户评价后修改、运行,不断重复双方认可。2.3 软件开发过程模型原型模型5.对原型法的评价优点优点任何功能一经开发就能进入测试以便验证是否符合产品需求。帮助导引
11、出高质量的产品要求。如果没有可能在一开始就弄清楚所有的产品需求,它们可以分批取得。而对于已提出的产品需求,则可根据对现阶段原型的试用而做出修改。风险管理可以在早期就获得项目进程数据,可据此对后续的开发循环做出比较切实的估算。提供机会去采取早期预防措施,增加项目成功的机率。大大有助于早期建立产品开发的配置管理,产品构建(build),自动化测试,缺陷跟踪,文档管理。均衡整个开发过程的负荷。开发中的经验教训能反馈应用于本产品的下一个循环过程,大大提高质量与效率。如果风险管理发现资金或时间已超出可承受的程度,则可以决定调整后续的开发,或在一个适当的时刻结束开发,但仍然有一个具有部分功能的,可工作的产
12、品。2.3 软件开发过程模型原型模型心理上,开发人员早日见到产品的雏型,是一种鼓舞。使用户可以在新的一批功能开发测试后,立即参加验证,以便提供非常有价值的反馈。可使销售工作有可能提前进行,因为可以在产品开发的中后期取得包含了主要功能的产品原型去向客户作展示和试用。作为产品开发技术时的主要缺点:作为产品开发技术时的主要缺点:如果所有的产品需求在一开始并不完全弄清楚的话,会给总体设计带来困难及削弱产品设计的完整性,并因而影响产品性能的优化及产品的可维护性。如果缺乏严格的过程管理的话,这个生命周期模型很可能退化为一种原始的无计划的“试错改”的循环模式。心理上,可能产生一种影响尽最大努力的想法,认为虽
13、然不能完成全部功能,但还是造出了一个有部分功能的产品。如果不加控制地让用户接触开发中尚未测试稳定的功能,可能对开发人员及用户都产生负面的影响。针对这些缺点的改进方法是?2.3 软件开发过程模型原型模型作为需求分析技术时的主要缺点作为需求分析技术时的主要缺点“模型效应”或“管中窥豹”。对于开发者不熟悉的领域把次要部分当作主要框架,做出不切题的原型。原型迭代不收敛于开发者预先的目标。即每次更改,为了消除错误,次要部分越来越大,“淹没”了主要部分。原型过快收敛于某些特定需求,而忽略了一些基本点,特别是与系统基本性能有关的部分。资源规划和管理较为困难,随时更新文档也带来麻烦、版本控制可能导致失控。长期
14、在原型环境上开发,只注意得到满意的原型,容易“遗忘”用户环境和原型环境的差异。针对这些缺点的改进方法是?2.3 软件开发过程模型原型模型适适用用范范围围:原型开发可以应用于软件生存周期的不同阶段,也可以替代生存期的部分或全部阶段,具体可以用于以下领域:1.辅助分析和确定用户需求的任务。2.作为软件设计的一种工具。例如:研究系统设计的可行性和适应性。3.作为一种解决不确定性的工具。例如:研究一种新技术的效果,逐步使其适应预定的环境。4.作为一种实验工具。5.充作同步培训工具。6.“一次性”的验证应用。例如写一个能运行的程序,一旦得到答案,该程序将不再使用。7.作为软件开发的辅助工具。特别是在用户
15、需求不稳定,维护工作量很大的情况下,要求大量的重新设计工作。思考:原型模型的现实意义是什么?更多地适用于软件系统开发的前期(需求阶段)2.3 软件开发过程模型原型模型三、喷泉模型喷泉模型又称快速应用开发模型(Rapid Application Development Model,RAD)喷泉模型认为软件生命周期的各个阶段是相互重叠和多次反复的。也是一种线性开发模型与瀑布模型类似,只是从串行改并行。主要用于面向对象方法中,面向对象的分析和设计重叠,交叉、并行进行。2.4 软件开发过程模型喷泉模型喷泉模型设计分析编码测试思考:喷泉模型应用在什么样的开发环境下?四、增量模型增量模型又称产品改进模型(
16、Incremental Model)从给定需求开始,通过构造一系列中间版本来实施开发活动,依次类推,直到系统完成。每一个中间版本都是需求分析、设计、编码和测试的过程。某些中间版本的开发可以并行进行。2.5 软件开发过程模型增量模型R中间版本1中间版本2中间版本nDDDC/TC/TC/TI/ASI/ASI/AS 可能的信息流R:需求 C/T:编码和测试D:设计 I/AS:安装和验收需求的不同版本2.5 软件开发过程模型增量模型增量模型融合了线性顺序模型的基本成分和原型的迭代特征。是随着日程时间的进展而交错的线性序列。与原型不一样的地方是强调每个增量均发布一个可操作产品。最典型的应用是同一个产品的
17、不同项目(合同、用户)版本增量1分析设计编码测试第一个增量发布分析设计编码测试第三个增量发布增量3分析设计编码测试第四个增量发布增量4分析设计编码测试第二个增量发布增量2五、螺旋模型 在原型基础上,进行多次原型反复并增加风险评估,形成螺旋模型。2.6 软件开发过程模型螺旋模型2.6 软件开发过程模型螺旋模型螺旋模型 另一个视角螺旋模型分析在螺旋模型结构中,维护只是螺旋模型的另一个周期,在维护和开发之间本质上并没有区别,从而解决了做太多测试或未作足够测试所带来的风险。n优点:优点:a.强调严格的全过程风险管理。b.强调各开发阶段的质量。c.提供机会检讨项目是否有价值继续下去。n缺点:缺点:必须引
18、入非常严格的风险识别,风险分析和风险控制,这对风险管理的技能水平提出了很高的要求。也需要人员,资金和时间的大量投入。2.6 软件开发过程模型螺旋模型构件组装模型的特征应用软件可用预先编好的、功能明确的产品部件定制而成,并可用不同版本的部件实现应用的扩展和更新。利用模块化方法,将复杂的难以维护的系统分解为互相独立、协同工作的部件,并努力使这些部件可反复重用。突破时间、空间及不同硬件设备的限制,利用客户和软件之间统一的接口实现跨平台的互操作。组装结构设计构件库建立应用软件构建测试与发布时间进程2.7 软件开发过程模型构件组装模型构件组装模型的优点n构件组装模型导致了软件的复用,提高了软件开发的效率
19、,面向对象技术是软件工程的构件组装模型的基础。n构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用。n构件组装模型允许多个项目同时开发,降低了费用,提高了可维护性。n可实现分步提交软件产品。构件组装模型的缺点u可重用性和软件高效性不易协调。u缺乏通用的组装结构标准,而自定义的组装结构标准引入较大的风险。u需要精干的有经验的分析和开发人员,一般的开发人员插不上手。u客户的满意度低。2.7 软件开发过程模型构件组装模型RUP的统一过程结构预备循环 Iter.#1周期周期处理工作流处理工作流反复反复支持工作流支持工作流 Iter.#2 Iter.#n Iter.#n+1 Iter.#n+2
20、 Iter.#m Iter.#m+1管理环境管理环境配置管理配置管理业务模型业务模型实现实现测试测试分析和设计分析和设计分布分布需求需求详细化详细化提交提交初始化初始化构造构造RUP的时间轴被分解为四个顺序的阶段,分别是:初始阶段(Inception)、细化阶段(Elaboration)构造阶段(Construction)、交付阶段(Transition)每个阶段结束于一个主要的里程碑(Major Milestones)每个阶段本质上是两个里程碑之间的时间跨度在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。RUP的阶段目标初始
21、阶段的目标是为系统建立业务案例并确定项目的边界。细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。构建阶段,所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详细测试。交付阶段的重点是确保软件对最终用户是可用的。2.8 软件开发过程模型统一软件过程RUP模型RUP的核心工作流 RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。尽管6个核心过程工作流可能使人想起传统瀑布模型中的几个阶段,但应注意迭代过程中的阶段是完全不同的
22、,这些工作流在整个生命周期中一次又一次被访问。9个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。核心过程工作流核心过程工作流(1)业务建模工作流为组织开发一个构想,并基于这个构想在业务用例模型和业务对象模型中定义组织的过程,角色和责任。(2)需求工作流的目标是描述系统应该做什么,并使开发人员和用户就这一描述达成共识。(3)分析和设计工作流将需求转化成未来系统的设计,为系统开发一个健壮的结构并调整设计使其与实现环境相匹配,优化其性能。2.8 软件开发过程模型统一软件过程RUP模型(4)实现工作流的目的包括以层次化的子系统形式定义代码的组织结构;以组件的形式(源文件、二进制文
23、件、可执行文件)实现类和对象;将开发出的组件作为单元进行测试以及集成由单个开发者(或小组)所产生的结果,使其成为可执行的系统。(5)测试工作流要验证对象间的交互作用,验证软件中所有组件的正确集成,检验所有的需求已被正确的实现,识别、提出缺陷并确认缺陷在软件部署之前被处理。(6)部署工作流的目的是成功的生成版本并将软件分发给最终用户。核心支持工作流核心支持工作流(1)配置和变更管理工作流描绘了如何在多个成员组成的项目中控制大量的产物,管理演化系统中的多个变体,跟踪软件创建过程中的版本。(2)软件项目管理工作流平衡各种可能产生冲突的目标,管理风险,克服各种约束并成功交付使用户满意的产品。(3)环境
24、工作流的目的是向软件开发组织提供软件开发环境,包括过程和工具。2.8 软件开发过程模型统一软件过程RUP模型RUP模型的优点RUP具有很多长处:提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。RUP模型的缺点一些不足:RUP在理论上,是比较理想的,但在实际应用上,还需要更多的工具的支持和普及推广工作。2.8 软件开发过程模型统一软件过程RUP模型软件的生命周期模型与开
25、发实践 所有的这些生命周期模型与我们的软件开发是什么关系?产品:部件、系统、组装、重用项目:目标、范围、进度计划、成本、质量、风险技术:工具、平台、标准、框架、管理支撑:配置、过程1、作坊:分头开发,简单拼装2、项目组级3、部门级4、企业级生存周期问题:从时间角度对软件生命阶段的分解方法瀑布模型:最早期、最简单的时间分段迭代模型:对瀑布模型的改进,用在需求和设计阶段喷泉模型:OO方法,OOA与OOD融合增量模型:更深入的迭代,是产品与项目阶段共存模式螺旋模型:一种高风险防范模型、应用在产品研发构件模型:一种新的开发模式,重点是架构和合适的组件RUP模型:最接近现代软件工程思想,是我们课程的基础
26、思考:现代软件工程的生命周期概念:1、依然继续坚持生命周期的基本思想意义?2、已经不是简单的一维模型,而是以瀑布模型为基础的多种形式的迭代、交替、融合。反映在什么地方?软件工程的生存周期问题小结习题:1、对一个软件学院的学生而言,从编程序、建立一个软件系统,到按软件工程的要求管理软件开发过程,你认为三者之间有那些变化和不同?2、在软件发展的历程中,从程序设计阶段、软件系统阶段到软件工程阶段,各个阶段最主要的特征是什么?3、软件危机主要是指什么,为什么会产生软件危机?现在还存在软件危机吗?4、传统软件工程与现代软件工程最大的区别是什么?为什么?5、在现代软件工程的知识领域(SWEBOK2004)中,除需求、设计、构造、测试、维护等5个传统的知识领域之外,还有哪些新的知识领域?这些新的知识领域的作用是什么?6、关于软件工程的“四代”划分是什么含义?这种划分法的着眼点是什么?为什么说这种划分法并没有全面地反映现代软件工程的最主要特点?7、瀑布模型虽然是最早的软件生命周期模型,但在现实中,是否仍然具有实用价值?为什么?8、根据迭代的原理,请举出软件开发中可能采用的不同的迭代方式?9、软件开发过程中,技术、产品、研发和项目管理的综合与协同特性表现在什么地方?10、软件的工业化生产中,软件的生产流程与软件工艺主要指的是什么?休 息本章结束,谢谢大家!下章介绍:传统软件工程的方法