面向构件的软件过程:项目管理


 2007-01-04 00:00:00       748

面向构件的软件过程:项目管理
黄柳青  温 昱

业务构件是最重要的项目管理单位。
--Peter Herzum,《业务构件工厂》


所谓项目,是指为完成某类特定目标、在一定时期内所做出的努力。所有的项目都有一个明确的开始和结尾。
项目管理就是将各种知识、技能、工具和技术应用于项目之中,以达到项目的要求。《项目管理知识体系指南》指出:“项目和项目管理是在一个大于项目本身的环境中进行的。项目经理必须理解这个大于项目的环境”。下面我们通过“建模”来描述上述“大于项目本身的环境”(如图1所示)。

图 1  项目环境

从上图中,可以看出项目管理中应当注意的一些问题:
• 项目的具体实施依赖于人,因为人是项目的真正参与者。一方面,项目不同,对项目成员的要求会有很大差异,招募到合适的人,对项目的实施可谓至关重要。另一方面,项目的具体实施也应重视与项目有关的其他涉众,比如客户(客户代表)、外包方等,他们的技术水平、实际经验、软件工程知识水平、个性等等,都应作为考虑的因素。
• 项目的实施势必采用某种过程。抽象而言,任何过程都是承担某种职责的特定角色,进行某组活动,以达到生产或加工某些工作产品的目的;但实际上,过程还涉及更具体的工作,例如:
  o 和角色相关的工作:如何规划一整套角色,不同角色的职责分配,角色之间的工作制约关系、上下游关系,等等。
  o 和活动相关的工作:如何以“风险驱动”的思想来安排前期工作内容、后期工作内容,设置里程碑的密度,以及设置哪些里程碑,等等。
  o 和工作产品相关的工作:工作产品要不要提交到“配置管理库”进行版本控制,阶段性的产品包仅仅是内部发布、还是要release到外部,等等。
• 项目的诸多投入,最终要换来产出的产品。项目管理中应重视产品需求的范围、功能需求与非功能需求完成的质量等等,这些因素都会影响产品是否能够成功。
项目经理的主要职责包括、但不限于以下四个方面:
• 项目计划;
• 项目组织;
• 项目实施;
• 项目度量。

面向构件的项目计划

在软件这个圈子里我们一再看到,老板希望项目经理在项目启动伊始就提供详细的项目计划--否则他就觉得不踏实;项目经理如果这样做,老板会很高兴--但这对实际的项目实施并无意义;项目经理如果不这样做,老板会觉得项目经理不是“自己人”。苦哉,项目经理!
敏捷方法的流行,使更多的人认识到“务实”的才是最好的。在我们提出的面向构件的项目管理中,我们推荐项目计划和迭代计划分开。
《项目计划》应在项目的早期阶段制定,其主要目的是评估项目规模、估计项目在财力、时间和人力上的投入。那么,项目的进度表在项目计划中应做到什么程度呢,我们建议做到阶段级即可。
任何有经验的项目经理都知道,根据所谓的项目管理“铁三角”来制定项目计划是远远不够的。根据自己的实践,笔者认为Ambler在其《过程模式》一书中归纳的“铁六边形”显然更成熟,如图2所示。

图2   项目计划“铁六边形”(图片来源:《过程模式》)

每个迭代周期内部,都是并行的:不仅负责不同业务构件的小组之间是并行的,而且负责不同的服务构件的工程师之间也是并行的,因为构件之间的接口已明确。如图3所示。

图3   并行开发计划(部分)

综上所述,我们推荐面向构件的软件项目采取迭代开发方式,而迭代式开发对计划工作造成了根本性的

个数
创建时机

细节程度

项目计划
一个
项目工期前期 粗。设计整个项目的里程碑设置,迭代周期安排,人员配置等项目全局的计划信息。
迭代计划
多个
该迭代周期的上一个迭代周期末期,需要上一个迭代周期执行情况的反馈作为决策基础。 细。对具体迭代周期内要明确完成的需求子集进行计划。
表1  项目计划与迭代计划

面向构件的项目组织

任何项目都是由一批相互合作的人来完成的,要找到合适的人,并把他们组织在一起称为一个团队,这需要项目经理的组织管理能力。
项目经理是开发团队中特殊的角色,他需要掌握的技能和大多数人不同。项目经理的职责之一是“管人”。
面向构件项目的团队组织,应当是动态性的,如图4所示。这样做的好处之一是“有利于和外部团队协同”,当项目开发任何涉及外包子系统时非常易于管理;另外,很常见的情况是需求和总体设计由最终客户和中间件厂商共同完成,而后期工作由最终用户的开发人员进行。此时,“动态团队”的灵活性就十分明显。

图4   动态的团队组织方式

总的来说,团队的上述组织方式也体现了对资源投入的谨慎性(如图5所示):这是基于风险驱动原则的考虑,在目标未明确之前,仅投入5%的工作量;在架构和主要技术风险明确之前,再投入20%工作量。待所有高风险因素明确之后,全面将工作铺开,投入项目组所有人力资源。

图5  风险驱动的资源投入策略(图片来源:RUP)

面向构件的项目实施

项目实施过程是项目计划的执行,其间涉及资源分配、进度跟踪、计划调整等各种不同的工作,并要对各种突发情况进行及时处理。
项目经理担负着整个项目负责人的重任,其工作是充满挑战的,而不是一成不变的。为了项目的顺利实施,项目经理应积极为各种生产活动做好配合和管理工作。如图6所示,以需求阶段为例,说明了项目管理工作和项目生产工作之间的关系。

图6   需求阶段的项目实施

我们推荐采用迭代的方式进行项目计划的实施。但是,必须提醒项目经理的是,相对于瀑布式的开发模式,迭代式开发对项目经理的要求更高,项目经理的工作量也要大出数倍。因此,特别是对关键度高的项目,我们强烈建议项目经理应当有迭代开发的管理经验。

进度管理

传统项目管理中,进度的度量往往靠主观估计,很不科学。面向构件的软件过程主张通过评审、走查、测试等确认活动来决定构件的完成进度。如图7所示。

图7   基于评审、走查和测试的进度度量机制

相关阅读: