《软件工程面向对象和传统的方法 原书第7版》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美) Stephen R. Schach著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2007
  • ISBN:7111217225
  • 页数:385 页
图书介绍:本书对软件工程的基础知识(包括面向对象和传统方法)进行了严谨和全面的介绍,是软件工程领域的经典著作,被加州大学伯克利分校等180多所美国高校选作教材,至今已是第7版。新版中着重扩展了快捷过程和开源软件的内容。此外,崭新的Martha Stockton Greengage Foundation案例研究取代了以前的Osbert Oglesby案例研究。新案例突出显示统一过程的更多方面。本书共分两大部分:第一部分介绍基本的软件工程理论;第二部分讲述更实用的软件生命周期。作者采用这种独特的、极具可读性的组织方式,使学生和广大读者能够更加系统地学习软件工程的相关知识。

第一部分 软件工程概述 3

第1章 软件工程的范畴 3

1.1 历史方面 4

1.2 经济方面 5

1.3 维护性方面 6

1.3.1 维护的传统和现代观点 7

1.3.2 交付后维护的重要性 8

1.4 需求、分析和设计方面 9

1.5 小组编程方面 11

1.6 为什么没有计划阶段 12

1.7 为什么没有测试阶段 12

1.8 为什么没有文档阶段 12

1.9 面向对象范型 13

1.10 正确看待面向对象范型 16

1.11 术语 16

1.12 道德问题 19

本章回顾 19

进一步阅读指导 20

习题 20

参考文献 21

第2章 软件生命周期模型 25

2.1 理论上的软件开发 25

2.2 Winburg小型实例研究 25

2.3 Winburg小型实例研究心得 27

2.4 野鸭拖拉机公司小型实例研究 27

2.5 迭代和递增 28

2.6 修订的Winburg小型实例研究 30

2.7 迭代和递增的风险和其他方面 31

2.8 迭代和递增的控制 33

2.9 其他生命周期模型 34

2.9.1 编码-修补生命周期模型 34

2.9.2 瀑布生命周期模型 34

2.9.3 快速原型开发生命周期模型 35

2.9.4 开源生命周期模型 36

2.9.5 敏捷过程 38

2.9.6 同步-稳定生命周期模型 40

2.9.7 螺旋生命周期模型 40

2.10 生命周期模型的比较 43

本章回顾 43

进一步阅读指导 44

习题 44

参考文献 45

第3章 软件过程 48

3.1 统一过程 49

3.2 面向对象范型内的迭代和递增 50

3.3 需求流 50

3.4 分析流 51

3.5 设计流 53

3.6 实现流 53

3.7 测试流 54

3.7.1 需求制品 54

3.7.2 分析制品 54

3.7.3 设计制品 54

3.7.4 实现制品 55

3.8 交付后维护 56

3.9 退役 56

3.10 统一过程的各阶段 57

3.10.1 开始阶段 57

3.10.2 细化阶段 59

3.10.3 构建阶段 59

3.10.4 转换阶段 59

3.11 一维与二维生命周期模型 60

3.12 改进软件过程 61

3.13 能力成熟度模型 61

3.14 软件过程改进方面的其他努力 63

3.15 软件过程改进的代价和收益 64

本章回顾 65

进一步阅读指导 65

习题 66

参考文献 67

第4章 软件小组 70

4.1 小组组织 70

4.2 民主小组方法 71

4.3 传统的主程序员小组方法 72

4.3.1 《纽约时报》项目 73

4.3.2 传统的主程序员小组方法的不实用性 73

4.4 主程序员小组和民主小组之外的编程小组 74

4.5 同步-稳定小组 75

4.6 敏捷过程小组 76

4.7 开源编程小组 76

4.8 人员能力成熟度模型 77

4.9 选择合适的小组组织 77

本章回顾 78

进一步阅读指导 78

习题 78

参考文献 79

第5章 软件工程工具 80

5.1 逐步求精法 80

5.2 成本-效益分析法 84

5.3 软件度量 84

5.4 CASE 85

5.5 CASE的分类 86

5.6 CASE的范围 87

5.7 软件版本 89

5.7.1 修订版 89

5.7.2 变种版 90

5.8 配置控制 90

5.8.1 交付后维护期间的配置控制 92

5.8.2 基准 92

5.8.3 产品开发过程中的配置控制 92

5.9 建造工具 93

5.10 使用CASE技术提高生产力 93

本章回顾 94

进一步阅读指导 94

习题 95

参考文献 95

第6章 测试 98

6.1 质量问题 98

6.1.1 软件质量保证 99

6.1.2 管理独立 99

6.2 非执行测试 100

6.2.1 走查 100

6.2.2 管理走查 100

6.2.3 审查 101

6.2.4 审查与走查的对比 102

6.2.5 评审的优缺点 102

6.2.6 审查的度量 103

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 谁应当完成执行测试 110

6.7 测试什么时候停止 111

本章回顾 111

进一步阅读指导 112

习题 112

参考文献 114

第7章 从模块到对象 117

7.1 什么是模块 117

7.2 内聚 119

7.2.1 偶然性内聚 119

7.2.2 逻辑性内聚 120

7.2.3 时间性内聚 121

7.2.4 过程性内聚 121

7.2.5 通信性内聚 121

7.2.6 功能性内聚 121

7.2.7 信息性内聚 122

7.2.8 内聚示例 122

7.3 耦合 123

7.3.1 内容耦合 123

7.3.2 共用耦合 123

7.3.3 控制耦合 125

7.3.4 印记耦合 125

7.3.5 数据耦合 126

7.3.6 耦合示例 126

7.3.7 耦合的重要性 127

7.4 数据封装 128

7.4.1 数据封装和产品开发 130

7.4.2 数据封装和产品维护 130

7.5 抽象数据类型 135

7.6 信息隐藏 136

7.7 对象 138

7.8 继承、多态和动态绑定 140

7.9 面向对象范型 141

本章回顾 143

进一步阅读指导 143

习题 144

参考文献 145

第8章 可重用性和可移植性 147

8.1 重用的概念 147

8.2 重用的障碍 148

8.3 重用实例研究 150

8.3.1 Raytheon导弹系统部 150

8.3.2 欧洲航天局 151

8.4 对象和重用 151

8.5 设计和实现期间的重用 151

8.5.1 设计重用 152

8.5.2 应用框架 152

8.5.3 设计模式 153

8.5.4 软件体系结构 156

8.5.5 基于组件的软件工程 156

8.6 重用和交付后维护 157

8.7 可移植性 157

8.7.1 硬件的不兼容性 158

8.7.2 操作系统的不兼容性 158

8.7.3 数值计算软件的不兼容性 158

8.7.4 编译器的不兼容性 160

8.8 为什么需要可移植性 161

8.9 实现可移植性的技术 162

8.9.1 可移植的系统软件 162

8.9.2 可移植的应用软件 162

8.9.3 可移植的数据 163

本章回顾 164

进一步阅读指导 164

习题 165

参考文献 166

第9章 计划和估算 171

9.1 计划和软件过程 171

9.2 周期和成本估算 172

9.2.1 产品规模的度量 173

9.2.2 成本估算技术 175

9.2.3 中间COCOMO 176

9.2.4 COCOMO II 179

9.2.5 跟踪周期和成本估算 179

9.3 软件项目管理计划的组成 179

9.4 软件项目管理计划框架 180

9.5 IEEE软件项目管理计划 181

9.6 计划测试 183

9.7 计划面向对象的项目 184

9.8 培训需求 184

9.9 文档标准 185

9.10 用于计划和估算的CASE工具 185

9.11 测试软件项目管理计划 185

本章回顾 185

进一步阅读指导 186

习题 186

参考文献 187

第二部分 软件生命周期的各个工作流第10章 需求 191

10.1 确定客户需要什么 191

10.2 需求流概述 192

10.3 理解应用域 192

10.4 业务模型 192

