首页>参考读物>计算机科学与技术>综合

软件工程经济学
作者 : (美)Barry W.Boehm
译者 : 李师贤 等
出版日期 : 2004-08-02
ISBN : 7-111-14389-2
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 640
开本 : 16开
原书名 : Software Engineering Economics
原出版社: Prentice Hall
属性分类: 店面
包含CD :
绝版 : 已绝版
图书简介

本书阐述软件工程经济学的基本原理和分析方法,包括COCOMO模型分析,多目标决策分析,软件生命周期定量模型,软件项目的工程经济学基础,软件生命周期成本估算方法,以成本效益分析、边际分析、风险分析为基础的决策方法以及软件成本估算技术等。本书使用了大量案例,深入浅出、概念清晰,较好地结合了理论与实践。
  本书适合作为大学高年级本科生和低年级研究生的软件工程经济学基础课程的教材,也可供广大软件从业人员参考。

图书特色

图书前言

工程经济学课程已成为硬件工程师教育的一个标准组成部分。但到目前为止,软件工程师却缺少相似的、适合的软件工程经济学课程。这样导致的结果就是,大多数软件工程师没有机会掌握并利用那些有重要意义的经济学概念、技术和案例,而这些恰恰对他们以后的职业生涯、对所编制软件的易用性和价值都有重要作用。
  所以,本书的主要目标是为美国高年级本科生和一年级研究生,提供软件工程经济学的基础课程。即本书的两个目的是:
  1. 易于学生学习。
  2. 便于教师讲授。
  我也努力使本书能够达到第三个目的:
  3. 为这一领域的专业人士提供帮助。
  因为这三类读者有一定的差异,所以我对学生、教师和熟练的软件工程师分别给出了指导,作为他们学习本书的起点。
  本书的基本结构如图A所示。第一部分介绍背景、动机和软件工程目标框架等,为后续的内容打下基础。第二、三部分包括两个互相补充的主题:软件生命周期定量模型,应用于软件项目的工程经济学基础。第四部分详细讲述了软件生命周期成本估算的方法,它是以第二部分较简单的成本模型为基础,同时,又进一步支持第三部分的软件工程经济学的分析技术。
  图A也显示了本书的每一部分所解决的基本问题。例如:第四部分不仅讲述了软件成本估算、理解影响软件成本因素问题,还探讨了像“如何利用这种理解来提高软件项目的可见性及控制,进而提高软件生产率?”这类问题。
图B显示了本书的每一部分中的章节。例如,图B显示了分等级的软件成本估算模型细节的逐级层次,这个模型通常称为COCOMO(COnstructive COst MOdel)。顶层是在第5章~第7章讲述的基本COCOMO(Basic COCOMO)模型,基本COCOMO模型是一个简单的公式,将软件项目的成本仅仅估算为已交付源指令规模的函数。接下来是中等COCOMO(Intermediate COCOMO)模型,在第8章和第9章介绍,它估算软件项目成本是规模和其他成本驱动属性(cost driver attribute)的函数,如人员经验与能力、计算机硬件约束、现代编程规范(modern programming practice)的使用程度等。第23章讲述了最精确、最详细的一层,那就是详细COCOMO(Detailed COCOMO)模型,并在第24章~第27章给出了其详尽的细节,它利用成本驱动属性,按每个阶段、每个子系统、每个模块分别估算软件产品的成本。
第24章~第27章详细解释了各种软件成本驱动因子属性是如何影响完成软件生命周期每一阶段所需工作量的。COCOMO模型不仅给出了估算公式,也给出了该模型为什么能得出这些结果的最好解释。第24章~第31章详细讨论了软件生命周期成本估算知识的前沿问题(frontier),并提出了需要进一步研究的广泛课题(agenda)的建议,以扩展我们在软件生命周期及其经济学方面的知识。
图A  本书的结构—主要讲述的问题
  深深地感谢那些鼓励我,为我提供数据与意见的人们。真希望能把他们都列出来。
……

致学生
  未来几年内,你将有机会在一间屋子里和一群人一起讨论,决定将要进行的一个重要的新软件工作需要用多长时间、花多少钱,这是一个好机会。这些人中,也许有一到两名对软件很了解,其他大多数都了解不深。这些人可能是高层经理、业务分析员、市场专家或生产线计划者之类的人员。总的说来,他们将根据边际投资回报率、成本收益率(cost-benefit ratio)、现值(present value)和风险暴露(risk exposure)之类的概念进行讨论,并做出决策。
