外科医生团队重温人月神话.doc

外科医生团队重温人月神话

人月神话 FREDERICK P. BROOKS, JR 1975 焦油坑 程序、产品与系统 编程产品(Programming Product) = 程序(Program)x 3 编程系统(Programming System) = 程序(Program)x 3 编程系统产品(Programming System Product) = 程序(Program)x 9 编程的苦与乐 编程的乐趣:创造;对他人有用;整个过程魔术般的力量;学习的乐趣;纯思维驾驭的介质(盗梦空间)。 编程的苦恼:必须追求完美;对他人的依赖(由他人设定目标、供给资源、提供信息);寻找琐碎的bug;产品在即将完成时可能已趋于陈旧(产品不尽人意)。 人月神话 缺乏合理的时间进度是项目滞后的最主要原因 对估算技术缺乏有效的研究——乐观主义; 估算技术假设人-月可以互换(用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话); 由于对估算缺乏信心,PM通常不会有耐心持续估算——轻视系统测试、空乏的估算; 对进度缺少跟踪和监督; 发生偏差时下意识地增加人力——重复产生的进度灾难。 外科手术队伍 程序员的优和劣 最好和最差程序员的生产率10:1,运行速度和空间5:1。经验和实际的表现没有联系。 得出的结论很简单:如果一个200人的项目中,有25个最能干和最有开发经验的项目经理,那么开除剩下的175名程序员,让项目经理来编程开发。有OS/360的实例。 对于效率和概念的完整性来说,最好由少数干练的人员来设计和开发,而对于大型系统,则需要大量的人手,以使产品能在时间上满足要求。如何调和这两方面的矛盾呢? Mills的建议:外科手术队伍 大型项目的每一个部分由一个团队解决。 首席程序员(外科医生),副手(外科医生的后备),管理员(辅助外科医生管理事务性工作),编辑(管理文档),两个秘书(管理员和编辑各一个),程序职员(技术记录),工具维护人员,测试人员,语言专家。共10人的团队。 贵族专制、民主政治和系统设计 在系统设计中,概念完整性应该是最重要的考虑因素。也就是说为了反映一系列连贯的设计思路,宁可省略一些不规则的特性和改进,也不提倡独立和无法整合的系统,哪怕它们其实包含着许多很好的设计。 如何获得概念完整性 编程系统(软件)的目的是使???算机更加容易使用。对于给定级别的功能,能用最简洁和直接的方式来指明事情的系统是最好的。简洁和直白来自概念的完整性。每个部分必须反映相同的原理、原则和一致的折衷机制。在语法上,每个部分应使用相同的技巧;在语义上,应具有同样的相似性。因此,易用性实际上需要设计的一致性和概念上的完整性。 评论:上述是来自1975年的观点,或可看作是“易用性”的根源。现在看来,易用性显然不是软件开发质量要求的全部(仅占六个目标的一个)。但是,保持设计的概念完整性和设计表述的简洁和直白,无疑是使设计能够付诸实现的关键因素。因此,这段描述在今天仍然是有广泛现实意义的。 专制和民主 概念的完整性要求设计必须由一个人,或者非常少数互有默契的人员来实现。而进度压力却要求很多人员来开发系统。有两种方法可以解决这种矛盾。第一种是仔细地区分设计方法和具体实现。第二种是组建外科医生式编程开发团队的方法。 对于非常大型的项目,将设计方法、体系结构方面的工作与具体实现相分离是获得概念完整性的强有力方法(360计算机产品线的成功和操作系统的失败)。 画蛇添足 结构师的交互准则和机制 牢记是开发人员承担创造性和发明性的实现责任,所以结构师只能建议,不能支配; 时刻准备着为所指定的说明建议一种实现的方法,同样准备接受其他任何能达到目标的方法; 对上述的建议保持低调和平静; 准备放弃坚持所作的改进建议。 自律——开发第二个系统所带来的后果 在开发第一个系统时,结构师倾向于精炼和简洁。他知道自己对正在进行的任务不够了解,所以他会谨慎仔细地工作。当他着手第三个或第四个系统时,先前的经验会相互验证,得到此类系统通用特性的判断,而且系统之间的差异会帮助他识别出经验中不够通用的部分。注:此处特指操作系统,或者同类系统的设计。作者在此举了Stretch计算机的例子。 第二个系统是设计师们所设计的最危险的系统。一种普遍倾向是过分地设计第二个系统,向系统添加很多修饰功能和想法——画蛇添足。 贯彻执行 他只是坐在那里,嘴里说:“做这个!做那个!”当然,什么都不会发生,光说不做是没有用的。——哈里·杜鲁门,《关于总统的权力》 文档化的规格说明——手册 手册、或者书面规格说明,是一个非常必要的工具,尽管光有文档是不够的。手册是产品的外部规格说明,它描述和规定了用户所见的每一个细节。同样的,它也是结构师主要的工作产物。(后文描述了手册的结构和编制技巧,现在已不在适用) 会议和大会 无需多说,会议是必要

文档评论(0)

1亿VIP精品文档

相关文档