欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    软件工程教案-第2章软件过程.ppt

    • 资源ID:6610876       资源大小:3.68MB        全文页数:81页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软件工程教案-第2章软件过程.ppt

    ,重庆理工大学计算机科学与工程学院 李梁,软件工程第二章 软件过程,*,什么是软件工程?什么是工程化思想?什么是软件过程?有哪些过程模型?如何建立过程模型?什么是统一过程?自学什么是敏捷过程?有哪些模型?自学什么是软件工程实践?,第一部分 软件工程与过程,*,第2章 软件过程,2.1 什么是软件过程?2.2 什么是软件生命周期?2.3 软件过程评估:能力成熟度模型是什么?软件过程评估:CMM、CMMI、ISO9001:2000 等2.4 理解敏捷过程自学(含极限编程、结对编程)2.5 开展软件过程实践,*,概念软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动通常使用生命周期模型简洁地描述软件过程每项活动可分为一系列工程任务,科学的软件过程是一组适合软件项目特点的任务集合,任务集合包括一组软件工程任务、里程碑、应交付的产品。层次软件工程是一门建立在以质量焦点为基础,分过程、方法和工具三个层次的综合技术(三要素),2.1 软件过程,*,2.1 软件过程,软件工程过程:一个软件机构针对某一类软件产品为自己规定的工作步骤。软件规格说明:规定软件的功能及其运行的限制软件开发:产生满足规格说明的软件软件确认:确认软件能够完成客户提出的要求软件演进:为满足客户的变更要求,软件必须在使用的过程中演进软件工程过程定义了:方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑,*,软件过程框架 P15表2-1框架是实现整个软件开发活动的基础,软件过程框架定义了若干小的框架活动,与过程有关的角色、职责的定义以及实现也都离不开框架的支持。实际上就是软件过程的工程模板内容组织及管理框架:实现过程活动涉及到的角色与职责技术及工具框架:实现过程活动的自动化及需要的设备与工具,2.1 软件过程-软件过程框架,*,2.1 软件过程-软件工程目标,目标可修改性有效性可靠性可理解性可维护性可重用性可适应性可移植性可追踪性可互操作性,基本目标:付出较低的开发成本达到要求的软件功能取得较好的软件性能开发的软件易于移植需要较低的维护费用能按时完成开发工作及时交付使用软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。从短期效益看,追求高质量会延长软件开发时间并且增大费用,似乎降低了生产率。对开发人员而言,如果非得在质量与生产率之间分个主次不可,那么应该是质量第一,生产率第二。,*,从传统工业生产过程的知识发现(补)从传统工厂生产组织方法的启示:能否将软件开发作为工厂的产品,按照工厂产品的生产组织方式组织软件开发工作?,参考啤酒生产过程,阶段划分清楚,过程控制严格,流程执行规范,质量有保障,2.1 软件过程,*,向传统工业学习什么?,任务明确、组织有序、纪律严明、整体优化,2.1 软件过程,*,软件过程模型:就是把软件生命周期中各项开发活动的流程用一个合理的框架(开发模型)来规范描述。软件生命周期模型软件生命周期划分为发生-定义、发展-开发和灭亡-运行与维护三个部分细分为六个阶段:问题的定义及规划需求分析软件设计程序编码软件测试运行维护,2.1 软件过程-软件过程模型,系统规划,系统分析,系统设计,系统实施,运行支持,*,软件生命期 Software life cycle软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程称为软件生存周期软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存周期生命周期阶段的划分原则:各阶段的任务相对独立同一阶段任务的性质相同软件定义(系统分析):可行性研究(软件计划)、需求分析软件开发(系统设计):概要设计、详细设计、软件实现(编码、单元测试)、软件测试(组装测试、确认测试)软件使用、维护和退役,2.2 软件生命周期,*,基于SDLC的瀑布模型,发生,发展,灭亡,软件系统开发生命周期(Systems Development Life Cycle,SDLC)是建立软件系统的一个过程,是管理和控制软件系统开发过程的一种基本框架,是确保软件系统开发成功的一种必要措施和手段。,2.2 软件生命周期,*,可行性研究确定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究估计可利用的资源(硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查需求分析和定义对用户提出的要求进行分析并给出详细的定义编写软件需求说明书或系统功能说明书及初步的系统用户手册提交管理机构评审,2.2 软件生命周期,*,概要设计 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应,编写设计说明书,评审详细设计 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础,编写设计说明书,提交评审软件实现(编码、程序设计)把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”;写出的程序应当是结构良好、清晰易读的,且与设计相一致的。单元测试,查找各模块在功能和结构上存在的问题并加以纠正,2.2 软件生命周期,*,软件测试组装测试,将已测试过的模块按一定顺序组装按规定的各项需求,逐项进行有效性确认测试,决定已开发的软件是否合格,能否交付用户使用软件运行:操作培训、模拟数据试运行、并行运行、系统转换软件维护改正性维护:运行中发现软件中的错误需要修正适应性维护:为了适应变化了的软件工作环境,需做适当变更完善性维护:为了增强软件的功能需做变更,2.2 软件生命周期,*,*,逻辑模型,物理模型,1个儿童房1个主卧厨房、卫生间等等,系统需求,软件生命周期总结,*,软件过程评估:评价软件过程中的各种活动(管理、技术方法、控制、计划等)是否满足软件工程成功所需的基本过程标准要求。作用:检验和识别软件过程风险,促进软件过程改进,提高软件开发能力。CMM:分析或诊断软件或软件团队的相对成熟度CMMI:在CMM基础上集成了工程方面的评价指标,包括启动、诊断、建立、执行和学习,主要用于软件企业。ISO9001:2000:国际通用标准(质量保证体系),用于软件产品、系统或服务的整体质量评估,采取“计划-实施-检查-行动”循环,将其应用于软件项目的质量管理环节,可直接应用于软件团队和软件企业。SPICE标准:定义软件过程评估的一系列要求,帮助团队建立客观的评价体系,评估软件过程的有效性。,2.3 软件过程评估,*,CMM(Capability Maturity Model):能力成熟度模型,用于评价软件机构的软件过程能力成熟度的模型。是指对过程计划或定义水平、过程实施水平、过程管理和控制水平、过程改善潜力等指标的综合评价。美国卡内基-梅隆大学软件工程研究所开发。建立此模型的初始目的,是为大型软件项目的招标活动提供一种全面而客观的评审依据,发展到后来此模型又同时被应用于许多软件机构内部的过程改进活动中。核心:把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和控制,使其更加科学化、标准化。在无规则和混乱的管理之下,先进的技术和工具并不能发挥出应有的作用,改进对软件过程的管理才是消除软件危机的突破口,再也不能忽视在软件过程中管理所起的关键作用了。CMM为软件企业的过程能力提供一个阶梯式的改进框架,它基于过去所有软件工程过程改进的成果,吸取以往软件工程的经验教训,提供一个基于过程改进的框架。,2.3 能力成熟度模型-CMM,*,CMM是一种通过严格定义、实施、控制和不断改进软件过程的方法来保证软件质量的分层模型。CMM是对软件开发组织或项目的软件过程能力进行评估的一个基本框架。CMM是指导软件开发组织或项目逐步改进其软件能力成熟度的一个指南。CMM只回答“做什么?”,具体地“如何做?”由开发组织自己定。软件过程是一个可管理、可测量和可改进的过程。软件过程的质量受其支持技术的影响。用于软件工程的技术水平应与过程的成熟度相适应。,2.3 能力成熟度模型-评估模型,*,在CMM中把软件过程从无序到有序的进化过程(18个)分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。5 级:初始级、可重复级、已定义级、已管理级(已控制级)、优化级。这5个成熟度等级定义了一个有序的尺度,用以测量软件组织的软件过程成熟度和评价其软件能力,这些等级还能帮助软件组织把应做的改进工作排出优先次序。成熟度等级是妥善定义的向成熟软件组织前进途中的平台,每一个成熟度等级都为过程的继续改进提供一个台阶。CMM通过定义能力成熟度的5个等级,引导软件开发组织不断识别出其软件过程的缺陷,并指出应该做哪些改进,但是它并不提供做这些改进的具体措施。,2.3 能力成熟度模型-评估模型,*,为企业的发展规定过程成熟级别,分为5级:初始级(Initial):一般企业皆具有可重复级(Repeatable):成功经验可以重复已定义级(Defined):一套完整的企业过程,人员自觉遵守(培训)已管理级(Managed、已控制):过程&产品可度量和控制优化级(Optimizing):过程持续改进作用:从无序到有序、从特殊到一般、从定性管理到定量管理、最终达到动态优化。,2.3 能力成熟度模型-CMM,*,2.3 能力成熟度模型-CMM体系结构,*,关键过程域:代表一组相关的工作(活动)。每个KPA都有一个确定的目标,完成该目标即认为过程能力的提高。,2.3 能力成熟度模型-CMM结构,*,关键过程领域KPA(Key Process Area):18个除去初始级以外,其它 4 级都有若干个引导软件机构改进软件过程的要点,称为关键过程领域。每一个关键过程领域是一组相关的活动,成功地完成这些活动,将会对提高过程能力起重要作用。,关键过程域,2.3 能力成熟度模型-CMM关键域,*,2.3 能力成熟度模型-CMM关键域,*,级别 CMM级别的特征1级 初始级 软件过程无序,有时甚至混乱,成功归功于个人的努力2级,可重复级 在项目内部已建立健全的项目管理,可重复已有的成功3级,已定义级 在组织内部已定义并实施全组织统一的软件标准过程4级,已管理级 软件过程和产品质量已得以有计划和定量的管理和控制5级,优化级 已建立使软件过程和产品质量得以持续改进的架构,2.3 能力成熟度模型-CMM五个级别,*,2.3 能力成熟度模型-关键实践,*,Level 1:初始级过程无序且不可见特点 过程执行杂乱无序关键问题 项目计划管理、配置管理、软件质量保证达标标准 过程活动无一定秩序,开发过程的可重复性差,2.3 能力成熟度模型-CMM五个级别,*,Level 2:可重复级里程碑(Milestone)可见,按计划开发达标标准 使项目管理处于严格控制之下,包括严格的项目计划和追踪、子合同管理、需求变更和产品基线控制特点 过程管理工作依赖管理人员的技能关键问题 培训、技术评审、标准 Level 2的6个KPA:侧重于管理 需求管理 软件项目计划软件项目的跟踪和监控 软件子合同管理软件质量保证 软件配置管理,2.3 能力成熟度模型-CMM五个级别,*,Level 3:定义级每个阶段的内部活动可见,标准过程和项目定义过程裁剪达标标准 定义一个适合该组织的软件过程,有正规的文档化的规范,并能根据不同项目的要求裁剪和优化这个软件过程特点 过程可定义、可执行关键问题 过程度量、过程分析、质量计划 Level 3的7个KPA:工程过程企业理念机构过程关注 机构过程定义 培训计划 集成软件管理过程裁剪和定义软件产品工程过程执行 组间协调 对等审查,2.3 能力成熟度模型-CMM五个级别,*,Level 4 管理级过程可度量,预测值与结果之间的偏差可控达标标准 为定义好的过程建立一套详细的度量机制,为产品和过程设立质量目标,度量软件过程和产品特点 过程成为可度量的关键问题 改善技术、问题分析、防止出错Level 4的2个KPA:预测量化管理定量过程管理过程度量软件质量管理产品度量,2.3 能力成熟度模型-CMM五个级别,*,Level 5 优化级过程动态调整、新技术的采用达标标准 用第 4 级建立的度量机制,不断地指导过程改善,技术革新和防止出错特点 通过反馈来改善过程关键问题 自动化、反馈技术Level 5的3个KPA:动态优化缺陷预防 技术改变管理 过程改变管理,2.3 能力成熟度模型-CMM五个级别,*,CMMI(Capability Maturity Model Integration):即能力成熟度模型集成,是CMM模型的最新版本。将各种能力成熟模型集成到一个框架中去,建立一种从集成产品与过程发展,从工程角度健全的系统开发原则的过程改进,消除不同模型之间的不一致与重复软件集成:各种硬件(计算能力、存储能力、网络交换能力、信息安全)、系统软件、应用软件、工具软件、存储、运行环境(机房电力、温度、清洁、防雷、网络通讯)等集成到一起的工程。主要集成部分:系统工程(SE)、软件工程(SW)、集成产品和过程开发(IPPD)、供应商外包管理(SS),2.3 能力成熟度模型-CMMI,*,CMMI-Capability Maturity Model Integration是CMM模型的最新版本。能力成熟度模型集成CMMI有两种表示方法:和软件CMM一样的阶段式表现方法连续式的表现方法过程管理项目管理工程支持CMMI的目标是质量、时间表和最低的成本,2.3 能力成熟度模型-CMMI,*,对比理解(补):建筑工程项目 vs 软件工程项目,工程项目的管理过程:项目启动、计划、监控、结束、客户服务。软件工程繁荣过程(软件开发生命周期):概念、需求、设计、实施、系统整合和验证、系统部署、技术支持和系统维护。,生产现场监控管理,2.3 能力成熟度模型-CMMI,*,软件开发范型:循环往复、螺旋上升,持续改进的过程,知识在于积累经验在于整理能力在于应用,2.3 能力成熟度模型-CMMI,*,敏捷方法:开发项目是一个学习的体验,没有谁能完全理解需求后才开始项目,客户在项目进展中不断学习、理解而提出真正的需求,开发者也是,没有人完全清楚会构件出什么来,直到结束。每个人都在学习,敏捷方法改变了过程,以便持续学习,培养学习能力。敏捷不是一个过程,是一类过程的统称。解决传统强调控制的开发方法(软件工厂)没有解决的问题(重过程,轻人文)敏捷方法的两大主要特征:对“适应性”的强调 对“人”的关注做法:引入迭代式的开发手段,用户反馈机制,适应需求变更将整个软件生命周期分解为若干个小的迭代周期(原型法)获取切实有效的客户反馈 提出12条基本原则,2.4 敏捷过程(自学),*,2.4 敏捷过程-敏捷开发12条原则,1、我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。2、即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。3、经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。4、在整个项目开发期间,业务人员和开发人员必须天天都在一起工作(封闭开发)。5、围绕被激励起来的个体来构建项目,给他们提供所需的环境和支持,并且信任他们能够完成工作。6、在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。,*,7、工作的软件是首要的进度度量标准。8、敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。9、不断地关注优秀的技能和好的设计会增强敏捷能力。10、简单是最根本的。11、最好的构架、需求和设计出于自组织团队。12、每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。敏捷过程对人的技能、职业素养、团队文化氛围有较高要求,2.4 敏捷过程-敏捷开发12条原则,*,极限编程(eXtreme Programming,XP)是一种软件工程方法学,是敏捷开发中最富有成效的方法学之一由肯特贝克(Kent Beck)在1996年提出,具有强沟通、简化设计、迅速反馈等特点,适合于规模小、进度紧、需求不稳定、开发小项目的小团队。强调将把它列出的每个方法和思想做到极致,做到最好,不提倡的一律忽略(如开发前的整体设计)极限编程特点XP模型是“轻量型”或“灵活”的软件过程模型,与面向对象语言结合的开发方案,解决大型软件开发过程所遇到的问题的“专家协作”的开发方式,解决难点问题。核心有四个要点:交流 简单 反馈 勇气,2.4 敏捷过程-极限编程(自学),*,交流开发人员与客户的交流 开发人员之间的交流使用结对编程 开发人员与管理人员的交流简单设计的简单 编码的简单 注释的简单 测试的简单反馈客户对软件的反馈 测试代码对功能代码的反馈先测试,后编程勇气接受任务的勇气XP常见问题XP适合于小型项目(10人左右)?结对编程,搭档如何安排?实施结对编程、集体代码所有权之后,如何考核单个开发人员?,2.4 敏捷过程-极限编程(自学),*,结对编程(Pair-Programming):两个人坐在同一台计算机前面,使用相同的键盘和鼠标来开发同样的一个模块,一个称为驾驶者(Driver),负责代码的键入,另外一个称为领航员(Navigator),负责监看与决策,包括低级错误和方向性的错误。当出现的一个问题对其中一个人来说,难以解决,而恰好是另外一个人的强项的时候,那么角色就会发生转换。XP中非常重要的实践之一。疑问:一个程序两人写是不是浪费(可是两份工资,双倍资源哦)?编程是一个人的活动。学校里这么教的,一直也是这么做的。我不喜欢被人盯着工作,这样我不自在,无法工作。这个笨家伙老问问题,不会看书么?我都无法专心工作了另一方面:结对编程被很多的大师级程序员推崇;不少大学都展开对结对编程的研究,并得到正面的结论;很多尝试过的开发者都开始喜欢结对编程。,2.4 敏捷过程-结对编程(自学),*,1995年,悉尼理工大学的拉里.康斯坦丁(Larry Constantine)在他的专栏中第一次提到了在他在P.J.Plaughers software company,Whitesmiths,Ltd观察到一个现象:合作式编程(Collaborative Programming)“两个程序员一起工作,可以比以往更快的交出完成并经过测试的代码,而且这些代码几乎是没有Bug的。”1996年,肯特贝克(Kent Beck),沃德坎宁安(Ward Cunningham)和罗恩杰弗里斯(Ron Jeffries)一起提出了极限编程(XP),其中吸收了Collaborative Programming,并称为结对编程(Pair Programming)。Pair Programming是XP的一个关键实践(key practice),也是XP成功的关键。随着XP在世界范围内被采用和练习,Pair Programming开始被接受。,2.4 敏捷过程-结对编程的历史,*,“The Human eye has an almost infinite capability for not seeing what it does not want to see Programmers,if left to their own devices,will ignore the most glaring errors in their output-errors that anyone else can see in an instant.”人的眼睛有一个几乎无限的能力,看不到它不想看到的东西,程序员,如果离开自己的设备,将忽略最明显的错误,否则在他们输出错误时,任何人都可以在在一瞬间看到。-Gerald Weinberg 杰拉尔德温伯格“Knowledge is commonly socially constructed through collaborative efforts toward shared objectives or by dialogues and challenges brought about by difference in persons perspective”知识通常是通过共同的目标、共同努力的社会构件的,或由不同的人的角度来看,通过对话和挑战所带来的。-Salomon 所罗门“三个臭皮匠,胜过一个诸葛亮”,2.4 敏捷过程-为什么要结对编程,*,不间断的代码审查Code Review,1.同伴审查(Peer Code Review),即程序员之间的互相审查缺乏设计的审查不能持久,定时Code Review对需求和设计的不了解导致无法实现有效的Review,2.团队审查(Team Code Review)什么时候开会做Review?不可能团队天天开会无法对所有的设计和Code进行Review面子问题效率低,传统开发过程的审查Review(例如印度的InfoSys公司)的问题:,*,结对编程提供不间断的设计审查(Design review),单元测试审查(Unit Test Review),代码审查(Code Review),文档审查(Document Review),避免了效果差的团队代码审查(Team Code Review),也比抽查式的同伴代码审查(Peer Code Review)有更好的质量。(CMM Level 3)结对编程中,任何一段代码都至少被两双眼睛看过,两个脑袋思考过。结合协同代码主人翁精神(Collective code ownership)和小任务(Small Engineering Task),代码被不断的审查。,不间断的代码审查Code Review,*,避免牛仔(cow boy)式(个人)的编程好代码的衡量标准:可读性和可维护性硬件设备价格的下降和速度的提升,使得代码效率不是考虑的重点(对大多数的商业应用)。对大部分的商业项目来说,更主要的顾虑是成本。而成本中人工占最大的比例。好的代码可以减少修改的成本。结对编程的互相督促可以提高代码的可读性。,2.4 敏捷过程-编程方式,*,结对(Pair)是一个最小单位的团队(Team),而任何人都是工作在这样一个Team中。开发者(Developer)的言行都会影响到其他的合作伙伴(Partner),也受到其他开发者的影响。结对编程避免了“我的Code”,使得代码的责任不属于某个人,而是属于一个结对(Pair)和整个团队(Team),从而做到集体代码所有权(Collective Code Ownership),也避免个人英雄主义。迫使程序员必须频繁的交流,增进知识经验的交流(Cross-Training),使大家共同提高。,2.4 敏捷过程-团队合作,*,同伴的潜在压力(Peer Pressure)。结对编程的过程也是一个互相督促的过程。由于这种督促的压力,使得程序员更认真的工作。每个人每天的有效工作时段不超过3-4个小时。结对编程中Driver和Navigator的互换可以让程序员轮流工作,从而避免出现过度思考而导致观察力和判断力出现偏差。潜意识的有利竞争。当人在一个团队中工作,总是下意识的努力展现自己的优点。工作及时得到同伴的肯定,自信心和成就感(Self-Satisfaction)增强。觉得工作是一件愉快(Enjoyable)的事情。,2.4 敏捷过程-以人为本,*,极限编程对实施的程序员提出了更高的要求。这种要求不是技术水平,也不是学历水平也不是工作经验。这种要求是对一个人的心智,道德,修养的更高要求。程序员的四怕:1)怕自己看上去傻 2)怕被认为是没用的 3)怕自己变的不重要(过时)4)怕自己不够好结对编程中,编码不再是私人的工作,而是一种公开的“表演”。程序员的代码,工作方式,技术水平都变得公开和透明。,2.4 敏捷过程-结对建议,*,一个XP开发人员具备这样一些基本素质:诚实,公正,开明,勇敢和谦卑!在这些素质的基础之上,才是对技术水平,能力和天分等的要求。诚实 公正开明 勇气 谦卑 具备这些素质才能克服“四怕”,才能成为一个成熟和专业的Developer。,2.4 敏捷过程-XP开发人员素质,*,驾驶者(Driver)写设计文档(Class diagram等),进行编码(Unit Test and Business Object)等XP开发流程。导航员(Navigator)审阅Driver的文档、Driver对编码等开发流程的执行;考虑Unit Test的覆盖程度;是否需要和如何Refactoring;帮助Driver解决具体的技术问题。Driver和Navigator不断轮换角色,不要连续工作超过一小时,每一小时休息15分钟。Navigator要控制开发时间。主动参与 虽然每个工程任务(Engineering Task)都有所有者(owner),但不能一旁观者的心态来做。任何一个Task都首先是两个人的责任,也是所有人的责任。没有“我的Code”、”你的Code”或“她的Code”,只有“我们的Code”。,2.4 敏捷过程-如何结编程,*,只有水平上的差距,没有级别上的差异。一个结对(Pair),尽管可能大家的级别资历不同,但不管在分析,设计或编码,双方都拥有平等的决策权利。每对(Pairs)之间互换合作伙伴(Partner)。每个任务(Task)都应该和不同的开发者(Developer)配对。每隔一天,甚至是半天,互换合作伙伴(Partner)。但任务(Task)的所有者(owner)因该继续留该任务的结对中。如果结对(Pair)中的一人请假,另一人应尽量不要写实际执行程式码(Production Code)。结对(Pair)一起加班,2.4 敏捷过程-如何结编程,*,没有结对编程就没有XP,结对编程是极限编程(XP)所有的实践(Practices)中最被争议和被认为是最难接受。结对编程是获得XP最大价值的关键。没有结对编程,无法实现有效的不间断代码审查(Continuous Code Review),代码质量下降。没有同伴压力(Peer Pressure),流程的执行很容易出现偏差。没有结对编程,双向沟通(Communication)很容易弱化,进而影响团队工作(Team work)。结对编程象XP流程中的粘合剂,把各个环节连接起来实现最大的价值。,*,这是引进XP时最难被接受的规则。但如果在采用其它XP的惯例和规则时,抛弃结对编程,那么会面对以下问题:如何进行有效的设计审查(Design Review)如何进行有效的代码审查(Code Review)如何保证代码质量如何保证流程的执行如何增进双向沟通(Communication)如何进行交叉培训(Cross-Training)如何增强团队工作(Team work),没有结对编程就没有XP,*,结对编程和开放式源代码Open Source,开放式源代码(Open Source)现象:开源项目(Open Source Project)的代码质量比很多的商业软件(项目)都好。和结对编程的共性:有效的代码审查(Code Review)集体代码所有权(Collective code ownership),*,分布式的结对编程:两个程序员身处不同的物理位置,通过共享(Sharing)软件来实现结对编程。需要共享(Sharing)软件能提供 桌面共享,文字交谈,语音交谈,甚至是视频交流。目前这种方法还没有被认可,主要出现在学校的关于XP的研究项目中。面临的问题:Internet的网路延迟工作时段的约定,分布式结对编程Distributed Pair Programming,*,结对编程与单独编程的比较,一些研究数据:1999年,美国犹他州大学(University of Uath),两组学生,一组独自工作单独编程(Solo Programming),一组结对编程。其代码测试通过情况如下:,*,虽然结对编程的学生在刚开始的阶段比独自工作的学生花在同样任务(Task)的时间较多,但很快结对编程的学生的时间开始大幅度的下降。而独立工作的学生需要花费比结对(Pairs)更多的时间来达到接近的代码质量。,结对编程语言单独编程的比较,*,比较研究项目后的问卷调查发现:结对编程能用较少的时间生产更高质量的代码。结对编程的学生们认为自己比一个人的时候更勤奋和更聪明的工作,因为不想让自己的合作伙伴失望。结对编程的学生认为自己比一个人的时候更专著,紧凑和由纪律的工作,而且是持续的(因为来自合作伙伴的结对压力。而独立工作的学生也可以专著和紧凑的工作,但往往不持续。结对编程的学生对自己的工作更有信心和成就感。结对编程的学生觉得工作很愉快,很愿意很合作伙伴一起工作。在紧张时间安排和繁重的工作压力下,独自工作的学生很容易蜕变为没有纪律的程序员。,结对编程语言单独编程的比较,*,结对编程是个渐进的过程,有效率的结对编程不是一天就能做到的。结对编程是一个相互学习,相互磨合的一个渐进过程。开发者(Developers)需要时间来适应这种新的开发模式。刚开始的结对编程很可能不比独立编程(Solo Programming)有更高的效率。但适应后的结对(Pairs)的开发质量和开发时间都比独立编程有大幅度的改善。,*,优势:可以减少风险可以使团队生产效率更高是知识传播的最好途径可以打造出最佳的合作团队。可以生成更好的代码三个方面的应用:教育学结对学习工业界结对开发与编程分布式结对编程环境,2.4 敏捷过程-结对编程(自学),*,教育学研究结对编程学习效果研究结对双方的相容性研究结对编程过程研究软件工业界结对编程实践方式社会动力学研究个人编程能力的增强分布式结对编程结对编程开发环境研究开发结对编程工具的需求适合开展分布式结对编程的工具研究,2.4 敏捷过程-结对编程研究(自学),*,结对编程与测试驱动开发,测试驱动开发(Test Driven Development,TDD)思想:开发之前首先完成测试用例编写;然后编写代码和测试;测试通过后即需增加新功能。优势:测试优先,保证质量结合结对编程,*,结对编程与代码重构,重构就是代码的重新设计。目的:得到好的代码和架构,易修改、易理解适应需求结对编程:审查代码理解代码反馈,*,结对编程与简单设计,简单设计:达到目前需求即可结对编程可以达到简单,*,结对编程方法,面对面结对编程分布式结对编程,*,自适应软件开发(Adaptive Software Development)由吉姆海史密斯(Jim Highsmith)提出,着眼于人员协作和团队自我组织,类似于收集人们创意的容器。生命周期三个阶段包括:思考:启动项目并完成自适应循环计划协作:沟通与信任学习:改进真正的理解水平,通过焦点组、正式技术评审和事后剖析方式进行学习,2.4 敏捷过程-自适应软件开发(自学),*,动态系统开发(Dynamic System Development Method)是一种使用增量原型开发模式完全满足对时间约束的系统构建和维护的敏捷软件开发方法。借用Pareto(佩瑞多)原则:即如果交付整个应用系统需用100%时间,那么80%的应用系统可以用20%的时间交付建议使用迭代软件过程动态系统开发生命周期的敏捷过程模型:可行性研究业务研究功能模型迭代设计和构建迭代实现,2.4 敏捷过程-动态系开发(自学),*,特征驱动开发(Feature-Driven development)把软件开发项目作为一个系统,即生产软件的系统定义六种关键项目角色:项目经理:负责报告进度情况、管理预算、筹措人员,以及管理设备、办公场地和资源等主设计师:负责系统的整体设计开发经理:负责领导日常开发活动,解决主程序员们自己无法解决的日常的资源冲突问题。主程序员:参与高层的需求分析和设计活动,领导3-6人开发小组负责新软件特征的底层分析、设计和开发工具。类的所有者:是主程序员领导的开发小组的成员,对新软件系统所需要的特征进行设计、编码、测试和编写文档。领域专家:是客户、用户、业主、业务分析专家或者所有这些的混合。,2.4 敏捷过程-特征驱动开发(自学),*,软件工程实践的精髓是理解问题、计划解决方案、实施计划和检查结果的精确度等方面通用的框架活动包括:沟通计划建模部署普适性活动,实践就是人们改造社会和自然的、有意识的活动。实践是人类自觉自我的一切行为(马克思)。实践的目的是以改造世界为、以满足客观需要。工程实践就是指将人们所学知识用于实际工程项目的系列实践活动的总称。,2.5 软件过程实践,*,设计-1:就是按照任务的目的、要求,预先确定的工作方案、工作计划、工作步骤等。设计-2:就是一种有目地的创作行为。设计-3:就是成功经验的应用过程。近义词:创作。设计是一种职业。比如建筑设计师、数据库设计师、人机界面设计师等。分析:就是将事物、现象、概念分类,剖析出本质及其内在联系。是把整体分解为部分以加以认识的过程。近义词:区分。分析也是一种职业。比如药剂分析师、软件系统设计师、经济分析师等。实施:就是实际的施行。近义词:实践。,2.5 软件过程实践-几个关键性的概念,*,发生,发展,灭亡,传统工业过程视角下的软件过程瀑布模型,*,划分阶段:对整个软件开发过程按实施任务不同而划分成不同阶段;分配任务:每个阶段包括的具体任务;人员分工:明确各个阶段、不同任务中各自职责;过程控制:明确每个任务的质量标准、经费预算、进度安排等;技术与工具:确定开发所需要的技术及其工具和选择开发方法如面向对象法、C#与JAVA计算机语言。优点:思路清晰、任务明确、分工清楚、控制方便、风险较小。因此,适合于大中型软件开发任务。缺点:阶段多、周期长、工作量大、成本高,需求/目标难以预先定义。,2.5 软件过程实践-瀑布模型的基本特点,*,核心原则存在价值保持简洁维护视图生产者要让消费者理解面向未来计划复用认真思考,2.5 软件过程实践,*,沟通实践:包括决定项目涉及人的信息和沟通需求。沟通是人们通过语言和非语言方式传递并理解信息、知识的过程,是人们了解他人思想、情感、见解和价值观的一种双向的途径。大英百科全书:个人之间凭借一定媒介交换消息的方法。韦氏大辞典:消息交流、意见交换。普林斯顿大学对万份人事档案进行分析发现:智慧、专业技术、经验三者只占一个人成功因素的25%,其余75%决定于良好的人际沟通。哈佛大学的一次调查结果显示,在500名被解职员工中,因人际沟通不良而导致工作不称职者占82%。高级管理者花80%时间用于沟通,普通管理者花50%用于传播信息。有效沟通的能力往往是决定一个人能否得到提升的一个关键的性格特征。,2.5 软件过程实践,*,计划实践:是软件开发过程的准备阶段,包括定义问题、可行性分析、制定项目计划。项目计划:估算项目开发所需要的资源、费用、时间,设计项目开发方案,制定进程表,进行可行性分析并明确可行性结论软件计划任务书的主要内容:可行性分析是基础,功能需求和资源为限制,采用通用语言描述。制定项目计划的一般步骤:明确目标制定工作范围明确任务分工统筹项目各种活动。,推开一扇门并不难自信是成功的催化剂,一个小故事,2.5 软件过程实践,*,软件工程是一种层次化技术,包括过程、技术和工具。软件过程是为获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程框架定义了若干个小的框架活动,为完整的软件开发过程建立了基础。软件过程框架的通用过程框架活动包括沟通、计划、建模、构建和部署。能力成熟度模型(CMM)是改进软件过程的有效策略。它的基本思想是通过改进对软件过程的管理来提高软件生产率和软件质量。敏捷方法是一组敏捷实践技术的总称,包括极限编程、自适应软件开发、动态系统开发和特征驱动开发等等。软件工程实践包括概念、原则、方法和在整个软件开发过程中所使用的工具。软件工程实践的通用框架活动包括沟通实践、计划实践、建模实践、构造实践和部署实践。,小结,*,我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。如果我们落后于计划,可以增加更多的程序员来解决。既然需求

    注意事项

    本文(软件工程教案-第2章软件过程.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开