《面向对象软件工程》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:DavidC.Kung著;牟永敏,邢颖译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2017
  • ISBN:9787302460947
  • 页数:548 页
图书介绍:本书介绍了将UML、设计模式、OO软件测试、TDD集成起来的敏捷统一方法学。本书包含过去十年间软件工程发展的很多方面,既有在美国以及全球的大学和公司里讲授的课程,也有行业内外软件工程项目的应用素材。从面向对象方法学出发,对软件工程进行重新演绎,全面、系统、清晰地介绍了面向对象软件工程的基本概念、原理、方法和工具,通过实例说明了面向对象软件开发的整个过程,是一部值得推荐的经典之作。

第1部分 引言与系统工程 3

第1章 引言 3

1.1 什么是软件工程 3

1.2 为什么要用软件工程 4

1.3 软件生命周期行为 5

1.3.1 软件开发过程 5

1.3.2 软件质量保证 8

1.3.3 软件项目管理 9

1.4 面向对象的软件工程 10

1.4.1 面向对象的建模和设计语言 10

1.4.2 面向对象的开发过程 10

1.4.3 面向对象的开发方法 11

1.4.4 OO会取代传统的方法吗 11

1.5 软件工程和计算机科学 11

小结 12

深入阅读 12

章节复习问题 13

练习 13

第2章 软件过程和方法 14

2.1 系统开发的挑战 14

2.2 软件过程 15

2.3 瀑布模型的优势和问题 16

2.4 软件开发是一个险恶问题 16

2.5 软件过程模型 17

2.5.1 原型过程 18

2.5.2 演化过程 18

2.5.3 螺旋模型 18

2.5.4 统一过程 19

2.5.5 个人软件过程 20

2.5.6 团队软件过程 24

2.5.7 敏捷过程 26

2.6 软件开发方法 30

2.6.1 过程和方法的区别 30

2.6.2 方法的好处 31

2.6.3 结构化方法 32

2.6.4 经典的面向对象方法 32

2.7 敏捷方法 32

2.7.1 动态系统开发方法(DSDM) 34

2.7.2 Scrum 35

2.7.3 特征驱动的开发 35

2.7.4 极限编程 36

2.7.5 敏捷还是计划驱动 36

2.8 本书中的过程和方法一览 37

小结 41

深入阅读 41

章节复习问题 42

练习 42

第3章 系统工程 43

3.1 什么是系统 43

3.2 什么是系统工程 44

3.3 系统需求定义 47

3.3.1 识别业务需求 47

3.3.2 定义系统需求 48

3.4 系统结构设计 48

3.4.1 系统分解 49

3.4.2 需求分配 51

3.4.3 结构设计图 52

3.4.4 子系统功能和接口规格说明 55

3.5 子系统开发 56

3.5.1 面向对象的上下文图 56

3.5.2 面向对象的上下文图的用途 57

3.5.3 工程团队的协作 58

3.6 系统集成、测试和部署 58

3.7 系统配置管理 58

小结 60

深入阅读 60

章节复习问题 60

练习 60

第2部分 分析和体系结构设计 65

第4章 获取软件需求 65

4.1 什么是需求获取 65

4.2 获取需求的重要性 67

4.3 获取需求的挑战 67

4.4 需求的类型 68

4.5 获取需求的步骤 69

4.5.1 收集信息 70

4.5.2 构建分析模型 73

4.5.3 获取需求和约束 74

4.5.4 需求规格标准 77

4.5.5 进行可行性研究 77

4.5.6 审查需求规格说明书 77

4.6 应用敏捷原则 79

4.7 需求管理和工具 80

小结 81

深入阅读 81

章节复习问题 81

练习 82

第5章 领域建模 84

5.1 什么是领域建模 84

5.2 为什么要进行领域建模 85

5.3 面向对象和类图 85

5.3.1 外延定义和意向定义 85

5.3.2 类和对象 86

5.3.3 对象和属性 87

5.3.4 关联 88

5.3.5 多重性和角色 89

5.3.6 聚合 90

5.3.7 继承 90

5.3.8 继承和多态 91

5.3.9 关联类 91

5.4 领域建模的步骤 93

5.4.1 收集应用领域信息 94

5.4.2 头脑风暴 94

5.4.3 对头脑风暴结果分类 95

5.4.4 领域模型可视化 98

5.4.5 领域建模审查清单 102

5.5 综合 103

5.6 领域建模的方针 105

5.7 应用敏捷原则 106

5.8 领域建模的工具支持 107

小结 108

深入阅读 109

章节复习问题 109

练习 109

第6章 架构设计 111

6.1 什么是架构设计 111

6.2 架构设计的重要性 112

6.3 架构设计过程 112

6.3.1 确定架构设计目标 113

6.3.2 确定系统类型 114

6.3.3 应用架构样式 117

6.3.4 进行定制的架构设计 124

6.3.5 明确子系统功能和接口 124

6.3.6 审查架构设计 125

6.4 架构样式和包图 125

6.5 应用软件设计准则 126

6.5.1 什么是软件设计准则 127

6.5.2 为改变而设计 127

6.5.3 关注点分离 128

6.5.4 信息隐藏 129

6.5.5 高内聚 129

6.5.6 低耦合 129

6.5.7 保持简单和直接 130

6.6 架构设计的方针 131

6.7 架构设计和设计模式 131

6.8 应用敏捷原则 132

小结 132

深入阅读 132

章节复习问题 133

练习 133

第3部分 交互式系统的建模和设计 137

第7章 从需求获取用例 137

7.1 什么是参与者 137

7.2 什么是用例 138

7.3 业务过程、操作和活动 138

7.4 从需求获取用例的步骤 140

7.4.1 识别用例 140

7.4.2 明确用例范围 146

7.4.3 用例上下文可视化 147

7.4.4 检查用例规约 151

7.4.5 将用例分配给迭代 152

7.5 导出用例的方针 153

7.6 应用敏捷原则 155

7.7 用例建模的工具支持 155

小结 157

深入阅读 157

章节复习问题 157

练习 158

第8章 参与者-系统交互建模 159

8.1 什么是参与者-系统交互建模 159

8.2 参与者-系统交互建模的重要性 160

8.3 参与者-系统交互建模的步骤 160

8.3.1 初始化一个两列的表 161

8.3.2 明确参与者-系统交互的步骤 161

8.3.3 检查参与者-系统交互规约 161

8.4 明确可替换的流 162

8.5 使用用户界面原型 163

8.6 不要显示异常处理 166

8.7 用例的先决条件和后置条件 166

8.8 包含其他用例 167

8.9 用其他用例继续 167

8.10 常见问题 168

8.11 应用敏捷原则 170

小结 170

深入阅读 171

章节复习问题 171

练习 171

第9章 对象交互建模 172

9.1 什么是对象交互建模 172

9.2 UML顺序图 173

9.2.1 概念和表示法 173

9.2.2 展示类的实例 173

9.2.3 顺序图说明 174

9.2.4 顺序图用于分析和设计 176

9.2.5 正确使用表示方法 178

9.3 对象交互建模的步骤 179

9.3.1 收集业务过程的信息 180

9.3.2 识别非普通步骤 180

9.3.3 为非普通步骤书写场景 181

9.3.4 构建场景表 183

9.3.5 怎么写场景 183

9.3.6 从场景表得到顺序图 188

9.3.7 对象交互建模检查清单 194

9.4 应用敏捷原则 195

9.5 对象交互建模的工具支持 197

小结 197

深入阅读 197

章节复习问题 197

练习 198

第10章 应用职责分配模式 199

10.1 什么是设计模式 199

10.2 为什么要用设计模式 200

10.3 情景特定模式和职责分配模式 200

10.4 模式规约 201

10.5 控制器模式 202

10.5.1 激励示例 202

10.5.2 什么是控制器 204

10.5.3 应用控制器模式 204

10.5.4 控制器的类型 206

10.5.5 跟踪记录用例状态 206

10.5.6 臃肿的控制器 207

10.5.7 比较不同的设计 208

10.5.8 何时应用控制器模式 209

10.5.9 使用控制器的方针 210

10.6 专家模式 210

10.6.1 信息专家 210

10.6.2 应用专家模式 211

10.6.3 包含不止一个对象的专家模式 212

10.6.4 何时应用专家模式 213

10.6.5 使用专家模式的方针 213

10.7 创建者模式 213

10.7.1 什么是创建者 213

10.7.2 应用创建者模式 214

10.7.3 创建者模式的优势 215

10.7.4 何时应用创建者模式 215

小结 216

深入阅读 216

章节复习问题 216

练习 217

第11章 获取设计类图 219

11.1 什么是设计类图 220

11.2 设计类图的用途 220

11.3 获取设计类图的步骤 221

11.3.1 识别类 221

11.3.2 识别方法 222

11.3.3 识别属性 224

11.3.4 类之间的关系 226

11.3.5 识别关系 226

