实用软件项目管理麦哲思科技(北京)有限公司迈则思企业管理咨询(上海)有限公司1报告人•任甲林–CMMI主任评估师–COSMICIAC成员–认证的ScrumMaster–主要从事提升软件研发能力的培训与咨询–2014年4月出版专著《术以载道—软件过程改进实践指南》–联系方式:•E-mail:renjialin@measures.net.cn–工程经验:•93年从事软件开发,参与了50多个项目的开发•曾为100多家软件公司提供培训和咨询2内容•软件开发的七个基本定律•软件项目管理的7个基本原则•软件工程的七个基本原则•软件项目的组织结构•软件项目的角色划分•人员配备的基本原则•沟通的基本技巧•项目监督的基本方法•敏捷开发方法3软件开发的七个基本定律1:10:100定律1:2定律1:3:9定律帕金森定律布鲁克斯定律Weinberg可靠性零定律80-20定律1:10:100定律•1我们有哪些措施预防需求的错误?•2我们有哪些措施发现需求的错误?•3我们的质量成本是如何分布的?反思需求错误导致的成本是修复程序错误成本的100倍改进质量的途径-尽早消除缺陷6需求设计编码单元测试系统测试集成测试交付使用缺陷数在总体注入缺陷相同的情况下,尽早地消除缺陷可以使交付产品的质量大大提高1:2定律在开发中,每花费1美元,在维护中就得花费2美元,因此要注意度量改进维护的度量元•1在我们公司的项目中维护成本与开发成本的比例是多少?•2我们在需求开发、设计过程中为了降低维护的成本采取了哪些措施?反思Weinberg可靠性零定律如果一个系统不要求是可靠的,那么它能够满足任何的其他目的换句话说,如果对实际工作的程序没有要求,那么你能满足任何设置的编程交付期•在限定了资源,而项目工期又比较紧张时,我们通常牺牲了什么?我们是否真的加快了进度呢?反思9成功项目管理四要素的平衡1:3:9定律随着软件系统规模的增大,其成本成倍增长,呈现1:3:9的关系,称之为软件产业的非规模经济现象•1我们如何降低软件的开发成本?•2为什么提倡采用迭代的生命周期模型?•3为什么提倡小项目、小团队?反思帕金森定律(Parkinson’sLaw)工作总是用完所有可利用的时间(Workexpandstofillthetimeavailable)如果你给自己安排了充裕的时间从事一项工作,你会放慢你的节奏以便用掉所有分配的时间容易达到的目标将使员工工作上变得松懈•1如何规避帕金森定律?•2如果整个项目有20%的缓冲时间,你会如何分配这20%的缓冲?反思布鲁克斯定律(Brooks’Law)人月=人*月,但是:月≠人月/人投入更多的人到一项延迟的工作上,可以导致该项工作更加延迟BarryBohem:可以将软件开发进度压缩25%,但是不能再多了200/20/6X现象:人数增加1倍,工期缩短20%,缺陷增加6倍•1在实践中,我们是否经常通过给项目组增加人手的方式加快进度?•2有哪些合理的加快进度的措施?反思80-20定律Boehm提出的有关软件项目管理的“二八定理”,构成了现代软件管理过程框架的理论基础•80%的缺陷是由20%的构件引起的•80%的软件废品和返工是由20%的缺陷引起的•80%的资源是由20%的构件消耗的•80%的工程活动是通过20%的工具完成的•80%的进展是20%的人完成的•在实践中我们应该如何运用80-20定律?反思软件项目管理的七个基本原则平衡原则高效原则分解原则实时控制分类管理简单有效选择称职的项目经理原则一:四要素的平衡原则原则二:高效原则要选择精英成员目标要明确,范围要清楚沟通要及时、充分要在激励成员上下工夫要有充分的技术复用原则三:分解原则化繁为简,各个击破大项目组分成几个小项目组长周期分解为几个阶段定义生命周期模型进行WBS分解版本化发布原则四:实时控制原则逐日跟踪每日联调PM检查过了?是否PPQA检查过了?是否测试过了?是否纳入CM库了?项目分类管理是否立项有无计划有无周报有无规范实时跟踪有无总结核算成本阶段评审公司级√√√√√√部门级√√√√√√订单类个人级√√A类√√√√√√B类√√√√√√非订单类C类登记?√:是:否原则五:分类管理原则六:简单有效简单就是美每一个活动是否都有价值?每一个文档是否都有价值?每一个度量数据是否有价值?是否有更简单有效的管理方法?原则七:选择称职的项目经理要公正无私要有良好的职业道德要具有管理的基本技能与知识要具有很好的沟通与表达能力要有很强的分析问题解决问题的能力要懂技术,不要求精通,但是要全面要谦虚,不能不懂装懂要平易进人,不要摆架子222324252627282930313233软件项目的组织架构3435研发组织常见形式(1)职能式组织结构研发总监硬件部结构室工程部测试质量软件部工程师1工程师2工程师3工程师1工程师2工程师3工程师1工程师2工程师3工程师1工程师2工程师3工程师1工程师2工程师3工程师1工程师2工程师336研发组织常见形式(2)项目式组织结构研发总监项目经理1项目经理3项目经理4项目经理5项目经理2硬件工程师1软件工程师2测试工程师3硬件工程师1软件工程师2测试工程师3硬件工程师1软件工程师2测试工程师3硬件工程师1软件工程师2测试工程师3硬件工程师1软件工程师2测试工程师337轻度矩阵式组织结构总经理项目管理部研发部生产部市场部财务部其他职能部门项目经理1项目经理1项目经理1研发组织常见形式(3)38研发组织常见形式(4)研发管理委员会项目管理部产品开发部市场部制造部财务部其他职能部门中试研究室硬件研究室测试研究室结构研究室软件研究室PDT1PDT2PDT3重度矩阵式组织结构项目组织结构对项目的影响39强矩阵型平衡矩阵弱矩阵型全时全时部分时间部分时间部分时间项目管理行政人员项目经理/计划经理项目经理/计划经理项目经理/项目主任PM协调员/项目主管PM协调员/项目主管项目经理的头衔全时全时全时部分时间部分时间项目经理85-100%50-95%15-60%0-25%几乎没有项目全时人员%大到几乎全权中等到大小到中等有限很少或没有项目经理的权威项目型组织矩阵型组织职能型组织组织类型项目特点讨论:项目组织结构的选择•在我们公司最适宜的项目组织结构是什么?•时间:15分钟40软件项目的角色划分41传统的项目角色划分•三驾马车–项目经理:对进度与质量负责–需求经理:对需求负责–技术经理:对技术可行性负责•大项目,三权分析•中项目,两两合并•小项目,三权合一42微软的组队管理模型•12个准则•6个角色•对等小组4312个准则•建立小的、各有专长的组•职能交叉•既要精通技术又要善于将业务与技术有效结合•集中精力于及时完成工作并输送好的产品•明确的目的和目标•让用户客户积极参与•共同的项目远景•每个人参与设计•有意地向过去学习•一起参与项目的管理和决策•小组成员工作在同一地点•大项目组划分成小的项目组(建议不要超过10人)446个角色•产品经理productmanagement•程序经理programmanagement•开发员development•测试员testing•用户教育工程师usereducation•产品支持工程师logistics45产品经理productmanagement•客户的代言人,市场营销专家;•负责共同的项目远景与近期范围定义;•管理客户需求定义;•开发维护商业业务;•管理客户期望值;•负责在功能特性和进度之间折衷;•管理市场、营销与公共关系;46程序经理programmanagement•类似于项目经理,是领导者、助手、协调者,但不是老板,没有最终决策权;•负责产品开发过程;•管理产品的规格定义;•辅助组内的沟通与交流;•编制、维护进度进度,报告项目状态;•负责全局的关键的折衷决策;47开发员development•是项目组中的技术专家;•详细定义功能特性,进行物理设计;•估算完成每个功能特性的时间与精力;•编写写程序,构造软件;•为发行软件准备产品;48测试员testing•确保所有的问题是已知的,并排出优先级;•编制测试大纲与测试计划;•测试“私人”版本;•不仅针对编码,还包括:vision/scope、功能定义、设计规格说明;49用户教育工程师usereducation•用户的代言人;•管理用户需求定义;•设计与开发用户操作性能增强系统;•负责软件的可用性与用户操作性能增强之间的折衷决策;50产品支持工程师logistics•运行维护与技术支持、推广渠道的代言人;•管理产品推广;•管理采购;•负责可管理性和可维护性的折衷决策;•管理运行维护、支持和推广渠道之间的关系51角色的合并52角色产品经理用户教育开发员测试员程序经理产品支持产品经理××√√用户教育××√开发员×××××测试员√×√√程序经理√×√产品支持√×√大项目的处理•大的项目组可以分成特性小组与核心功能小组,在特性小组中可以仅有程序经理、开发员、测试员,而核心功能小组中角色齐全,特性小组共享核心功能小组中的角色。53TSP的团队角色54TSP的核心角色划分•团队领导•开发经理•计划经理•质量经理•支持经理55团队领导主要活动•激励团队成员完成他们的任务。•主持每周的团队会议。•报告每周的工作情况。•帮助团队分配任务。•团队会议上充当主持人和记录人。•保留项目资料库。•领导整个团队制定出开发阶段报告。•充当开发工程师。56开发经理的主要活动•领导团队制定开发策略。•领导团队给要生产的产品制定初步的规模和时间估计。•领导团队开发SRS。•领导团队进行概要设计。•领导团队开发软件设计规格说明书。•领导团队实现产品。•领导团队制定出构建、集成和系统测试计划。•领导团队开发测试文档并进行测试。•领导团队制定产品的用户文档。•参与制定开发阶段报告。•充当开发工程师57计划经理的主要活动•领导团队制定下一个开发阶段的任务计划。•领导团队制定下个开发阶段的进度表。•领导团队制定均衡的计划。•对照计划跟踪团队的进展情况。•参与产生开发阶段报告。•充当开发工程师。58质量经理的主要活动•领导组员制定和跟踪质量计划。•将质量问题及时通报给团队领导和上司•领导团队定义和文档化它的过程并且维护过程的改进。•建立和维护团队开发标准。•在提交配置控制委员会(ConfigurationControlBoard,CCB)之前评审和批准所有的产品。•充当团队审查协调员。•作为团队会议记录者。•参与制定开发阶段报告。•充当开发工程师。59支持经理的主要活动•领导团队决定其支持的和需要获得的工具与设备。•主持配置控制委员会,管理和更换控制系统。•管理配置管理系统。•维护系统术语表。•维护团队的问题和风险跟踪系统。•成为一个复用的提倡者。•参与编写本开发阶段报告。•充当开发工程师。60Scrum中的角色61Scrum角色Pigs1arecommitted(developers,writers,etc.).TheygettospeakintheScrummeeting.Chickensareinvolved.Theykeepquiet.(1)“Pigs&Chickens”iscentraltoScrum--nooffensemeant.6263角色PigsChickens•ProductOwner:定义用户故事•ScrumMaster:推动者•Team:5-9人,交叉功能性技能UsersStakeholdersManagersScrumMaster的职责•(1)会议主持人–他负责主持四个主要的会议:策划会议、每日站立会议、迭代评审会议、迭代回顾会议。•(2)牧羊犬–他负责屏蔽项目组外部的干扰。•(3)雷锋–他给productowner、team提供帮助,帮助productowner确定需求、排定优先级,帮助team做估算、分解任务、完成任务。•(4)外交官–当项目组外部有人不理解项目组的工作时,他负责去解释说明,负责对外发布项目组的信息。•(5)教练–他指导项目组的成员按照SCRUM的原则、方法做事情,当出现偏差时,他去纠正,可以说他是