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

上传人:xian****812 文档编号:20060906 上传时间:2021-02-02 格式:PPT 页数:81 大小:4.30MB
收藏 版权申诉 举报 下载
软件工程教案--第2章软件过程.ppt_第1页
第1页 / 共81页
软件工程教案--第2章软件过程.ppt_第2页
第2页 / 共81页
软件工程教案--第2章软件过程.ppt_第3页
第3页 / 共81页
资源描述:

《软件工程教案--第2章软件过程.ppt》由会员分享,可在线阅读,更多相关《软件工程教案--第2章软件过程.ppt(81页珍藏版)》请在装配图网上搜索。

1、1 重庆理工大学计算机科学与工程学院 李梁 () 重庆理工大学 计算机科学与工程学院 李梁 65263075 软件工程 第二章 软件过程 10:22:32 2 重庆理工大学计算机科学与工程学院 李梁 () 什么是软件工程? 什么是工程化思想? 什么是软件过程? 有哪些过程模型? 如何建立过程模型? 什么是统一过程? 自学 什么是敏捷过程? 有哪些模型? 自学 什么是软件工程实践? 第一部分 软件工程与过程 10:22:32 3 重庆理工大学计算机科学与工程学院 李梁 () 第 2章 软件过程 2.1 什么是软件过程? 2.2 什么是软件生命周期 ? 2.3 软件过程评估:能力成熟度模型 是什么

2、 ? 软件过程评估: CMM、 CMMI、 ISO9001:2000 等 2.4 理解 敏捷过程 自学(含极限编程、结对编程) 2.5 开展 软件过程实践 10:22:32 4 重庆理工大学计算机科学与工程学院 李梁 () 概念 软件过程 是为了开发出软件产品,或者是为了完成软件工程 项目而需要完成的有关 软件工程的活动 通常使用 生命周期模型 简洁地描述软件过程 每项活动可分为一系列 工程任务 ,科学的软件过程是 一组适 合软件项目特点的任务集合 ,任务集合包括一组 软件工程任 务、里程碑、应交付的产品。 层次 软件工程是一门建立在以 质量焦点 为基础,分 过程、方法和 工具三个层次 的综合

3、技术 (三要素) 工具 方法 过程 质量焦点 2.1 软件过程 10:22:32 5 重庆理工大学计算机科学与工程学院 李梁 () 2.1 软件过程 软件工程过程: 一个软件机构针对某一类软件产品为自己规 定的 工作步骤 。 软件规格说明: 规定软件的功能及其运行的限制 软件开发: 产生满足规格说明的软件 软件确认: 确认软件能够完成客户提出的要求 软件演进: 为满足客户的变更要求,软件必须在使用的过 程中演进 软件工程过程定义了 : 方法使用的顺序 要求交付的文档资料 为保证质量和适应变化所需要的管理 软件开发各个阶段完成的里程碑 10:22:32 6 重庆理工大学计算机科学与工程学院 李梁

4、 () 软件过程框架 P15表 2-1 框架是实现整个软件开发活动的基础,软件过程框架定义 了若干小的框架活动,与过程有关的 角色 、 职责 的定义以 及 实现 也都离不开框架的支持。实际上就是软件过程的 工 程模板 内容 组织及管理框架: 实现过程活动涉及到的角色与职责 技术及工具框架: 实现过程活动的自动化及需要的设备与 工具 2.1 软件过程 -软件过程框架 10:22:32 7 重庆理工大学计算机科学与工程学院 李梁 () 2.1 软件过程 -软件工程目标 目标 可修改性 有效性 可靠性 可理解性 可维护性 可重用性 可适应性 可移植性 可追踪性 可互操作性 基本目标: 付出 较低 的

5、开发成本达到要求的软件 功能取得 较好 的软件性能 开发的软件易于移植需要 较低 的 维护 费用 能 按时 完成开发工作及时交付使 用 软件工程的目标是提高软件的 质量 与 生产 率 ,最终实现软件的 工业化 生产。 从短期效益看,追求高质量会延长软件开 发时间并且增大费用,似乎降低了生产率。 对开发人员而言,如果非得在质量与生产 率之间分个主次不可,那么应该是质量第一, 生产率第二。 10:22:32 8 重庆理工大学计算机科学与工程学院 李梁 () 从传统工业生产过程的知识发现 (补 ) 从传统工厂生产组织方法的启示:能否将软件开发作为工厂的产品, 按照工厂产品的生产组织方式组织软件开发工

6、作? 参考 啤酒生产过程 质量有保障 2.1 软件过程 10:22:32 9 重庆理工大学计算机科学与工程学院 李梁 () 向传统工业学习什么? 任务明确、组织有序、纪律严明、整体优化 2.1 软件过程 10:22:32 10 重庆理工大学计算机科学与工程学院 李梁 () 软件过程模型: 就是把软件生命周期中各项开发活动的流程 用一个合理的框架 (开发模型 )来规范描述。 软件生命周期模型 软件生命周期 划分为发生 -定义 、发展 -开发 和灭亡 -运行与维护 三个部分 细分为六个阶段: 问题的定义及规划 需求分析 软件设计 程序编码 软件测试 运行维护 2.1 软件过程 -软件过程模型 系统

7、规划 系统分析 系统设计 系统实施 运行支持 10:22:32 11 重庆理工大学计算机科学与工程学院 李梁 () 软件生命期 Software life cycle 软件产品从形成概念开始,经过开发、使用和维护 ,直到最后退役的全过程称为 软件生存周期 软件有一个孕育、诞生、成长、成熟、衰亡的生存 过程。这个过程即为计算机软件的 生存周期 生命周期阶段的划分原则: 各阶段的任务相对独立 同一阶段任务的性质相同 软件定义 (系统分析 ): 可行性研究 (软件计划 )、 需求分 析 软件开发 (系统设计 ): 概要设计 、详细设计、软件实现 (编码、单元测试 )、 软件测试 (组装测试、确认测试

8、 ) 软件使用、维护和退役 2.2 软件生命周期 10:22:32 12 重庆理工大学计算机科学与工程学院 李梁 () 基于 SDLC的瀑布模型 发生 发展 灭亡 软件系统开发生命周期 (Systems Development Life Cycle, SDLC) 是建立软件系统的一个过程,是管理和控制软件系统开发过程的 一种基本框架,是确保软件系统开发成功的一种必要措施和手段 。 2.2 软件生命周期 10:22:32 13 重庆理工大学计算机科学与工程学院 李梁 () 可行性研究 确定要开发软件系统的 总目标 给出 功能 、 性能 、 可靠性 以及 接口 等方面的要求 完成该软件任务的 可行

