当前位置:文档之家› 人月神话PPT课件

人月神话PPT课件


最糟糕的的情况:导致重复产生进度灾难,耗费大量 人力,物资,却反而使开发出来的产品更差
Brooks 法则:
向进度落后的项目中增加人手,只会使进度更加落后 (Adding manpower to a late software project makes it later)
这就是除去了神话色彩的人月
图形化编程
图形化和可视化编程,计算机图形在 软件设计上的应用
银弹 否?
上述方法均未出现令人激动与信服 的进步
• 程序验证
• 测试和修复BUG
•环境和工具 •
集成数据库的使用
•工作站 •
处理能力和内存容量的稳固和快速提高
Summary
主要内容
• • • • • 人月神话 外科手术队伍 贵族的专制 银弹在哪里? 没有银弹
Part 3
贵族的专制
丏政与民主
丏政:占统治地位的阶级对敌对阶级实行的强力统治的国家 制度
民主:在一定的阶级范围内,按照平等和少数服从多数原则 来共同管理国家事务的国家制度
•对立
项目管理的制度该如何?
•专政? •经理 •民主?
•技术
•编码
•管理
•编码 •测试
概念完整性
一个项目,一个建筑,一个品牌想要获得成功,就必须有一 个完整的理念、概念设计,拥有自己的概念DNA
系统测试
• 系统测试进度的安排常常是编程中最不合理的部分,测试 实际需要的时间往往比传统预测的要长很多
•传统
•VS
•作者
除了系统测试,进度基本能保证
然而不为系统测试安排足够的时间简直就 是一场灾难
会付出相当高的商业代价 因此,在早期进度策划时,允许充分的系 统测试时间是非常重要的
空泛的估算
有限的时间,非阶段化方法的采用,极少的数据支持, • 程序员开 完全借助项目经理的直觉 •厨师煎鸡蛋
•(落后、超出预算、缺陷)
计算机硬件的银弹
•电子计算机
•晶体管计算机
•集成电路计算机
•30年内获得了6个数量级的提高(房价)
银弹在哪里?
• 软件开发中的两大类问题 :
•根本问题——软件特性中固有的困难 •次要问题——出现在目前生产上的,但并非那些 与生俱来的困难
银弹在哪里?
•复杂度
•一致性 •可变性 •不可见性
发项目
•空乏的估算
空泛的估算
• 解决方案 :
•开发并推行生产率图表,缺陷率,估算规则等
•从实践经验出发,坚信自己的估计,不被外界所动摇
重复产生的进度灾难
当一个软件项目落后于进度时,可以选择的方案有: •重新安排进度
•削减任务
条件:时间不受限制 任务实现不够理想,存在缺陷
•最通常传统的挽回手段
加派人手 却是一种疯狂愚蠢的做法
神话!!!
用人月作为衡量一项工作的规模 是一个危险和带有欺骗性的
它暗示着
人员数量和时间是可以相互替换的
•人数和时间的互换 仅仅适用于以下情 况:某个任务可以 分解给参与人员, 并且他们之间不需要 相互的交流
而在大型的编程工作中
无论多少个母亲,孕育 一个生命都需要十个月
实际情况
强行的增加人 员,只会造成人 力的浪费或者因 沟通浪费而增加 工作量
根本问题
复杂度 人类创造的最复杂的实体。
——软件实体
•与其它学 •复杂度引
•科对比
发的问题
复杂度
•软件
•VS •建筑,汽车
•K.O.
后者存在大量的重复工作
复杂度
•软件
•VS
•数学 物理
•K.O.
后者可以抽调复杂度,建立简化模型
复杂度
•复杂 度导 致的 问题
•人员沟通困难(进度延迟) •列举所有状态困难(可靠性弱) •函数复杂导致调用困难 •结构复杂导致安全状态不可见
分派较多的人手,计划较短的时间,是不可行的
《人月神话》想告诉我们
用“人”换取“月”来赶项目进度只是神话 而已
在限定条件下,真正想要保证项目进度、质量、效 率就必须找到并确定一个最合理科学的方案
Part 2 外科手术队伍
如何在有意义的时间进度内创建大型的系统?
问题
• 大型系统
•大量人员一拥而上的开发 方法 •小型精干队伍开发
完整的概念是完美结果的强有力的保证
获得概念完整性以后
因此,我们要
•获得概念的完整性!
怎样获得概念完整性?
•概念完整性要求设计必须由一个人或 者非常少数互有默契的人员来实现
•这实际上就是一种无需任何歉意 的贵族专制统治
所以
要获得项目概念的完整性
就必须实行贵族专政的项目管理制度
Part 3 银弹在那里?
软件活动任务
• 根本任务——打造由抽象软件实体 构成的复杂概念结构 • 次要任务——使用编程语言表达这 些抽象实体,在空间和时间限制内 将它们映射成机器语言
那些传说中的妖魔鬼怪
•VS
那些传说中的妖魔鬼怪
•在外国最恐怖的是
银弹在哪里?
•人
•狼人
•(简单明了)
•软件 •怪物 •Sliver Bullute
面向对象编程
抽象数据类型 层次化类(类)
银弹 否?
他们的出现仅消除了非本质困难没有促进 软件的内在问题
人工智能
AI-1:使用计算机解决以前只能通过人类智慧 解决的问题 AI-2:使用启发式和基干规则的特定编程技术
•银弹 否?
表达的简化仅能提供少量的促进作用
“自动”编程
从问题的一段陈述说明自动产生解决问 题的程序 •银弹 否? 此方法很难普及到更广泛的寻常软件 系统
•复杂度
根本问题
•没有银弹
•一致性 •可变性 •不可见性
我们的出路在哪里?
软件工程中,没有银弹
难道我们要自挂东南枝 ?
Part 4
没有 银弹
以往的突破
• 高级语言 • 分时
• 统一编程环境
•潜在 的 银弹
Ada
一种80年代的编程语言,他的理念比 语言本身更先进
•银弹 否?
他只降低了机器的次要复杂度
•Ready?
•送给程序猿的礼物
人月神话
THE MYTHICAL MAN-MONTH
FREDERICK P. BROOKS, JR.
目录
• 1.人月神话 • 2. 外科手术队伍
• 3. 贵族的专制
• 4. 银弹在哪里 • 5. 没有银弹
Part 1 人月神话
在众多软件项目中,缺乏合理的时间进 度是造成项目滞后的最主要原因
导致这种普遍性灾难的原因是什么呢?
乐观主义
所有的编程人员都是乐观主义者
•计算机还很年轻 •程序员更加年轻
•年轻人总是些乐观主义者——
•“这次它肯定会运行” •我刚刚找出了最后一个错误”
乐观主义导致
实际情况
•单个的任务
YES
“一切都将运转正常 ”
•大型的编程工作
NO
第二个谬误的思考方式 :
人月
一致性
在自然界中上帝是存在的,软件 工程中上帝就是我们
•遵循接口
•兼容性
可变性 软件实体是纯粹思维活动的产物, 可以很容易的进行修改
•超越边界
使用
•软件寿命
长于硬件
不可见性
软件保持着无法可视化的特征,
不但限制了个人的设计过程,
也严重阻碍了思想的交流
•建筑,机械 模型
•软件无法
建立模型
银弹在哪里?
具体工作划分
•程序职员(负责维护编程产品库中所有团队 的技术记录) •工具维护人员(对工具构建,维护,升级) •测试人员(进行所有测试工作)
•语言专家(寻找一种简洁、有效的使用语言 的方法来解决复杂、晦涩或者棘手的问题)
外科手术队伍体系
那么 如何提高项目的质量与效率
•第一种方法 贵族专政、民主政治 和系统设计
进退两难
•无法保证效率和概念 完整性)
•人员有限,太慢
Mills 的建议
一个崭新的,创造性的解决方案
外科手术队伍
Mills 的建议
主要思想:
•核心人员 •其他人员 设计开发 进行工作支持

具体工作划分
• • • • •
外科医生(首席程序员) 副手(外科医生的后备) 管理员(接口) 编辑(维护监督文档生成机制) 两个秘书(管理员和编辑每人一个)
Q&A ! Thank you
相关主题