第3章软件协同开发的总体规划 在软件协同开发的过程中,一个项目是由多人组成的,项目组成员对于项目的目的、内容、范围和行动方案的认识,在大多数情况下并不一致,甚至存在矛盾。所以项目开始一定要进行规划,通过规划统一大家的认识,有效规避缺乏共识和项目驱动力的风险。 3.1项目的规划 项目规划是预测项目的未来,确定要达到的目标,估计会碰到的问题,并提出实现目标、解决问题的有效方案、方针、措施和手段的过程; 是从现实出发思考、想像和谋划,进而确定、决定和安排实现项目目标所必需的各种活动和工作成果。其目标是为项目负责人提供一个框架,使之能合理地估算软件项目开发所需的资源、经费和开发进度,并控制软件项目开发过程按此规划进行。 1. 项目规划过程 项目规划的过程一般为: (1) 项目经理通过熟悉项目背景,了解利益相关者的需求,确定项目的初步范围。 (2) 确定项目初步预算。 (3) 制定项目章程,通过章程,把各方的责任与义务制度化,并获得领导的支持与承诺,从而使项目开发过程的管理风险大大降低。 软件项目有其特殊性,不确定因素多,工作量估计困难,因此制订的项目规划一定要现实。 2. 项目规划方法 在制订项目规划的过程中仅靠“个人经验”是不够的,不可能面面俱到,可以考虑采用如下方法: (1) 充分鼓励、积极接纳项目干系人(用户、单位高层领导、项目组成员)来参与项目计划的制定。在项目规划的制定中,用户的参与能为项目的供需一致提供帮助。单位高层领导可以对项目组需要的必要资源提供适当的指导和承诺。项目组中的开发人员对自己职责范围内的事能提出建议的时间和资源,这样开发人员在主观上会更加投入到工作中,客观上能根据开发人员各自的能力做一个时间和工作量上的平衡。 (2) 要充分利用一些历史数据。历史数据是宝贵的财富,是可复用的资源。开发团队不仅要注意积累这些数据,还也要学会从中提炼出可以为我所用的数据。如项目计划的模板、计划的资源数据等。 3.2软件项目的初步范围 对于任何一个项目,其管理目标是在预算的费用与计划的开发时间内,生产出高质量的软件产品。而项目范围对这三个目标都有影响。 很多项目在进行到一定阶段之后往往会让人感觉到不知道项目什么时候才能真正结束,不知道要使得项目结束到底还需要投入多少人力和物力,整个项目就好像一个无底洞,对项目的预期结果大家心里都没有底。造成这种结果的一个重要原因就是没有控制和管理好项目的范围。 项目范围为项目管理标出一个界限,或分出哪些属于应该做的,哪些不包括在项目工作之中。项目范围确保了项目组和项目干系人对作为项目结果的软件项目产品以及生产这些产品所用到的过程有一个共同的理解。项目经理在了解项目背景、利益相关者的需求后,应该给出合理的软件项目范围。 3.2.1软件项目背景 对于软件的项目背景信息,应从如下几个方面进行调查和分析。 1. 项目管理方面 (1) 项目是否具有明确的结果。在创建项目时,每一个项目经理、项目资助人(项目发起人)以及每一个团队成员都应该明确项目的最终结果。不仅需要指出项目的具体要求,还应该清楚对项目潜在的要求。 (2) 项目是否有行业相关国家标准或者国际规范。行业相关国家标准或者国际规范,都涉及项目的技术规范和用户使用的要求。在规划项目时必须考虑这些规范。对于强制性规范,项目必须完全执行; 对于建议性规范,项目也应借鉴,因为这些标准都体现了在这个行业的成熟经验。 (3) 项目是否有合理的截止日期。针对项目要求,需要规定一个合理的截止日期。大规模的升级、软件发布、应用推广以及各系统转换需要投入大量的人力、物力及财力,并耗费大量的时间。项目不能无休止做下去,应有一定的期限,并明确要做的具体内容,且使客户满意。 (4) 项目发起人是否有权开展项目。项目发起人是组织内有权力分配资源、调配项目成员、控制资金、对项目进行审批的人。为此,项目发起人应有足够的资源,且得到强有力的支持来完成并实施工作。 (5) 项目是否有财务支持。财务支持是项目能否开展的关键因素之一,软件需求者的财务状况是必须了解的背景信息。 2. 技术方面 (1) 项目采用的新技术将会怎样影响目标用户。信息技术发展迅速,已经渗透到企业生产的各个领域,项目采用怎样的新技术往往是用户关心的事情。项目经理需要及时了解需求方对新技术的要求,从用户那里获取信息。 (2) 项目采用的新技术会对其他软件造成的影响。软件项目往往既涉及软件,也涉及硬件,项目采用的新技术可能影响与它共用的硬件或其他软件,这种影响的程度需要预先考虑。 (3) 项目采用的新技术和正在使用的操作系统的兼容性。在开发时需要考虑项目采用的新技术和用户正在使用的操作系统的兼容性,有些用户往往有两三种操作系统,如Windows XP、UNIX、Linux等,即使是Windows本身,也有多个版本,因此要了解项目成果在应用时对操作系统的要求。 (4) 项目采用的新技术其他团队是否也在采用。如果项目采用的新技术是第一次应用,虽占有一定优势,但也可能存在危险因素。而如果技术相对成熟,特别是一些比较有实力的大团队也在使用,项目采用该新技术带来的风险将很小。 3.2.2项目利益相关者 对每个软件项目来说,都有几种项目利益相关者。不同利益相关者,在项目运行过程中扮演不同角色,持不同态度。项目管理者要了解他们的心理,这有利于协调工作、调动相关人员的积极性。项目利益相关者大致可以分为以下三种类型。 (1) 项目组成员。项目组成员是项目正常工作的主要力量,成员之间存在相互合作关系,但也同时存在彼此之间的竞争关系。作为软件项目经理,应把握分寸,力求成员之间和谐相处,并保持良好的工作氛围,促进项目的正常进行。但是由于软件项目的技术性要求,往往需要项目经理掌握核心技术,以利于核心作用的发挥。 (2) 资源提供者。资源提供者包括资金、人力和技术来源三类资源的提供者,可能是项目所在企业,也可能是风险投资公司,还可能是委托机构等。这些资源提供者一方面为使项目正常工作提供必要的资源保证,同时也给项目的开发提出了要求。项目发起人或项目经理需要不断地与资源提供者进行沟通,尤其是在项目规划阶段,这种沟通非常必要,为项目的后续工作奠定了坚实的基础。 (3) 用户。用户的需求得到充分满足是项目实施的落脚点。与资源提供者不同,一般用户对项目的功能、性能方面有具体的要求,项目经理必须组织项目成员和用户进行沟通,及时了解用户需求信息,做好项目计划制定。 3.2.3项目的初步范围的确定 项目是为完成产品或服务所做的一次性努力。因此,范围的概念有两方面的含义,一个是产品范围,即产品或服务所包含的特征或功能; 另一个是工作范围,即为交付具有规定特征和功能的产品或服务所必须完成的工作。 在确定范围时首先要确定最终产生的是什么,它具有哪些可清晰界定的特性。需要注意的是,特性必须清晰,以认可的形式表达出来,比如文字、图表或某种标准,能被项目参与人理解,绝不能含含糊糊、模棱两可。在此基础之上才能进一步明确需要做什么工作才能产生所需要的产品,也就是说产品范围决定工作范围。 例如,一个新的电话系统可能包含4个组成部分——硬件、软件、培训及安装施工。其中,硬件和软件是具体产品,培训和安装施工则是服务,具体产品和服务形成了新的电话系统这一产品的整体。如果项目是为顾客开发一个新的电话系统的软件部分,要确定这个项目的工作范围,首先就要确定这个新的电话系统应具备哪些功能,然后具体定义系统的各组成部分的功能和服务要求,最后明确项目需要做些什么工作才能达到这些功能和服务要求。 确定了项目范围也就定义了项目的工作边界,明确了项目的目标和主要的项目可交付成果。项目的可交付成果往往又被划分为较小的、更易管理的不同组成部分。项目范围的确定过程参见第4章。 项目范围确定的结果需要编写正式的项目范围说明书。范围说明书(scope statement)是一份文件,用以对项目范围达成共同的理解和确认。范围说明书应详细描述在项目中要完成的工作,它是防止范围蔓延的重要工具。项目范围说明书主要应该包括以下3个方面的内容: (1) 项目的合理性说明。即解释为什么要实施这个项目,也就是实施这个项目的目的是什么。项目的合理性说明为将来提供评估各种利弊关系奠定了基础。 (2) 项目目标。前面已经讲过,项目目标是所要达到的项目的期望产品或服务,确定了项目目标,也就确定了成功实现项目所必须满足的某些数量标准。项目目标至少应该包括费用、时间进度和技术性能或质量标准。当项目成功地完成时,必须向他人表明,项目事先设定的目标均已达到。值得注意的一点是,如果项目目标不能够被量化,则要承担很大的风险。 (3) 项目可交付的成果清单。如果列入项目可交付成果清单的事项被完满实现,并交付给使用者——项目的中间用户或最终用户,就标志着项目阶段或项目的完成。例如,某软件开发项目的可交付成果有能运行的电脑程序、用户手册和帮助用户掌握该电脑软件的交互式教学程序。 范围说明书因项目类型的不同而不同。规模大、内容复杂的项目,其范围说明书也可能会很长。有的范围说明书可以长达几百页,特别是要对产品进行详细说明的时候。总之,范围说明书应根据实际情况做适当的调整以满足不同的、具体项目的需要。不同项目的范围说明书所描述的重点也不一样,但必须把弹性的、模糊的内容具体化、清晰化。  3.3确定项目预算 项目预算就是项目开始前对项目费用的计算,包括人工、材料等。 任何项目启动都离不开预算。有了预算,可以让项目相关人员明白开发这个产品到底需要多少经费。通过预算,管理层可以真正知道费用到底花在什么地方。只有管理层批准了项目预算,项目才能真正启动。 创建预算的方法有很多,但比较理想的一个方法是先将项目划分成不同的阶段,然后对每一阶段的成本进行估算,其中一个关键因素是工作结构分解(Work Breakdown Structure,WBS)。WBS面向提交成果对项目进行分解,从提交成果的列表可以确定每个提交成果需要执行的活动。项目主要提交结果成为“项目里程碑”,通常可以作为项目的阶段。有关工作分解结构的详细内容请参见第4章。 3.3.1自底向上的成本估算 自底向上的成本估算是项目经理按照工作分解结构从项目的底层开始直到项目的顶层(交付成果)进行项目预算的一种方式。 1. 预算考虑问题 当开始创建预算时,项目经理需要考虑以下问题:   (1) 把项目分成若干阶段。把整个项目分成若干阶段,比较容易确认阶段性成果,并且明确每一阶段要完成的任务。一旦把项目分成阶段,资金分配到各个阶段比对整个项目进行预算更具有可行性。   (2) 注意整合阶段。在为项目启动进行工作环境的准备时,预算要考虑到停工、拖延、在其他工作上投入的时间以及项目经理为确保项目按计划进行而视察任务完成情况所需要的时间。 (3) 考虑完成项目所用的工作量。工作量一般以小时为单位来计算,团队成员付出的每个小时都意味着投入一定的成本。通过计算完成项目所需要的小时数,就可计算出完成项目实际上要使用的成本。另外,如果一些工作外包出去,小时工作量还要考虑企业管理费用、基本的行政管理费用和承担的风险等因素。作为项目经理,一定要考虑这些辅助和额外的费用,这样才能得出准确的估算。 (4) 考虑专业服务的成本。在项目启动后可能会产生聘请专家、对团队进行培训等专业服务,而这些专业服务在项目开发中又是必要的,因此项目经理必须在预算中进行合理规划。 (5) 考虑设备成本。在项目开发中,硬件是必需的,如果硬件需要购买,这很容易估算; 如果需要租赁,就必须考虑项目使用的所有设备对所有可能受到项目实施影响的生产机器所产生的影响,比如试验服务器、用于检测的工作站、软件开发所用的机器、处理器利用率、内存的使用以及受到的带宽影响等,因此项目经理必须在预算中考虑由此产生的费用。 (6) 考虑生产附加成本。任何一个项目都有附加成本,比如复印、印刷用户手册等,因此项目经理必须在预算中加进此项费用。 (7) 考虑质量检测需求。为满足用户的质量标准需要安排回归测试、集成测试和老化测试等工作,伴随此类工作所发生的费用也是必须要加入到预算中的。 (8) 考虑储备金。项目面临风险,必须预留一些保证金来对付一些无法预测的情况。 一旦把这些项目实施中的不同方面都考虑周全,就可为每一个阶段建立开支进展表。 例如,通过分析,一个新服务器应用软件开发项目可以分成三个阶段,分别命名为阶段1、阶段2和阶段3。接下来就对阶段1、阶段2和阶段3所需的花费进行分析,表3.1展示了阶段1的开支进展,阶段2和阶段3可以用相同的方法给出。 表3.1服务器应用软件开发项目阶段1的开支进展表 序号成本的种类序号成本的种类 1 需要购买的硬件 2 需要购买的软件 3 购买许可证 4 咨询费用 5 内部开发人员的时间使用 6 风险和储备金 7 其他和项目有关的费用 2. 预算影响因素 每一个阶段的开支进展表建立完成,就开始计算费用。怎样才能确定和每一个元素相关联的时间值和金钱值呢?可以考虑如下方法:   (1) 以往的经验。根据自己的经验判断过去项目中是否有和本项目类似的阶段。   (2) 历史信息。类似的其他项目可能有经验数据,这些数据对当前项目的预算可以起到指导作用,具有一定的参考价值。因此咨询顾问或相关专家,征求项目团队成员的意见是非常重要的。   (3) 固定报价。供应商可能会就达到某种最终成果进行固定价格的报价。通常,固定报价的对象是一种产品,而不是一种服务。   (4) 标准成本。企业的预算部门根据经验或规章制度已经预先就某些工作制定了标准成本,比如印刷成本。这些预先设定的成本可以帮助项目经理轻松估算项目的劳动成本,而不用对每种工作一一进行估算。   (5) 应用相应的计算方法。详细内容参见第4章。 3.3.2自顶向下的成本估算   自顶向下的成本估算是项目经理按照工作分解结构从项目的顶层开始到项目的底层进行项目预算的一种方式。模拟估算法和参数模型法是两种自顶向下的估算方法。   模拟估算法使用历史项目信息预测当前项目的成本,将历史项目的实际成本作为当前项目的基础,同时根据当前项目的范围、规模和其他已知的变量来估算当前项目的成本。这种方法比其他方法节省时间,但准确性差,它只给出了项目的一个粗略成本。   参数模型法是基于一定的参数,使用数学模型来预测项目的成本。模型中的参数因项目复杂程度的不同而不同,可以是每单位的成本乘上一个调整因子,这个调整因子是由项目的具体情况确定的。例如,在一个开发团队中,王斌有8年的开发经验,而李丽只有2年的开发经验,这样在估算成本时,王斌的成本不能与李丽的一样多,李丽会花比王斌较长的时间完成。   在创建项目估算时,一般项目经理在具有类似的项目经验时,才采用自顶向下的估算方法对项目进行估算,比如企业做过诸如安装服务器、架设网络等项目,当再次做此类项目时,项目经理就可以采用自顶向下方法进行成本估算。由于大多数的IT项目是以前没有做过的,特别是IT产业发展迅速,在这种情况下,自顶向下的估算方法没有自底向上的估算方法可靠和实用。 3.3.3完成预算   完成预算(Budget At Completion,BAC)是项目各个阶段的预算总和。这种方法的好处是不需要在项目一开始就把全部阶段的预算资金分配下去,而是先分配项目启动资金,然后完成一个阶段任务再分配一个阶段资金就可以。BAC的优势在于能够使参与项目的人通过了解项目各阶段的成本来把握项目从而得到项目的总成本。表3.2就示意了完成预算的过程。 表3.2完成预算的过程 阶段 事宜 起 始 日 期 成本(美元) 阶段1 服务器1 11月3日 4578 服务器2 11月3日 4578 合计 9156 续表 阶段 事宜 起 始 日 期 成本(美元) 阶段2 安装服务器 11月10日 6526 安装交换机 11月12日 1592 合计 8118 阶段3 添加测试软件 11月17日 7584 测试及编写文档 11月19日 0 合计 7584 阶段4 旧服务器到新服务器数据迁移 11月21日 0 服务器投入使用 11月22日 0 合计 0 完成时的预算 25128 3.4制定IT项目章程 项目规划的结果是让组织中的所有其他部门都知道这些项目的存在。管理层需要制定正式文件并发放给各个部门和有关人员,以授权项目工作的开展。这种文件可以有很多形式,但最常用的是项目章程。 项目章程(project charter)是用来正式确认项目存在并指明项目目标和项目管理的一种文件。项目章程明确地给出了项目的定义,说明了它的特点和最终结果,规定了项目的发起人、项目经理和团队领导,以及相互交流的方式。项目主要干系人需在项目章程上签字,以表示在项目需求和目的上已达成一致。 每个项目都应该有章程。它授权项目,构建了项目经理的责任心,激发了发起人的主人翁意识以及项目组的团队意识。 项目章程的演进过程如下: 项目发起人识别项目并进行初步的项目定义,同时根据项目起源和项目定义,选择和聘用项目经理以及确定项目目标,在此基础上,确定项目团队和需要的项目资源。当以上内容确定或基本确定后,就可制定项目章程。 项目章程在不同的企业有不同的说法,且章程的内容也不尽相同,一般而言项目章程主要由以下要素构成: 项目的正式名称、项目发起人、项目经理、项目目标、关于项目的业务情况(项目的开展原因)、项目的最高目标和可交付成果、团队开展工作的一般性描述、开展工作的基本时间安排(详细的时间安排在项目计划中)、项目资源、预算、成员以及供应商等。表3.3给出了一个项目章程实例。 表3.3项目章程 IT项目名称 操作系统升级到Windows XP 和Windows Server 2003 批准时间 2008年8月 项目背景介绍 项目发起的原因:  公司使用的都是Windows NT,现在一种新技术Windows XP类似于Windows NT,但优于Windows NT;  现有服务器速度显慢,陈旧过时 项目的机遇与优势:  Windows XP更灵活、更安全、更简单;  6个新型多处理服务器装满了RAM、RAID驱动器以及快速可靠的磁盘阵列。给所有服务器安装的操作系统是Windows Server 2003 项目的挑战与劣势: 在过去2年,公司使用的都是Windows NT。员工都学会使用它,并越来越喜欢它 项目目标: 所有微机在2008年12月3日之前升级到Windows XP,2008年12月20日之前所有服务器升级为5个Windows Server 2003 利益相关者 项目发起人CIO,项目经理王网络管理员,项目团队成员李办公室办公员,宋卫生员 进度计划  9月测试配置的方法,收集用户和应用状态,确定部署方法,生成脚本  10月首先部署100个示范用户。测试、记录并解决存在的问题。开始Windows Server 2003的测试和设计。  11月开始为期一个月的4小时培训课程。在学员培训的同时,将Windows XP安装在他们的计算机上。继续Windows Server 2003的测试  12月完成Windows XP的安装与调试 项目经理 姓名 原先所在的部门或职务 在项目中的权力范围 王网络管理员 网络部 全权 资源条件 人员: 李办公室办公员,宋卫生员,专家王教授 物质: 计算机硬件、Windows XP,Windows Server 2003等 成本: 275 000美元(包括Windows XP、Windows Server 2003、客户许可证、咨询费、培训费) 结束时间: 12月 项目完成的标准: 硬件安装完毕,软件调试完毕,用户满意 签发人: CIO 签发时间: 2008年8月 3.5小结 本章首先根据项目的特点提出了项目规划的必要性,接下来介绍了项目规划的内涵及制定过程,通过案例向读者介绍了项目章程的制定和项目范围说明书的编写。 项目规划是预测项目的未来,是从现实出发的谋划,是对软件项目开发所需的资源、经费和开发进度的估算。在项目规划的制定过程中,必须清楚项目的背景; 界定出项目的范围; 预算出项目的成本。项目规划的结果是产生项目范围说明书和项目章程,通过范围说明书明确哪些是项目应该做的,哪些是不应该做的。通过章程把各方的责任与义务制度化,并获得领导的支持与承诺,可以使项目开发过程的管理风险大大降低。