9、性研究 估计可利用的 资源 (硬件,软件,人力等 )、 成本 、 效益 、 开发进度 制定出完成开发任务的 实施计划 ,连同可行性研究 报告,提交管理部门审查 需求分析和定义 对用户提出的要求进行 分析 并给出 详细的定义 编写 软件需求说明书 或 系统功能说明书 及 初步的系 统用户手册 提交管理机构 评审 2.2 软件生命周期 10:22:32 14 重庆理工大学计算机科学与工程学院 李梁 () 概要设计 把各项需求转换成 软件的体系结构 。 结构 中每一组成部分都是意义明确的模块,每个模块都和某 些需求相对应,编写 设计说明书 ,评审 详细设计 对每个模块要完成的工作进行具体的描述 ,为

10、源程序编写打下基础,编写 设计说明书 ,提交评审 软件实现(编码、程序设计) 把软件设计转换成计算机可以接受的程序代码 ,即写 成以某一种特定程序设计语言表示的 “ 源程序清单 ” ; 写出的程序应当是结构良好、清晰易读的,且与设 计相一致的。 单元测试,查找各模块在功能和结构上存在的问题并 加以纠正 2.2 软件生命周期 10:22:32 15 重庆理工大学计算机科学与工程学院 李梁 () 软件测试 组装测试 ,将已测试过的模块按一定顺序组装 按规定的各项需求,逐项进行 有效性确认测试 ,决 定已开发的软件是否合格,能否交付用户使用 软件运行: 操作培训、模拟数据试运行、并行运行、系 统转换

11、 软件维护 改正性维护: 运行中发现软件中的错误需要修正 适应性维护: 为了适应变化了的软件工作环境,需 做适当变更 完善性维护: 为了增强软件的功能需做变更 2.2 软件生命周期 10:22:32 16 重庆理工大学计算机科学与工程学院 李梁 () 阶段 关键问题 结束标准(任务) 问题定义 问题是什么? 关于规模和目标的报告书 可行性研究 是否可行? 系统的高层逻辑模型; 数据流图;成本 /效益分析 需求分析 系统必须做什么? 系统的逻辑模型;数据流图; 数据字典,算法描述 概要设计 任何解决问题? 系统流程图;成本 /效益分析 层次图和结构图 详细设计 怎样具体的实现 HIPO或 PDL

12、 编码和单元 测试 正确的程序模块 源程序清单;单元测试方案和 结果 测试 符合要求的软件 综合测试方案和结果; 完整一致的软件配臵 运行、维护 持久地满足用户需要 完整准确的维护记录 10:22:32 17 重庆理工大学计算机科学与工程学院 李梁 () 系统分析 系统设计 系统实施 逻辑模型 物理模型 1个儿童房 1个主卧 厨房、卫生间等等 系 统 需 求 软件生命周期总结 10:22:32 18 重庆理工大学计算机科学与工程学院 李梁 () 软件过程评估: 评价软件过程中的各种活动(管理、技术方法 、控制、计划等)是否满足软件工程成功所需的基本过程标准 要求。 作用: 检验和识别软件过程风

13、险,促进软件过程改进,提高软 件开发能力。 CMM: 分析或诊断软件或软件团队的相对成熟度 CMMI: 在 CMM基础上集成了工程方面的评价指标,包括启 动、诊断、建立、执行和学习,主要用于软件企业。 ISO9001:2000: 国际通用标准(质量保证体系),用于软件 产品、系统或服务的整体质量评估,采取“计划 -实施 -检查 -行 动”循环,将其应用于软件项目的质量管理环节,可直接应用 于软件团队和软件企业。 SPICE标准: 定义软件过程评估的一系列要求,帮助团队建 立客观的评价体系,评估软件过程的有效性。 2.3 软件过程评估 10:22:32 19 重庆理工大学计算机科学与工程学院 李

14、梁 () CMM(Capability Maturity Model): 能力成熟度模型, 用于评价 软件机构 的 软件过程 能力成熟度的模型。是指对过程 计划 或定义 水平、过程 实施 水平、过程 管理 和 控制 水平、过程 改善 潜力等指 标的综合 评价。 美国 卡内基 -梅隆大学软件工程研究所开发 。 建立此模型的初始目的,是为大型软件项目的招标活动提供一种 全面而客观的评审依据,发展到后来此模型又同时被应用于许多 软件机构内部的过程改进活动中 。 核心: 把软件开发视为一个过程,并根据这一原则对软件开发和 维护进行 过程监控 和 控制 ,使其更加科学化、标准化。 在无规则和混乱的管理之

15、下,先进的技术和工具并不能发挥出应 有的作用,改进对软件过程的管理才是消除软件危机的突破口, 再也不能忽视在软件过程中管理所起的关键作用了。 CMM为软件企业的过程能力提供一个 阶梯式的改进框架 ,它基 于过去所有软件工程过程改进的成果,吸取以往软件工程的经验 教训,提供一个基于过程改进的框架 。 2.3 能力成熟度模型 -CMM 10:22:32 20 重庆理工大学计算机科学与工程学院 李梁 () CMM是一 种通过 严格定义、实施、控制和不断改进软件 过程的方法来保证软件质量的分层模型。 CMM是对 软件开发组织或项目的软件过程能力进行评 估的一个基本框架。 CMM是 指导软件开发组织或项

16、目逐步改进其软件能力 成熟度的一个指南。 CMM只回答“做什么?”,具体地“如何做?”由开 发组织自己定。 软件过程是一个可管理、可测量和可改进的过程。 软件过程的质量受其支持技术的影响。 用于软件工程的技术水平应与过程的成熟度相适应。 2.3 能力成熟度模型 -评估模型 10:22:32 21 重庆理工大学计算机科学与工程学院 李梁 () 在 CMM中 把软件过程从 无序到有序的进化过程 (18个 )分成 5个阶段 ,并把这些阶段排序,形成 5个逐层提高的等级。 5 级 : 初始级、可重复级、已定义级、已管理级(已控 制级)、优化级。 这 5个成熟度等级定义了一个有序的尺度,用以测量软件 组

17、织的软件过程成熟度和评价其软件能力,这些等级还能 帮助软件组织把应做的改进工作排出优先次序。 成熟度等级是妥善定义的向 成熟软件组织前进 途中的平台 ,每一个成熟度等级都为过程的继续改进提供一个台阶。 CMM通过定义能力成熟度的 5个等级,引导软件开发组织 不断识别出其软件过程的缺陷,并指出应该做哪些改进, 但是它并不提供做这些改进的具体措施。 2.3 能力成熟度模型 -评估模型 10:22:32 22 重庆理工大学计算机科学与工程学院 李梁 () 为企业的发展规定过程成熟级别,分为 5级: 初始级 ( Initial):一般企业皆具有 可重复级 ( Repeatable):成功经验可以重复

18、已定义级 ( Defined):一套完整的企业过程,人员自 觉遵守(培训) 已管理级( Managed、已控制): 过程 &产品可度量和 控制 优化级( Optimizing): 过程持续改进 作用: 从无序到有序、从特殊到一般、从定性管理到定量 管理、最终达到动态优化。 2.3 能力成熟度模型 -CMM 10:22:32 23 重庆理工大学计算机科学与工程学院 李梁 () CMM具有分层的体系结构,可图示为: CMM 初始级 可重复级 已定义级 已管理级 优化级 关键过程域 18个、目标 52个 关键实践 关键实践 关键实践 关键实践 关键实践 316个 . . (按 5个公共特征分类) 2

19、.3 能力成熟度模型 -CMM体系结构 10:22:32 关键过程域: 代表一组相关的工作 ( 活动 )。每个 KPA都有一个确定 的 目标 ,完成该目标即 认为过程能 力的提高。 24 重庆理工大学计算机科学与工程学院 李梁 () 2.3 能力成熟度模型 -CMM结构 10:22:32 25 重庆理工大学计算机科学与工程学院 李梁 () 关键过程领域 KPA( Key Process Area): 18个 除去初始级以外,其它 4 级都有若干个引导软件机构改 进软件过程的要点,称为关键过程领域。 每一个关键过程领域是一组相关的活动,成功地完成这些 活动,将会对提高过程能力起重要作用。 11

20、初初 始始 级级 22 可可 重重 复复 级级 需需 求求 管管 理理 软软 件件 项项 目目 计计 划划 软软 件件 项项 目目 跟跟 踪踪 与与 监监 督督 软软 件件 分分 包包 合合 同同 管管 理理 软软 件件 质质 量量 管管 理理 软软 件件 配配 置置 管管 理理 关键过程域 2.3 能力成熟度模型 -CMM关键域 10:22:32 26 重庆理工大学计算机科学与工程学院 李梁 () 33 可可 定定 义义 级级 软软 件件 机机 构构 过过 程程 关关 注注 点点 软软 件件 机机 构构 过过 程程 定定 义义 培培 训训 计计 划划 整整 体体 化化 软软 件件 管管 理理

21、 软软 件件 产产 品品 工工 程程 组组 间间 合合 作作 同同 行行 评评 审审 44 可可 管管 理理 级级 定定 量量 过过 程程 管管 理理 软软 件件 质质 量量 管管 理理 55 可可 优优 化化 级级 过过 程程 变变 更更 管管 理理 预预 防防 故故 障障 技技 术术 变变 更更 管管 理理 2.3 能力成熟度模型 -CMM关键域 10:22:32 27 重庆理工大学计算机科学与工程学院 李梁 () 级别 CMM级别的特征 1级 初始级 软件过程无序,有时甚至混乱 ,成功归功于个人的努力 2级,可重复级 在项目内部已建立健全的项目 管理,可重复已有的成功 3级,已定义级 在

22、组织内部已定义并实施全组 织统一的软件标准过程 4级,已管理级 软件过程和产品质量已得以有 计划和定量的管理和控制 5级,优化级 已建立使软件过程和产品质量 得以持续改进的架构 2.3 能力成熟度模型 -CMM五个级别 10:22:32 28 重庆理工大学计算机科学与工程学院 李梁 () 2.3 能力成熟度模型 -关键实践 10:22:32 29 重庆理工大学计算机科学与工程学院 李梁 () Level 1:初始级 过程无序且不可见 特点 过程执行杂乱无序 关键问题 项目计划管理、配臵管理、软件质量保证 达标标准 过程活动无一定秩序,开发过程的可重复 性差 Out In 2.3 能力成熟度模型

23、 -CMM五个级别 10:22:32 30 重庆理工大学计算机科学与工程学院 李梁 () Level 2:可重复级 里程碑 ( Milestone)可见 ,按计划开 发 达标标准 使 项目管理处于严格控制 之下,包括严格的 项目计划和追踪、子合同管理、需求变更和产品基线控制 特点 过程管理工作依赖管理人员的技能 关键问题 培训、技术评审、标准 Level 2的 6个 KPA: 侧重于管理 需求管理 软件项目计划 软件项目的跟踪和监控 软件子合同管理 软件质量保证 软件配置管理 2.3 能力成熟度模型 -CMM五个级别 10:22:32 31 重庆理工大学计算机科学与工程学院 李梁 () Lev

