您好,欢迎访问三七文档
IntroductiontoTHEMYTHICALMAN-MONTH相关信息书籍简介1975年首次发行软件工程的经典之作收录了作者多年的技术文章为大型的软件开发提供启示相关信息作者简介FrederickBrooks(弗雷德里克.布鲁克斯)美国工程院院士曾主持开发IBM/3601999年的图灵奖获得者软件开发中的焦油坑图片注解:中生代时期拉布雷亚(LaBreaTarPits)焦油坑复原图软件开发中的焦油坑“史前史中,没有别的场景比巨兽在焦油坑中垂死挣扎的场面更令人震撼。上帝见证着恐龙、剑齿虎在焦油中的挣扎。它们挣扎的越是猛烈,焦油越是缠的越紧,没有任何猛兽足够强壮或具有足够的技巧,能够挣脱束缚,它们最后都沉到了坑底。”——Brooks大型的系统开发类经常遇到焦油坑!“表面上看起来好像没有任何一个单独的问题会导致困难,每个都能被解决,但是当它们相互纠缠和积累在一起的时候,团队的行动就会变得越来越慢。对问题的麻烦程度,每个人似乎都会感到惊讶,并且很难看清问题的本质。”——Brooks软件开发中的焦油坑WindowsNT5.0(即windows2000)时间:计划开发时间:3年实际开发时间:5年公布数据:程序员人数:5,000人代码行数:35,000,000行代码开发时间:5年每位程序员每年生产多少行代码?软件开发中的焦油坑每位程序员每年生产多少行代码?以最不幸的情况来估计,每行代码都需要自己编写,得到结果:35,000,000行/(5000人*5年)=1400行/人.年。这个效率远远低于一名正常程序员的产出量。两种可能:(1)微软雇佣了5000名不合格的程序员去开发windowsNT5.0(2)开发一个大规模的程序系统产品远难于堆砌出单一的程序。作者目的:尽可能地帮助大型系统开发人员走出焦油坑焦油坑之一:进度滞后进度滞后的原因乐观主义的盛行(软件开发是纯思维性的活动)人月神话各项任务的时间安排不当(特别是测试时间)迫于用户压力制定了不合理的进度计划brooks法则焦油坑之一:进度滞后“使用人月为单位来衡量一份工作的规模是一个危险和具有欺骗性的神话。它暗示着人员数量和时间是可以相互替换的。”——brooks人月神话人月:参与开发的程序员数目*项目持续的月数为什么说人月是神话?(1)许多任务是无法拆解的(2)即使任务可以拆解,人员之间的沟通交流时间随着人手的增加以(n-1)*n/2的规模递增20人*5个月50人*2个月焦油坑之一:进度滞后图一:可以完全分解的任务(在软件开发中不存在)图二:可以分解但需要沟通交流的任务(一般情况)图三:关系错综复杂的任务(极端情况)焦油坑之一:进度滞后各项任务的时间安排不合理作者的经验之谈:测试时间不足的恶果:直到项目的发布时期,才有人发现进度的问题。焦油坑之一:进度滞后Brooks法则定义:Addingmanpowertoalatesoftwareprojectmakesitlater.--Brooks出现原因:新增的程序员需要进行培训,同时增加了沟通的成本,使得开发团队增加了更多的开发时间,这个时间超过了新增程序员所做的贡献。焦油坑之一:进度滞后对于进度滞后项目的解决方案(1)在新的进度安排中分配充分的时间,确保工作能彻底、认真地完成(2)当项目延期所导致的后续成本很高时,往往削减系统的功能是唯一的解决方法对于许多小型的开发团队,加派人手是通常的解决方法?焦油坑之二--缺乏沟通巴别塔为什么会失败?巴别塔:圣经中继“诺亚方舟”后人类第二个大工程,以失败告终焦油坑之二--缺乏沟通巴别塔为什么会失败?......现在整个大地都使用同一种语言。在一次迁徙的过程中,人们发现了苏美尔地区,并且在那里定居下来。他们说:“来,让我们建造一座带有高塔的城市,这个塔将高耸云霄,也让我们声名远扬。”于是上帝决定下来看看人们建造的城市和高塔,看了以后,他说:“他们只是一个种族,使用一种语言,如果他们一开始就能造出城市和高塔,那以后就没有什么能难得倒他们了。来,让我们在人类的语言里制造些混淆,让他们相互之间不能听懂。”上帝于是改变并区别开了人类的语言,巴比伦塔不得不停工了。--旧约第11章巴别:在希伯来语中是变乱的意思焦油坑之二--缺乏沟通如果大型编程项目中交流不足,很可能面临和巴别塔一样的结局。大型编程项目中的交流方法(1)成员之间非正式途径的经常性讨论(2)定期召开的项目会议(3)项目工作手册焦油坑之二--缺乏沟通在树状组织架构中进行交流传统的沟通方式是网状的,n个人之间的交流需要(n-1)*n/2个接口。然而团队的组织架构总是树状的,可以利用这种树状的组织结构减少沟通成本。需要为每棵子树定义一些基本要素:(1)每棵子树需要完成的任务(2)子树的产品负责人(对外沟通)(3)子树的技术主管(对内技术指导)(4)进度(5)人员的划分(6)子树对外接口的定义焦油坑之三--文档问题撰写关键的文档书面的决策更加精确文档可作为沟通交流的手段文档可为系统将来的优化和扩展提供指导项目经理的文档可作为项目的数据基础和检查表不提倡过度文档给用户使用的最终产品并非是文档焦油坑之三--文档问题需要提供哪些关键的文档?做什么:开发目标怎么做:产品技术说明。以建议书开始,以内部文档和用户手册结束时间:进度表资金:预算地点:工作空间分配人员:组织图焦油坑之三--文档问题自文档化的程序为什么提倡自文档化程序?数据处理的基本原理告诉我们,试图把信息放在不同文件中,并试图维护它们的同步是件费力不讨好的事情。在软件开发里,我们却试图维护一份机器可读的程序,以及一系列包含记述性文字和流程图的文档。如何产生自文档化的程序?(1)在程序源代码里附加尽可能多的信息,例如变量名,函数名等(2)尽可能使用空格和一致性的格式来提高程序的可读性,表现从属和嵌套关系(3)以段落注释的格式,向程序插入必要的记述性文字是否存在终极利器?--银弹之争人狼、银弹与软件项目人狼:满月时会由人形变成狼形的怪兽。银弹:唯一可以杀死人狼的武器。软件项目:类似于人狼,常常看似简单明了的东西,却有可能变成一个落后进度、超出预算、存在大量缺陷的怪物。是否存在终极利器?--银弹之争没有银弹(“NoSilverBullet”)没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。--brooks,1986原因:由软件工程的内在特性所决定的:复杂度,一致性,可变性和不可见性。存在银弹(ThereIsaSilverBullet)在信息化社会里,市场对信息的巨大需求将成为经济诱因,促使银弹的出现。--Cox,1990没有银弹!--Brooks软件工程的内在特性复杂度:不同于建筑、汽车等产品,软件实体可能比任何由人类创造的其它实体都要复杂,因为没有任何两个软件部分是相同的(至少是在语句的级别上)。无规则性:不同于数学、物理等学科,软件工程所控制的很多复杂度是随心所欲、毫无规则可言的,来自于若干必须遵循的人为惯例和系统。可变性:由于软件是纯粹的思维产物,易于修改,用户经常会提出改进要求。不可见性:软件是无法可视化的,不仅限制了个人的设计过程,也阻碍了设计人员之间的交流。由于软件工程的内在特性限制了银弹的出现!没有银弹!--Brooks能够提高效率但并非银弹的技术:高级编程语言面向对象编程人工智能专家系统“自动”编程图形化编程程序验证环境和工具工作站购买而非自行开发增量开发——增长,而非搭建系统卓越的人员银弹就在这里!--CoxCox简介“以人为本”计算机学和社会学大师开发了Objective-C(类似于c++,已经消亡)银弹就在这里!--CoxCox眼中的银弹:类似硬件晶片般的软件组件通过使用结构化的方法,将软件组件内的复杂结构包装得完美,使得组件简单易用,由这些组件整合而成大型软件,自然简单易用,软件危机于是被化解了。为何现在没有出现银弹?一般的工业产品每卖出一件就消耗一份组件,然而软件无论卖出多少件都只需要消耗一份组件。这样使软件组件提供商没有动力去生产出完美的组件。网络资源人月神话NoSilverBulletThereisasilverbullet
本文标题:设计工程之人月神话
链接地址:https://www.777doc.com/doc-153039 .html