人月神话读书笔记

1964-1965:  IBM操作系统OS/360的经理

1974: 查珀尔希尔,北卡罗来纳 Frederick P. BrooksJr写了此书。

199420年后再版,修正了一些观点 

几个谬误

1)所以系统编程的进度安排背后的第一个假设是:一切都将运作良好,每一项任务仅花费它所应该花费的时间。在单个的任务中,一切都将运转正常的假设在时间进度上具有可实现性。。然而大型的编程工作,或多或少包含了很多任务,某些任务间还具有前后的次序,从而一切正常的概率变得非常小,甚至接近于无。

2) 第二个谬误的思考方式是在估计和进度安排中使用的工作量单位:人月。成本的确随开发产品的人数和时间的不同,有着很大的变化,进度却不是如此。因此我认为用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话。它暗示着人员数量和时间是可以相互替换的。

系统测试

对于软件任务的进度安排,以下是我使用了很多年的经验法则:

1/3计划

1/6编码

1/4构件测试和早期系统测试

1/4系统测试,所有的构件已完成

在许多重要的方面,它与传统的进度安排方法不同:

             1. 分配给计划的时间比寻常的多。即便如此,仍不足以产生详细和稳定的计划规格说明,也不足以容纳对全新技术的研究和摸索。

             2. 对所完成代码的调试和测试,投入近一半的时间,比平常的安排多很多。

             3. 容易估计的部分,即编码,仅仅分配了六分之一的时间。

Brooks法则

向进度落后的项目中增加人手,只会使进度更加落后。(Adding manpower to a late software project makes it later

这就是除去了神话色彩的人月。项目的时间依赖于顺序上的限制,人员的数量依赖于单个子任务的数量。

怎么组建团队?

Harlan Mills的提议提供了一个崭新的、创造性的解决方案。Mills建议大型项目的每一个部分由一个团队解决,但是该队伍以类似外科手术的方式组建,而并非一拥而上。也就是说,同每个成员截取问题某个部分的做法相反,由一个人来进行问题的分解,其他人给予他所需要的支持,以提高效率和生产力。

外科医生Mills称之为首席程序员。他亲自定义功能和性能技术说明书,设计程序,编制源代码,测试以及书写技术文档。首席程序员需要极高的天分、十年的经验和应用数学、业务数据处理或其他方面的大量系统和应用知识。

副手。他是外科医生的后备,能完成任何一部分工作,但是相对具有较少的经验。他的主要作用是作为设计的思考者、讨论者和评估人员。。他需要详细了解所有的代码,研究设计策略的备选方案。显然,他充当外科医生的保险机制。他甚至可能编制代码,但针对代码的任何部分,不承担具体的开发职责。

管理员。外科医生是老板,他必须在人员、加薪等方面具有决定权,但他决不能在这些事务上浪费任何时间。因而,他需要一个控制财务、人员、工作地点安排和机器的专业管理人员,该管理员充当与组织中其他管理机构的接口。Baker建议仅在项目具有法律、合同、报表和财务方面的需求时,管理员才具有全职责任。否则,一个管理员可以为两个团队服务。

编辑。外科医生负责产生文档——出于最大清晰度的考虑,他必须书写文档。对内部描述和外部描述都是如此。而编辑根据外科医生的草稿或者口述的手稿,进行分析和重新组织,提供各种参考信息和书目,对多个版本进行维护以及监督文档生成的机制。

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

程序职员。他负责维护编程产品库中所有团队的技术记录。该职员接受秘书性质的培训,承担机器码文件和可读文件的相关管理责任。所有的计算机输入汇集到这个职员处。如果需要,他会对它们进行记录或者标识。输出列表会提交给程序职员,由他进行归档和编制索引。另外,他负责将任何模型的最新运行情况记录在状态日志中,而所有以前的结果则按时间顺序进行归档保存。

Mills概念的真正关键是“从个人艺术到公共实践”的编程观念转换。它向所有的团队成员展现了所有计算机的运作和产物,并将所有的程序和数据看作是团队的所有物,而非私人财产。

程序职员的专业化分工,使程序员从书记的杂事中解放出来,同时还可以对那些杂事进行系统整理,确保了它们的质量,并强化了团队最有价值的财富——工作产品。上述概念显然考虑的是批处理程序。

denny评论在这种外科医生的队伍中,显然程序职员是最次要的。在中国的国情下,外科医生虽然是很重要,但它没有权限配置管理员(比如负责财务,人员),而一个副手是很难找到的。一个中国的小团队开发中,通常团队组长主要负责设计,分解子任务;团队成员的职责是可能是兼容的,可以由某个程序员来兼职网络维护,版本,文档管理;也可能是一个程序员设计并担任主要开发的角色。因为如果团队组长的总体设计还要由编辑来进一步细分到编码的设计,才能发挥这种队伍的作用。就是实际程序员无需再了解其它更多细节,就可开展工作。那么在这种队伍建设中,设计的时间是很可观的,极其重要的,通常要占整个工程中一半以上的时间,编码只是极少的一段可估计时间,而测试通常与设计挂沟,设计的程序决定了测试中程序的可靠与稳定。

    综合所论,这种外科手术队伍是很难组建,在小的项目中并不具有灵活性,而且由于项目的次序决定了这种队伍可能并不高效。

工具维护人员。现在已经有很多文件编辑、文本编辑和交互式调试等工具,因此团队很少再需要自己的机器和机器操作人员。但是这些工具使用起来必须毫无疑问地令人满意,而且需要具备较高的可靠性。外科医生则是这些工具、服务可用性的唯一评判人员。他需要一个工具维护人员。

测试人员。外科医生需要大量合适的测试用例,用来对他所编写的工作片段,以及对整个工作进行测试。因此,测试人员既是为他的各个功能设计系统测试用例的对头,同时也是为他的日常调试设计测试数据的助手。他还负责计划测试的步骤和为测试搭建测试平台。

语言专家。随着Algol语言的出现,人们开始认识到大多数计算机项目中,总有一两个乐于掌握复杂编程语言的人。这些专家非常有帮助,很快大家会向他咨询。这些天才不同于外科医生,外科医生主要是系统设计者以及考虑系统的整体表现。而语言专家则寻找一种简洁、有效的使用语言的方法来解决复杂、晦涩或者棘手的问题。他通常需要对技术进行一些研究(两到三天)。通常一个语言专家可以为两个到三个外科医生服务。

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

设计与开发的重叠有多少?

对于非常大型的项目,将设计方法、体系结构方面的工作与具体实现相分离是获得概念完整性的强有力方法。

系统的体系结构(architecture)指的是完整和详细的用户接口说明。对于计算机,它是编程手册;对于编译器,它是语言手册;对于控制程序,它是语言和函数调用手册;对于整个系统,它是用户要完成自己全部工作所需参考的手册的集合2

如同Blaauw所指出的,整个创造性活动包括了三个独立的阶段:体系结构(architecture)、设计实现(implementation)、物理实现(realization)。在实际情况中,它们往往可以同时开始和并发地进行。

编程生产率

编程行业的乐趣与苦恼(第一章 the tar pit)

1)编程行业“满足我们内心深处的创造渴望和愉悦所有人的共有情感”,提供了五种乐趣:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值