24、el 3:定义级 每个 阶段的内部活动 可见,标准过程 和项目定义过程裁 剪 达标标准 定义一个适合该组织的软件过程,有正规的文档化的 规范,并能根据不同项目的要求 裁剪和优化 这个软件过程 特点 过程可定义、可执行 关键问题 过程度量、过程分析、 质量计划 Level 3的 7个 KPA: 工程过程企业理念 机构过程关注 机构过程定义 培训计划 集成软件管理过程裁剪和定义 软件产品工程过程执行 组间协调 对等审查 2.3 能力成熟度模型 -CMM五个级别 10:22:32 32 重庆理工大学计算机科学与工程学院 李梁 () Level 4 管理级 过程 可度量,预测值与结果之间的偏差可 控

25、达标标准 为定义好的过程建立一套详细的 度量机制 , 为产 品和过程设立质量目标 , 度量软件过程和产品 特点 过程成为可度量的 关键问题 改善技术 、 问题分析 、 防止出错 Level 4的 2个 KPA: 预测量化管理 定量过程管理过程度量 软件质量管理产品度量 2.3 能力成熟度模型 -CMM五个级别 10:22:32 33 重庆理工大学计算机科学与工程学院 李梁 () Level 5 优化级 过程动态 调整、新技术的采 用 达标标准 用第 4 级建立的度量机制,不断地 指导过程改善 ,技术革新和防止出错 特点 通过反馈来改善过程 关键问题 自动化、反馈技术 Level 5的 3个 K

26、PA: 动态优化 缺陷预防 技术改变管理 过程改变管理 2.3 能力成熟度模型 -CMM五个级别 10:22:32 34 重庆理工大学计算机科学与工程学院 李梁 () CMMI (Capability Maturity Model Integration):即能力成熟 度模型 集成 ,是 CMM模型的最新版本 。 将各种能力成熟模型集成到一个框架中去,建立一种从集成 产品与过程发展, 从工程角度 健全的系统开发原则的过程改 进,消除不同模型之间的不一致与重复 软件集成: 各种硬件(计算能力、存储能力、网络交换能力 、信息安全)、系统软件、应用软件、工具软件、存储、运 行环境(机房电力、温度、清

27、洁、防雷、网络通讯)等集成 到一起的工程。 主要集成部分: 系统工程( SE)、软件工程( SW)、集成 产品和过程开发( IPPD)、供应商外包管理( SS) 2.3 能力成熟度模型 -CMMI 10:22:32 35 重庆理工大学计算机科学与工程学院 李梁 () CMMI-Capability Maturity Model Integration是 CMM模型 的最新版本。 能力成熟度模型集成 CMMI有两种表示方法: 和软件 CMM一样的 阶段式表现方法 连续式的表现方法 过程管理 项目管理 工程 支持 CMMI的目标是 质量、时间表和最低的成本 2.3 能力成熟度模型 -CMMI 10

28、:22:32 36 重庆理工大学计算机科学与工程学院 李梁 () 对比理解 (补 ): 建筑工程项目 vs 软件工程项目 工程项目的管理过程 :项目启动、计划、监控、结束、 客户服务。 软件工程繁荣过程 (软件开发生命周期 ):概念、需求、 设计、实施、系统整合和验证、系统部署、技术支持和 系统维护。 机械厂 ( 车间 ) 原材料 产品 生产现场监控管理 2.3 能力成熟度模型 -CMMI 10:22:32 37 重庆理工大学计算机科学与工程学院 李梁 () 软件开发范型: 循环往复 、 螺旋上升,持续改进 的过程 目标系统 用户要求 可行性 合同与需求 调研 谈判 编程与测试 设计 提交 实

29、现 定义功能 如何做 可做否 做什么和不做什么 做怎样 构 思 设计 实施 -验证 理解需求 表达需求 软件 开发 典型 过程 要什么 运行 /总结 知识 在于 积累 经验 在于 整理 能力 在于 应用 2.3 能力成熟度模型 -CMMI 10:22:32 38 重庆理工大学计算机科学与工程学院 李梁 () 敏捷方法: 开发项目是一个 学习的体验 ,没有谁能完全理解需 求后才开始项目, 客户在项目进展中不断学习 、理解而提出真 正的需求, 开发者也是 ,没有人完全清楚会构件出什么来,直 到结束。每个人都在学习, 敏捷方法改变了过程 ,以便持续学 习,培养学习能力。 敏捷不是一个过程,是 一类过

30、程的统称 。解决传统强调控制的 开发方法(软件工厂)没有解决的问题(重过程,轻人文) 敏捷方法的两大主要特征: 对 “适应性” 的强调 对“ 人 ”的关注 做法: 引入 迭代式 的开发手段, 用户反馈机制,适应需求变更 将整个软件生命周期 分解 为若干个小的 迭代周期( 原型法 ) 获取切实有效的客户反馈 提出 12条基本原则 2.4 敏捷过程 (自学 ) 10:22:32 39 重庆理工大学计算机科学与工程学院 李梁 () 2.4 敏捷过程 -敏捷开发 12条原则 1、我们最优先要做的是 通过尽早的 、持续的交付 有价值的软 件 来使客户满意。 2、即使到了开发的后期,也 欢迎改变需求 。敏

31、捷过程利用 变 化 来为客户创造竞争优势。 3、 经常性地交付可以工作的软件 ,交付的间隔可以从几个星 期到几个月,交付的 时间间隔越短越好 。 4、在整个项目开发期间,业务人员和开发人员必须 天天都在 一起工作 ( 封闭开发 )。 5、围绕被激励起来的 个体来构建项目 ,给他们提供所需的 环 境和支持 ,并且 信任他们 能够完成工作。 6、在团队内部,最具有效果并富有效率的传递信息的方法,就是 面对面的交谈 。 10:22:32 40 重庆理工大学计算机科学与工程学院 李梁 () 7、工作的 软件 是首要的进度度量标准。 8、敏捷过程提倡 可持续的开发速度 。责任人、开发者和用 户应该能够保

