软件工程教案--第2章软件过程.ppt_第1页
软件工程教案--第2章软件过程.ppt_第2页
软件工程教案--第2章软件过程.ppt_第3页
软件工程教案--第2章软件过程.ppt_第4页
软件工程教案--第2章软件过程.ppt_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1 重庆理工大学计算机科学与工程学院 李梁() 重庆理工大学 计算机科学与工程学院 李梁 65263075 软件工程 第二章 软件过程 * 2 重庆理工大学计算机科学与工程学院 李梁() l什么是软件工程? l什么是工程化思想? l什么是软件过程?有哪些过程模型? l如何建立过程模型? l什么是统一过程?自学 l什么是敏捷过程?有哪些模型? 自学 l什么是软件工程实践? 第一部分 软件工程与过程 * 3 重庆理工大学计算机科学与工程学院 李梁() 第2章 软件过程 2.1 什么是软件过程? 2.2 什么是软件生命周期? 2.3 软件过程评估:能力成熟度模型是什么? 软件过程评估:CMM、CMMI、ISO9001:2000 等 2.4 理解敏捷过程自学(含极限编程、结对编程) 2.5 开展软件过程实践 * 4 重庆理工大学计算机科学与工程学院 李梁() l概念 软件过程是为了开发出软件产品,或者是为了完成软件工程 项目而需要完成的有关软件工程的活动 通常使用生命周期模型简洁地描述软件过程 每项活动可分为一系列工程任务,科学的软件过程是一组适 合软件项目特点的任务集合,任务集合包括一组软件工程任 务、里程碑、应交付的产品。 l层次 软件工程是一门建立在以质量焦点为基础,分过程、方法和 工具三个层次的综合技术(三要素) 工具 方法 过程 质量焦点 2.1 软件过程 * 5 重庆理工大学计算机科学与工程学院 李梁() 2.1 软件过程 l软件工程过程:一个软件机构针对某一类软件产品为自己规 定的工作步骤。 l软件规格说明:规定软件的功能及其运行的限制 l软件开发:产生满足规格说明的软件 l软件确认:确认软件能够完成客户提出的要求 l软件演进:为满足客户的变更要求,软件必须在使用的过 程中演进 l软件工程过程定义了: l方法使用的顺序 l要求交付的文档资料 l为保证质量和适应变化所需要的管理 l软件开发各个阶段完成的里程碑 * 6 重庆理工大学计算机科学与工程学院 李梁() 软件过程框架 P15表2-1 p框架是实现整个软件开发活动的基础,软件过程框架定义 了若干小的框架活动,与过程有关的角色、职责的定义以 及实现也都离不开框架的支持。实际上就是软件过程的工 程模板 内容 组织及管理框架:实现过程活动涉及到的角色与职责 技术及工具框架:实现过程活动的自动化及需要的设备与 工具 2.1 软件过程-软件过程框架 * 7 重庆理工大学计算机科学与工程学院 李梁() 2.1 软件过程-软件工程目标 l目标 l可修改性 l有效性 l可靠性 l可理解性 l可维护性 l可重用性 l可适应性 l可移植性 l可追踪性 l可互操作性 基本目基本目标标标标: 付出付出较低较低的开发成本达到要求的软件的开发成本达到要求的软件 功能取得功能取得较好较好的软件性能的软件性能 开发的软件易于移植需要开发的软件易于移植需要较低较低的的维护维护 费用费用能能按时按时完成开发工作及时交付使完成开发工作及时交付使 用用 软软软软件工程件工程的目的目标标标标是提高是提高软软软软件的件的质质质质量量与与生生产产产产 率率,最,最终实现软终实现软终实现软终实现软 件的件的工工业业业业化化生生产产产产。 从短期效益看,追求高质量会延长软件开发 时间并且增大费用,似乎降低了生产率。 对开发人员而言,如果非得在质量与生产率 之间分个主次不可,那么应该是质量第一, 生产率第二。 * 8 重庆理工大学计算机科学与工程学院 李梁() l l 从传统工业生产过程的知识发现从传统工业生产过程的知识发现( (补补) ) 从传统工厂生产组织方法的启示:能否将软件开发作为工厂的产品, 按照工厂产品的生产组织方式组织软件开发工作? 参考参考啤酒生产过程啤酒生产过程 阶段划分阶段划分 清楚清楚 过程控制过程控制 严格严格 流程执行流程执行 规范规范 质量有保障质量有保障 2.1 软件过程 * 9 重庆理工大学计算机科学与工程学院 李梁() 向传统工业学习什么? 任务明确、组织有序、纪律严明、整体优化 2.1 软件过程 * 10 重庆理工大学计算机科学与工程学院 李梁() 软件过程模型:就是把软件生命周期中各项开发活动的流程 用一个合理的框架(开发模型)来规范描述。 软件生命周期模型 p软件生命周期 划分为发生-定义、发展-开发和灭亡-运行与维护三个部分 细分为六个阶段: 问题的定义及规划 需求分析 软件设计 程序编码 软件测试 运行维护 2.1 软件过程-软件过程模型 系统规划 系统分析 系统设计 系统实施 运行支持 * 11 重庆理工大学计算机科学与工程学院 李梁() l软件生命期 Software life cycle l软件产品从形成概念开始,经过开发、使用和维护 ,直到最后退役的全过程称为软件生存周期 l软件有一个孕育、诞生、成长、成熟、衰亡的生存 过程。这个过程即为计算机软件的生存周期 l生命周期阶段的划分原则: l各阶段的任务相对独立 l同一阶段任务的性质相同 l软件定义(系统分析):可行性研究(软件计划)、需求分 析 l软件开发(系统设计):概要设计、详细设计、软件实现 (编码、单元测试)、软件测试(组装测试、确认测试) l软件使用、维护和退役 2.2 软件生命周期 * 12 重庆理工大学计算机科学与工程学院 李梁() 基于SDLC的瀑布模型 发生 发展 灭亡 l软件系统开发生命周期(Systems Development Life Cycle, SDLC) 是建立软件系统的一个过程,是管理和控制软件系统开发 过程的一种基本框架,是确保软件系统开发成功的一种必要措施 和手段。 2.2 软件生命周期 * 13 重庆理工大学计算机科学与工程学院 李梁() l可行性研究 l确定要开发软件系统的总目标 l给出功能、性能、可靠性以及接口等方面的要求 l完成该软件任务的可行性研究 l估计可利用的资源 (硬件,软件,人力等)、成本、 效益、开发进度 l制定出完成开发任务的实施计划,连同可行性研究 报告,提交管理部门审查 l需求分析和定义 l对用户提出的要求进行分析并给出详细的定义 l编写软件需求说明书或系统功能说明书及初步的系 统用户手册 l提交管理机构评审 2.2 软件生命周期 * 14 重庆理工大学计算机科学与工程学院 李梁() l概要设计 把各项需求转换成软件的体系结构。结构中 每一组成部分都是意义明确的模块,每个模块都和某些需 求相对应,编写设计说明书,评审 l详细设计 对每个模块要完成的工作进行具体的描述, 为源程序编写打下基础,编写设计说明书,提交评审 l软件实现(编码、程序设计) l把软件设计转换成计算机可以接受的程序代码,即写 成以某一种特定程序设计语言表示的“源程序清单”; 写出的程序应当是结构良好、清晰易读的,且与设计 相一致的。 l单元测试,查找各模块在功能和结构上存在的问题并 加以纠正 2.2 软件生命周期 * 15 重庆理工大学计算机科学与工程学院 李梁() l软件测试 l组装测试,将已测试过的模块按一定顺序组装 l按规定的各项需求,逐项进行有效性确认测试,决 定已开发的软件是否合格,能否交付用户使用 l软件运行:操作培训、模拟数据试运行、并行运行、系 统转换 l软件维护 l改正性维护:运行中发现软件中的错误需要修正 l适应性维护:为了适应变化了的软件工作环境,需 做适当变更 l完善性维护:为了增强软件的功能需做变更 2.2 软件生命周期 * 16 重庆理工大学计算机科学与工程学院 李梁() 阶段关键问题结束标准(任务) 问题定义问题是什么?关于规模和目标的报告书 可行性研究是否可行? 系统的高层逻辑模型; 数据流图;成本/效益分析 需求分析系统必须做什么? 系统的逻辑模型;数据流图; 数据字典,算法描述 概要设计任何解决问题? 系统流程图;成本/效益分析 层次图和结构图 详细设计怎样具体的实现HIPO或PDL 编码和单元 测试 正确的程序模块 源程序清单;单元测试方案和 结果 测试符合要求的软件 综合测试方案和结果; 完整一致的软件配置 运行、维护持久地满足用户需要完整准确的维护记录 * 17 重庆理工大学计算机科学与工程学院 李梁() 系统分析 系统设计 系统实施 逻辑模型物理模型 1个儿童房 1个主卧 厨房、卫生间等等 系 统 需 求 软件生命周期总结 * 18 重庆理工大学计算机科学与工程学院 李梁() 软件过程评估:评价软件过程中的各种活动(管理、技术方法 、控制、计划等)是否满足软件工程成功所需的基本过程标准 要求。 作用:检验和识别软件过程风险,促进软件过程改进,提高软 件开发能力。 CMM:分析或诊断软件或软件团队的相对成熟度 CMMI:在CMM基础上集成了工程方面的评价指标,包括启 动、诊断、建立、执行和学习,主要用于软件企业。 ISO9001:2000:国际通用标准(质量保证体系),用于软件 产品、系统或服务的整体质量评估,采取“计划-实施-检查-行动 ”循环,将其应用于软件项目的质量管理环节,可直接应用于软 件团队和软件企业。 SPICE标准:定义软件过程评估的一系列要求,帮助团队建 立客观的评价体系,评估软件过程的有效性。 2.3 软件过程评估 * 19 重庆理工大学计算机科学与工程学院 李梁() CMM(Capability Maturity Model):能力成熟度模型,用于评价 软件机构的软件过程能力成熟度的模型。是指对过程计划或定义水 平、过程实施水平、过程管理和控制水平、过程改善潜力等指标的 综合评价。美国卡内基-梅隆大学软件工程研究所开发。 建立此模型的初始目的,是为大型软件项目的招标活动提供一种 全面而客观的评审依据,发展到后来此模型又同时被应用于许多软 件机构内部的过程改进活动中。 核心:把软件开发视为一个过程,并根据这一原则对软件开发和 维护进行过程监控和控制,使其更加科学化、标准化。 在无规则和混乱的管理之下,先进的技术和工具并不能发挥出应 有的作用,改进对软件过程的管理才是消除软件危机的突破口,再 也不能忽视在软件过程中管理所起的关键作用了。 CMM为软件企业的过程能力提供一个阶梯式的改进框架阶梯式的改进框架,它基 于过去所有软件工程过程改进的成果,吸取以往软件工程的经验教 训,提供一个基于过程改进的框架。 2.3 能力成熟度模型-CMM * 20 重庆理工大学计算机科学与工程学院 李梁() l l CMMCMM是一是一种通过种通过严格定义、实施、控制和不断改进软件严格定义、实施、控制和不断改进软件 过程的方法来保证软件质量的分层模型。过程的方法来保证软件质量的分层模型。 l l CMMCMM是对是对软件开发组织或项目的软件过程能力进行评软件开发组织或项目的软件过程能力进行评 估的一个基本框架。估的一个基本框架。 l l CMMCMM是是指导软件开发组织或项目逐步改进其软件能力指导软件开发组织或项目逐步改进其软件能力 成熟度的一个指南。成熟度的一个指南。 l l CMMCMM只回答只回答“ “做什么?做什么?” ”,具体地,具体地“ “如何做?如何做?” ”由开发组由开发组 织自己定。织自己定。 l l 软件过程是一个可管理、可测量和可改进的过程。软件过程是一个可管理、可测量和可改进的过程。 l l 软件过程的质量受其支持技术的影响。软件过程的质量受其支持技术的影响。 l l 用于软件工程的技术水平应与过程的成熟度相适应。用于软件工程的技术水平应与过程的成熟度相适应。 2.3 能力成熟度模型-评估模型 * 21 重庆理工大学计算机科学与工程学院 李梁() l在CMM中把软件过程从无序到有序的进化过程(18个)分成 5个阶段,并把这些阶段排序,形成5个逐层提高的等级。 l l 5 5 级级: : 初始级、可重复级、已定义级、已管理级(已控初始级、可重复级、已定义级、已管理级(已控 制级)、优化级。制级)、优化级。 l这5个成熟度等级定义了一个有序的尺度,用以测量软件 组织的软件过程成熟度和评价其软件能力,这些等级还能 帮助软件组织把应做的改进工作排出优先次序。 l成熟度等级是妥善定义的向成熟软件组织前进途中的平台 ,每一个成熟度等级都为过程的继续改进提供一个台阶。 lCMM通过定义能力成熟度的5个等级,引导软件开发组织 不断识别出其软件过程的缺陷,并指出应该做哪些改进, 但是它并不提供做这些改进的具体措施。 2.3 能力成熟度模型-评估模型 * 22 重庆理工大学计算机科学与工程学院 李梁() 为企业的发展规定过程成熟级别,分为5级: p初始级(Initial):一般企业皆具有 p可重复级(Repeatable):成功经验可以重复 p已定义级(Defined):一套完整的企业过程,人员自 觉遵守(培训) p已管理级(Managed、已控制):过程&产品可度量和 控制 p优化级(Optimizing):过程持续改进 作用:从无序到有序、从特殊到一般、从定性管理到定量 管理、最终达到动态优化。 2.3 能力成熟度模型-CMM * 23 重庆理工大学计算机科学与工程学院 李梁() CMMCMM具有分层的体系结构,可图示为具有分层的体系结构,可图示为: CMM 初始级可重复级已定义级已管理级优化级 关键过程域18个、目标52个 关键实践 关键实践 关键实践关键实践关键实践316个 (按5个公共特征分类) 2.3 能力成熟度模型-CMM体系结构 * 关键过程域:代表一组相关的工作 (活动)。每个KPA都有一个确定 的目标,完成该目标即认为过程能 力的提高。 24 重庆理工大学计算机科学与工程学院 李梁() 2.3 能力成熟度模型-CMM结构 * 25 重庆理工大学计算机科学与工程学院 李梁() 关键过程领域关键过程领域KPAKPA(Key Process AreaKey Process Area):):1818个个 除去初始级以外,其它除去初始级以外,其它 4 4 级都有若干个引导软件机构改级都有若干个引导软件机构改 进软件过程的要点,称为关键过程领域。进软件过程的要点,称为关键过程领域。 每一个关键过程领域是一组相关的活动,成功地完成这些每一个关键过程领域是一组相关的活动,成功地完成这些 活动,将会对提高过程能力起重要作用。活动,将会对提高过程能力起重要作用。 关键过程域 2.3 能力成熟度模型-CMM关键域 * 26 重庆理工大学计算机科学与工程学院 李梁() 2.3 能力成熟度模型-CMM关键域 * 27 重庆理工大学计算机科学与工程学院 李梁() 级别级别 CMMCMM级别的特征级别的特征 1 1级级 初始级初始级 软件过程无序,有时甚至混乱软件过程无序,有时甚至混乱 ,成功归功于个人的努力,成功归功于个人的努力 2 2级,可重复级级,可重复级 在项目内部已建立健全的项目在项目内部已建立健全的项目 管理,可重复已有的成功管理,可重复已有的成功 3 3级,已定义级级,已定义级 在组织内部已定义并实施全组在组织内部已定义并实施全组 织统一的软件标准过程织统一的软件标准过程 4 4级,已管理级级,已管理级 软件过程和产品质量已得以有软件过程和产品质量已得以有 计划和定量的管理和控制计划和定量的管理和控制 5 5级,优化级级,优化级 已建立使软件过程和产品质量已建立使软件过程和产品质量 得以持续改进的架构得以持续改进的架构 2.3 能力成熟度模型-CMM五个级别 * 28 重庆理工大学计算机科学与工程学院 李梁() 2.3 能力成熟度模型-关键实践 * 29 重庆理工大学计算机科学与工程学院 李梁() Level 1:初始级 p过程无序且不可见 特点特点 过程执行杂乱无序过程执行杂乱无序 关键问题关键问题 项目计划管理、配置管理、软件质量保证项目计划管理、配置管理、软件质量保证 达标标准达标标准 过程活动无一定秩序,开发过程的可重复过程活动无一定秩序,开发过程的可重复 性差性差 Out In 2.3 能力成熟度模型-CMM五个级别 * 30 重庆理工大学计算机科学与工程学院 李梁() Level 2:可重复级 里程碑(Milestone)可见,按计划开发 达标标准达标标准 使使项目管理处于严格控制项目管理处于严格控制之下,包括严格的之下,包括严格的 项目计划和追踪、子合同管理、需求变更和产品基线控制项目计划和追踪、子合同管理、需求变更和产品基线控制 特点特点 过程管理工作依赖管理人员的技能过程管理工作依赖管理人员的技能 关键问题关键问题 培训、技术评审、标准培训、技术评审、标准 Level 2的6个KPA:侧重于管理 需求管理 软件项目计划 软件项目的跟踪和监控 软件子合同管理 软件质量保证 软件配置管理 2.3 能力成熟度模型-CMM五个级别 * 31 重庆理工大学计算机科学与工程学院 李梁() Level 3:定义级 每个阶段的内部活动可见,标准过程和项目定义过程裁剪 l l 达标标准达标标准 定义一个适合该组织的软件过程,有正规的文档化的定义一个适合该组织的软件过程,有正规的文档化的 规范,并能根据不同项目的要求规范,并能根据不同项目的要求裁剪和优化裁剪和优化这个软件过程这个软件过程 l l 特点特点 过程可定义、可执行过程可定义、可执行 l l 关键问题关键问题 过程度量、过程分析、过程度量、过程分析、 质量计划质量计划 l l Level 3的7个KPA:工程过程企业理念 p机构过程关注 机构过程定义 培训计划 p集成软件管理过程裁剪和定义 p软件产品工程过程执行 组间协调 对等审查 2.3 能力成熟度模型-CMM五个级别 * 32 重庆理工大学计算机科学与工程学院 李梁() Level 4 管理级 p过程可度量,预测值与结果之间的偏差可控 达标标准达标标准 为定义好的过程建立一套详细的为定义好的过程建立一套详细的度量机制,度量机制,为产为产 品和过程设立质量目标,度量软件过程和产品品和过程设立质量目标,度量软件过程和产品 特点特点 过程成为可度量的过程成为可度量的 关键问题关键问题 改善技术、问题分析、改善技术、问题分析、 防止出错防止出错 Level 4的2个KPA:预测量化管理 p定量过程管理过程度量 p软件质量管理产品度量 2.3 能力成熟度模型-CMM五个级别 * 33 重庆理工大学计算机科学与工程学院 李梁() Level 5 优化级 p过程动态调整、新技术的采用 l l 达标标准达标标准 用第用第 4 4 级建立的度量机制,不断地级建立的度量机制,不断地指导过程改善指导过程改善 ,技术革新和防止出错,技术革新和防止出错 l l 特点特点 通过反馈来改善过程通过反馈来改善过程 l l 关键问题关键问题 自动化、反馈技术自动化、反馈技术 lLevel 5的3个KPA:动态优化 p缺陷预防 技术改变管理 过程改变管理 2.3 能力成熟度模型-CMM五个级别 * 34 重庆理工大学计算机科学与工程学院 李梁() CMMI I (Capability Maturity Model Integration):即能力成熟 度模型集成,是CMM模型的最新版本。 将各种能力成熟模型集成到一个框架中去,建立一种从集成 产品与过程发展,从工程角度健全的系统开发原则的过程改 进,消除不同模型之间的不一致与重复 软件集成:各种硬件(计算能力、存储能力、网络交换能力 、信息安全)、系统软件、应用软件、工具软件、存储、运 行环境(机房电力、温度、清洁、防雷、网络通讯)等集成 到一起的工程。 主要集成部分:系统工程(SE)、软件工程(SW)、集成产 品和过程开发(IPPD)、供应商外包管理(SS) 2.3 能力成熟度模型-CMMI * 35 重庆理工大学计算机科学与工程学院 李梁() CMMI-Capability Maturity Model Integration是CMM模型 的最新版本。能力成熟度模型集成 CMMI有两种表示方法: p和软件CMM一样的阶段式表现方法 p连续式的表现方法 过程管理 项目管理 工程 支持 CMMI的目标是质量、时间表和最低的成本 2.3 能力成熟度模型-CMMI * 36 重庆理工大学计算机科学与工程学院 李梁() l对比理解(补):建筑工程项目 vs 软件工程项目 工程项目的管理过程:项目启动、计划、监控、结束、 客户服务。 软件工程繁荣过程(软件开发生命周期):概念、需求、 设计、实施、系统整合和验证、系统部署、技术支持和 系统维护。 生产现场监控管理 2.3 能力成熟度模型-CMMI * 37 重庆理工大学计算机科学与工程学院 李梁() l软件开发范型:循环往复循环往复、螺旋上升,持续改进螺旋上升,持续改进的过程 目标系统目标系统 用户要求可行性合同与需求 调研谈判 编程与测试设计 提交实现 定义义功能 如何做 可做否 做什么和不做什么 做怎样 构 思 设计设计实实施-验证验证 理解需求 表达需求 软件软件 开发开发 典型典型 过程过程 要什么 运行/总结 知识知识在于积累 经验经验在于整理 能力能力在于应用 2.3 能力成熟度模型-CMMI * 38 重庆理工大学计算机科学与工程学院 李梁() 敏捷方法:开发项目是一个学习的体验,没有谁能完全理解需 求后才开始项目,客户在项目进展中不断学习、理解而提出真 正的需求,开发者也是,没有人完全清楚会构件出什么来,直 到结束。每个人都在学习,敏捷方法改变了过程,以便持续学 习,培养学习能力。 敏捷不是一个过程,是一类过程的统称。解决传统强调控制的 开发方法(软件工厂)没有解决的问题(重过程,轻人文) 敏捷方法的两大主要特征: 对“适应性”的强调 对“人”的关注 做法: 引入迭代式的开发手段,用户反馈机制,适应需求变更 将整个软件生命周期分解为若干个小的迭代周期(原型法) 获取切实有效的客户反馈 提出12条基本原则 2.4 敏捷过程(自学) * 39 重庆理工大学计算机科学与工程学院 李梁() 2.4 敏捷过程-敏捷开发12条原则 1、我们最优先要做的是通过尽早的、持续的交付有价值的软件 来使客户满意。 2、即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化 来为客户创造竞争优势。 3、经常性地交付可以工作的软件,交付的间隔可以从几个星期 到几个月,交付的时间间隔越短越好。 4、在整个项目开发期间,业务人员和开发人员必须天天都在一 起工作( 封闭开发)。 5、围绕被激励起来的个体来构建项目,给他们提供所需的环境 和支持,并且信任他们能够完成工作。 6、在团队内部,最具有效果并富有效率的传递信息的方法,就是 面对面的交谈。 * 40 重庆理工大学计算机科学与工程学院 李梁() 7、工作的软件是首要的进度度量标准。 8、敏捷过程提倡可持续的开发速度。责任人、开发者和用 户应该能够保持一个长期的、恒定的开发速度。 9、不断地关注优秀的技能和好的设计会增强敏捷能力。 10、简单是最根本的。 11、最好的构架、需求和设计出于自组织团队。 12、每隔一定时间,团队会在如何才能更有效地工作方面 进行反省,然后相应地对自己的行为进行调整。 敏捷过程对人的技能、职业素养、团队文化氛围有较高要 求 2.4 敏捷过程-敏捷开发12条原则 * 41 重庆理工大学计算机科学与工程学院 李梁() 极限编程(eXtreme Programming,XP)是一种软件工程方 法学,是敏捷开发中最富有成效的方法学之一 由肯特贝克(Kent Beck)在1996年提出,具有强沟通 、简化设计、迅速反馈等特点,适合于规模小、进度紧 、需求不稳定、开发小项目的小团队。 强调将把它列出的每个方法和思想做到极致,做到最好 ,不提倡的一律忽略(如开发前的整体设计) l极限编程特点 XP模型是“轻量型”或“灵活”的软件过程模型,与面向对象 语言结合的开发方案,解决大型软件开发过程所遇到的问 题的“专家协作”的开发方式,解决难点问题。 核心有四个要点: p交流 简单 反馈 勇气 2.4 敏捷过程-极限编程(自学) * 42 重庆理工大学计算机科学与工程学院 李梁() l交流 开发人员与客户的交流 开发人员之间的交流 使用结对编程 开发人员与管理人员的交流 l简单 设计的简单 编码的简单 注释的简单 测试的简单 l反馈 客户对软件的反馈 测试代码对功能代码的反馈 先测试,后编程 l勇气 接受任务的勇气 lXP常见问题 XP适合于小型项目(10人左右)? 结对编程,搭档如何安排? 实施结对编程、集体代码所有权之后,如何考核单个开发人 员? 2.4 敏捷过程-极限编程(自学) * 43 重庆理工大学计算机科学与工程学院 李梁() 结对编程(Pair-Programming) :两个人坐在同一台计算机前面,使 用相同的键盘和鼠标来开发同样的一个模块,一个称为驾驶者 (Driver),负责代码的键入,另外一个称为领航员(Navigator), 负责监看与决策,包括低级错误和方向性的错误。当出现的一个 问题对其中一个人来说,难以解决,而恰好是另外一个人的强项 的时候,那么角色就会发生转换。XP中非常重要的实践之一。 疑问: l 一个程序两人写是不是浪费(可是两份工资,双倍资源哦)? l 编程是一个人的活动。学校里这么教的,一直也是这么做的。 l 我不喜欢被人盯着工作,这样我不自在,无法工作。 l 这个笨家伙老问问题,不会看书么?我都无法专心工作了 另一方面: l 结对编程被很多的大师级程序员推崇; l不少大学都展开对结对编程的研究,并得到正面的结论; l 很多尝试过的开发者都开始喜欢结对编程。 2.4 敏捷过程-结对编程(自学) * 44 重庆理工大学计算机科学与工程学院 李梁() 1995年,悉尼理工大学的拉里.康斯坦丁(Larry Constantine )在他的专栏中第一次提到了在他在P. J. Plaughers software company, Whitesmiths, Ltd观察到一个现象:合作式编程( Collaborative Programming) l“两个程序员一起工作,可以比以往更快的交出完成并经过测试 的代码,而且这些代码几乎是没有Bug的。” l1996年,肯特贝克(Kent Beck),沃德坎宁安(Ward Cunningham)和罗恩杰弗里斯(Ron Jeffries)一起提出了 极限编程(XP),其中吸收了Collaborative Programming, 并称为结对编程(Pair Programming)。 lPair Programming是XP的一个关键实践(key practice),也 是XP成功的关键。 l随着XP在世界范围内被采用和练习,Pair Programming开始 被接受。 2.4 敏捷过程-结对编程的历史 * 45 重庆理工大学计算机科学与工程学院 李梁() “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 敏捷过程-为什么要结对编程 * 46 重庆理工大学计算机科学与工程学院 李梁() 不间断的代码审查Code Review 1. 同伴审查( Peer Code Review),即程序员 之间的互相审查 l缺乏设计的审查 l不能持久,定时Code Review l对需求和设计的不了解 导致无法实现有效的 Review 2. 团队审查( Team Code Review) 什么时候开会做Review ?不可能团队天天开会 无法对所有的设计和 Code进行Review 面子问题 效率低 传统开发过程的审查Review(例如印度的InfoSys公司)的问 题: * 47 重庆理工大学计算机科学与工程学院 李梁() 结对编程提供不间断的设计审查(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 * 48 重庆理工大学计算机科学与工程学院 李梁() l避免牛仔(cow boy)式(个人)的编程 l好代码的衡量标准:可读性和可维护性 l硬件设备价格的下降和速度的提升,使得代码效率不 是考虑的重点(对大多数的商业应用)。对大部分的 商业项目来说,更主要的顾虑是成本。而成本中人工 占最大的比例。好的代码可以减少修改的成本。 l结对编程的互相督促可以提高代码的可读性。 2.4 敏捷过程-编程方式 * 49 重庆理工大学计算机科学与工程学院 李梁() l结对(Pair)是一个最小单位的团队(Team),而任何人都是工 作在这样一个Team中。开发者( Developer )的言行都会影 响到其他的合作伙伴( Partner),也受到其他开发者的影响。 l结对编程避免了“我的Code”,使得代码的责任不属于某个人, 而是属于一个结对(Pair)和整个团队(Team),从而做到集 体代码所有权(Collective Code Ownership),也避免个人英 雄主义。 l迫使程序员必须频繁的交流,增进知识经验的交流(Cross- Training),使大家共同提高。 2.4 敏捷过程-团队合作 * 50 重庆理工大学计算机科学与工程学院 李梁() l同伴的潜在压力( Peer Pressure )。结对编程的过程也 是一个互相督促的过程。由于这种督促的压力,使得程序 员更认真的工作。 l每个人每天的有效工作时段不超过3-4个小时。 l结对编程中Driver和Navigator的互换可以让程序员轮流 工作,从而避免出现过度思考而导致观察力和判断力出现 偏差。 l潜意识的有利竞争。当人在一个团队中工作,总是下意识 的努力展现自己的优点。 l工作及时得到同伴的肯定,自信心和成就感(Self- Satisfaction)增强。 l觉得工作是一件愉快( Enjoyable )的事情。 2.4 敏捷过程-以人为本 * 51 重庆理工大学计算机科学与工程学院 李梁() l极限编程对实施的程序员提出了更高的要求。这种要求不是技 术水平,也不是学历水平也不是工作经验。这种要求是对一个 人的心智,道德,修养的更高要求。 l程序员的四怕: 1) 怕自己看上去傻 2) 怕被认为是没用的 3) 怕自己变的不重要(过时) 4) 怕自己不够好 l结对编程中,编码不再是私人的工作,而是一种公开的“表演” 。程序员的代码,工作方式,技术水平都变得公开和透明。 2.4 敏捷过程-结对建议 * 52 重庆理工大学计算机科学与工程学院 李梁() 一个XP开发人员具备这样一些基本素质:诚实,公正,开明 ,勇敢和谦卑!在这些素质的基础之上,才是对技术水平,能 力和天分等的要求。 l诚实 l公正 l开明 l勇气 l谦卑 具备这些素质才能克服“四怕”,才能成为一个成熟和专业的 Developer。 2.4 敏捷过程-XP开发人员素质 * 53 重庆理工大学计算机科学与工程学院 李梁() l驾驶者(Driver) 写设计文档(Class diagram等),进行编 码(Unit Test and Business Object)等XP开发流程。 l导航员(Navigator) 审阅Driver的文档、Driver对编码等 开发流程的执行;考虑Unit Test的覆盖程度;是否需要和如 何Refactoring;帮助Driver解决具体的技术问题。 lDriver和Navigator不断轮换角色,不要连续工作超过一小时 ,每一小时休息15分钟。Navigator要控制开发时间。 l主动参与 虽然每个工程任务(Engineering Task)都有所 有者(owner),但不能一旁观者的心态来做。任何一个 Task都首先是两个人的责任,也是所有人的责任。没有“我的 Code”、”你的Code”或“她的Code”,只有“我们的Code”。 2.4 敏捷过程-如何结编程 * 54 重庆理工大学计算机科学与工程学院 李梁() l只有水平上的差距,没有级别上的差异。一个结对(Pair ),尽管可能大家的级别资历不同,但不管在分析,设计 或编码,双方都拥有平等的决策权利。 l每对(Pairs)之间互换合作伙伴(Partner)。每个任务 (Task)都应该和不同的开发者(Developer)配对。 l每隔一天,甚至是半天,互换合作伙伴(Partner) 。但 任务(Task)的所有者(owner)因该继续留该任务的结 对中。 l如果结对(Pair)中的一人请假,另一人应尽量不要写实 际执行程式码(Production Code)。 l结对(Pair)一起加班 2.4 敏捷过程-如何结编程 * 55 重庆理工大学计算机科学与工程学院 李梁() 没有结对编程就没有XP l结对编程是极限编程(XP)所有的实践(Practices)中 最被争议和被认为是最难接受。 l结对编程是获得XP最大价值的关键。 l没有结对编程,无法实现有效的不间断代码审查( Continuous Code Review),代码质量下降。 l没有同伴压力(Peer Pressure),流程的执行很容易出 现偏差。 l没有结对编程,双向沟通(Communication)很容易弱 化,进而影响团队工作(Team work)。 l结对编程象XP流程中的粘合剂,把各个环节连接起来实 现最大的价值。 * 56 重庆理工大学计算机科学与工程学院 李梁() 这是引进XP时最难被接受的规则。但如果在采用其它XP的惯 例和规则时,抛弃结对编程,那么会面对以下问题: l如何进行有效的设计审查(Design Review) l如何进行有效的代码审查(Code Review) l如何保证代码质量 l如何保证流程的执行 l如何增进双向沟通(Communication) l如何进行交叉培训(Cross-Training) l如何增强团队工作(Team work) 没有结对编程就没有XP * 57 重庆理工大学计算机科学与工程学院 李梁() 结对编程和开放式源代码Open Source l开放式源代码(Open Source)现象:开源项目(Open Source Project)的代码质量比很多的商业软件(项目) 都好。 l和结对编程的共性: l有效的代码审查(Code Review) l集体代码所有权(Collective code ownership) * 58 重庆理工大学计算机科学与工程学院 李梁() l分布式的结对编程:两个程序员身处不同的物理位置,通 过共享(Sharing) 软件来实现结对编程。需要共享( Sharing)软件能提供 桌面共享,文字交谈,语音交谈, 甚至是视频交流。 l目前这种方法还没有被认可,主要出现在学校的关于XP的 研究项目中。 l面临的问题: lInternet的网路延迟 l工作时段的约定 分布式结对编程Distributed Pair Programming * 59 重庆理工大学计算机科学与工程学院 李梁() 结对编程与单独编程的比较 一些研究数据: 1999年,美国犹他州大学(University of Uath),两组学 生,一组独自工作单独编程(Solo Programming) ,一 组结对编程。其代码测试通过情况如下: * 60 重庆理工大学计算机科学与工程学院 李梁() 虽然结对编程的学生在刚开始的阶段比独自工作的学生花在 同样任务(Task)的时间较多,但很快结对编程的学生的时 间开始大幅度的下降。而独立工作的学生需要花费比结对( Pairs)更多的时间来达到接近的代码质量。 结对编程语言单独编程的比较 * 61 重庆理工大学计算机科学与工程学院 李梁() 比较研究项目后的问卷调查发现: l结对编程能用较少的时间生产更高质量的代码。 l结对编程的学生们认为自己比一个人的时候更勤奋和更聪 明的工作,因为不想让自己的合作伙伴失望。 l结对编程的学生认为自己比一个人的时候更专著,紧凑和 由纪律的工作,而且是持续的(因为来自合作伙伴的结对 压力。而独立工作的学生也可以专著和紧凑的工作,但往 往不持续。 l结对编程的学生对自己的工作更有信心和成就感。 l结对编程的学生觉得工作很愉快,很愿意很合作伙伴一起 工作。 l在紧张时间安排和繁重的工作压力下,独自工作的学生很 容易蜕变为没有纪律的程序员。 结对编程语言单独编程的比较 * 62 重庆理工大学计算机科学与工程学院 李梁() 结对编程是个渐进的过程 l有效率的结对编程不是一天就能做到的。 l结对编程是一个相互学习,相互磨合的一个渐进过程。 l开发者(Developers)需要时间来适应这种新的开发模式 。 l刚开始的结对编程很可能不比独立编程(Solo Programming)有更高的效率。但适应后的结对(Pairs )的开发质量和开发时间都比独立编程有大幅度的改善。 * 63 重庆理工大学计算机科学与工程学院 李梁() 优势: p可以减少风险 p可以使团队生产效率更高 p是知识传播的最好途径 p可以打造出最佳的合作团队。 p可以生成更好的代码 三个方面的应用: p教育学结对学习 p工业界结对开发与编程 p分布式结对编程环境 2.4 敏捷过程-结对编程(自学) * 64 重庆理工大学计算机科学与工程学院 李梁(

温馨提示

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

评论

0/150

提交评论