第1章 冷静待之 1
1.1实践选择 3
1.1.1可行性 3
1.1.2认可度 5
1.1.3价值 6
1.1.4原型 6
1.2关注需要改善的目标领域 7
1.2.1产品交付 8
1.2.2软件质量 9
1.2.3团队关系 10
1.3整体改善 11
1.3.1均衡 11
1.3.2面貌一新 12
1.3.3可持续性 12
1.4小结 13
第2章 .NET实践领域 15
2.1从内部挖掘 17
2.1.1技术债 17
2.1.2缺陷跟踪系统 18
2.1.3反思分析 19
2.1.4前瞻性分析 20
2.2应用程序生命周期管理 20
2.3设计模式和开发指南 22
2.3.1 .NET设计规范 23
2.3.2微软的模式和实践小组 23
2.3.3显示界面层设计模式 24
2.3.4对象-对象映射 25
2.3.5依赖注入 25
2.4研究和开发 26
2.4.1自动化测试生成工具 27
2.4.2契约式编码 30
2.5微软安全开发生命周期 30
2.6小结 32
第3章 实现预期目标 33
3.1成功要素 34
3.1.1项目启动阶段 37
3.1.2超出范围 38
3.1.3干扰和分心 38
3.1.4学习与工作之间的平衡 39
3.2共识 39
3.2.1线框图 40
3.2.2文档化架构 41
3.2.3报表模型 42
3.2.4细节化示例 42
3.2.5创建原型 43
3.3预期目标 44
3.3.1交付 44
3.3.2实际成果 44
3.3.3趋势 46
3.4小结 47
第4章 量化价值 48
4.1价值 50
4.1.1财务回报 50
4.1.2提高可控性 51
4.1.3提高质量品质 52
4.1.4更加高效 53
4.2数据来源 54
4.2.1定量数据 54
4.2.2定性数据 57
4.2.3业界证据 58
4.3小结 59
第5章 战略 60
5.1认知 62
5.1.1头脑风暴 62
5.1.2规划 63
5.1.3监控 64
5.1.4沟通 64
5.2个体过程 66
5.2.1卓越的承诺 67
5.2.2良性的纪律 67
5.2.3效力和坚持 68
5.3杠杆 69
5.3.1自动化 69
5.3.2警报系统 70
5.3.3经验和专业知识 71
5.4小结 71
第6章 .NET的规章制度 72
6.1编码标准和指南 73
6.1.1来源 73
6.1.2异常 75
6.1.3 disposable模式 78
6.1.4其他事项 82
6.2代码异味 86
6.2.1注释 86
6.2.2过于复杂 88
6.2.3未用到的、无法到达的和无效的代码 89
6.3小结 89
第7章 强大的C#构造 90
7.1扩展方法 91
7.2隐式类型的局部变量 94
7.3可以为null的类型 96
7.4 null合并运算符 98
7.5可选参数 99
7.6泛型 102
7.7 LINQ 103
7.8小结 108
第8章 自动测试 109
8.1案例研究 111
8.2棕色地带的应用程序 112
8.3绿色地带的应用程序 114
8.4自动测试基础 115
8.5测试代码的可维护性 115
8.5.1命名约定 116
8.5.2测试方法主体 119
8.6单元测试 131
8.6.1边界分析 133
8.6.2无效参数 134
8.6.3无效的前提条件 136
8.7伪造、存根和模拟 137
8.7.1隔离被测试代码 137
8.7.2测试依赖交互 139
8.8表面测试 140
8.9自动集成测试 143
8.10数据库注意事项 144
8.11小结 145
第9章 生成自动化 146
9.1生成工具 147
9.2 MSBuild基础 148
9.2.1任务和目标 148
9.2.2 PropertyGroup和 ItemGroup 150
9.2.3基本任务 154
9.3日志 155
9.4参数和变量 157
9.5库和扩展 159
9.6导入和包含 160
9.7内联任务 161
9.8常见任务 163
9.8.1日期和时间 163
9.8.2程序集信息 164
9.8.3 XML的Peek和Poke 165
9.8.4 zip存档 166
9.9自动部署 167
9.9.1生成一次,部署多次 168
9.9.2打包工具 169
9.9.3部署工具 169
9.10小结 170
第10章 持续集成 171
10.1案例研究 172
10.2 CI服务器 173
10.2.1 CruiseControl.NET 174
10.2.2 Jenkins 175
10.2.3 TeamCity 175
10.2.4 Team Foundation Server 176
10.3 CI生命周期 176
10.3.1重新生成 177
10.3.2单元测试 182
10.3.3分析 184
10.3.4打包 187
10.3.5部署 188
10.3.6稳定性测试 190
10.3.7生成报告 192
10.4小结 192
第11章 代码分析 193
11.1案例研究 195
11.2静态分析 196
11.2.1程序集分析 197
11.2.2源代码分析 205
11.2.3架构和设计 211
11.2.4代码度量值 213
11.2.5质量保证指标 213
11.3动态分析 214
11.3.1代码覆盖率 214
11.3.2性能分析 216
11.3.3查询分析 217
11.3.4日志 217
11.4小结 218
第12章 测试框架 219
12.1单元测试框架 220
12.2测试运行器 221
12.2.1 NUnit的GUI和控制台运行器 221
12.2.2 ReSharper测试运行器 224
12.2.3 Visual Studio测试运行器 227
12.2.4 Gallio测试运行器 230
12.2.5 xUnit.net测试运行器 231
12.3 xUnit测试模式 233
12.3.1标识测试方法 233
12.3.2标识测试类和夹具 234
12.3.3断言 239
12.4模拟对象框架 240
12.4.1使用Rhino Mocks动态生成伪对象 240
12.4.2使用Moles进行隔离测试 243
12.5数据库测试框架 248
12.6用户界面测试框架 252
12.6.1 Web应用程序测试框架 252
12.6.2 Windows窗体和其他用户界面测试框架 253
12.7验收测试框架 253
12.7.1测试规范和行为 254
12.7.2业务逻辑验收测试 255
12.8小结 256
第13章 反感和偏见 257
13.1团体利益偏见 258
13.2玫瑰色回顾 259
13.3团体与个人的评价 260
13.4维持现状和辩解机制 260
13.5优势错觉 261
13.6达克效应 261
13.7鸵鸟效应 262
13.8赌徒谬误 263
13.9歧义效应 263
13.10集中效应 264
13.11双曲贴现 264
13.12常态偏见 265
13.13小结 265
附录A 参考资源 266
附录B 记分卡 279