1. 在项目管理中,客户可以控制范围、时间和成本中的哪些方面?
范围、时间和成本构成了项目管理中的三角关系。当其中一项发生变化时,很可能会影响到其他两项。项目管理的核心在于在保证质量的前提下,寻求这三者之间的最佳平衡。作为需求方和投资方,客户有权利控制这三个方面。客户主要可以控制范围,即提出他们的需求——项目要实现的功能特性。其次,客户也非常关心项目交付的时间和成本。在满足客户需求的情况下,可以与客户就时间和成本进行交流和谈判。从项目管理的角度来看,最好是固定其中一项,然后根据实际情况调节其他两项,以确保项目质量。
2. 谁应该对项目中的所有付出做出估算?谁有权设定最终交付期限?
项目成功是团队合作的结果。在对项目进行估算时,需要由参与项目各个环节的人进行实际情况下的估算,然后将其汇总进行综合分析计算,得出项目的总体估算结果。
除了客户确定最终交付时间外,其他情况下最终交付期限是根据项目进度估算结果进行实际计划而确定的。
3. 您更倾向于减少交付次数还是减少每次交付的工作量?
取决于项目类型和实际情况。对于大型、长期的项目,应增加交付次数或减少每次交付的工作量,以便及时监控项目进展,保证项目进度。例如,如果项目进度落后,管理层需要及时了解情况,就需要增加交付次数;相反,如果项目进度良好甚至超前,就可以减少交付次数。
在传统的软件项目中,通常会减少交付次数以更好地控制质量;而现在一些公司更倾向于敏捷方法,喜欢减少每次交付的工作量,周期可能只有几周甚至一周,以便更及时地满足用户需求。对于互联网上的web应用软件开发来说,“减少每次交付的工作量”是一个比较好的策略,以便及时获得用户反馈,并将用户需求及时融入新版本,赢得市场竞争。例如,在我的新书《软件工程导论》中专门讨论了“永远的Beta”软件工程思想。
4. 你偏好使用哪种图表来追踪项目进度?
还是要根据项目的特点来决定,具体项目具体对待,当然,有时也不能由自己决定,而是取决于公司已有的工具和习惯。对于复杂、规模大的项目,可能要借助甘特图和网络图来分析和跟踪进度。简单、规模小的项目根据进度报告百分比和表格跟踪就可以了。
5. 迭代和增量的区别在哪里?
软件开发不是一躇而就,其过程犹如雕琢一件工艺品,由无形到有形、由粗到细,很难一次就能开发出功能完善、强大的一个版本,而往往是分阶段进行,一个版本接一个版本的发布出去。软件开发分阶段可以通过两种模型来描述,即增量模型和迭代模型。
增量模型描述软件产品的不同阶段是按产品所具有的功能进行划分,先开发主要功能或用户最需要功能,然后,随着时间推进,不断增加新的辅助功能或次要功能,最终开发出一个强大的、功能完善的、高质量的、稳定的产品。
迭代模型描述软件产品的不同阶段是按产品深度或细化的程度来划分,先将产品的整个框架都建立起来,在系统的初期,已经具有用户所需求的全部功能。然后,随着时间推进,不断细化已有的功能或完善已有功能,这个过程好像是一个迭代的过程。最终的目标是一致的,也是为了实现一个强大的、功能完善的、高质量的、稳定的产品。
举一个例子:假设现在要开发A,B,C,D四个大的业务功能,每个功能都需要开发两周的时间.则对于增量方法而言可以将四个功能分为两次增量来完成,第一个增量完成A,B功能,第二次增量完成C,D功能;而对于迭代开发来将则是分两次迭代来开发,第一次迭代完成A,B,C,D四个基本业务功能但不含复杂的业务逻辑,而第二个功能再逐渐细化补充完整相关的业务逻辑.在第一个月过去后采用增量开始时候A,B全部开发完成而C,D还一点都没有动;而采用迭代开发的时候A,B,C,D四个的基础功能都已经完成.
6. 请尝试解释风险管理中使用的实践。风险应该如何管理?
风险管理有许多实践,包括头脑风暴、风险清单(checklist)等。例如,人们通常使用十大风险清单:在项目进行中,不断更新和处理当前风险最高的前十项风险,以确保项目不偏离主轨道。因为项目中的风险大小不一。十大风险清单就是抓住重要的风险及时处理,而次要的小风险可能也会随之消失。从这里可以看出,风险也是动态的,需要经常、及时地评估当前的风险,例如每周或每两周进行一次风险评估。
风险管理就是通过风险的识别、预测、估算和衡量、选择有效的方法和手段,对风险进行预防、避免、降低或者转移的管理过程。
7. 你更喜欢任务分解还是滚动式计划?
根据项目特点来定,一般会选择任务分解的计划,责任清晰,可控性更强。滚动式计划的灵活性较强,适应性较好,但容易导致大家对计划不够重视,计划能力下降,或者可控性会差一些。有时会将这两种方法结合起来使用。
8. 你需要哪些东西帮助你判断项目是否符合时间要求,在预算范围内运作?
前提是这个项目的进度计划和成本计划是符合项目实际情况并不断随着项目的时间发展而滚动更新的。
确保收集的进度和花费的成本真实可靠。
在这种情况下,项目的范围没有影响到时间和成本的规划。
那么就可以根据项目时间与计划的内容进行对比来判断项目是否符合时间要求,在预算范围内运作。常用的方法有基线对比法和挣值法。
9、DSDM、Prince2、Scrum这三者之间有哪些区别?
动态系统开发方法(Dynamic System Development method,DSDM)是一种敏捷开发方法,它强调以业务为核心,快速有效地进行系统开发。该方法在英国应用较为广泛,详细内容可参考:DSDM业务中心框架开发方法(第二版)。
敏捷方法通常适用于规模较小、需求变化较快的项目,但对于大规模软件开发,尤其是在关键性、可靠性、安全性方面要求较高的项目则不太适用。当然,在一些项目小组内实施也是可以的。除了DSDM外,还有其他许多敏捷开发方法,比如Scrum、自适应软件开发(ASD)、Crystal方法和特性驱动开发(FDD),可参考《敏捷软件开发生态系统》。
PRINCE2(PRojects IN Controlled Environments 2)提供了项目管理的结构化方法,最早由英国政府计算机和电信中心(CCTA)于1989年开发,作为英国政府IT项目管理的标准。如今PRINCE2越来越流行,成为英国项目管理的标准,为管理项目提供了清晰的工作框架,并介绍了如何协调项目中的人和活动、如何设计和监督项目以及在项目变更时如何调整流程。该方法将项目划分为多个管理阶段,确保所有资源得到有效控制。依靠严格的监控,项目在控制和组织的方式下得以执行。
Scrum是一种敏捷软件开发的迭代增量过程,通常用于敏捷软件开发。Scrum在英语中意味着橄榄球比赛中的争球。Scrum是一个包括一系列实践和预定义角色的过程框架,其主要角色包括类似项目经理的Scrum主管角色,负责维护过程和任务,产品负责人代表利益所有者,开发团队包括所有开发人员。在每个冲刺(一般为15到30天周期)中,开发团队创建一个可用的、可随时推出的软件增量(小版本)。每个冲刺要实现的特性来自产品订单(product backlog),产品订单按优先级排列工作需求。在冲刺过程中,没有人能够变更冲刺订单(sprint backlog),这意味着在一个冲刺中需求是被冻结的。
管理Scrum过程有很多实施方法,从白板上的即时贴到软件包。Scrum最大的好处是它非常容易学习,而且应用Scrum不需要太多的投入。方法的应用同样由项目规模、业务特点(需求是否稳定)等决定,并受企业文化、流程和领导意识等影响。如果需求稳定、项目规模较大或周期较长,一般会选择PRINCE2;相反,可能会选择DSDM或Scrum。后两者没有本质区别,只是具有不同的最佳实践。
正如有人评论,国内对Scrum还比较熟悉,对DSDM、PRINCE2等不够熟悉,应用不多。而业界最熟悉的是CMMI、RUP(IBM Rational Unify Process 统一过程)、XP(敏捷方法的极限编程extreme Programming)和MSF(Microsoft Solution Framework,微软公司软件开发解决方案框架),可参考:软件开发过程(CMMI/RUP/XP/MSF)是与非
10. 如果客户需求过多,如何在范围和时间上与客户达成一致?
首先,要向客户解释,如果在有限的时间内完成过多的工作,结果可能是质量无法保证,或者成本过高。没有客户愿意做亏本生意,每个客户都会重视质量,不愿意损害自己的利益。
然后,和客户一起,按需求的重要性、紧急程度等进行分类,分为不同的优先级,并估算不同优先级需求的工作量。设定几个不同的开发周期或交付时间,让客户选择:
(1)只实现最高优先级的需求,需要3个月;
(2)实现最高和高优先级的需求,需要7个月;
(3)实现最高、高和中等优先级的需求,需要12个月;
(4)全部需求实现,需要18个月。
备考资料分享如下: