技术开发 频道

软件开发与团队

【IT168 技术文章】

    一个伟大的软件后面都有一个伟大的故事,一个伟大的软件后面也有一个伟大的方法。

    当Windows 2000经过胎死腹中的危机,终于如凤凰涅般再生时,微软决定给整个产品组成员拍摄一张合影,以纪念这个历史时刻的诞生。到了拍摄那一天,微软人发现,他们只有把摄像师安排在飞机上才能干好这件事儿——因为Windows 2000产品组整整有5000人!

    “团队=软件”,微软软件开发管理理论的基础可以这样一个恒等式来表达,软件可以忠实地展现创造它的团队的一切优点和缺点。软件业中没有两个完全相同的失败,但最常见的莫过于新版本跟不上对手的脚步,微软开发模式的精髓之一,便是通过产品组团队中每个成员对职责的承诺来控制产品的开发过程,保证新产品准时地、经常地被推出。

    这正是软件业最大的金科玉律!

    开发周期四阶段

    微软的产品开发遵循一个完整的开发周期,这个产品开发周期被分为四个阶段:规划阶段、开发阶段、测试阶段(也叫稳定化阶段)和产品发送/出品阶段 。

    微软中国研发中心中文技术部经理李东女士告诉记者,在产品的规划阶段要做三件事:拟定基于客户数据的目标描述、基于目标描述的规格/特性说明和基于规格说明和特性优先级制定的进度表。规划阶段中最重要的事情是让整个产品组的成员对共同的目标形成共同的认同。一座伟大建筑的诞生往往只缘于一位伟大建筑师的不朽贡献,但一个伟大软件的设计却需要成百上千人的智力创造。

    第二个阶段是开发阶段,这个阶段也叫主要里程碑阶段。微软的任何一个产品组在这个阶段都将根据特性将项目划分成若干个子项目,每一个子项目的完成就对应于一个里程碑。在李东的经验中,一般微软中国研发中心会在这个阶段把产品划分成2~3个里程碑。Milestone1(第一个里程碑,简写为M1)内要完成的是核心的特性和功能,或今后需被共享的部件。那些将对产品稳定性形成很大影响的功能,也应该被放到Milestone1。Milestone2可以放比milestone1次要一些、但也是比较重要的特性和功能。Milestone3放的特性和功能对核心特性和功能的依赖性不大,有的甚至可能根据市场的变化重新评估和取舍。总体来说,应根据特性和功能在结构上的重要性来决定它应当被放在M1、M2或M3来做。

    在每一个子项目(里程碑)内,进度表应当具体到每一个开发人员,而且进度表中应当加入缓冲时间。在子项目的执行过程中,程序经理(其角色下面详述)负责协调开发过程并更新规格说明,在开发人员编码、优化和调试的同时,测试人员进行Bug测试及报告,直到特性稳定化之后,里程碑才达到。开发阶段有一个微软所有的产品组都会用到的重要里程碑:代码完成(CC:Code Complete)。达到这个里程碑,意味着所有特性的编码任务全部完成,特性的集成测试通过后,除解决Bug以外,不再有新的代码进来。代码完成是明显的界线,标志着产品可以交付测试。至此开发周期进入第三个阶段。

    第三个阶段是稳定化阶段,也叫测试阶段,或叫QA阶段。测试人员对软件做各种各样的测试,其中开发和测试工作是始终并存进行的:测试人员发现Bug,开发人员解Bug,测试人员再检测这个Bug是不是解了。如果你是一个程序经理,这个时候去看记录Bug的数据库,会发现一大堆Bug急剧涌现,随着一个个Bug被解,Bug量逐渐递减。当Bug量控制到某一个特定范围内就可以发Beta版,进行外部测试。这个时期程序经理要跟踪监督用户的反馈,开发人员及时解决用户发现的Bug。Beta测试结束之后,再经过一段时间的测试,就会达到零错误版本(ZBR)里程碑,零错误版本里程碑的达到,并不意味着没有Bug或遗漏的功能,而是标志着团队的成品达到了事先规划的品质水平,可以向发布候选(RC)里程碑进军了。值得注意的是,作为RC的产品,应包含出品之前所必须具备的全部文档资料。发布候选(RC)可能会经历RC0、RC1、RC2 等(非常好的情况是RC0测试之后没有一点问题,那是最后要发布的那个产品了),但如RC0以后又发现了Bug,并且大家认为这个Bug必须要解,就又出来RC1,Windows 2000就是经过RC3之后才进入产品发送/出品阶段的。

    产品有了稳定的版本就进入最后的阶段——产品发送/出品阶段。对于研发队伍来讲,十月怀胎、孩子终于出世的那一天就是发送投产(RTM——Release To Manufacture)。RTM之后到用户真正拿到这个软件产品之前还要经过我们耳熟能详的产品发布会(Launch Event),当然,这部分工作已经被微软的研发机构移交给市场和销售机构,由产品经理完成相应的产品宣传策划,把产品推向市场。

    微软经典团队角色

    微软的产品组典型的人员角色有几类(参见图2)。一类是产品规划(Product Planner)和产品管理(Product Management)。产品规划的使命是通过研究,向产品组提供诸如用户需求、市场导向、竞争对手和产品方向的分析,确保产品满足客户的需要;产品管理的使命是确定获利市场,同客户沟通产品的价值。这两个角色相当于对产品的规划以及产品的销售。一类是程序经理(或叫程序管理:Program Management),他负责整个产品开发过程的协调,是微软各产品组中非常重要的一个角色。

    开发人员(Development)、测试人员(Testing)、可用性测试员(Usability Testing)之类,在微软也是一些比较特殊的角色。此外还有:Beta测试人员(Betas),如果这个产品需要汉化的话;本地化项目管理(Localization Project Manager);用户教育(User Education);最后是售后支持(Product Support),等等。

    尽管微软的产品组角色定位非常清晰,但这些产品组多为横向组织,由多个部门的成员组成。比如产品管理属于微软的销售机构,而售后支持属于售后服务机构等等。微软不同机构和部门之间的协作性极强,这是保证微软按时完成高质量产品的重要原因之一。

    在微软的产品开发周期中,每一个角色在不同的阶段有不同的侧重。在规划阶段,作用比较大的是产品规划和程序经理。开发阶段显然是开发人员的作用比较大,测试人员则在第三个阶段“QA阶段”很重要,但是程序经理在这两个阶段的作用都很重要。

    产品规划人员对产品影响最大的作用体现在规划阶段。这个阶段的产品规划需做用户问卷调查,用各种各样的研究手段来试图了解用户的需求,并创建目标描述。这个阶段产品管理也收集用户需求,但他主要调查的是市场走向,他关心的是如何与客户沟通产品的价值。产品规划在整个产品开发周期中总是充当一个用户代言人的角色。产品管理在第一阶段和最后阶段发挥作用,产品管理必须设法了解新产品的获利市场所在,并且很好地同客户沟通产品的价值。

    相比于产品规划和产品管理,程序经理与程序经理之后的角色与产品具体开发过程更直接相关。

0
相关文章