图B  本书的结构—部分与章节
  还有其他一些人,对这个项目很感兴趣,但不在这间屋子里。这包括将为你工作的、或同你一起从事软件工作的人员,还包括一些用户,那些不得不使用你们团队正准备生产的这个软件的用户。无论是否意识到,事实上,他们未来几个月甚至几年的命运,很大程度上依赖于你和其他非软件人员能在多大程度上对软件工作的范围、预算、进度做出实事求是的决策。
  屋子里的非软件人员没法做出决策,因为他们对你所做的软件技术性权衡没什么感觉。所以对你来说,与他们交流、理解他们思考并做出决定所依据的经济学概念,就显得特别重要。如果你能做到这一点,你就有机会改变软件开发人员与面向业务人员之间那种敌对关系,把它变成一种能相互理解、承诺和信任的关系。
  在这本书里,我们将尽量提供必要的概念与技术,使你既能从编程角度,又能从经济学的角度进行思考。除了这些概念的实际应用之外,希望你会发现它们具有相当的刺激性,就像当时我对计算机与信息处理领域提出一种新的见解时那样。我发现它们对说明如下问题有很大帮助:
  * 为什么信息是有价值的?
  * 为什么人们要采用软件产品?
  * 人们如何决定需要什么样的信息处理产品?
  * 为什么软件生命周期是这样的?
  就像其他方面的研究一样,当我们更好地理解了软件工程领域为什么会存在,才能更好地在软件工程中进行实践。

致教师
  在这里,我想说明以下三点:
  1. 软件工程经济学对教师和学生来说都是一个具有刺激性的、内容丰富的主题。
  2. 本书可用作软件工程经济学方面的教材,讲授一学期或一学年均可,也可以作为更通用的软件工程课程的辅助教材。
  3. 软件工程经济学是一个有重要意义的、成果累累的研究领域。
  首先,我想你会发现,软件工程经济学是一门有趣的、有价值的学科。微观经济学是一门精致的、清晰的、精确的学科。为什么这么多人需要计算机、软件和处理过的信息?风险和信息价值使得这个行业有令人鼓舞的前景。由于分析影响软件成本的因素很重要,所以目前出现了许多的软件工程指南并对软件生命周期产生了影响。
  此外,我还认为每个人不必都把自己沉浸到行业的实践与术语中,去寻找软件工程经济学相关的例子与应用。当我还在USC时,对学校开发的各种计算机与软件应用,及学校对计算机与软件成本的关心程度(特别在学校经费紧张的时候)印象深刻。所以,本书尽量避免行业术语,尽可能多地包含面向大学的问题和实例,从而使本书采用的材料较为熟知。
  本书的基本内容很适合一学期或一学年的课程。此课程的主要学习目标如下:
  * 了解对软件成本影响最大的因素,并由此来确定估算的软件项目成本。
  * 理解软件工程中的微观经济学的基本概念。
  * 将经济学分析技术应用到软件工程决策中。
  下表给出了在一学期内讲授本书的课程安排,时间显得有点紧:
周 书 的 章 节 主   题
 1  1~ 4 软件生命周期:经济学观点
 2  5~ 6 简单软件成本模型
 3,4  7~ 9 中等软件成本模型:影响软件成本的因素
 5 10~12 成本效益分析:生产函数、规模经济、方案选择
 6   - 复习,期中考试
 7 13~15 多目标决策分析:净值、现值、品质因素
 8 16~18 多目标决策分析:约束、系统分析、不可量化目标
 9 19~20 风险、不确定性和信息的价值
10 21~22 实用的软件成本估算技术
11 31~32 案例研究:软件生命周期成本分析与控制
12   - 期末考试
  如果是第一次讲授软件工程经济学这门课,上述这些内容比较适合一个学年的课程安排,要使一个学期的教学效果令人满意,最好只安排讲授1~18章的内容,也能基本达到学习目标。
  这门课程适合美国高年级的本科生和一年级的研究生,惟一的前提条件是学生基本熟悉编程过程(或上过相当于两年的计算机科学方面的课程)和一定的微积分基础。为练习软件成本估算模型,我强烈推荐使用有指数运算(Xy)功能的计算器。虽然为使没有计算器的同学也能运用这个模型,在书中我加进了很多曲线,但这毕竟不太精确,也不方便。
  最后,我希望你能进一步深入研究软件工程经济学,研究软件开发过程自身具有的基本问题,如:
  * 为什么软件开发成本这么高?
  * 是什么因素使软件成本上升或下降,各因素之间如何相互作用?
  * 是什么活动消耗了大部分的成本?
  * 新的软件技术如何降低软件成本?
  在本书的第四部分,我列举并分析了由63个软件项目的成本及其开发属性组成的数据库,试图回答以下这个问题:
  “为使项目数据有助于以后其他项目估算和理解其软件成本,我们应该如何解释这些数据?”
  本书所描述的成本模型,是回答上面这个问题的第一步,但还有待于进一步地去做大量有价值的研究。深入分析这63个项目的数据,就能进一步得到很多有价值的新观点。另外收集、分析更多的观察与实验数据,会得到更多这方面的见解。第四部分大多数章节的最后,都有“进一步研究的主题”一节,说明要阐明上述这个问题的一些最有前途的方向。希望你和你的学生能尝试一下。

