您的位置:首页 > 其它

外科手术的方式组建团队

2009-08-10 16:08 190 查看
Harlan Mills 的提议提供了一个崭新的、创造性的解决方案。

Mills 建议大型项目的每一个部分由一个团队解决,但是该队伍以类似外科手术的方式组建,而并非一拥而上。

也就是说,同每个成员截取问题某个部分的做法相反,由一个人来进行问题的分解,其他人

给予他所需要的支持,以提高效率和生产力。

简单考虑一下,如果上述概念能够实施,似乎它可以满足迫切性的需要。很少的人员

被包含在设计和开发中,其他许多人来进行工作的支持。它是否可行呢?谁是编程队伍中的

麻醉医生和护士,工作如何划分?让我们继续使用医生的比喻:如果考虑所有可能想到的工

作,这样的队伍应该如何运作。

外科医生:Mills 称之为首席程序员。他亲自定义功能和性能技术说明书,设计程序,

编制源代码,测试以及书写技术文档。他使用例如PL/I 的结构化编程语言,拥有对计算机

系统的访问能力;该计算机系统不仅仅能进行测试,还存储程序的各种版本,以允许简单的

文件更新,并对他的文档提供文本编辑能力。首席程序员需要极高的天分、十年的经验和应

用数学、业务数据处理或其他方面的大量系统和应用知识。

副手:他是外科医生的后备,能完成任何一部分工作,但是相对具有较少的经验。他

的主要作用是作为设计的思考者、讨论者和评估人员。外科医生试图和他沟通设计,但不受

到他建议的限制。副手经常在与其他团队的功能和接口讨论中代表自己的小组。他需要详细

了解所有的代码,研究设计策略的备选方案。显然,他充当外科医生的保险机制。他甚至可

能编制代码,但针对代码的任何部分,不承担具体的开发职责。

管理员:外科医生是老板,他必须在人员、加薪等方面具有决定权,但他决不能在这

些事务上浪费任何时间。因而,他需要一个控制财务、人员、工作地点安排和机器的专业管

理人员,该管理员充当与组织中其他管理机构的接口。Baker 建议仅在项目具有法律、合同、

报表和财务方面的需求时,管理员才具有全职责任。否则,一个管理员可以为两个团队服务。

编辑:外科医生负责产生文档——出于最大清晰度的考虑,他必须书写文档。对内部

描述和外部描述都是如此。而编辑根据外科医生的草稿或者口述的手稿,进行分析和重新组

织,提供各种参考信息和书目,对多个版本进行维护以及监督文档生成的机制。

两个秘书。管理员和编辑每个人需要一个秘书。管理员的秘书负责项目的协作一致和

非产品文件。

程序职员:他负责维护编程产品库中所有团队的技术记录。该职员接受秘书性质的培

训,承担机器码文件和可读文件的相关管理责任。

所有的计算机输入汇集到这个职员处。如果需要,他会对它们进行记录或者标识。输

出列表会提交给程序职员,由他进行归档和编制索引。另外,他负责将任何模型的最新运行

情况记录在状态日志中,而所有以前的结果则按时间顺序进行归档保存。

Mills 概念的真正关键是“从个人艺术到公共实践”的编程观念转换。它向所有的

团队成员展现了所有计算机的运作和产物,并将所有的程序和数据看作是团队的所有

物,而非私人财产。

程序职员的专业化分工,使程序员从书记的杂事中解放出来,同时还可以对那些杂事

进行系统整理,确保了它们的质量,并强化了团队最有价值的财富——工作产品。上述概念

显然考虑的是批处理程序。当使用交互式终端,特别是在没有纸张输出的情况下,程序职员

的职责并未消失,只是有所更改。他会记录小组程序和私有工作拷贝之间的更新,依然控制

所有程序的运行,并使用自己的交互式工具来控制产品逐步增长的完整性和有效性。

工具维护人员。现在已经有很多文件编辑、文本编辑和交互式调试等工具,因此团队