32、持一个长期的、恒定的开发速度。 9、不断地关注 优秀的技能 和好的设计会增强敏捷能力。 10、 简单是最根本的 。 11、 最好 的构架、需求和设计出于 自组织团队 。 12、每隔一定时间,团队会在如何才能更有效地工作方面 进行 反省 ,然后相应地对自己的行为进行 调整 。 敏捷过程对人的技能、职业素养、团队文化氛围有较高要 求 2.4 敏捷过程 -敏捷开发 12条原则 10:22:32 41 重庆理工大学计算机科学与工程学院 李梁 () 极限编程( eXtreme Programming, XP) 是一种软件工程方 法学,是 敏捷开发中 最富有成效的方法学之一 由肯特 贝克( Kent Be

33、ck)在 1996年提出,具有强沟通 、简化设计、迅速反馈等特点,适合于规模小、进度紧 、需求不稳定、开发小项目的小团队。 强调将把它列出的每个方法和思想做到极致,做到最好 ,不提倡的一律忽略(如开发前的整体设计) 极限编程特点 XP模型是 “轻量型” 或 “灵活” 的软件过程模型,与 面向 对象语言结合 的开发方案,解决大型软件开发过程所遇到 的问题的“ 专家协作 ”的开发方式,解决难点问题。 核心有四个要点: 交流 简单 反馈 勇气 2.4 敏捷过程 -极限编程 (自学 ) 10:22:32 42 重庆理工大学计算机科学与工程学院 李梁 () 交流 开发人员与客户的交流 开发人员之间的交流

34、 使用结对编程 开发人员与管理人员的交流 简单 设计的简单 编码的简单 注释的简单 测试的简单 反馈 客户对软件的反馈 测试代码对功能代码的反馈 先测试,后编程 勇气 接受任务的勇气 XP常见问题 XP适合于小型项目( 10人左右) ? 结对编程, 搭档 如何安排 ? 实施结对编程、集体代码所有权之后,如何 考核单个 开发人 员? 2.4 敏捷过程 -极限编程 (自学 ) 10:22:32 43 重庆理工大学计算机科学与工程学院 李梁 () 结对编程 (Pair-Programming) : 两个人坐在同一台计算机前面,使 用相同的键盘和鼠标来开发同样的一个模块,一个称为驾驶者 (Driver

35、),负责代码的键入,另外一个称为领航员 (Navigator), 负责监看与决策,包括低级错误和方向性的错误。当出现的一个 问题对其中一个人来说,难以解决,而恰好是另外一个人的强项 的时候,那么 角色就会发生转换 。 XP中非常重要的实践之一。 疑问: 一个程序两人写是不是浪费(可是两份工资,双倍资源哦)? 编程是一个人的活动。学校里这么教的,一直也是这么做的。 我不喜欢被人盯着工作,这样我不自在,无法工作。 这个笨家伙老问问题,不会看书么?我都无法专心工作了 另一方面: 结对编程被很多的大师级程序员推崇; 不少大学都展开对结对编程的研究,并得到正面的结论; 很多尝试过的开发者都开始喜欢结对编

36、程。 2.4 敏捷过程 -结对编程 (自学 ) 10:22:32 44 重庆理工大学计算机科学与工程学院 李梁 () 1995年,悉尼理工大学的拉里 .康斯坦丁( Larry Constantine) 在他的专栏中第一次提到了在他在 P. J. Plaughers software company, Whitesmiths, Ltd观察到一个现象: 合作式编程 ( Collaborative Programming) 两个程序员一起工作,可以比以往更快的交出完成并经过测试 的代码,而且这些代码几乎是没有 Bug的。” 1996年,肯特 贝克( Kent Beck),沃德 坎宁安( Ward C

37、unningham)和罗恩 杰弗里斯( Ron Jeffries)一起提出了 极限编程( XP),其中吸收了 Collaborative Programming, 并称为结对编程( Pair Programming)。 Pair Programming是 XP的一个关键实践( key practice),也 是 XP成功的关键。 随着 XP在世界范围内被采用和练习, Pair Programming开始 被接受。 2.4 敏捷过程 -结对编程的历史 10:22:32 45 重庆理工大学计算机科学与工程学院 李梁 () “The Human eye has an almost infinite

38、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 杰拉尔德

39、温伯格 “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 敏捷过程 -为什么要结对编程 10:22:32 46 重庆理

40、工大学计算机科学与工程学院 李梁 () 不间断的代码审查 Code Review 1. 同伴审查( Peer Code Review),即程序员 之间的互相审查 缺乏设计的审查 不能持久,定时 Code Review 对需求和设计的不了 解导致无法实现有效 的 Review 2. 团队审查( Team Code Review) 什么时候开会做 Review ?不可能团队天天开会 无法对所有的设计和 Code进行 Review 面子问题 效率低 传统开发过程的 审查 Review(例如印度的 InfoSys公司)的问 题: 10:22:32 47 重庆理工大学计算机科学与工程学院 李梁 () 结

41、对编程提供不间断的 设计审查 ( Design review), 单元 测试审查 ( Unit Test Review), 代码审查 ( Code Review), 文档审查 ( Document Review),避免了效果 差的 团队代码审查 ( Team Code Review),也比抽查式的 同伴代码审查 ( Peer Code Review)有更好的 质量 。 (CMM Level 3) 结对编程中,任何一段代码都至少被 两双眼睛看过 , 两个脑 袋思考过 。结合协同代码 主人翁精神 ( Collective code ownership)和 小任务 (Small Engineerin

42、g Task),代码被 不断的审查。 不间断的代码审查 Code Review 10:22:32 48 重庆理工大学计算机科学与工程学院 李梁 () 避免 牛仔( cow boy)式(个人)的编程 好代码的衡量标准: 可读性和可维护性 硬件设备价格的下降和速度的提升, 使得代码效率不 是考虑的重点 (对大多数的商业应用)。对大部分的 商业项目来说,更主要的顾虑是成本。而成本中 人工 占最大的比例 。好的代码可以减少修改的成本。 结对编程的互相督促可以提高代码的 可读性 。 2.4 敏捷过程 -编程方式 10:22:32 49 重庆理工大学计算机科学与工程学院 李梁 () 结对 ( Pair)