致在职的软件工程师
  可以想像在你的软件工程生涯中,已经形成了很多个人原则,来指导估算软件成本、进行软件产品和项目所需的决策。我相信这本书能帮助你利用他人的经验,校准自己的经验法则,能为你的软件成本估算、软件工程决策提供一些其他有用的技术。我也希望,你读这本书的过程是一次激动人心的、充满收获的经历,就像我当初看到,我所用到的各种表面上无关的技术和决策方针,而事实上就是经济学原则的一部分时那样。
  可以根据个人兴趣与需要选择本书的某些部分阅读,而不是从头到尾地读一遍。以下是根据个人兴趣可以进行的选择。
  * 如果主要想提高自己(或机构)估算软件开发成本的能力,那最好从第21章和第22章的软件成本估算方法开始看,接着再看第4章~第9章的软件生命周期和基本与中等COCOMO模型。
  * 如果你还对估算软件维护成本或其他软件相关成本有兴趣,可阅读第30章、第31章。
  * 如果你还对完成一个详细的软件成本估算模型有兴趣,并想对其加以裁剪,以适合自己的机构,阅读第23章、第29章。
  * 如果你主要对特定软件属性(如,项目人员能力、现代编程规范的使用或语言级别等)对软件成本的影响有兴趣,请阅读第24章~第28章中的相应的内容。
  * 如果你主要对提高软件经济学决策的分析能力有兴趣,请阅读第10章~第18章。
  * 如果你主要对软件项目计划和控制技术有兴趣,请阅读第31章第6节和第32章。
  然而,即使你只对某一方面的主题有兴趣,我还是推荐你阅读一下第1章~第3章的介绍性内容和第33章的提高软件生产率。这些章节提供了实现更有效的、更令人满意的和更具生产率的环境所需要的背景与方法,在这样的环境中我们能反复演练软件工程活动。

作者简介

(美)Barry W.Boehm:Barry W.Boehm: Barry W.Boehm先生是在计算机界非常有影响力的专家。他是AIAA、ACM、IEEE和美国工程院的会员,曾经担任过AIAA计算机系统技术委员会的主席、IEEE软件工程技术委员会的主席以及IEEE计算机协会的管理委员会成员,同时兼任美国空军科技顾问委员会信息技术小组主席以及CMU软件工程学院客座教授委员会主席。现在担任USC软件中心主任和TRW计算机科学部的软件工程教授。 Barry W.Boehm先生在计算机软件工程领域做出了杰出贡献,例如,他提出了构造性成本模型、软件处理过程的螺旋模型、软件管理与需求决策的W(win-win)理论方法以及两种先进的软件工程环境:TRW软件生产率系统和Quantum Leap环境等等。所有这些为他奠定了在业界的权威地位。

译者简介

李师贤 等:李师贤: 1944年6月生,1969中山大学数学力学系毕业。现为中山大学信息科技学院计算机科学系教授,博士生导师。

译者序

有效的估算是软件开发项目管理中最具挑战性也是最重要的活动。只有使用科学的方法对软件项目的规模、工作量、进度与成本做出合理可靠的估算,才能实施良好的项目计划与控制。然而由于各种原因,目前,项目估算在软件开发中还是一个薄弱环节。
  《软件工程经济学》和《软件成本估算与COCOMO II》是Barry W. Boehm博士的两部著作,介绍了世界上应用范围最为广泛的成本估算模型—COCOMO模型,这个模型由Barry W. Boehm博士开创并加以发展。《软件工程经济学》从经济学的角度来研究和分析软件的开发,并探讨软件成本估算技术与成本估算模型。本书是原始COCOMO模型(COCOMO 81)最完整的信息资源,提供了帮助我们理解与应用COCOMOII的大量素材;《软件成本估算与COCOMO II》详细介绍了COCOMO II模型及其使用指南,它对COCOMO 81做了重要更新,以改进它对新的开发过程、方法、工具、技术和企业文化的适用性,并提高了估算的准确性。
  我们衷心希望这两本书能有助于读者做出更好的软件估算,进而提高软件项目管理水平。
  参与这两本书翻译及校对工作的有李师贤、杜云梅、孙恒、李卫华、孙念、唐培和、蒋敏迪、崔茂林、李皓、李智、蔡树彬、徐晶、熊春玲等,由李师贤统一审校。
  由于时间仓促,译者水平有限,译稿难免存在错误和疏漏,欢迎读者批评指正。

译  者
2004年4月于广州

图书目录