10.4.1 访谈 193

10.4.2 其他技术 193

10.4.3 用例 194

10.5 初始需求 195

10.6 对应用领域的初始理解:MSG基金实例研究 195

10.7 初始业务模型:MSG基金实例研究 196

10.8 初始需求:MSG基金实例研究 199

10.9 继续需求流:MSG基金实例研究 200

10.10 修订需求:MSG基金实例研究 201

10.11 测试流:MSG基金实例研究 206

10.12 传统的需求阶段 213

10.13 快速原型开发 213

10.14 人的因素 214

10.15 重用快速原型 215

10.16 需求流的CASE工具 216

10.17 需求流的度量 216

10.18 需求流面临的挑战 216

本章回顾 217

进一步阅读指导 217

习题 218

参考文献 219

第11章 传统的分析 220

11.1 规格说明文档 220

11.2 非形式化规格说明 221

11.3 结构化系统分析 222

11.4 结构化系统分析:MSG基金实例研究 227

11.5 其他半形式化技术 228

11.6 建造实体-关系模型 229

11.7 有穷状态机 230

11.8 Petri网 234

11.9 Z 237

11.9.1 Z:电梯问题实例研究 237

11.9.2 Z的分析 239

11.10 其他的形式化技术 240

11.11 传统分析技术的比较 240

11.12 在传统分析阶段测试 241

11.13 传统分析阶段的CASE工具 241

11.14 传统分析阶段的度量 242

11.15 软件项目管理计划:MSG基金实例研究 242

11.16 传统分析阶段面临的挑战 242

本章回顾 243

进一步阅读指导 243

习题 244

参考文献 245

第12章 面向对象分析 249

12.1 分析流 249

12.2 抽取实体类 250

12.3 面向对象分析:电梯问题实例研究 250

12.4 功能建模:电梯问题实例研究 251

12.5 实体类建模:电梯问题实例研究 252

12.5.1 名词抽取 252

12.5.2 CRC卡片 253

12.6 动态建模:电梯问题实例研究 254

12.7 测试流:面向对象分析 256

12.8 抽取边界类和控制类 259

12.9 初始功能模型:MSG基金实例研究 259

12.10 初始类图:MSG基金实例研究 260

12.11 初始动态模型:MSG基金实例研究 262

12.12 修订实体类:MSG基金实例研究 264

12.13 抽取边界类:MSG基金实例研究 265

12.14 抽取控制类:MSG基金实例研究 265

12.15 用例实现:MSG基金实例研究 265

12.15.1 Estimate Funds Avaibuble for Week用例 266

12.15.2 Manage an Asset用例 270

12.15.3 Update Estimated Annual Operating Expenses用例 274

12.15.4 Produce a Report用例 275

12.16 类图递增:MSG基金实例研究 279

12.17 测试流:MSG基金实例研究 280

12.18 统一过程中的规格说明文档 280

12.19 关于参与者和用例更详细的内容 281

12.20 用于面向对象分析流的CASE工具 282

12.21 面向对象分析流所面临的挑战 282

本章回顾 283

进一步阅读指导 283

习题 284

参考文献 284

第13章 设计 286

13.1 设计和抽象 286

13.2 面向操作设计 287

13.3 数据流分析 287

13.3.1 小型实例研究:字数统计 288

13.3.2 数据流分析扩展 291

13.4 事务分析 292

13.5 面向数据设计 293

13.6 面向对象设计 293

13.7 面向对象设计:电梯问题实例研究 294

13.8 面向对象设计:MSG基金实例研究 297

13.9 设计流 300

13.10 测试流:设计 301

13.11 测试流:MSG基金实例研究 302

13.12 详细设计的形式化技术 302

13.13 实时设计技术 302

13.14 设计的CASE工具 303

13.15 设计的度量 303

13.16 设计流面临的挑战 304

本章回顾 305

进一步阅读指导 305

习题 305

参考文献 306

第14章 实现 309

14.1 编程语言的选择 309

14.2 第四代语言 311

