出版者的话
译者序
前言
第1章 创建一个程序1
1.1 一个简单的问题1
1.1.1 决策1
1.1.2 功能需求2
1.1.3 非功能需求3
1.1.4 设计约束3
1.1.5 设计决策4
1.2 测试4
1.3 估算工作量5
1.4 实现6
1.4.1 关于实现的几个要点6
1.4.2 基本设计7
1.4.3 使用JUnit进行单元测试8
1.4.4 StringSorter的实现8
1.4.5 用户界面12
1.5 总结14
1.6 复习题14
1.7 练习题15
1.8 参考文献和建议阅读15
第2章 构建一个系统16
2.1 构建一个系统的特征16
2.1.1 规模和复杂度16
2.1.2 开发和支持的技术考虑17
2.1.3 开发和支持的非技术考虑19
2.2 系统构建示例20
2.2.1 薪资管理系统需求21
2.2.2 设计薪资管理系统22
2.2.3 薪资管理系统编码和单元测试23
2.2.4 薪资管理系统的集成和功能测试24
2.2.5 发布薪资管理系统24
2.2.6 支持和维护25
2.3 协调工作25
2.3.1 过程25
2.3.2 产品26
2.3.3 人员26
2.4 总结26
2.5 复习题27
2.6 练习题27
2.7 参考文献和建议阅读27
第3章 工程化软件28
3.1 软件失败的示例和特点28
3.1.1 项目失败28
3.1.2 软件产品失效29
3.1.3 协调和其他关注点30
3.2 软件工程30
3.2.1 什么是软件工程30
3.2.2 软件工程的定义31
3.2.3 软件工程与软件的相关性31
3.3 软件工程职业与道德规范32
3.3.1 软件工程道德准则32
3.3.2 职业行为33
3.4 软件工程的原则34
3.4.1 早期由Davis提出的软件工程原则34
3.4.2 更现代的Royce原则35
3.4.3 Wasserman提出的软件工程基础概念36
3.5 总结37
3.6 复习题37
3.7 练习题37
3.8 参考文献和建议阅读38
第4章 软件过程模型39
4.1 软件过程39
4.1.1 软件过程模型的目标39
4.1.2 “最简单”的过程模型40
4.2 传统过程模型40
4.2.1 瀑布模型40
4.2.2 主程序员制团队方法41
4.2.3 增量模型41
4.2.4 螺旋模型43
4.3 一个更加现代的过程44
4.3.1 Rational统一过程框架的一般基础44
4.3.2 RUP的阶段44
4.4 进入和退出标准46
4.4.1 进入标准47
4.4.2 退出标准47
4.5 过程评估模型48
4.5.1 SEI的能力成熟度模型48
4.5.2 SEI的能力成熟度集成模型50
4.6 过程定义和通信55
4.7 总结55
4.8 复习题56
4.9 练习题56
4.10 参考文献和建议阅读56
第5章 新兴过程方法58
5.1 什么是敏捷过程58
5.2 为什么使用敏捷过程59
5.3 一些过程方法59
5.3.1 极限编程60
5.3.2 水晶系列方法63
5.3.3 敏捷统一过程65
5.3.4 Scrum66
5.3.5 看板方法:一个新增的敏捷方法67
5.3.6 开源软件开发68
5.3.7 过程总结69
5.4 过程的选择70
5.4.1 每一种过程更适用的项目和环境70
5.4.2 敏捷过程的主要风险和缺点71
5.4.3 敏捷过程的主要优点71
5.5 总结71
5.6 复习题71
5.7 练习题72
5.8 参考文献和建议阅读72
第6章 需求工程73
6.1 需求处理73
6.1.1 需求处理的准备73
6.1.2 需求工程过程74
6.2 需求获取与收集75
6.2.1 获取高层次的需求76
6.2.2 获取详细的需求77
6.3 需求分析79
6.3.1 通过业务流进行需求分析和聚类79
6.3.2 通过面向对象用例进行需求分析和聚类80
6.3.3 通过面向视点的需求定义进行需求分析和聚类82
6.3.4 需求分析与排序82
6.3.5 需求可追踪性84
6.4 需求定义、原型化和审查84
6.5 需求规约与需求协商87
6.6 总结88
6.7 复习题88
6.8 练习题89
6.9 参考文献和建议阅读89
第7章 设计:架构与方法论91
7.1 设计简介91
7.2 架构设计92
7.2.1 什么是软件架构92
7.2.2 视图与视角92
7.2.3 元架构知识:风格、模式、策略和参考架构93
7.2.4 基于网络的Web参考架构—REST97
7.3 详细设计98
7.3.1 功能分解98
7.3.2 关系型数据库设计100
7.3.3 大数据设计103
7.3.4 面向对象设计和UML104
7.3.5 用户界面设计108
7.3.6 进一步的设计问题112
7.4 HTML-Script-SQL设计示例112
7.5 总结114
7.6 复习题115
7.7 练习题115
7.8 参考文献和建议阅读115
第8章 设计的特征与度量117
8.1 设计描述117
8.2 设计属性的传统特征117
8.2.1 Halstead复杂度度量118
8.2.2 McCabe圈复杂度118
8.2.3 Henry-Kafura信息流119
8.2.4 高层次复杂度度量120
8.3 “好”的设计属性120
8.3.1 内聚121
8.3.2 耦合123
8.4 面向对象设计度量125
8.4.1 面向方面的编程127
8.4.2 Demeter法则127
8.5 用户界面设计127
8.5.1 好的UI的特征127
8.5.2 易用性的评估与测试128
8.6 总结129
8.7 复习题129
8.8 练习题130
8.9 参考文献和建议阅读130
第9章 实现133
9.1 实现简介133
9.2 好的实现的特征133
9.2.1 编程风格和代码规范134
9.2.2 注释136
9.3 实现的实践137
9.3.1 调试137
9.3.2 断言和防御性编程138
9.3.3 性能优化138
9.3.4 重构139
9.3.5 代码重用140
9.4 云开发140
9.4.1 基础设施即服务141
9.4.2 平台即服务142
9.4.3 云应用服务142
9.4.4 面向开
......