1、敏捷开发项目管理敏捷开发项目管理敏捷开发项目管理敏捷开发项目管理孙昕IBM Rational资深技术顾问议题 软件项目管理的演进 敏捷软件项目中的一些最佳实践 RTC敏捷项目管理的最佳载体传统项目管理 - PMI 5大过程组 9大知识领域 44个管理过程 PMI的关心和焦点 : 计划驱动 紧密控制 面向业务进行管理软件项目管理的实践我们需要一个完整我们需要一个完整我们需要一个完整我们需要一个完整 、 、详尽的计划 详尽的计划详尽的计划详尽的计划 。 。软件开发中能实现么软件开发中能实现么软件开发中能实现么软件开发中能实现么 ?我们需要设计考虑所有的风险和预留的内容我们需要设计考虑所有的风险和预
2、留的内容我们需要设计考虑所有的风险和预留的内容我们需要设计考虑所有的风险和预留的内容 。 。软件项目能否预先考虑到所有的风险软件项目能否预先考虑到所有的风险软件项目能否预先考虑到所有的风险软件项目能否预先考虑到所有的风险 ?软件项目中难以预知所有的内容和风险软件项目中难以预知所有的内容和风险软件项目中难以预知所有的内容和风险软件项目中难以预知所有的内容和风险 ,这不是传统行业 这不是传统行业这不是传统行业这不是传统行业 !square4 软件开发工作 ,是一个逐步认知和明晰的活动square4 拥抱变化 - 软件开发中的变化 ,是实际存在和必然的涉众期望域的涉众期望域的涉众期望域的涉众期望域的
3、不确定性不确定性不确定性不确定性初始计划初始状态敏捷项目管理Scott, 我们今天的软件项目管理更应侧重这些内容 : 弹性的项目管理方式 通过初始计划开展工作 项目的资源管理和控制VisionRoadmapReleasesIterationsDaily Scrumsil cr s敏捷项目管理和传统项目管理比较 传统项目管理关注与整个系统的构建 ,从整体角度考虑 项目计划的建立 、项目计划的执行 项目的风险根据项目计划考虑 敏捷项目管理更关注与交付的价值 高质量的交付物是最重要的 系统不是一次构建而成 ,而是迭代演进的 基于完整的场景构建计划 、并按优先级执行您是想获取一些更有价值的交付产品呢您
4、是想获取一些更有价值的交付产品呢您是想获取一些更有价值的交付产品呢您是想获取一些更有价值的交付产品呢 , ,还是 还是还是还是只想完成进度表只想完成进度表只想完成进度表只想完成进度表 !敏捷项目管理 VS 传统项目管理Agile!PMBOK!鱼和熊掌可以兼得TheBusiness 议题 软件项目管理的演进 敏捷软件项目中的一些最佳实践 RTC敏捷项目管理的最佳载体敏捷项目管理方法 :Scrum 敏捷核心square4迭代开发square42级项目规划square4整体团队square4持续集成square4测试驱动开发敏捷项目的核心 -迭代 大部分公司还在使用瀑布模型需求分析开发测试发布Cra
5、sh!12敏捷核心square4迭代开发迭代开发迭代开发迭代开发square42级项目规划square4整体团队square4持续集成square4测试驱动开发迭代式开发 :本质改变 - 你多久运行你的项目一次?重复 =自信 =速度 变长的 长的长的长的 、 、复杂的 复杂的复杂的复杂的 项目周期为 短的短的短的短的 、 、简单的 简单的简单的简单的 迭代周期 团队在快速迭代的重复过程中 ,快速得到反馈 /获取经验 团队每执行一次迭代 ,信心都得到提升 信心提升 ,效率和速度也相应提高了14随着认识的不断加深随着认识的不断加深随着认识的不断加深随着认识的不断加深 , ,通 通通 通随着认识的不
6、断加深随着认识的不断加深随着认识的不断加深随着认识的不断加深 , ,通 通通 通过反馈来不断调整方向过反馈来不断调整方向过反馈来不断调整方向过反馈来不断调整方向过反馈来不断调整方向过反馈来不断调整方向过反馈来不断调整方向过反馈来不断调整方向计划路径计划路径计划路径计划路径实际路径实际路径实际路径实际路径实际完成实际完成实际完成实际完成实际完成实际完成实际完成实际完成起点成功区域计划完成计划完成计划完成计划完成计划完成计划完成计划完成计划完成迭代和两级规划 :通过反馈来不断调整方向符合需求开发的启发式过程要求符合需求开发的启发式过程要求符合需求开发的启发式过程要求符合需求开发的启发式过程要求敏捷
7、核心square4迭代开发square42级项目规划级项目规划级项目规划级项目规划square4整体团队square4持续集成square4测试驱动开发15为什么要进行两级项目规划square4 项目的特点 :逐步完善 决定了计划的渐进明细square4 不断的获取干系人反馈 ,修订范围square4 符合启发式的需求开发过程要求square4 计划和变化的有效平衡square4 复杂的事情简单化根据真正的需要修改工作安排16高优先级高优先级高优先级高优先级低优先级低优先级低优先级低优先级动态增加新的工作项有些时候需要删除工作项根据需要 ,经常重新调整工作项的优先级对于低优先级的内容可以等待清
8、晰后明确工作任务的优先级应该被定义并清楚地描述工作项列表工作项列表工作项列表工作项列表对于每个迭代首先实现高优先的工作17核心敏捷最佳实践 :“整体团队 ”checkbldScrum团队一般有 6 8个人checkbld拥有多种技能的 、跨职能协作的团队checkbld关注向干系人交付价值checkbld整体团队 :自指导 、自组织 、可持续的速度文化变革 : 人本管理从麦格雷戈的 X理论向 Y理论的转变敏捷核心square4迭代开发square42级项目规划square4整体团队整体团队整体团队整体团队square4持续集成square4测试驱动开发敏捷最佳实践 :“整体团队 ”的自指导团队
9、head2right 拥有 共同目标共同目标共同目标共同目标 、分担责任 分担责任分担责任分担责任 , ,彼此承诺 彼此承诺彼此承诺彼此承诺 致力于目标实现head2right 团队团队团队团队 拥有足够的 授权和资源授权和资源授权和资源授权和资源 ,解决问题 ,找到自己的成功之路head2right 做自己喜欢的事情做自己喜欢的事情做自己喜欢的事情做自己喜欢的事情head2right 有效的沟通和信息的透明head2right 适当的团队建设共享远景共享远景共享远景共享远景和目标和目标和目标和目标团队承诺团队承诺团队承诺团队承诺19敏捷最佳实践 :“整体团队 ”的可持续速度文化变革 : 关注
10、可持续发展敏捷过程推行可持续的开发 保持团队在一个可持续的生产力水平上工作20有效的持续集成BuildilUnit Testit stDeploymentl y tAutomated & IntegratedDeploymentVerificationl y trific tiInspectionI s ctiCommit changestriggerCheck out square4 持续集成 ( CI)是一种实践 ,能够让团队在持续地构建的基础上 ,不断收到反馈并进行改进 ,不必等到开发周期后期才寻找和修复缺陷 。应包含 :square4 自动化的运行测试square4 自动产生可部署的二
11、进制成品square4 自动化的部署square4 自动的版本标识square4 自动的回归测试square4 自动化的生成度量报告敏捷核心square4迭代开发square42级项目规划square4整体团队square4持续集成持续集成持续集成持续集成square4测试驱动开发21敏捷最佳实践 :测试驱动开发 (TDD)一种编程实践 :所有的代码编写都是为了响应一个失败的测试需求列表写一个测试用例运行测试用例确保它失败新增或修改刚刚满足要求的代码 ,确保新的测试用例通过 ,原来的测试用例也通过重构代码 ,以提高代码质量 (例如:重复的代码 )项目进度评测方法范围和质量项目进度估算能力团队效
12、率敏捷核心square4迭代开发square42级项目规划square4整体团队square4持续集成square4测试驱动开发测试驱动开发测试驱动开发测试驱动开发将敏捷项目管理和计划结合起来 基于一个完整的 Story描绘产品 ,产品计划基于 Story组成 通过 Story进行优先级排列 ,而不是 features 可能部分 Story没有实现 ,没有问题 ,准备继续 ! Story是最小的迭代管理元素 ,一个迭代起码包括一个 Story 里程碑也是基于 Story组成的ProjectPlan(WBS)DeveloperBacklogStoryStoryStoryStory StorySt
13、oryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryFeatureFeatureFeatureFeatureFeatureFeatureFeatureFeatureMilestone ReleaseIterationFeatures和 Stories 业务分析分析人员 ,仍可以基于 Feature分析业务特性 ,但是他需要将其和Story连接起来 里程碑控制也要以 Story控制 开发团队通过 Story,开展开发工作 Stories本身也是不断变化的 ,可以增加 、删除 、修改 、以及从新排列优先级FeatureFeatureFeatur
14、eFeatureFeatureFeatureFeatureFeatureMilestone ReleaseIterationStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryt rt rt rBacklog使用 Backlog进行任务计划的优势 Backlog基于 Story管理 ,具有完整的业务价值 , Story可以支撑 Feature 确保用户了解完整的 Story而不只是 Feature 小力度的 Story能够提供更准确的任务
15、情况 Stories更能保证系统交付的可测试性开发团队组织 理想中 , Feature和整个 Story的开发最好有一个团队完成 实践中 , Feature需要和 Story在统一个迭代中完成 未完成的 Story需要制定到下个迭代中ProjectPlan(PM)DeveloperIteration PlanFeatureFeatureStoryStoryStoryStoryDev Team ADev Team BStoryIteration N Iteration N+1StoryFeatureStoryStoryStoryStoryMilestone/Release具体的工作任务分配 St
16、ories与 Feature间有紧密的联系 ,也体现在依赖上 优先级和进度都基于 Story 根据 Story的完成情况 ,调整 Feature的工作计划FeatureFeatureStoryStoryStoryStory StoryIteration N Iteration N+1Milestone/ReleaseStoryFeatureStoryStoryStoryStoryProjectPlan(PM)DeveloperIteration PlanDev Team ADev Team B几个管理元素的关系 将多个计划有效的集成起来 ,互相反馈 有效管理计划的层次关系 ,并结合开发的实际F
17、eatureFeatureStoryStoryStoryStoryDev Team ADev Team BStoryStoryFeatureStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryStoryProject PlanTeam IterationPlan (Backlog) Team Release Plan Backlog回归一下 Scrum议题 软件项目管理的演进 敏捷软件项目中的一些最佳实践 RTC敏捷项目管理的最佳载体RTC+RPC 有效的敏捷研发协作
18、Estimates, time spent, priority, discussion, etc. Project- and developer-level plans Individual developer assignmentsPlanning in Project ConductorExecution in Team ConcertFeatureFeatureFeature StoryStory StoryStoryStoryStoryStoryStoryFeatureFeatureFeatureStoryStoryStoryCommon workFeatureFeatureFeature StoryStory StoryStoryStoryStoryStoryStoryFeatureFeatureFeatureStory