第一部分 面向对象软件工程简介 3
第1章 面向对象软件工程的范畴 3
1.1历史方面 4
1.2经济方面 6
1.3维护方面 6
1.3.1现代软件维护观点 8
1.3.2交付后维护的重要性 9
1.4需求、分析和设计方面 10
1.5团队开发 11
1.6没有计划阶段的原因 12
1.7没有测试阶段的原因 12
1.8没有文档阶段的原因 13
1.9面向对象范型 13
1.10术语 15
1.11道德规范问题 17
本章回顾 18
延伸阅读材料 18
习题 19
参考文献 20
第2章 软件生命周期模型 23
2.1理想软件开发 23
2.2Winburg小型案例研究 23
2.3Winburg小型案例研究经验 25
2.4Teal Tractors公司小型案例研究 25
2.5迭代与增量 26
2.6Winburg小型案例研究再探 28
2.7迭代和增量的风险及其他 29
2.8管理迭代与增量 31
2.9其他生命周期模型 31
2.9.1边写边改生命周期模型 32
2.9.2瀑布生命周期模型 32
2.9.3快速原型生命周期模型 33
2.9.4开源生命周期模型 34
2.9.5敏捷过程 35
2.9.6同步稳定生命周期模型 37
2.9.7螺旋生命周期模型 38
2.10生命周期模型的比较 40
本章回顾 41
延伸阅读材料 41
习题 42
参考文献 43
第3章 软件过程 46
3.1统一过程 47
3.2迭代与增量 48
3.3需求工作流 49
3.4分析工作流 50
3.5设计工作流 51
3.6实现工作流 52
3.7测试工作流 52
3.7.1需求制品 53
3.7.2分析制品 53
3.7.3设计制品 53
3.7.4实现制品 53
3.8交付后维护 54
3.9退役 55
3.10统一过程的阶段 55
3.10.1初始阶段 56
3.10.2细化阶段 57
3.10.3构造阶段 58
3.10.4移交阶段 58
3.11一维与二维生命周期模型对比 59
3.12改进软件过程 60
3.13能力成熟度模型 60
3.14软件过程改进的其他方面 62
3.15软件过程改进的成本与收益 62
本章回顾 64
延伸阅读材料 64
习题 65
参考文献 65
第4章 软件团队 68
4.1团队组织 68
4.2民主团队方式 69
4.3主程序员团队方式 70
4.3.1《纽约时报》项目 71
4.3.2主程序员团队方式的不切实际性 72
4.4超越主程序员和民主团队 72
4.5同步-稳定团队 73
4.6敏捷过程团队 74
4.7开源编程团队 74
4.8人力资源能力成熟度模型 75
4.9选择合适的团队组织 75
本章回顾 76
延伸阅读材料 76
习题 77
参考文献 77
第5章 软件工程工具 79
5.1逐步求精 79
5.2成本-效益分析法 82
5.3软件度量 83
5.4CASE 84
5.5CASE的分类 85
5.6CASE的范围 86
5.7软件版本 88
5.7.1修订版 89
5.7.2变体 89
5.8配置控制 89
5.8.1交付后维护期间的配置控制 91
5.8.2基线 91
5.8.3产品开发过程中的配置控制 91
5.9建造工具 92
5.10使用CASE技术提高生产力 93
本章回顾 93
延伸阅读材料 93
习题 94
参考文献 95
第6章 测试 97
6.1质量问题 97
6.1.1软件质量保证 98
6.1.2管理独立性 98
6.2基于非执行的测试 99
6.2.1走查 99
6.2.2管理走查 100
6.2.3审查 100
6.2.4走查和审查的对比 102
6.2.5评审的优缺点 102
6.2.6审查的度量方法 102
6.3基于执行的测试 103
6.4应该测试什么 103
6.4.1实用性 104
6.4.2可靠性 104
6.4.3健壮性 104
6.4.4性能 105
6.4.5正确性 105
6.5测试与正确性证明 106
6.5.1正确性证明的例子 106
6.5.2正确性证明小型实例研究 108
6.5.3正确性证明和软件工程 109
6.6由谁来完成基于执行的测试 111
6.7测试何时停止 112
本章回顾 112
延伸阅读材料 112
习题 113
参考文献 114
第7章 从模块到对象 117
7.1什么是模块 117
7.2内聚 119
7.2.1偶然性内聚 119
7.2.2逻辑性内聚 120
7.2.3时间性内聚 120
7.2.4过程性内聚 121
7.2.5通信性内聚 121
7.2.6功能性内聚 121
7.2.7信息性内聚 121
7.2.8内聚示例 122
7.3耦合 122
7.3.1内容耦合 122
7.3.2公共耦合 123
7.3.3控制耦合 124
7.3.4印记耦合 125
7.3.5数据耦合 125
7.3.6耦合示例 126
7.3.7耦合的重要性 126
7.4数据封装 127
7.4.1数据封装和开发 128
7.4.2数据封装和维护 129
7.5抽象数据类型 133
7.6信息隐藏 134
7.7对象 135
7.8继承、多态和动态绑定 137
7.9面向对象范型 139
本章回顾 140
延伸阅读材料 141
习题 141
参考文献 142
第8章 可复用性和可移植性 144
8.1复用的概念 145
8.2复用的障碍 146
8.3复用案例研究 147
8.3.1雷锡恩导弹系统部门 147
8.3.2欧洲航天局 148
8.4对象和复用 149
8.5在设计和实现过程中的复用 149
8.5.1设计复用 149
8.5.2应用架构 150
8.5.3设计模式 151
8.5.4软件体系结构 152
8.5.5基于组件的软件工程 153
8.6关于设计模式的更多内容 153
8.6.1FLIC小型案例研究 153
8.6.2适配器设计模式 154
8.6.3桥接设计模式 154
8.6.4迭代器设计模式 155
8.6.5抽象工厂设计模式 156
8.7设计模式的范畴 159
8.8设计模式的优点和缺点 159
8.9复用和交付后的维护 160
8.10可移植性 161
8.10.1硬件的不兼容性 161
8.10.2操作系统的不兼容性 162
8.10.3数值计算软件的不兼容性 162
8.10.4编译器的不兼容性 163
8.11为什么需要可移植性 165
8.12实现可移植性的技术 166
8.12.1可移植的系统软件 166
8.12.2可移植的应用软件 166
8.12.3可移植数据 167
8.12.4基于Web的应用程序 167
本章回顾 168
延伸阅读材料 168
习题 169
参考文献 170
第9章 计划与估算 174
9.1计划活动与软件过程 174
9.2估算项目周期和成本 175
9.2.1产品规模的衡量标准 176
9.2.2成本估算技术 178
9.2.3中级COCOMO 180
9.2.4COCOMOⅡ 182
9.2.5跟踪周期和成本估算 183
9.3估算探讨 183
9.4软件项目管理计划的组成 184
9.5软件项目管理计划框架 185
9.6IEEE软件项目管理计划 186
9.7对测试进行计划 188
9.8培训需求 188
9.9文档标准 189
9.10计划和估算的CASE工具 189
9.11测试软件项目管理计划 190
本章回顾 190
延伸阅读材料 190
习题 191
参考文献 192
第二部分 软件生命周期工作流 196
第10章 需求工作流 196
10.1确定什么是客户所需 196
10.2需求工作流概述 197
10.3域的理解 197
10.4业务模型 198
10.4.1访谈 198
10.4.2其他技术 198
10.4.3用例 199
10.5初始需求 200
10.6对应用域的初始理解:MSG基金会实例研究 200
10.7初始业务模型:MSG基金会实例研究 202
10.8初始需求:MSG基金会实例研究 204
10.9需求工作流继续:MSG基金会实例研究 205
10.10修订需求:MSG基金会实例研究 206
10.11测试工作流:MSG基金会实例研究 211
10.12什么是面向对象的需求 217
10.13快速原型 218
10.14人为因素 218
10.15 复用快速原型 219
10.16需求工作流的CASE工具 220
10.17需求工作流的度量 220
10.18需求工作流的挑战 220
本章回顾 221
延伸阅读材料 222
习题 222
参考文献 223
第11章 分析工作流 224
11.1规格说明文档 224
11.2非形式化规格说明 225
11.3小型案例研究的正确性证明回顾 226
11.4分析工作流 227
11.5实体类的提取 228
11.6电梯问题 228
11.7功能建模:电梯问题案例研究 229
11.8实体类建模:电梯问题案例研究 230
11.8.1名词提取 230
11.8.2CRC卡片 232
11.9动态建模:电梯问题案例研究 233
11.10测试工作流:电梯问题案例研究 235
11.11提取边界类和控制类 237
11.12初始功能建模:MSG基金会案例研究 238
11.13初始类图:MSG基金会案例研究 239
11.14初始动态建模:MSG基金会案例研究 240
11.15修订实体类:MSG基金会案例研究 242
11.16提取边界类:MSG基金会案例研究 243
11.17提取控制类:MSG基金会案例研究 243
11.18用例实现:MSG基金会案例研究 243
11.18.1Estimate Funds Available for Week用例 244
11.18.2Manage an Asset用例 248
11.18.3 Update Estimated Annual Operating Expenses用例 251
11.18.4 Produce a Report用例 252
11.19类图增量:MSG基金会案例研究 256
11.20软件项目管理计划:MSG基金会案例研究 257
11.21测试工作流:MSG基金会案例研究 257
11.22统一过程中的规格说明文档 257
11.23更多关于参与者和用例的内容 258
11.24支持分析工作流的CASE工具 259
11.25分析工作流的挑战 259
本章回顾 259
延伸阅读材料 260
习题 260
参考文献 262
第12章 设计工作流 264
12.1面向对象设计 264
12.2面向对象设计:电梯问题案例研究 268
12.3面向对象设计:MSG基金会案例研究 270
12.4设计工作流 272
12.5测试工作流:设计 273
12.6测试工作流:MSG基金会案例 273
12.7详细设计的形式化技术 273
12.8实时设计技术 274
12.9用于设计的CASE工具 274
12.10设计的度量 275
12.11设计工作流面临的挑战 276
本章回顾 277
延伸阅读材料 277
习题 277
参考文献 278
第13章 实现工作流 280
13.1选择编程语言 280
13.2良好的编程实践 282
13.2.1使用一致和有意义的变量名 282
13.2.2自文档化代码的问题 283
13.2.3使用参数 284
13.2.4为增加可读性的代码编排 284
13.2.5嵌套的if语句 285
13.3编码标准 286
13.4代码复用 286
13.5集成 286
13.5.1自顶向下的集成 287
13.5.2自底向上的集成 288
13.5.3三明治集成 288
13.5.4集成技术 289
13.5.5集成管理 290
13.6实现工作流 290
13.7实现工作流:MSG基金会案例研究 290
13.8测试工作流:实现 290
13.9测试用例的选择 290
13.9.1规格说明测试与代码测试 291
13.9.2规格说明测试的可行性 291
13.9.3代码测试的可行性 291
13.10黑盒单元测试技术 293
13.10.1等价测试和边界值分析 293
13.10.2功能测试 294
13.11黑盒测试用例:MSG基金会案例研究 294
13.12玻璃盒单元测试技术 296
13.12.1结构测试:语句、分支和路径覆盖 296
13.12.2复杂性度量 297
13.13代码走查和审查 298
13.14单元测试技术的比较 298
13.15 净室 298
13.16测试中的问题 299
13.17单元测试的管理方面内容 301
13.18何时重写而不是调试代码制品 301
13.19集成测试 302
13.20产品测试 303
13.21验收测试 303
13.22测试流:MSG基金会案例研究 304
13.23用于实现的CASE工具 304
13.23.1软件开发全过程的CASE工具 304
13.23.2集成开发环境 304
13.23.3商业应用环境 305
13.23.4公共工具基础结构 305
13.23.5环境的潜在问题 306
13.24测试工作流的CASE工具 306
13.25实现工作流的度量 306
13.26实现工作流面临的挑战 307
本章回顾 307
延伸阅读材料 308
习题 309
参考文献 310
第14章 交付后维护 313
14.1开发与维护 313
14.2为什么交付后维护是必要的 314
14.3交付后维护程序员要求具备什么 314
14.4交付后维护小型案例研究 316
14.5交付后维护的管理 317
14.5.1缺陷报告 317
14.5.2授权对产品的修改 318
14.5.3确保可维护性 318
14.5.4反复维护的问题 319
14.6维护问题 319
14.7交付后维护技能与开发技能 321
14.8逆向工程 321
14.9交付后维护期间的测试 322
14.10交付后维护的CASE工具 323
14.11交付后维护的度量 323
14.12交付后维护:MSG基金会案例研究 323
14.13交付后维护面临的挑战 323
本章回顾 323
延伸阅读材料 324
习题 324
参考文献 325
第15章 UML的进一步讨论 327
15.1UML不是一种方法学 327
15.2类图 327
15.2.1聚合 328
15.2.2多重性 329
15.2.3组合 329
15.2.4泛化 330
15.2.5关联 330
15.3注释 330
15.4用例图 330
15.5构造型 331
15.6交互图 331
15.7状态图 333
15.8活动图 335
15.9包 335
15.10组件图 336
15.11部署图 336
15.12UML图回顾 336
15.13UML和迭代 336
本章回顾 337
延伸阅读材料 337
习题 337
参考文献 337
附录 338
附录A学期项目:Osric办公用品和装饰公司项目 338
附录B软件工程资源 340
附录C需求工作流:MSG基金会案例研究 341
附录D分析工作流:MSG基金会案例研究 341
附录E软件工程管理计划:MSG基金会案例研究 341
附录F设计工作流:MSG基金会案例研究 345
附录G实现工作流:MSG基金会案例研究(C++版) 349
附录H实现工作流:MSG基金会案例研究(Java版) 349
附录Ⅰ测试工作流:MSG基金会案例研究 350