11.3.6 设计类图检查清单 228

11.4 用包图组织类 228

11.5 应用敏捷原则 230

11.6 设计类图的工具支持 231

小结 231

深入阅读 231

章节复习问题 231

练习 231

第12章 用户接口设计 232

12.1 什么是用户接口设计 232

12.2 用户接口设计为什么重要 233

12.3 图形用户接口组件 234

12.3.1 容器组件 235

12.3.2 输入、输出和信息展示组件 235

12.3.3 使用GUI组件的方针 237

12.4 用户接口设计过程 237

12.4.1 案例研究:为状态图编辑器设计用户接口 238

12.4.2 识别系统主要显示方式 238

12.4.3 生成布局设计草图 240

12.4.4 明确交互行为 242

12.4.5 构建原型 242

12.4.6 用户评估用户接口设计 243

12.4.7 用户接口设计检查清单 244

12.5 设计用户支持功能 245

12.6 用户接口设计的方针 245

12.7 应用敏捷原则 247

12.8 用户接口设计的工具支持 247

小结 248

深入阅读 248

章节复习问题 248

练习 249

第4部分 其他类型系统的建模和设计 253

第13章 事件驱动系统的对象状态建模 253

13.1 什么是对象状态建模 253

13.2 为什么要进行对象状态建模 254

13.3 基本定义 254

13.4 对象状态建模的步骤 255

13.4.1 收集和分类状态行为信息 256

13.4.2 构建领域模型来展示上下文 258

13.4.3 构建状态迁移表 260

13.4.4 状态迁移表的用途 261

13.4.5 将状态迁移表转换为分析状态图 262

13.4.6 将分析状态图转换为设计状态图 264

13.4.7 状态建模检查清单 265

13.5 状态模式 265

13.5.1 约定的方法 265

13.5.2 什么是状态模式 266

13.5.3 应用状态模式 266

13.6 实时系统的建模与设计 269

13.6.1 转换图式 270

13.6.2 定时状态机 271

13.6.3 中断处理 272

13.7 应用敏捷原则 273

13.8 对象状态建模的工具支持 274

小结 274

深入阅读 275

章节复习问题 275

练习 275

第14章 转换型系统的活动建模 278

14.1 什么是活动建模 278

14.2 为什么使用活动建模 279

14.3 活动建模:技术背景 279

14.3.1 流程图 280

14.3.2 佩特里网 280

14.3.3 数据流图 281

14.4 UML活动图 282

14.5 活动建模的步骤 283

14.5.1 识别活动和工作流 284

14.5.2 产生一个初步活动图 286

14.5.3 引入条件分支、分叉和连接 287

14.5.4 精炼复杂的活动 287

14.5.5 活动建模审核检查表 288

14.6 与其他图之间的关系 288

14.7 应用敏捷原则 289

14.8 活动建模的工具支持 289

小结 289

深入阅读 290

章节复习问题 290

练习 290

第15章 基于规则的系统的建模与设计 291

15.1 什么是决策表 292

15.2 决策表的用处 293

15.3 系统化的决策表构造 293

15.4 渐进式决策表构造 294

15.5 检查所需的属性 295

15.6 决策表合并 296

15.7 根据决策表生成代码 296

15.8 应用解释器模式 297

15.8.1 定义业务规则语法 297

15.8.2 在类图中表示规则 298

15.8.3 构建解析器和变量查找上下文 299

15.8.4 解释业务规则 299

15.8.5 动态更新规则 300

15.8.6 解释方法的优点 300

15.9 在测试驱动开发中使用决策表 300

15.10 决策树 301

15.11 应用敏捷原则 301

小结 302

深入阅读 302

章节复习问题 302

练习 303

第5部分 应用情景特定模式 307

第16章 应用模式来设计状态图编辑器 307

16.1 应用模型的过程 308

16.2 案例研究:状态图编辑器 310

16.3 处理复杂的结构 311

16.3.1 表示递归的整体-部分结构 311

16.3.2 使用策略提供布局选择 315

16.3.3 用迭代器访问复杂的结构 316

16.3.4 通过访问者分析复杂的结构 317

16.3.5 通过备忘录存储和恢复对象状态 320

16.4 创建和构造复杂的对象 321

16.4.1 创建系列产品 321

16.4.2 构建大型的复杂对象 324

16.4.3 通过享元重用对象 326

16.5 图形用户界面的设计和显示 327

16.5.1 跟踪编辑状态 327

16.5.2 响应编辑事件 328

16.5.3 转换接口 330