很少再需要自己的机器和机器操作人员。但是这些工具使用起来必须毫无疑问地令人满意,

而且需要具备较高的可靠性。外科医生则是这些工具、服务可用性的唯一评判人员。他需要

一个工具维护人员,保证所有基本服务的可靠性,以及承担团队成员所需要的特殊工具(特

别是交互式计算机服务)的构建、维护和升级责任。即使已经拥有非常卓越的、可靠的集中

式服务,每个团队仍然要有自己的工具人员。因为他的工作是检查他的外科医生所需要的工

具。工具维护人员常常要开发一些实用程序、编制具有目录的过程库以及宏库。

测试人员。外科医生需要大量合适的测试用例,用来对他所编写的工作片段,以及对

整个工作进行测试。因此,测试人员既是为他的各个功能设计系统测试用例的对头,同时也

是为他的日常调试设计测试数据的助手。他还负责计划测试的步骤和为测试搭建测试平台。

语言专家。随着 Algol 语言的出现,人们开始认识到大多数计算机项目中,总有一两

个乐于掌握复杂编程语言的人。这些专家非常有帮助,很快大家会向他咨询。这些天才不同

于外科医生,外科医生主要是系统设计者以及考虑系统的整体表现。而语言专家则寻找一种

简洁、有效的使用语言的方法来解决复杂、晦涩或者棘手的问题。他通常需要对技术进行一

些研究(两到三天)。通常一个语言专家可以为两个到三个外科医生服务。

以上就是如何参照外科手术队伍,以及如何对10人的编程队伍进行专业化的角色分工。

如何运作

文中定义的开发团队在很多方面满足了迫切性的需要。十个人,其中七个专业人士在

解决问题,而系统是一个人或者最多两个人思考的产物,因此客观上达到了概念的一致性。

要特别注意传统的两人队伍与外科医生——副手队伍架构之间的区别。首先,传统的

团队将工作进行划分,每人负责一部分工作的设计和实现。在外科手术团队中,外科医生和

副手都了解所有的设计和全部的代码。这节省了空间分配、磁盘访问等的劳动量,同时也确

保了工作概念上的完整性。

第二,在传统的队伍中大家是平等的,出现观点的差异时,不可避免地需要讨论和进

行相互的妥协和让步。由于工作和资源的分解,不同的意见会造成策略和接口上的不一致,

例如谁的空间会被用作缓冲区,然而最终它们必须整合在一起。而在外科手术团队中,不存

在利益的差别,观点的不一致由外科医生单方面来统一。这两种团队组建上的差异——对问

题不进行分解和上下级的关系——使外科手术队伍可以达到客观的一致性。

另外,团队中剩余人员职能的专业化分工是高效的关键,它使成员之间采用非常简单

的交流模式成为可能。

Baker 的文章3 提出了专一的、小规模的测试队伍。在那种情况下,它能按照所预期的

进行运作,并具有良好的效果。

团队的扩建

就目前情况而言,还不错。然而,现在所面临的问题是如何完成5000 人年的项目,而

不是20 或30 人年规模的系统。如果整个工作能控制在范围之内,10 人的团队无论如何组

织,总是比较高效的。但是,当我们需要面对几百人参与的大型任务时,如何应用外科手术

团队的概念呢?

扩建过程的成功依赖于这样一个事实,即每个部分的概念完整性得到了彻底的提高—

—决定设计的人员是原来的七分之一或更少。所以,可以让200 人去解决问题,而仅仅需要

协调20 个人,即那些“外科医生”的思路。

对于协调的问题,还是需要使用分解的技术,这在后续的章节中会继续进行讨论。在

这里,可以认为整个系统必须具备概念上的完整性,要有一个系统结构师从上至下地进行所

有的设计。要使工作易于管理,必须清晰地划分体系结构设计和实现之间的界线,系统结构

师必须一丝不苟地专注于体系结构。总的说来,上述的角色分工和技术是可行的,在实际工

作中,具有非常高的效率。

注:以上摘自《人月神话》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: