16
软件项目动力学:一条完整的路》(Software
Madnick 在1991 年出版的一本颇有价值的书《
Project Dynamics:An Integrated Approach)中。书中提出了项目动态特性的量化模型。
关于Brooks 准则的章节提供了更详细的分析,指出了在各种假设下的情况,即何时添加多
少人员将会产生什么样的结果。为了进行研究,作者扩展了他们自己一个中型规模项目的模
型,假设新成员有学习曲线和需要额外的沟通和培训工作。他们得出结论“向进度落后的项
目中添加人手总会增加项目的成本,但并不一定会使项目更加落后。”特别的,由于新成员
总会立刻带来需要数周来弥补的负面效应,所以在项目早期添加额外的人力比在后期加入更
- 167 -
----------------------- Page 180-----------------------
加安全一些。
Stutzke为了进行相似的研究,开发了一个更简单的模型,得出了类似的结果17。他对
引入新成员进行了详细的过程和成本分析,其中包括把他们的指导人员调离原有的项目任
务。他在一个真正的项目上测试了他的模型,在项目中期的一些偏移之后,他成功地添加了
一倍人手,并且保证了原先的进度。相对于增加更多程序员,他还试验了的其他方法,特别
是加班工作。在他的很多条实践建议中,最有价值的部分是如何添加新成员,进行培训,用
工具来支持等等。特别值得注意的是,他建议开发项目后期增加的开发人员,必须作为团队
成员,愿意在过程中努力投入和工作,而不是企图改变或者改进过程本身!
Stutzke 认为更大型的项目中,增加的沟通负担是次要作用,没有对它建模。至于
Abdel-Hamid和Madnick 是否或者如何考虑这个问题,则不是很清楚。上面提到的两个模型
都没有考虑开发人员必须重新安排的事实,而在实际情况中,我发现这常常是一个非常重要
的步骤。
这些细致的研究使“异常简化”的Brooks准则更加实用。作为平衡,我还是坚持这个
简单的陈述,作为真理的最佳近似,以及一项经验法则——警告经理们避免对进度落后的项
目采取的盲目、本能的修补措施。
人就是一切(或者说,几乎是一切)
很多读者发现很有趣的是,《人月神话》的大部分文章在讲述软件工程管理方面的事情,
较少涉及到技术问题。这种倾向部分因为我在IBM 360操作系统(现在是MVS/370)项目中
角色的性质。更基本的是,这来自一个信念,即对于项目的成功而言,项目人员的素质、人
员的组织管理是比使用的工具或采用的技术方法更重要的因素。
随后的研究支持了上述观点。Boehm 的COCOMO 模型发现团队质量目前是项目成功最大
的决定因素,实际上是下一个次重要因素的4 倍。现在,软件工程的大多数学术研究集中在
工具上。我很欣赏和期盼强大的工具,同样我也非常鼓励对软件管理动态特征——对人的关
注、激励、培养——的持续研究。
人件。近年来,软件工程领域的一个重大贡献是DeMarco 和Lister 在1987 年出版的
人件:高生产率的项目和团队》(Peopleware:Productive Projects and Teams)。
数据,《
- 168 -
----------------------- Page 181-----------------------
它所表达的观点是“我们行业的主要问题实质上更侧重于社会学(sociological)而不是科
学技术 (technological)。”它充满了很多精华,如“管理人员的职责不是要人们去工作,
而是是创造工作的可能。”它涉及了如空间、布置、团队的餐饮等主题。DeMarco 和Lister
从他们的Coding War Games 项目中提供的数据,显示了相同组织中开发人员的表现之间,
和工作空间和生产率以及缺陷水平之间令人吃惊的关联。
顶尖人员的空间更加安静、更加私人、保护得更好以免受打断,还有很多……这对你
真的很要紧吗……是否安静、空间和免受打搅能够帮助你的人员更好地完成工作,或者[换
个角度]能帮助你吸引和留住更好的人员?
我衷心地向我的读者推荐这本书。
项目转移。DeMarco 和Lister 对团队融合给予了相当大的关注,团队融合是一个无形
的,但是非常关键的特性。很多地点分散的公司,项目从一个实验室转移到另一个。从中,
我认为团队融合正是管理上被忽视的因素。
我的观察和经验大约局限在六、七个项目转移中,其中没有一个是成功的。任务可以
成功地转移,但是对于项目的转移,即使拥有良好的文档、先进的设计以及保留部分原有人
员,新队伍实际上依然是重新开始。我认为正是由于破坏了原有团队的整体性,导致了产品
雏形的夭折,项目重新开始。
放弃权力的力量
如果人们认同我在文中多处提到的观点——创造力来自于个人,而不是组织架构或者
开发过程,那么项目管理面对的中心问题是如何设计架构和流程,来提高而不是压制主动性
和创造力。幸运的是,这个问题并不是软件组织所特有,一些杰出的思想家正努力地致力于
这项工作。E.F.Schumacher 在他的经典《小就是美:人们关心的经济学》(Small is
Beautiful:Economics as if People Mattered)中,提出了最大化员工创造力和工作乐趣
的理论。他的第一个原理是引自Pope Pius XI 教皇通谕Quadragesimo Anno 中的“附属职
能行使原理”:
向大型组织指派小型或者附属机构能够完成的职责是不公平的,同时也是正常次序的
不幸和对它的干扰。对于每项社会活动,就其本质而言,应该配备对社会个体成员的帮助,
- 169 -
----------------------- Page 182-----------------------
而不是去破坏和吸收它们……那些当权者应该确信遵守“附属职能行使”原理,能在各种各
样的组织中维持更加完美的次序,越强和越有效的社会权威将会是国家更加融洽和繁荣的条
19
件 。
Schumacher 继续解释到:
附属职能行使原理告诉我们——如果较低级别组织的自由和责任得以保留,中心权威
实际上是得到了加强;其结果是,从整体而言,组织机构实际上将“更加融洽和繁荣”。
如何才能获得上述的架构?……大型组织机构由很多准自治单元构成,我们称之为准
公司。它们中的每一个都拥有大量的自由,来为创造性和企业家职能提供最大的可能机
20
会……。每个准公司同时具备盈亏帐目和资产负债表 。
软件工程中最激动人心的进展是将上述组织理念付诸实践的早期阶段。首先,微型计
算机革命创造了新型的软件工业,出现了成百上千的新兴公司。所有这些小规模的公司热情、
自由和富有创造性。随着很多小型公司被大公司收购,这个产业正在发生着变化,而那些大
公司是否理解和保留小规模的创造性尚待分晓。
更不寻常的是,一些大型公司的高层管理已经开始着手将一些权力下放到软件项目团
队,使它们在结构和责任上接近于Schumacher 的准公司。其运作的结果是令人欣喜和吃惊
的。
微软的Jim AcCarthy 向我描述了他在解放团队上的经验:
每个队伍(30至40人)拥有自己的任务、进度,甚至如何定义、构建、发布的过程。
团队由4或5个专家组成,包括开发、测试和书写文档等。由团队而不是老板对争论进行仲
裁。我无法形容授权和由团队自行负责项目的成功与否的重要性。
EarlWheeler,IBM 软件业务的退休主管,告诉我他着手下放IBM 部门长期集权管理权
力的经验:
[近年来]关键的措施是将权力向下委派。这就像是魔术!改进的质量、提高的生产率、
高涨的士气。我们的小型团队,没有中心控制。团队是流程的所有者,并且必须拥有一个流
程。他们有不同的流程。他们是进度计划的所有者,因此感受到市场的压力。这种压力导致
他们使用和利用自己的工具。
- 170 -
----------------------- Page 183-----------------------
和团队成员个人的谈话,显示了他们对被委派的权力和自由的赞同,同时也反映出真
正的下放显得多少有些保守。不过,授权是朝着正确方向迈出的一大步,它产生了像Pius XI
所预言的好处:通过权力委派,中心的权威实际上是得到了加强;从整体而言,组织机构实
际上更加融洽和繁荣。
最令人惊讶的新事物是什么?数百万的计算机
每位我曾交谈过的计算机带头人都承认,对微型计算机革命和它引发的塑料薄膜包装
软件产业感到惊讶。毫无疑问,这是继《人月神话》后二十年中最重要的改变。它对软件工
程意味着很多。
微型计算机革命改变了每个人使用计算机的方式。Schumacher在20年前,陈述了面对
的挑战:
我们真正想从科学家和技术专家那里得到什么?我会回答:我们需要这样的方法和设
备:
价格足够低廉,使几乎所有人都能够使用
适合小型的应用,并且
21
满足人们对创造的渴望 。
这些正是微型计算机革命带给计算机产业和它的用户(现在已覆盖到普通公众)的杰
出特性。一般人现在不但可以买得起自己的计算机,而且还可以负担20 年前只有国王的薪
水才能买得起的软件。Schumacher 的目标值得仔细思考,每个目标达到的程度值得品评,
尤其是最后一个。在一个一个的领域中,普通人同专家一样可以应用新的自我表达方法。
其他领域中进步的部分原因和软件创造相近——消除了次要的困难。例如,文书处理
方式曾经是很僵化的,合并更改内容需要重新打字,成本和时间都比较高昂。一份300 页的
手稿,常常每3 到6个月就需要重新输入一遍,这中间,人们往往还不断地产生新文稿。另
22
外,逻辑流程和语句韵律的修订很难进行。而现在,文书处理已经非常方便和流畅了 。
计算机同样给其他一些领域带来了相似的处理能力,绘画、制订计划、机械制图、音
乐创作、摄影、摄像、幻灯、多媒体甚至是电子表格等。在这些领域中,手工操作都需要重
- 171 -
----------------------- Page 184-----------------------
新拷贝大量的未改变的部分,以便在上下文中区别修改情况。现在我们能享受这样的好处,
即立刻对结果进行修订和评估,无须失去思维的连贯性,就象分时带给软件开发的好处一样。
同样,新的、灵活的辅助工具增进了创造力。以写作为例,我们现在拥有拼写检查、
语法检查、风格顾问、目录生成系统以及对最终排版预览的能力。
最重要的是,当一件创造性工作刚刚成形时,工作介质的灵活性使得对多种彻底不同
的可选方案的探索变得容易。这实际上是一个量变引起质变的例子,即时间变化引起工作方
式上的巨大变化。
绘图工具使建筑设计人员为每小时的创造性投资展现了更多的选择。计算机与合成器
的互联,加上自动生成或者演奏乐谱的软件,使得人们更容易捕获创作的灵感。数字式相机,
和AdobePhotoshop 一起,使原先在暗室中需要数日的工作在几分钟内就可以完成。电子表
格可以对大量“what if”的各种情况进行实验、比较。
最后,个人计算机的普遍存在导致了全新创造性活动介质的出现。Vannevar Bush 在
1945 年提出的超文本,仅能在计算机上实现23。多媒体表现形式和体验更是如此——在计算
机和大量价格低廉的软件出现以前,实现起来有太多的困难。至于现在并不便宜或普遍的虚
拟环境系统,将成为另一个创造性活动的媒介。
微型计算机革命改变了每个人开发软件的方式。70 年代的软件过程本身被微处理器革
命和它所带来的科学技术进步所改变。很多软件开发过程的次要困难被消除。快速的个人计
算机现在是软件开发者的常规工具,从而周转时间的概念几乎成为了历史。如今的个人计算
机不仅仅比1960年的超级计算机要快,而且它比1985年的Unix 工作站还要快。所有这些
意味着即使在最差的计算机上,编译也是快速的,而且大内存消除了基于磁盘链接所需要的
等待时间。另外,符号表和目标代码可以在内存中保存,从而高级别的调试无需重新编译。
在过去的20 年里,我们几乎全部采用了分时作为构建软件的方法学。在1975 年,分
时才刚刚作为最常用的技术替换了批处理计算。网络使软件构建人员不仅可以访问共享文
件,还可以访问强大的编译、链接和测试引擎。今天,个人工作站提供了计算引擎,网络主
要提供了对文件的共享访问,这些文件作为团队开发的工作产品。客户-服务器系统则使测
试用例检入、开发和应用的共享访问更加简单。
同样,用户界面也取得了类似的进步。和一般的文本一样,WIMP 界面对程序文本提供
- 172 -
----------------------- Page 185-----------------------
了更加方便迅捷的编辑方式。24 行、72 列的屏幕已经被整页甚至是双页的屏幕所取代,因
此程序员可以看到所作更改的更多上下文。
全新的软件产业——塑料薄膜包装的成品软件
在传统软件产业的旁边,爆发了另一个全新的产业。产品以成千上万,甚至是数百万
的规模销售。整套内容丰富的软件包可以以少于开发成本的价格获得。这两个产业在很多方
面都不同,它们共同存在着。
传统软件产业。在1975年,软件产业拥有若干可识别的、但多少有些差异的组成部分,
如今他们依然存在:
计算机提供商:提供操作系统、编译器和一些实用程序
应用程序用户:如公共事业、银行、保险、政府机构等,他们为自己使用的软件开
发应用程序包。
定制程序开发者:为用户承包开发私用软件包,需求、标准和行销步骤都是与众不
同的。
商业包开发者:那个时候是为专业市场开发大型应用,如统计分析和CAD 系统等。
Tom DeMarco 注意到了传统软件产业的分裂,特别是应用程序用户。
我没有料到的是:整个行业被分解成各个特殊的领域。你完成某事的方式更像是专业
领域的职责,而不仅仅是通用系统分析方法、通用语言、通用测试技术的使用。Ada是最后
一个通用语言,并且它已经慢慢变成了一门专业语言。
在日常的商业应用领域中,第4 代语言作出了巨大的贡献。Boehm 说,“大多数成功的
第4 代语言是以选项和参数方式系统化某个应用领域的结果。”这些第4 代语言最普遍的情
况是带有查询语言、数据库-通讯软件包的应用生成程序。
操作系统世界已经统一了。在1975年,存在着很多操作系统:每个硬件提供商每条产
品线最少有一种操作系统,很多提供商甚至有两个。如今是多么的不同啊!开放式系统是基
本原则。目前,人们主要在5大操作系统环境上行销自己的应用程序包(按照时间顺序):
IBM MVS和VM 环境
- 173 -
----------------------- Page 186-----------------------
DEC VMS 环境
Unix 环境,某个版本
IBM PC环境,DOS、OS-2 或者Windows
Apple Macintosh 环境
塑料薄膜包装的成品软件产业。对于这个产业的开发者,面对的是与传统产业完全不
同的经济学:软件成本是开发成本与数量的比值,包装和市场成本非常高。在传统内部的应
用开发产业,进度和功能细节是可以协商的,开发成本则可能不行;而在竞争激烈的开发市
场面前,进度和功能支配了开发成本。
正如人们所预期的,完全不同的经济学引发了非常不同的编程文化。传统产业倾向于
被大型公司以已指定的管理风格和企业文化所支配。另一方面,始于数百家创业公司的成品
软件产业,行事自由,更加关注结果,而不是流程。在这种趋势下,那些天才的个人程序员
更容易获得认可,这隐含了“卓越的设计来自于杰出的设计人员”的观点。创业文化能够对
那些杰出人员,根据他们的贡献进行奖励。而在传统软件产业中,公司的社会化因素和薪资
管理计划总会使上述做法难以实施。因此,很多新一代的明星人物被吸引到薄膜包装的软件
产业,这一点并不奇怪。
买来开发——使用塑料包装的成品软件包作为构件
彻底提高软件健壮性和生产率的唯一途径,是提升一个级别,使用模块或者对象组合
来进行程序的开发。一个特别有希望的趋势是使用大众市场的软件包作为平台,在上面开发
更丰富和更专业化的产品。如使用塑料包装的数据库和通讯软件包来开发货运跟踪系统,或
者学生的信息系统等。而计算机杂志上的征文栏目提供了许许多多的Hypercard Stack、
Excel 模板、Minicard 的特殊Pascal 函数以及AutoCad 的AutoLisp 函数。