16.5.4 提供上下文相关的帮助 333

16.5.5 使用装饰增强显示能力 335

16.6 应用敏捷原则 338

小结 338

深入阅读 338

章节复习问题 339

练习 339

第17章 应用模式来设计持久性框架 340

17.1 直接访问数据库会出现的问题 340

17.2 通过桥隐藏持久存储 341

17.3 将数据库请求封装为命令 344

17.4 用远程代理隐藏网络访问 348

17.5 用模板方法共享通用代码 351

17.6 通过工厂方法检索不同的对象 353

17.7 用原型减少类的数量 355

17.8 应用敏捷原则 358

小结 358

深入阅读 358

章节复习问题 358

练习 358

第6部分 实现和质量保证 363

第18章 实现方面的考虑 363

18.1 编码标准 363

18.1.1 什么是编码标准 363

18.1.2 为什么要建立编码标准 367

18.1.3 代码审查清单 367

18.1.4 编码标准实施准则 367

18.2 组织实现部件 369

18.3 根据设计生成代码 370

18.3.1 实现类和接口 370

18.3.2 从顺序图到方法代码骨架 370

18.3.3 实现关联关系 371

18.4 给团队成员分配任务 372

18.5 结对编程 372

18.6 测试驱动开发 373

18.6.1 测试驱动开发的工作流程 373

18.6.2 测试驱动开发的优点 375

18.6.3 潜在问题 375

18.7 应用敏捷原则 376

18.8 对实现的工具支持 376

小结 376

深入阅读 377

章节复习问题 377

练习 377

第19章 软件质量保证 379

19.1 软件质量保证的益处 379

19.2 软件质量属性 379

19.3 质量测量和度量 381

19.3.1 质量测量和度量的实用性 382

19.3.2 常规质量度量 382

19.3.3 对面向对象软件重用传统度量 387

19.3.4 面向对象质量度量 387

19.4 软件验证与确认技术 389

19.4.1 审查 389

19.4.2 走查 390

19.4.3 同行审查 391

19.5 生命周期中的验证和确认 392

19.6 软件质量保证功能 393

19.6.1 过程和标准的定义 394

19.6.2 质量管理 396

19.6.3 过程改进 397

19.7 应用敏捷原则 398

19.8 SQA的工具支持 399

小结 399

深入阅读 400

章节复习问题 400

练习 400

第20章 软件测试 401

20.1 什么是软件测试 402

20.2 为什么进行软件测试 402

20.3 传统的黑盒测试 403

20.3.1 功能性测试:一个例子 403

20.3.2 等价类划分 404

20.3.3 边界值分析 405

20.3.4 因果分析 407

20.4 传统的白盒测试 407

20.4.1 基路径测试 408

20.4.2 圈复杂度 409

20.4.3 流图测试覆盖准则 409

20.4.4 测试循环 410

20.4.5 数据流测试 411

20.4.6 数据流测试的覆盖准则 412

20.4.7 过程间数据流测试 412

20.5 测试覆盖率 413

20.6 一个通用的软件测试过程 413

20.7 面向对象的软件测试 415

20.7.1 基于用例的测试 415

20.7.2 用ClassBench进行对象状态测试 416

20.7.3 测试类的层次结构 418

20.7.4 测试异常处理能力 419

20.8 测试Web应用程序 420

20.8.1 Web应用程序测试的面向对象模型 420

20.8.2 使用面向对象模型进行静态分析 421

20.8.3 使用面向对象模型生成测试用例 421

20.8.4 用httpUnit进行Web应用程序测试 422

20.9 非功能性需求的测试 422

20.9.1 性能和压力测试 422

20.9.2 安全测试 423

20.9.3 测试用户界面 423

20.10 生命周期中的软件测试 424

20.11 回归测试 426

20.12 什么时候停止测试 426

20.13 应用敏捷原则 427

20.14 测试的工具支持 427

小结 427

深入阅读 428

章节复习问题 428

练习 428

第7部分 维护和配置管理 433

第21章 软件维护 433

21.1 什么是软件维护 433

21.2 软件变化的因素 434

21.3 系统演化的雷曼定律 434

21.4 软件维护的类型 435

21.5 软件维护过程和活动 435

21.5.1 维护过程模型 436

21.5.2 理解程序 437

21.5.3 变更识别和分析 437

21.5.4 配置变更控制 439

21.5.5 变更实施、测试和交付 440

21.6 逆向工程 440

21.6.1 逆向工程工作流 440

21.6.2 逆向工程的用途 440