43、是一个最小单位的 团队 ( Team) ,而任何人都是 工作在这样一个 Team中。 开发者 ( Developer )的言行都会 影响到其他的 合作伙伴 ( Partner), 也受到其他开发者的影响。 结对编程 避免了 “ 我的 Code,使得代码的责任不属于某个人, 而是属于一个结对( Pair) 和整个团队( Team) ,从而做到 集 体代码所有权 ( Collective Code Ownership),也避免个人英 雄主义。 迫使程序员必须 频繁的交流 , 增进知识经验的交流 (Cross- Training), 使大家共同提高 。 2.4 敏捷过程 -团队合作 10:22:32

44、 50 重庆理工大学计算机科学与工程学院 李梁 () 同伴的潜在压力 ( Peer Pressure )。结对编程的过程也 是一个 互相督促 的过程。由于这种督促的压力,使得程 序员更认真的工作。 每个人每天的有效工作时段不超过 3-4个小时。 结对编程中 Driver和 Navigator的互换可以让程序员轮流 工作,从而避免出现过度思考而导致观察力和判断力出 现偏差。 潜意识的有利竞争。当人在一个团队中工作,总是下意 识的努力展现自己的优点。 工作及时得到同伴的肯定, 自信心 和 成就感 (Self- Satisfaction)增强。 觉得工作是一件 愉快 ( Enjoyable )的事情

45、。 2.4 敏捷过程 -以人为本 10:22:32 51 重庆理工大学计算机科学与工程学院 李梁 () 极限编程 对实施的程序员提出了更高的要求。这种要求不是技 术水平,也不是学历水平也不是工作经验。这种要求是对一个 人的 心智,道德,修养 的更高要求。 程序员的四怕: 1) 怕自己看上去傻 2) 怕被认为是没用的 3) 怕自己变的不重要(过时) 4) 怕自己不够好 结对编程中,编码不再是私人的工作,而是一种公开的 “表 演” 。程序员的代码,工作方式,技术水平都变得公开和透明。 2.4 敏捷过程 -结对建议 10:22:32 52 重庆理工大学计算机科学与工程学院 李梁 () 一个 XP开发

46、人员具备这样一些基本素质: 诚实,公正,开明, 勇敢和谦卑 !在这些素质的基础之上,才是对技术水平,能 力和天分等的要求。 诚实 公正 开明 勇气 谦卑 具备这些素质才能克服“四怕”,才能成为一个成熟和专业 的 Developer。 2.4 敏捷过程 -XP开发人员素质 10:22:32 53 重庆理工大学计算机科学与工程学院 李梁 () 驾驶者 ( Driver) 写设计文档 (Class diagram等 ),进行编 码 (Unit Test and Business Object)等 XP开发流程。 导航员 ( Navigator) 审阅 Driver的文档、 Driver对编码等 开发

47、流程的执行;考虑 Unit Test的覆盖程度;是否需要和如 何 Refactoring;帮助 Driver解决具体的技术问题。 Driver和 Navigator不断轮换角色,不要连续工作超过一小时, 每一小时休息 15分钟。 Navigator要控制开发时间。 主动参与 虽然每个工程任务( Engineering Task)都有 所 有者 ( owner),但不能一旁观者的心态来做。任何一个 Task都首先是两个人的责任,也是所有人的责任。没有“我 的 Code、”你的 Code或“她的 Code,只有“我们的 Code。 2.4 敏捷过程 -如何结编程 10:22:32 54 重庆理工大

48、学计算机科学与工程学院 李梁 () 只有 水平上的差距 ,没有 级别上的差异 。一个结对 ( Pair),尽管可能大家的级别资历不同,但不管在分析, 设计或编码,双方都拥有平等的决策权利。 每对 ( Pairs)之间互换 合作伙伴 ( Partner)。每个任务 ( Task)都应该和不同的开发者( Developer)配对。 每隔一天,甚至是半天,互换 合作伙伴 ( Partner) 。但 任务( Task)的 所有者 ( owner)因该继续留该任务的结 对中。 如果结对( Pair)中的一人请假,另一人应尽量不要写 实 际执行程式码 ( Production Code)。 结对( Pai

49、r) 一起加班 2.4 敏捷过程 -如何结编程 10:22:32 55 重庆理工大学计算机科学与工程学院 李梁 () 没有结对编程就没有 XP 结对编程是极限编程( XP)所有的 实践 ( Practices)中 最被争议和被认为是最难接受。 结对编程是获得 XP最大价值的 关键 。 没有 结对编程, 无法实现有效的 不间断代码审查 ( Continuous Code Review) ,代码质量下降。 没有 同伴压力( Peer Pressure) , 流程的执行很容易出 现偏差。 没有 结对编程 , 双向沟通 ( Communication) 很容易弱 化,进而影响 团队工作 ( Team

50、work) 。 结对编程 象 XP流程中的粘合剂,把各个环节连接起来实 现最大的价值。 10:22:32 56 重庆理工大学计算机科学与工程学院 李梁 () 这是 引进 XP时 最难被接受的规则。但如果在采用其它 XP的惯 例和规则时,抛弃 结对编程 ,那么会 面对以下问题: 如何进行有效的 设计审查 ( Design Review) 如何进行有效的 代码审查 ( Code Review) 如何保证代码质量 如何保证流程的执行 如何增进 双向沟通( Communication) 如何进行 交叉培训 ( Cross-Training) 如何增强 团队工作 ( Team work) 没有结对编程就

