第1章 价值增加的思维方式 1
1.1思维变迁 2
1.1.1有待和谐的三股力量 2
1.1.2什么软件值得构建 3
1.2思维方式的对比 4
1.3对流的关注 6
1.3.1与工作消减的对比 8
1.3.2透明度 10
1.4一个工作项数据库 12
1.5使过程适合于项目 19
1.6小结 21
参考资料 21
第2章 价值增加的过程 24
2.1微软解决方案框架 25
2.2迭代 27
2.2.1为什么迭代 27
2.2.2长度 29
2.2.3不同的视野,不同的粒度 30
2.2.4优先排序 30
2.2.5修改过程 32
2.3风险管理 33
2.4让过程适合项目 34
2.4.1自适应与计划驱动 35
2.4.2要求的文档与隐含的知识 36
2.4.3隐式与显式的审核关卡和管理模型 37
2.4.4审计与法规关注 39
2.4.5规定的组织与自组织 39
2.4.6一次一个项目与一次多个项目 40
2.4.7地理边界与组织边界 42
2.5小结 43
参考资料 43
第3章 需求 46
3.1什么是你的愿景 47
3.1.1战略项目 48
3.1.2自适应项目 48
3.2何时细化需求 49
3.2.1需求是易变质的 49
3.2.2谁关心需求 50
3.3人物和应用场景 51
3.3.1从人物开始 51
3.3.2应用场景 53
3.3.3研究技术 54
3.3.4提早具体化 55
3.3.5故事板 57
3.3.6应用场景的宽度 58
3.3.7客户验证 59
3.3.8制定应用场景 60
3.4人物、应用场景及它们的替代术语 61
3.4.1参与者和用例 61
3.4.2用户故事 62
3.5兴奋点、满意点和不满意点 62
3.6服务质量 63
3.6.1安全性和隐私 64
3.6.2性能 64
3.6.3用户体验 65
3.6.4可管理性 65
3.7卡诺分析 66
3.7.1技术接受生命周期 68
3.7.2收集数据 69
3.8小结 70
参考资料 71
第4章 项目管理 73
4.1理解偏差 74
4.2使用描述性的而非规定性的度量元 76
4.3项目健康的多个维度 79
4.4回答日常问题 81
4.4.1剩余工作 82
4.4.2项目速度 84
4.4.3计划外工作 85
4.4.4质量指示器 85
4.4.5缺陷率 88
4.4.6重新激活 89
4.4.7缺陷的优先级 90
4.4.8实际质量与计划速度 92
4.5估计迭代 93
4.5.1自顶向下 93
4.5.2自底向上 94
4.5.3精细化 95
4.5.4估计的质量 96
4.5.5回顾 97
4.6优先分配 98
4.6.1优先分配的练习 98
4.6.2让优先分配有效率:红线 101
4.6.3在优先分配中发生了什么 102
4.6.4逐步增强和解决问题 103
4.6.5迭代和优先分配 103
4.7让审计者满意 104
4.8小结 106
参考资料 107
第5章 架构设计 108
5.1架构的价值增加观点 109
5.2面向服务的架构 109
5.2.1Web服务和SOA 111
5.2.2契约优先的设计 111
5.3自由度的约束 111
5.3.1基线架构 112
5.3.2验证架构决策 113
5.3.3精细化基线 113
5.3.4参考架构 114
5.4VSTS和面向服务的架构 116
5.5服务质量的理念 117
5.5.1安全性 119
5.5.2性能 119
5.6公民权理念 119
5.7针对运行而设计 120
5.8小结 122
参考资料 122
第6章 开发 124
6.1开发的价值增加观 125
6.2从开发人员的视点看质量 125
6.3使用测试驱动的开发来确保需求的清晰 126
6.4通过自动和手动代码评审来解决编程错误 128
6.4.1自动的代码分析 129
6.4.2手动的代码评审 131
6.5用单元测试和代码覆盖度提供立即的反馈 132
6.5.1先测试还是先编码 133
6.5.2代码覆盖度 134
6.6使单元测试更好 135
6.6.1使用数据 137
6.6.2配置 137
6.6.3构件集成测试 138
6.6.4构建确认测试 138
6.6.5性能调整 141
6.7防止版本扭曲 143
6.7.1签入 143
6.7.2搁置 146
6.7.3分支 146
6.7.4哪些文件需要版本管理 146
6.7.5自动化构建 147
6.8让工作保持透明 151
6.9小结 152
参考资料 152
第7章 测试 154
7.1测试的价值增加观 155
7.2基本问题 157
7.3我们交付了客户价值吗 158
7.3.1自动应用场景测试 161
7.3.2让你的测试与UI变更无关 164
7.4服务质量适合使用吗 165
7.4.1负载测试 165
7.4.2安全性测试 169
7.4.3易用性测试 170
7.5我们测试了变更吗 170
7.6我们没测试过什么吗 171
7.6.1需求 171
7.6.2代码 172
7.6.3风险 174
7.7软件在生产环境和实验室环境中运行一样吗 176
7.8我们测试的足够吗 178
7.8.1定义“足够好” 178
7.8.2探索测试 179
7.8.3为发现而测试 180
7.8.4错误的自信 181
7.9我们什么时候应当测试 181
7.9.1签入循环 183
7.9.2每日构建循环 184
7.9.3验收构建循环 184
7.9.4迭代循环 184
7.9.5项目循环 186
7.10哪些测试应当自动化 186
7.11我们的团队或外包团队的效率怎么样 187
7.12小结 187
参考资料 188
第8章 报告缺陷 190
8.1警示性的故事 192
8.2软件缺陷的生命周期 193
8.2.1报告缺陷就像写新闻 195
8.2.2主观数据 198
8.2.3客观数据 199
8.2.4评估数据 200
8.2.5计划 202
8.3小结 202
参考资料 202
第9章 项目问题解析 203
9.1低估 205
9.1.1不均匀的任务分解 206
9.1.2架构盲点 206
9.1.3范畴蠕变 208
9.1.4不充分的缺陷分配 210
9.1.5资源漏洞 210
9.2开发实践过于松弛 211
9.2.1构建失败 211
9.2.2不充分的单元测试 212
9.2.3重新激活 214
9.2.4虚报 214
9.3测试通过了,解决方案却不能工作 215
9.3.1高缺陷发现率 216
9.3.2测试失去时效性 217
9.4解决方案停留在测试 218
9.4.1测试失败 218
9.4.2过少的测试 219
9.5小结 221
参考资料 221
第10章 总结 222
10.1预料中的批评 223
10.2再论价值增加 224
参考资料 226