21.6.3 逆向工程:案例研究 441

21.7 软件再工程 441

21.7.1 再工程的目标 441

21.7.2 软件再工程的过程 442

21.7.3 软件再工程:案例研究 443

21.8 软件维护的模式 444

21.8.1 用外观模式简化客户端接口 444

21.8.2 用中介者模式简化组件交互 445

21.8.3 软件维护的模式 445

21.9 应用敏捷原则 449

21.10 软件维护的工具支持 449

小结 450

深入阅读 450

章节复习问题 450

练习 450

第22章 软件配置管理 452

22.1 软件生命周期的基准 452

22.2 什么是软件配置管理 453

22.3 为什么需要软件配置管理 454

22.4 软件配置管理的功能 454

22.4.1 软件配置识别 455

22.4.2 软件配置变更控制 456

22.4.3 软件配置审核 457

22.4.4 软件配置状态的审计 458

22.5 敏捷项目中的配置管理 458

22.6 软件配置管理工具 458

小结 460

深入阅读 460

章节复习问题 460

练习 461

第8部分 项目管理和软件安全 465

第23章 软件项目管理 465

23.1 项目组织 466

23.1.1 项目形式 466

23.1.2 团队结构 467

23.2 工作量评估方法 468

23.2.1 功能点方法 468

23.2.2 COCOMOⅡ模型 469

23.2.3 Delphi评估方法 474

23.2.4 敏捷评估 474

23.3 项目计划和调度 476

23.3.1 PERT图 476

23.3.2 Gantt图和人员分配 477

23.3.3 敏捷规划 478

23.4 风险管理 479

23.4.1 风险识别 479

23.4.2 风险分析和优先级划分 480

23.4.3 风险管理规划 482

23.4.4 风险解决和监控 482

23.5 过程改进 482

23.6 应用敏捷原则 484

23.7 项目管理的工具支持 484

小结 485

深入阅读 485

章节复习问题 486

练习 486

第24章 软件安全 488

24.1 什么是软件安全 489

24.2 安全要求 489

24.3 安全软件设计原则 490

24.4 安全软件设计模式 491

24.5 软件安全的7个最佳实践 493

24.6 通过攻击树进行风险分析 494

24.7 生命周期中的软件安全性 494

24.7.1 规划阶段的安全 495

24.7.2 迭代阶段的安全 501

24.8 应用敏捷原则 503

24.9 软件安全的工具支持 504

小结 504

深入阅读 505

章节复习问题 505

练习 506

附录A 个人软件过程:估计、规划和质量保证 507

A.1 PSP中的工作量估计 507

A.2 PSP中的软件质量保证 508

A.3 设计和质量 508

附录B Java技术 510

B.1 使用数据库连接 510

B.1.1 什么是数据库连接 510

B.1.2 设置数据源 510

B.1.3 从程序中访问数据库 511

B.2 使用Swing 512

B.2.1 用JFrame创建主窗口 512

B.2.2 利用布局管理器来布局组件 513

B.2.3 使用动作监听器处理按钮事件 515

B.2.4 实现绘图功能 515

B.3 使用JSP 517

B.3.1 什么是JSP 517

B.3.2 JSP工作流 517

B.3.3 用JSP容器安装Web服务器 518

B.3.4 使用JSP 518

附录C 软件工具 521

C.1 NetBeans 521

C.2 使用JUnit 522

C.3 在NetBeans中运行JUnit 525

C.4 Emma覆盖工具 525

C.5 Cobertura覆盖工具 526

C.6 使用HttpUnit测试Web应用程序 527

C.6.1 配置IDE 以使用HttpUnit 527

C.6.2 在HttpUnit中实现测试用例 528

C.7 在NetBeans中使用cvs和Subversion 529

C.7.1 创建CVS远程存储库 529

C.7.2 在NetBeans中安装Subversion 530

C.7.3 从存储库检出文件 531

C.7.4 编辑源和查看变更 533

C.7.5 查看文件状态 533

C.7.6 比较文件版本 534

C.7.7 合并存储库中的更改 534

C.7.8 解决冲突 534

C.7.9 更新本地副本 534

C.7.10 提交本地文件到存储库 535

C.7.11 导入文件到存储库 535

附录D 项目概要 536

D.1 汽车租赁系统 536

D.2 国家贸易展览服务系统 536

D.3 海外留学管理系统 537

D.4 UML类图编辑器 539

D.5 无线电通信模拟器 540

D.6 对象状态测试环境 541

参考文献 543