51、没有 XP 10:22:32 57 重庆理工大学计算机科学与工程学院 李梁 () 结对编程和开放式源代码 Open Source 开放式源代码( Open Source)现象: 开源项目( Open Source Project)的代码质量比很多的商业软件(项目) 都好。 和结对编程的共性: 有效的代码审查( Code Review) 集体代码所有权( Collective code ownership) 10:22:32 58 重庆理工大学计算机科学与工程学院 李梁 () 分布式的结对编程: 两个程序员身处不同的物理位置,通 过 共享 ( Sharing) 软件来实现结对编程。需要共享 (

52、Sharing)软件能提供 桌面共享,文字交谈,语音交谈 , 甚至是 视频交流 。 目前这种方法还没有被认可,主要出现在学校的关于 XP的 研究项目中。 面临的问题: Internet的网路延迟 工作时段的约定 分布式结对编程 Distributed Pair Programming 10:22:32 59 重庆理工大学计算机科学与工程学院 李梁 () 结对编程与单独编程的比较 一些研究数据: 1999年,美国犹他州大学( University of Uath),两组学 生,一组独自工作单独编程( Solo Programming) ,一 组结对编程。其代码测试通过情况如下: 10:22:32

53、 60 重庆理工大学计算机科学与工程学院 李梁 () 虽然结对编程的学生在刚开始的阶段比独自工作的学生花在 同样任务( Task)的时间较多,但很快结对编程的学生的时 间开始大幅度的下降。而独立工作的学生需要花费比结对( Pairs)更多的时间来达到接近的代码质量。 结对编程语言单独编程的比较 10:22:32 61 重庆理工大学计算机科学与工程学院 李梁 () 比较研究项目后的问卷调查发现: 结对编程能用较少的时间生产更高质量的代码。 结对编程的学生们认为自己比一个人的时候 更勤奋和更聪 明 的工作,因为不想让自己的合作伙伴 失望 。 结对编程的学生认为自己比一个人的时候 更专著,紧凑和 由

