第一部分 为什么软件项目会失败 2
第1章 简介 2
第2章 为什么软件与众不同 6
2.1 软件是复杂的 7
2.2 软件是抽象的 9
2.3 需求不完整 11
2.4 技术在快速变化 12
2.5 最佳实践不成熟 13
2.6 技术是一个庞大的领域 15
2.7 技术经验不完整 16
2.8 软件开发就是调查研究 17
2.9 自动处理重复性工作 19
2.10 构造实际上就是设计 20
2.11 改变被认为很容易 22
2.12 改变是不可避免的 23
2.13 小结 24
第3章 项目管理假设 26
3.1 隐藏的假设 27
3.2 范围管理 28
3.3 时间管理 32
3.3.1 活动定义 32
3.3.2 活动排序 35
3.3.3 活动持续时间估计 39
3.3.4 进度安排 42
3.4 成本管理 43
3.4.1 资源规划 44
3.4.2 软件文档 46
3.4.3 开发人员生产率 48
3.4.4 成本估计 50
3.5 质量管理 51
3.5.1 指标 51
3.5.2 检查表 52
3.6 风险管理 53
3.6.1 风险接受 53
3.6.2 风险转移 55
3.6.3 风险避免 55
3.6.4 风险缓解 55
3.7 小结 56
第4章 案例研究:计费系统项目 57
4.1 需求 57
4.2 规划 58
4.3 设计 60
4.4 构造 61
4.4.1 编码 61
4.4.2 集成 62
4.5 测试 64
4.6 后果 67
4.7 小结 68
第二部分 怎样使软件项目获得成功 72
第5章 新的敏捷方法 72
5.1 所选的方法 73
5.2 水晶方法 75
5.2.1 频繁交付 76
5.2.2 反思改进 77
5.2.3 密切或渗透式交流 78
5.2.4 人身安全 80
5.2.5 专注 81
5.2.6 容易访问专家级用户 82
5.2.7 具有自动化测试、配置管理和频繁集成的技术环境 82
5.2.8 使用水晶方法 84
5.3 极限编程 84
5.3.1 规划策略 86
5.3.2 测试 87
5.3.3 结对编程 87
5.3.4 重构 88
5.3.5 简单设计 89
5.3.6 代码集体所有权 89
5.3.7 持续集成 90
5.3.8 现场客户 91
5.3.9 小型发布 91
5.3.10 每周40小时工作制 92
5.3.11 编码标准 92
5.3.12 系统隐喻 93
5.3.13 使用XP 94
5.4 Rational统一过程 95
5.4.1 阶段 97
5.4.2 迭代 98
5.4.3 角色 98
5.4.4 工件 99
5.4.5 活动和工作流 99
5.4.6 过程配置 100
5.4.7 用例驱动的开发 100
5.4.8 视化建模 101
5.4.9 使用RUP 102
5.5 利用敏捷缓解风险 103
5.5.1 不完整的需求和范围改变 103
5.5.2 工具和技术没有像预期的那样工作 104
5.5.3 开发人员缺乏技能和专业知识 104
5.5.4 新软件有缺陷并且需要返工 105
5.5.5 参与项目的员工离职 105
5.6 小结 106
第6章 规划敏捷项目的预算 108
6.1 软件开发的预算 109
6.2 持续开发 111
6.3 按需编程 113
6.4 SWAT团队 115
6.5 子团队封装 116
6.6 特性权衡 118
6.7 分诊 119
6.8 范围研究 121
6.9 结合这些技术 123
6.9.1 主要的遗留系统 123
6.9.2 次要的遗留应用程序 124
6.9.3 主要的新系统 124
6.9.4 次要的新应用程序 125
6.10 敏捷离岸外包 126
6.11 小结 128
第7章 案例研究:再论计费系统 129
7.1 方法 129
7.2 初始阶段 130
7.3 范围研究 131
7.4 细化 136
7.5 构造 139
7.6 交付 142
7.7 结局 143
7.8 小结 144
后记 146
附录 敏捷宣言 148
术语表 150
参考资料 159