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