54、纪律 的工作,而且是 持续的 (因为来自合作伙伴的 结对 压力 。而独立工作的学生也可以专著和紧凑的工作,但往 往 不持续 。 结对编程的学生对自己的工作更 有信心和成就感 。 结对编程的学生觉得工作很 愉快 ,很愿意很合作伙伴一起 工作。 在紧张时间安排和繁重的工作压力下,独自工作的学生很 容易蜕变为 没有纪律的程序员 。 结对编程语言单独编程的比较 10:22:32 62 重庆理工大学计算机科学与工程学院 李梁 () 结对编程是个渐进的过程 有效率的结对编程 不是一天就能做到的。 结对编程 是一个相互学习,相互磨合的一个渐进过程。 开发者( Developers) 需要时间来适应这种新的开

55、发模式。 刚开始的 结对编程 很可能不比独立编程( Solo Programming) 有更高的效率。但适应后的结对( Pairs) 的开发质量和开发时间都比独立编程有大幅度的改善。 10:22:32 63 重庆理工大学计算机科学与工程学院 李梁 () 优势 : 可以减少风险 可以使团队生产效率更高 是知识传播的最好途径 可以打造出最佳的合作团队。 可以生成更好的代码 三个方面的应用: 教育学结对学习 工业界结对开发与编程 分布式结对编程环境 2.4 敏捷过程 -结对编程 (自学 ) 10:22:32 64 重庆理工大学计算机科学与工程学院 李梁 () 教育学研究 结对编程学习效果研究 结对双

56、方的相容性研究 结对编程过程研究 软件工业界 结对编程实践方式 社会动力学研究 个人编程能力的增强 分布式结对编程 结对编程开发环境研究 开发结对编程工具的需求 适合开展分布式结对编程的工具研究 2.4 敏捷过程 -结对编程研究 (自学 ) 10:22:32 65 重庆理工大学计算机科学与工程学院 李梁 () 结对编程与测试驱动开发 测试驱动开发( Test Driven Development,TDD) 思想: 开发之前首先完成测试用例编写;然后编写代码和 测试;测试通过后即需增加新功能。 优势: 测试优先,保证质量 结合结对编程 10:22:32 66 重庆理工大学计算机科学与工程学院 李

57、梁 () 结对编程与代码重构 重构就是代码的重新设计。 目的: 得到好的代码和架构,易修改、易理解 适应需求 结对编程: 审查代码 理解代码 反馈 10:22:32 67 重庆理工大学计算机科学与工程学院 李梁 () 结对编程与简单设计 简单设计: 达到目前需求即可 结对编程可以达到简单 10:22:32 68 重庆理工大学计算机科学与工程学院 李梁 () 结对编程方法 面对面结对编程 分布式结对编程 10:22:32 69 重庆理工大学计算机科学与工程学院 李梁 () 自适应软件开发 ( Adaptive Software Development) 由吉姆 海史密斯( Jim Highsmi

58、th)提出,着眼于人员 协作和团队自我组织,类似于收集人们创意的容器。 生命周期三个阶段包括: 思考: 启动项目并完成自适应循环计划 协作: 沟通与信任 学习: 改进真正的理解水平,通过焦点组、正式技术 评审和事后剖析方式进行学习 2.4 敏捷过程 -自适应软件开发 (自学 ) 10:22:32 70 重庆理工大学计算机科学与工程学院 李梁 () 动态系统开发 ( Dynamic System Development Method)是 一种使用 增量原型开发模式 完全满足对 时间约束 的系统构建 和维护的敏捷软件开发方法。 借用 Pareto(佩瑞多 )原则: 即如果交付整个应用系统需用 10

59、0%时间,那么 80%的应用系统可以用 20%的时间交付 建议使用迭代软件过程 动态系统开发生命周期的敏捷过程模型: 可行性研究 业务研究 功能模型迭代 设计和构建迭代 实现 2.4 敏捷过程 -动态系开发 (自学 ) 10:22:32 71 重庆理工大学计算机科学与工程学院 李梁 () 特征驱动开发( Feature-Driven development)把软件开发 项目作为一个系统,即生产软件的系统 定义六种关键项目角色: 项目经理: 负责报告进度情况、管理预算、筹措人员,以 及管理设备、办公场地和资源等 主设计师: 负责系统的整体设计 开发经理: 负责领导日常开发活动,解决主程序员们自己

60、 无法解决的日常的资源冲突问题。 主程序员: 参与高层的需求分析和设计活动,领导 3-6人 开发小组负责新软件特征的底层分析、设计和开发工具。 类的所有者: 是主程序员领导的开发小组的成员,对新软 件系统所需要的特征进行设计、编码、测试和编写文档。 领域专家: 是客户、用户、业主、业务分析专家或者所有 这些的混合。 2.4 敏捷过程 -特征驱动开发 (自学 ) 10:22:32 72 重庆理工大学计算机科学与工程学院 李梁 () 软件工程实践的精髓是 理解问题、计划解决方案、实施计划和 检查结果的精确度 等方面 通用的框架活动包括: 沟通 计划 建模 部署 普适性活动 实践 就是人们改造社会和

61、自然的、有意识的 活动 。实践是人 类自觉自我的一切行为 (马克思 )。实践的目的是以改造世界为 、以满足客观需要。 工程实践就是指将人们所学知识 用于实际工程 项目的 系列实 践活动的总称 。 需求产生 可行性分析 需求分析 形成计划 建立模型 软件部署 普适性活动 2.5 软件过程实践 10:22:32 73 重庆理工大学计算机科学与工程学院 李梁 () 设计 -1:就是按照任务的目的、要求,预先确定的工作方案、 工作计划、工作步骤等。 设计 -2:就是一种有目地的 创作 行为。 设计 -3: 就是 成功经验 的应用过程 。 近义词:创作。 设计是一种职业。比如建筑设计师、数据库设计师、人

62、机界面 设计师等。 分析:就是将事物、现象、概念分类,剖析出本质及其内在联 系。是 把整体分解为部分以加以认识 的过程。 近义词:区分。 分析也是一种职业。比如药剂分析师、软件系统设计师、经济 分析师等。 实施:就是实际的施行。 近义词:实践。 2.5 软件过程实践 -几个关键性的概念 10:22:32 74 重庆理工大学计算机科学与工程学院 李梁 () 发 生 发 展 灭 亡 传统工业过程 视角下的软件过程 瀑布模型 10:22:32 75 重庆理工大学计算机科学与工程学院 李梁 () 划 分阶段 :对整个软件开发过程按实施任务不同而划分成不 同阶段; 分配任务 :每个阶段包括的具体任务;

63、人员分工 :明确各个阶段、不同任务中各自职责; 过程控制 :明确每个任务的质量标准、经费预算、进度安排 等; 技术与工具 :确定开发所需要的技术及其工具和选择开发方 法 如 面向对象法、 C#与 JAVA计算机语言。 优点 :思路清晰、任务明确、分工清楚、控制方便、风险较 小。因此,适合于大中型软件开发任务。 缺点 :阶段多、周期长、工作量大、成本高,需求 /目标难以 预先定义。 2.5 软件过程实践 -瀑布模型的基本特 点 10:22:32 76 重庆理工大学计算机科学与工程学院 李梁 () 核心原则 存在价值 保持简洁 维护视图 生产者要让消费者理解 面向未来 计划复用 认真思考 2.5

64、软件过程实践 10:22:32 77 重庆理工大学计算机科学与工程学院 李梁 () 沟通实践:包括决定项目涉及人的信息和沟通需求。 沟通 是人们通过语言和非语言方式传递并理解信息、知识的过 程,是人们了解他人思想、情感、见解和价值观的一种双向的 途径。 大英百科全书 :个人之间凭借一定媒介交换消息的方法。 韦氏大辞典 :消息交流、意见交换。 普林斯顿大学对万份人事档案进行分析发现: 智慧、专业技术 、经验三者只占一个人成功因素的 25%, 其余 75%决定于良好 的 人际沟通 。 哈佛大学的一次调查结果显示,在 500名被解职员工中,因人际 沟通不良而导致工作不称职者占 82%。 高级管理者花

65、 80%时间用于沟通,普通管理者花 50%用于传播 信息。 有效沟通的能力 往往是决定一个人能否得到提升的一个 关 键的性格特征 。 2.5 软件过程实践 10:22:32 78 重庆理工大学计算机科学与工程学院 李梁 () 计划实践:是软件开发过程的准备阶段,包括定义问题、可行 性分析、制定项目计划。 项目计划:估算项目开发所需要的资源、费用、时间,设计项 目开发方案,制定进程表,进行可行性分析并明确可行性结论 软件计划任务书的主要内容:可行性分析是基础,功能需求和 资源为限制,采用通用语言描述。 制定项目计划的一般步骤:明确目标 制定工作范围 明确任 务分工 统筹项目各种活动。 推开一扇门

66、并不难 自信 是成功的 催化剂 一个小故事 2.5 软件过程实践 10:22:32 79 重庆理工大学计算机科学与工程学院 李梁 () 软件工程是一种层次化技术,包括过程、技术和工具。 软件过程是为获得高质量软件所需要完成的一系列任务的框架,它规定了 完成各项任务的工作步骤。 软件过程框架定义了若干个小的框架活动,为完整的软件开发过程建立了 基础。软件过程框架的通用过程框架活动包括沟通、计划、建模、构建和 部署。 能力成熟度模型( CMM)是改进软件过程的有效策略。它的基本思想是通 过改进对软件过程的管理来提高软件生产率和软件质量。 敏捷方法是一组敏捷实践技术的总称,包括极限编程、自适应软件开发、 动态系统开发和特征驱动开发等等。 软件工程实践包括概念、原则、方法和在整个软件开发过程中所使用的工 具。 软件工程实践的通用框架活动包括沟通实践、计划实践、建模实践、构造 实践和部署实践。 小结 10:22:32 80 重庆理工大学计算机科学与工程学院 李梁 () 我们拥有一套讲述如何开发软件的书籍 , 书中充满了标准与 示例 , 可以帮助我们解决软件开发中遇到的任何问题 。 我们拥有最好

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!