第一部分  动机与背景
第1章  案例研究1:Scientific American预订处理系统 2
1.1  原有系统 2
1.2  编程解决方案:自顶向下逐步求精 2
1.3  编程方案:结果 3
1.4  经济学编程方法 4
1.5  经济学编程方法的结果 5
1.6  综合讨论 6
1.7  问题 6
第2章  案例研究2:市内校区考勤系统 7
2.1  编程方面 7
2.2  经济学方面 7
2.3  人际关系方面 7
2.4  得到的教训 7
2.5  综合讨论 8
2.6  问题 8
第3章  软件工程目标 10
3.1  引言 10
3.1.1  分而治之 10
3.1.2  本章内容 10
3.2  软件工程:定义 11
3.3  软件趋势:成本 12
3.4  软件趋势:社会影响 13
3.5  目标的复杂性 14
3.6  例子:WEINBERG的实验 14
3.7  软件工程方法的复杂性 15
3.8  软件工程目标结构 17
3.9  软件工程的GOALS方法 18
3.10  问题 19
第二部分  软件生命周期:定量模型
第4章  软件生命周期:阶段与活动 25
4.1  引言 25
4.2  瀑布模型 25
4.3  瀑布模型的经济学基本原理 27
4.3.1  前提A:所有过程子目标都是必要的 27
4.3.2  前提B:顺序地处理子目标 28
4.3.3  背离顺序方法:原型折中方法 29
4.4  瀑布模型的精化 29
4.4.1  增量开发 29
4.4.2  先遣人员 30
4.4.3  软件经济学意义 32
4.5  详细的生命周期阶段定义 33
4.6  详细的阶段/活动定义 35
4.7  软件工作分解结构(WBS) 36
4.8  软件维护 40
4.9  问题 40
第5章  基本COCOMO模型 43
5.1  引言 43
5.1.1  一些估算公式和问题 43
5.1.2  COCOMO模型的版本 43
5.2  定义与假设 44
5.3  开发的工作量和进度 46
5.3.1  基本COCOMO模型的工作量和进度公式:组织型模式 46
5.3.2  项目轮廓 48
5.4  阶段分布 48
5.5  正常项目轮廓 49
5.6  雷利(Rayleigh)分布 51
5.7  插值法 52
5.8  基本软件维护量估算 54
5.9  问题 54
第6章  基本COCOMO模型:开发模式 57
6.1  引言 57
6.2  基本工作量和进度公式 57
6.3  软件开发的三种COCOMO模式 60
6.3.1  组织型模式 60
6.3.2  半独立型模式 60
6.3.3  嵌入型模式 61
6.3.4  总结 61
6.4  对基本COCOMO工作量和进度公式的讨论 63
6.4.1  COCOMO数据库 63
6.4.2  工作量公式:估算与实际 64
6.4.3  工作量公式:模式间的比较 65
6.4.4  工作量公式:与其他模型的比较 66
6.4.5  进度公式:估算与实际 67
6.4.6  进度公式:与其他模型进行比较 68
6.5  工作量与进度的阶段分布 68
6.5.1  百分比分布 68
6.5.2  表的使用 70
6.5.3  基本项目轮廓 70
6.5.4  劳动力分布曲线与雷利分布 71
6.5.5  最后的观点 73
6.6  问题 73
第7章  基本COCOMO模型:活动分布 75
7.1  引言 75
7.2  按阶段的活动分布 75
7.3  基本COCOMO案例研究:Hunt国家银行EFT系统 78
7.4  绘制基本的项目组织系统图 80
7.4.1  通用的软件项目组织系统图 80
7.4.2  组织系统图裁剪指南 80
7.4.3  示例:Hunt国家银行EFT项目 81
7.4.4  其他阶段的组织系统图和决策 81
7.5  基本COCOMO阶段与活动分布的讨论 83
7.5.1  雷利曲线比较 83
7.5.2  阶段/活动分布 84
7.6  基本COCOMO的局限 84
7.7  问题 84
第8章  中等COCOMO模型:产品级估算 86
8.1  引言 86
8.1.1  中等COCOMO成本驱动因子属性 86
8.1.2  本章预览 87
8.2  中等COCOMO模型:软件开发工作量估算 88
8.2.1  标称工作量换算公式 88
8.2.2  软件开发工作量乘数 89
8.2.3  工作量和进度的阶段与活动分布 93
8.3  定价示例:微处理器通信软件 94
8.4  管理示例:降低完成成本 95
8.4.1  问题 95
8.4.2  解决方案1:降低项目规模 96
8.4.3  其他可能的解决方案 96
8.4.4  其他的候选项 96
8.4.5  解决方案的选择 97
8.5  年维护工作量的调整估算 97
8.5.1  不能用于维护阶段的成本驱动因子:SCED 97
8.5.2  修正过的工作量乘数:可靠性要求 97
8.5.3  修正过的工作量乘数:现代编程规范 98
8.6  示例:微处理器通信软件的维护 98
8.7  内插值和外插值 99
8.8  估算改编现有软件的影响 100
8.8.1  改编需考虑的因素 100
8.8.2  COCOMO改编估算公式 100
8.8.3  COCOMO改编估算公式的基本原理 103
8.8.4  改编估算:注意事项 103
8.9  对中等COCOMO工作量公式的讨论 103
8.9.1  中等COCOMO估算与实际的对比 104
8.9.2  中等COCOMO标称工作量估算公式与实际的比较 104
8.9.3  加权的交付源指令度量标准 105
8.10  问题 106
第9章  中等COCOMO:组件级估算 109
9.1  引言 109
9.2  组件级估算表(CLEF) 109
9.3  对改编的软件采用CLEF 113
9.4  事务处理系统(TPS)示例:基本开发估算 115
9.4.1  TPS描述 115
9.4.2  前端处理器(FEP)软件子系统 115
9.4.3  事务处理器(TP)软件子系统 116
9.4.4  TPS操作系统软件的开发估算 116
9.5  TPS组件级维护估算与阶段分布 118
9.6  问题 121
第三部分  软件工程经济学基础
第三部分A  成本效益分析
第10章  性能模型与成本效益模型 130
10.1  性能模型 130
10.1.1  示例 130
10.1.2  综合讨论 132
10.2  最佳性能 132
10.2.1  示例 132
10.2.2  综合讨论 133
10.3  敏感性分析 134
10.3.1  示例 134
10.3.2  综合讨论 135
10.4  成本效益模型 136
10.4.1  示例 136
10.4.2  综合讨论 137
10.5  问题 138
第11章  生产函数:规模经济 143
11.1  示例 143
11.2  综合讨论:定义 144
11.3  离散的生产函数 144
11.4  软件开发的基本生产函数 144
11.5  规模经济与规模不经济 145
11.6  大型软件项目的规模不经济 145
11.7  应对规模不经济的最好方法 146
11.8  问题 148
第12章  可选方案的选择:决策标准 151
12.1  示例:最大化可用预算 151
12.2  最小化性能需求 152
12.3  最大化效益/成本比 152
12.4  最大化效益-成本差额 152
12.5  复合选项 153
12.6  综合讨论 154
12.7  问题 154
第三部分B  多目标决策分析
第13章  净值与边际分析 158
13.1  示例 158
13.2  综合讨论:边际分析 158
13.3  举例说明 160
13.4  在处理净值与利润时的一些注意事项 161
13.5  信息处理产品的价值 162
13.6  问题 162
第14章  现在与未来的支出与收入 164
14.1  示例:过分简单的成本分析 164
14.2  利息计算 164
14.3  现值计算 165
14.4  一系列现金流的现值 165
14.5  租借与购买分析的总结 166
14.6  综合讨论:现值概念与公式的总结 166
14.7  现值特征 167
14.8  对利率或贴现率的敏感性 167
14.9  现值分析应用于软件工程 168
14.10  问题 168
第15章  品质因素 170
15.1  示例:软件包选择 170
15.2  净值分析 170
15.3  品质因素分析 171
15.4  综合讨论:软硬件选择的加权和分析-案例研究 172
15.5  案例研究:活动描述 173
15.6  案例研究:评价函数的问题 177
15.7  案例研究:权重与级别的问题 178
15.8  案例研究:总结 179
15.9  已交付系统能力(DSC)品质因素 179
15.10  DSC品质因素的轮廓 180
15.11  重新考虑TPS示例 180
15.12  加权和与DSC品质因素的比较 181
15.13  问题 182
第16章  目标作为约束条件 184
16.1  示例:TPS选项A的失效模式 184
16.2  系统可靠性与可用性 184
16.3  品质因素评价 184
16.4  把目标表述成约束条件 186
16.5  目标作为约束条件:可行集和成本价值等值线 186
16.6  综合讨论:有约束条件的决策问题 188
16.7  软件工程应用 189
16.8  数学优化技术 189
16.9  数学优化技术的能力与局限性 193
16.10  问题 194
第17章  系统分析与约束优化 196
17.1  示例 196
17.2  综合讨论 198
17.3  问题 200
第18章  处理不可协调与不能量化的目标 201
18.1  示例:TPS选项B:开发专用操作系统 201
18.2  内部开发与供应商开发相比较时要考虑的事项 201
18.3  描述方法 202
18.4  综合讨论:不可量化标准 204
18.5  不可量化标准的描述方法 205
18.6  混合量化标准与不可量化标准的描述方法 207
18.7  在描述与解释多变量数据时的一些注意事项 209
18.8  问题 210
第三部分C  处理不确定性、风险与信息的价值
第19章  处理不确定性:风险分析 214
19.1  示例:操作系统开发选项 214
19.2  完全不确定性的决策规则 214
19.3  主观概率 216
19.4  总的讨论:完全不确定性情况下的决策规则 217
19.5  信息的价值 217
19.6  主观概率的应用 217
19.7  效用函数 218
19.8  软件工程的含义 219
19.9  问题 219
第20章  统计学决策理论:信息的价值 222
20.1  示例:原型方法 222
20.2  完全信息的期望价值 222
20.3  应对不完全信息 223
20.4  示例 223
20.5  贝叶斯公式 223
20.6  最大化原型的净期望价值 224
20.7  总的讨论:完全信息的期望价值 225
20.8  不完全信息的期望价值 226
20.9  信息的价值过程 227
20.10  在软件工程中应用信息的价值过程 228
20.11  信息的价值决策指南 228
20.12  通过信息的价值方法避免缺陷 229
20.13  信息的价值:最后的简要总结 229
20.14  问题 230
第四部分  软件成本估算技术
第四部分A  软件成本估算方法与过程
第21章  软件成本估算中的七个基本步骤 236
21.1  步骤1:建立目标 236
21.1.1  目标与阶段,或理解级别 236
21.1.2  估算的含义 238
21.1.3  相对与绝对估算 238
21.1.4  慷慨的与保守的估算 238
21.1.5  总的方针 239
21.2  步骤2:计划所需的数据与资源 239
21.3  步骤3:准确说明软件需求 240
21.4  步骤4:尽可能详细地做出估算 241
21.4.1  有关软件规模估算 242
21.4.2  PERT计算规模 243
21.4.3  为什么人们会过低估算软件规模? 244
21.5  步骤5:采用多种独立的方法和资源 246
21.6  步骤6:比较与迭代估算 247
21.6.1  乐观/悲观现象 247
21.6.2  顶梁柱现象 247
21.6.3  一些有用的评价问题 247
21.7  步骤7:跟进 248
21.8  问题 250
第22章  可选择的软件成本估算方法 251
22.1  算法模型 251
22.1.1  线性模型 252
22.1.2  乘法模型 252
22.1.3  分析模型 252
22.1.4  表格模型 253
22.1.5  复合模型 253
22.1.6  算法模型总的优缺点 253
22.2  专家判断 253
22.2.1  小组一致方法:Delphi 254
22.2.2  一个Delphi/小组会议软件成本估算实验 254
22.2.3  宽带Delphi方法 255
22.3  通过推理来进行估算 256
22.4  帕金森估算 256
22.5  价格策略估算 256
22.6  自顶向下估算 257
22.7  自底向上估算 257
22.8  各种方法的总结比较 260
22.9  问题 261
第四部分B  详细COCOMO模型
第23章  详细COCOMO:概述与运用描述 265
23.1  引言 265
23.1.1  模块-子系统-系统层次 265
23.1.2  阶段敏感的工作量乘法 265
23.1.3  详细COCOMO过程 265
23.2  软件分层估算表 266
23.3  软件分层估算表过程 270
23.4  详细COCOMO示例:学生工作信息系统 273
23.4.1  项目概述 273
23.4.2  估算步骤 273
23.5  进度调整计算 275
23.5.1  进度调整过程 276
23.5.2  示例 276
23.6  讨论 277
23.6.1  工作量的阶段分布 277
23.6.2  阶段分布:一个极端的例子 277
23.6.3  详细COCOMO的其他组成部分 281
23.6.4  COCOMO模型体系的概述 281
23.7  问题 282
第24章  详细COCOMO成本驱动因子:产品属性 286
24.1  RELY:要求的软件可靠性 286
24.1.1  级别与工作量乘数 288
24.1.2  与RELY级别相对应的项目活动的差异 288
24.1.3  与项目结果相比较 290
24.1.4  讨论 292
24.1.5  软件可靠性生产函数 294
24.2  DATA:数据库规模 298
24.2.1  级别与工作量乘数 299
24.2.2  与项目结果的比较 300
24.2.3  讨论 301
24.3  CPLX:软件产品复杂性 302
24.3.1  级别与工作量乘数 302
24.3.2  与项目结果相比较 303
24.3.3  讨论 304
24.4  问题 306
24.5  进一步研究的主题 307
第25章  详细COCOMO模型成本驱动因子:计算机属性 310
25.1  TIME:执行时间约束 310
25.1.1  级别与工作量乘数 310
25.1.2  与项目结果进行比较 311
25.1.3  讨论 312
25.1.4  IBM-FSD数据库中的生产率变动范围 315
25.2  STOR:主存储器约束 317
25.2.1  级别与工作量乘数 317
25.2.2  与项目结果相比较 318
25.2.3  相关数据与研究的讨论 320
25.3  VIRT:虚拟机的易变性 320
25.3.1  级别与工作量乘数 320
25.3.2  与项目结果相比较 321
25.3.3  讨论 322
25.4  TURN:计算机周转时间 323
25.4.1  级别与工作量乘数 323
25.4.2  与项目结果的比较 324
25.4.3  讨论 325
25.5  问题 326
25.6  进一步研究的主题 328
第26章  详细COCOMO成本驱动因子:人员属性 331
26.1  ACAP:分析员能力 331
26.1.1  级别与工作量乘数 331
26.1.2  示例 331
26.1.3  与项目结果的比较 333
26.1.4  讨论 333
26.2  AEXP:应用经验 335
26.2.1  级别与工作量乘数 335
26.2.2  与项目结果相比较 336
26.2.3  讨论 337
26.3  PCAP:程序员能力 338
26.3.1  级别与工作量乘数 338
26.3.2  与项目结果的比较 339
26.3.3  讨论 340
26.4  VEXP:虚拟机经验 341
26.4.1  级别与工作量乘数 341
26.4.2  与项目结果相比较 342
26.4.3  讨论 342
26.5  LEXP:编程语言经验 342
26.5.1  级别与工作量乘数 342
26.5.2  与项目结果相比较 344
26.5.3  讨论 345
26.6  人员属性的总的讨论 346
26.6.1  属性等级:人员能力 346
26.6.2  属性级别:人员经验 346
26.6.3  对软件人员属性的相关研究 347
26.6.4  数据收集与分析要考虑的因素 348
26.7  问题 348
26.8  进一步研究的主题 349
第27章  详细COCOMO成本驱动因子:项目属性 351
27.1  MODP:现代编程规范的应用 351
27.1.1  级别与工作量乘数 351
27.1.2  与项目结果相比较 353
27.1.3  讨论 354
27.1.4  MPP使用的GUIDE调查 355
27.1.5  MPP与软件工作程序化 357
27.2  TOOL:软件工具的使用 357
27.2.1  级别与工作量乘数 357
27.2.2  与项目结果的比较 360
27.2.3  讨论 360
27.2.4  软件工具生产函数 362
27.2.5  未来的软件工具类别 362
27.3  SCED:开发进度约束 364
27.3.1  级别与工作量乘数 364
27.3.2  与项目结果的比较 366
27.3.3  讨论 366
27.3.4  相关的数据和研究 367
27.4  问题 369
27.5  进一步研究的主题 370
第28章  COCOMO模型中没有包含的因素 372
28.1  应用类型 373
28.2  语言级别 373
28.3  其他规模度量:复杂性、实体和说明 376
28.3.1  复杂性度量 376
28.3.2  程序实体的数量:例行程序、报表、输入、输出、文件 377
28.3.3  说明书元素的数量 377
28.3.4  用源指令计算规模:RADC数据库 377
28.4  需求的易变性 379
28.5  人员连续性 380
28.6  管理质量 381
28.7  用户接口质量 382
28.8  文档的数量 382
28.9  硬件配置 383
28.10  安全性和保密性约束 384
28.11  进一步研究的主题 384
第29章  COCOMO模型评价 386
29.1  引言 386
29.1.1  COCOMO模型校准/评价过程 386
29.1.2  统计分析 386
29.1.3  本章预览 387
29.2  COCOMO模型项目数据库 387
29.3  COCOMO模型估算与实际:开发工作量 391
29.4  COCOMO模型估算与实际相比较:开发进度 394
29.5  COCOMO模型估算与实际相比较:阶段分布 396
29.6  COCOMO模型估算与实际相比较:活动分布 398
29.7  其他软件成本估算模型 400
29.7.1  1965 SDC模型[Nelson, 1966] 402
29.7.2  TRW Wolverton模型[Wolverton,1974] 402
29.7.3  Putnam SLIM模型[Putnam, 1978;Putnam-Fitzsimmons, 1979] 403
29.7.4  Doty模型[Herd and others, 1977] 404
29.7.5  RCA PRICE S模型[Freiman-Park,1979] 404
29.7.6  IBM-FSD模型[Walston-Felix,1977] 406
29.7.7  1977 Boeing模型[Black and others,1977] 406
29.7.8  1979 GRC模型[Carriere-Thibodeau,1979] 407
29.7.9  Bailey-Basili Meta模型[Bailey-Basili,1981] 407
29.8  按模型标准对COCOMO模型的评价 408
29.9  根据特定配置环境裁剪COCOMO模型 411
29.9.1  校准COCOMO模型的标称工作量等式 411
29.9.2  校准常量 411
29.9.3  校准软件开发模式 413
29.9.4  重新校准软件开发模式时的注意事项 414
29.9.5  合并、排除或增加成本驱动因子属性 415
29.10  进一步研究的主题 416
第四部分C  软件成本估算与生命周期维护
第30章  软件维护成本估算 418
30.1  引言 418
30.2  COCOMO软件维护模型 419
30.2.1  定义 419
30.2.2  软件维护工作量估算 420
30.2.3  修改过的工作量乘数 422
30.3  与项目结果相比较 422
30.4  其他软件维护成本估算模型 423
30.4.1  维护/开发成本比率 424
30.4.2  人均维护卡片比率 424
30.4.3  维护生产率比率 425
30.4.4  与COCOMO数据相比较 426
30.5  软件维护现象学(Phenomenology) 427
30.5.1  软件维护生产函数 427
30.5.2  软件维护动力学 428
30.5.3  软件维护工作量按活动的分布 430
30.6  软件维护项目数据 432
30.7 问题 432
30.8  进一步研究的主题 435
第31章  软件生命周期成本估算 437
31.1  引言 437
31.2  软件移植成本估算关系 437
31.2.1  定义 437
31.2.2  移植成本估算关系 438
31.3  软件移植估算与实际 439
31.4  软件安装与培训成本估算 443
31.4.1  定义 443
31.4.2  安装与培训成本数据与模型 444
31.4.3  推荐的估算过程 445
31.5  软件开发的计算机成本估算 445
31.5.1  现有数据与估算关系 445
31.5.2  在COCOMO数据库中的计算机时间数据 446
31.5.3  推荐的估算过程 447
31.5.4  计算机时间分布 448
31.6  软件文档数量 448
31.6.1  文档等级 448
31.6.2  文档工作量 450
31.7  其他软件相关生命周期成本 452
31.8  软件生命周期成本效益分析的一个示例 453
31.8.1  PPI公司,设备管理系统 454
31.8.2  现有软件系统的问题 454
31.8.3  取代现有系统:可行性研究 454
31.8.4  建议的中央设备管理与存货控制系统(CEMICS) 455
31.8.5  CEMICS生命周期成本分析 457
31.8.6  CEMICS生命周期成本效益分析 459
31.8.7  CEMICS有形收益 461
31.8.8  CEMICS无形收益 461
31.8.9  CEMICS成本收益比较与风险分析 462
31.9  进一步研究的主题 463
第32章  软件项目计划与控制 465
32.1  引言 465
32.1.1  软件成本估算作为自我实现的预言 465
32.1.2  软件成本估算与软件项目管理之间的优势互补 466
32.1.3  本章预览 467
32.2  软件项目计划与控制框架结构 467
32.3  项目进度安排技术 470
32.3.1  PERT图 470
32.3.2  构造PERT图 470
32.3.3  关键路径分析 472
32.3.4  确定关键路径 472
32.3.5  确定延迟开始与闲散时间 473
32.3.6  涉及计划与控制的问题 474
32.3.7  PERT图:变化与扩展 475
32.3.8  甘特图 476
32.3.9  甘特图与PERT图的比较 477
32.4  详细的软件计划与控制:单元开发文件夹 477
32.4.1  90%综合症 477
32.4.2  单元开发文件夹(UDF) 478
32.4.3  UDF封面 480
32.5  监控项目花费与进展:挣值系统 481
32.5.1  在整体项目状态监督与控制中的问题 481
32.5.2  挣值概念与汇总任务计划表 482
32.5.3  挣值汇总报告 484
32.5.4  讨论 486
32.6  软件项目计划与控制示例 486
32.7  构造软件成本数据库 502
32.8  软件计划与控制总结性的讨论 503
32.9  问题 503
第33章  提高软件生产率 506
33.1  引言 506
33.1.1  提高软件生产率的重要性 506
33.1.2  与软件成本估算的关系 508
33.1.3  开发生产率与生命周期生产率的关系 509
33.1.4  软件生产率与人类经济学 509
33.1.5  软件生产率中的主要可控因素 509
33.2  非编程选项:软件包 510
33.2.1  软件包特征 510
33.2.2  软件包成本收益考虑 511
33.2.3  软件包的优点 511
33.2.4  商业软件包的特点 513
33.2.5  软件包:做购买还是开发的决策时,需要考虑的特殊事项514
33.2.6  关于软件包的信息资源 515
33.2.7  现有内部软件的改编 515
33.3  非编程选项:程序生成器 515
33.3.1  程序生成器的生产率优势 516
33.3.2  快速原型与改良设计 516
33.3.3  RP/ED方法的优点 517
33.3.4  RP/ED方法的不足 517
33.3.5  作为生产率度量的DSI/MM的应用 518
33.4  软件生产率可控性:产品属性 518
33.4.1  要求的可靠性 518
33.4.2  数据库规模 519
33.4.3  软件产品复杂性 519
33.4.4  编程语言 519
33.4.5  产品规模 520
33.5  软件生产率可控性:计算机属性 521
33.5.1  执行时间与主存储约束 521
33.5.2  示例:一个过程控制系统 522
33.5.3  资源控制 522
33.5.4  放宽的性能要求 523
33.5.5  虚拟机的易变性 523
33.5.6  计算机周转时间 524
33.6  软件生产率可控性:人员属性 524
33.6.1  人员安置 525
33.6.2  安置原则 525
33.6.3  激励 528
33.6.4  激励因素:一般原则 529
33.6.5  激励因素:软件人员 529
33.6.6  管理 531
33.6.7  软件人员与生产率:总结 531
33.7  软件生产率可控性:项目属性 531
33.7.1  现代编程规范(MPP) 532
33.7.2  MPP实现指南 532
33.7.3  软件工具的使用 533
33.7.4  期限约束 534
33.7.5  需求易变性 535
33.7.6  工作环境 535
33.8  建立起软件生产率提高过程 536
33.9  结论 540
第五部分  附   录
附录A  软件成本数据收集表格与步骤 544
附录B  软件工作目标结构 567
附录C  缩写词表 576
参考书目 581
作者索引 597
主题词索引 600

教学资源推荐
作者: [美]伊恩·福斯特(Ian Foster) 丹尼斯·B. 甘农(Dennis B. Gannon) 著
作者: 袁毅,陆建平
作者: 王柯柯 主编 崔英志 黄丽丰 崔贯勋 刘恒洋 编著
参考读物推荐
作者: 应阔浩 李建宇 付天时 赵耀 著
作者: (美)Harvey M. Deitel,Paul J. Deitel,Lauren Trees,Betsy Du Waldt
作者: (美)Christian Crumlish
作者: 张昌龙 辛永平 等编著