14.3 良好的编程实践 312

14.3.1 使用一致和有意义的变量名 313

14.3.2 自文档代码的问题 314

14.3.3 使用参数 315

14.3.4 为增加可读性的代码编排 315

14.3.5 嵌套的if语句 315

14.4 编码标准 316

14.5 代码重用 317

14.6 集成 317

14.6.1 自顶向下的集成 317

14.6.2 自底向上的集成 318

14.6.3 三明治集成 319

14.6.4 面向对象产品的集成 320

14.6.5 集成的管理 320

14.7 实现流 320

14.8 实现流:MSG基金实例研究 321

14.9 测试流:实现 321

14.10 测试用例选择 321

14.10.1 规格说明测试与代码测试 321

14.10.2 规格说明测试的可行性 321

14.10.3 代码测试的可行性 322

14.11 黑盒单元测试技术 324

14.11.1 等价测试和边界值分析 324

14.11.2 功能测试 325

14.12 黑盒测试用例:MSG基金实例研究 326

14.13 玻璃盒单元测试技术 328

14.13.1 结构测试:语句、分支和路径覆盖 328

14.13.2 复杂性度量 329

14.14 代码走查和审查 329

14.15 单元测试技术的比较 329

14.16 净室 330

14.17 测试对象时潜在的问题 330

14.18 单元测试的管理方面 332

14.19 何时该重写而不是调试代码制品 333

14.20 集成测试 334

14.21 产品测试 334

14.22 验收测试 335

14.23 测试流:MSG基金实例研究 335

14.24 实现的CASE工具 335

14.24.1 软件开发全过程的CASE工具 335

14.24.2 集成化开发环境 336

14.24.3 商业应用环境 336

14.24.4 公共工具基础结构 337

14.24.5 环境的潜在问题 337

14.25 测试流的CASE工具 337

14.26 实现流的度量 338

14.27 实现流面临的挑战 338

本章回顾 339

进一步阅读指导 339

习题 340

参考文献 342

第15章 交付后维护 346

15.1 开发与维护 346

15.2 为什么交付后维护是必要的 347

15.3 对交付后维护程序员的要求是什么 347

15.4 交付后维护小型实例研究 349

15.5 交付后维护的管理 349

15.5.1 缺陷报告 349

15.5.2 批准对产品的修改 350

15.5.3 确保可维护性 351

15.5.4 迭代维护造成的问题 351

15.6 面向对象软件的维护 351

15.7 交付后维护技能与开发技能 353

15.8 逆向工程 354

15.9 交付后维护期间的测试 354

15.10 交付后维护的CASE工具 355

15.11 交付后维护的度量 355

15.12 交付后维护:MSG基金实例研究 355

15.13 交付后维护面临的挑战 355

本章小结 356

进一步阅读指导 356

习题 356

参考文献 357

第16章 UML的进一步讨论 360

16.1 UML不是一种方法 360

16.2 类图 360

16.2.1 聚合 361

16.2.2 多重性 362

16.2.3 组合 362

16.2.4 泛化 363

16.2.5 关联 363

16.3 注解 364

16.4 用例图 364

16.5 构造型 364

16.6 交互图 365

16.7 状态图 366

16.8 活动图 368

16.9 包 369

16.10 组件图 369

16.11 部署图 370

16.12 UML图回顾 370

16.13 UML和迭代 370

本章回顾 370

进一步阅读指导 370

习题 371

参考文献 371

附录 373

附录A 学期项目:Osric的办公室用具和装饰 373

附录B 软件工程资源 375

附录C 需求流:MSG基金实例研究 376

附录D 结构化系统分析:MSG基金实例研究 376

附录E 分析流:MSG基金实例研究 378

附录F 软件项目管理计划:MSG基金实例研究 378

附录G 设计流:MSG基金实例研究 380

附录H 实现流:MSG基金实例研究(C++版) 385

附录I 实现流:MSG基金实例研究(Java版) 385

附录J 测试流:MSG基金实例研究 385