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

  • 购买积分:13 如何计算积分?
  • 作  者:(美)沙赫著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2012
  • ISBN:711136273X
  • 页数:380 页
图书介绍:本书是软件工程领域的经典著作,被加州大学伯克利分校等180多所美国高校选作教材。本书第8版继续保持了前七版的特色,采用传统方法与面向对象方法并重的方式,全面系统地介绍软件工程的理论与实践,并新增了第10章(第一部分的关键内容)和第18章(新兴技术)两章内容。全书分为两大部分,第一部分介绍软件工程概念,第二部分着重软件工程技术,教师可根据不同教学目的从任一部分开始讲授课程。本书是高等院校软件工程课程的理想教材,同时也是专业软件开发人员和管理者的理想参考书。

第1章 软件工程的范畴 1

1.1历史方面 2

1.2经济方面 4

1.3维护性方面 4

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

1.3.2交付后维护的重要性 7

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

1.5小组编程方面 9

1.6为什么没有计划阶段 10

1.7为什么没有测试阶段 11

1.8为什么没有文档阶段 11

1.9面向对象范型 11

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

1.11术语 15

1.12道德问题 17

本章回顾 18

进一步阅读指导 18

习题 19

第一部分软件工程概念 23

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

2.1理论上的软件开发 23

2.2 Winburg小型实例研究 23

2.3 Winburg小型实例研究心得 25

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

2.5迭代和递增 26

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

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

2.8迭代和递增的控制 32

2.9其他生命周期模型 32

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

2.9.2瀑布生命周期模型 32

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

2.9.4开源生命周期模型 34

2.9.5敏捷过程 36

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

2.9.7螺旋生命周期模型 38

2.10生命周期模型的比较 41

本章回顾 41

进一步阅读指导 42

习题 43

第3章 软件过程 44

3.1统一过程 45

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

3.3需求流 47

3.4分析流 47

3.5设计流 49

3.6实现流 50

3.7测试流 50

3.7.1需求制品 50

3.7.2分析制品 50

3.7.3设计制品 51

3.7.4实现制品 51

3.8交付后维护 52

3.9退役 52

3.10统一过程的各阶段 53

3.10.1开始阶段 53

3.10.2细化阶段 55

3.10.3构建阶段 55

3.10.4转换阶段 55

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

3.12改进软件过程 57

3.13能力成熟度模型 57

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

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

本章回顾 61

进一步阅读指导 62

习题 62

第4章 软件小组 64

4.1小组组织 64

4.2民主小组方法 65

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

4.3.1《纽约时报》项目 67

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

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

4.5同步-稳定小组 69

4.6敏捷过程小组 70

4.7开源编程小组 70

4.8人员能力成熟度模型 71

4.9选择合适的小组组织 71

本章回顾 72

进一步阅读指导 72

习题 73

第5章 软件工程工具 74

5.1逐步求精法 74

5.2成本-效益分析法 78

5.3分治 79

5.4关注分离 79

5.5软件度量 79

5.6 CASE 80

5.7 CASE的分类 81

5.8 CASE的范围 82

5.9软件版本 84

5.9.1修订版 85

5.9.2变种版 85

5.10配置控制 85

5.10.1交付后维护期间的配置控制 87

5.10.2基准 87

5.10.3产品开发过程中的配置控制 87

5.11建造工具 88

5.12使用CASE技术提高生产力 88

本章回顾 89

进一步阅读指导 89

习题 90

第6章 测试 92

6.1质量问题 92

6.1.1软件质量保证 93

6.1.2管理独立 93

6.2非执行测试 94

6.2.1走查 94

6.2.2管理走查 94

6.2.3审查 95

6.2.4审查与走查的对比 96

6.2.5评审的优缺点 96

6.2.6审查的度量 97

6.3执行测试 97

6.4应该测试什么 97

6.4.1实用性 98

6.4.2可靠性 98

6.4.3健壮性 98

6.4.4性能 98

6.4.5正确性 99

6.5测试与正确性证明 100

6.5.1正确性证明的例子 100

6.5.2正确性证明小型实例研究 102

6.5.3正确性证明和软件工程 103

6.6谁应当完成执行测试 104

6.7测试什么时候停止 105

本章回顾 105

进一步阅读指导 106

习题 106

第7章 从模块到对象 108

7.1什么是模块 108

7.2内聚 110

7.2.1偶然性内聚 110

7.2.2逻辑性内聚 111

7.2.3时间性内聚 111

7.2.4过程性内聚 112

7.2.5通信性内聚 112

7.2.6功能性内聚 112

7.2.7信息性内聚 113

7.2.8内聚示例 113

7.3耦合 114

7.3.1内容耦合 114

7.3.2共用耦合 114

7.3.3控制耦合 115

7.3.4印记耦合 116

7.3.5数据耦合 117

7.3.6耦合示例 117

7.3.7耦合的重要性 118

7.4数据封装 118

7.4.1数据封装和产品开发 120

7.4.2数据封装和产品维护 121

7.5抽象数据类型 125

7.6信息隐藏 126

7.7对象 127

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

7.9面向对象范型 131

本章回顾 133

进一步阅读指导 133

习题 134

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

8.1重用的概念 136

8.2重用的障碍 138

8.3重用实例研究 139

8.3.1 Raytheon导弹系统部 139

8.3.2欧洲航天局 140

8.4对象和重用 140

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

8.5.1设计重用 141

8.5.2应用框架 141

8.5.3设计模式 142

8.5.4软件体系结构 143

8.5.5基于组件的软件工程 144

8.6其他设计模式 144

8.6.1 FLIC小型实例研究 144

8.6.2适配器设计模式 145

8.6.3桥设计模式 145

8.6.4迭代器设计模式 146

8.6.5抽象工厂设计模式 147

8.7设计模式的种类 149

8.8设计模式的优缺点 150

8.9重用及互联网 151

8.10重用和交付后维护 151

8.11可移植性 152

8.11.1硬件的不兼容性 152

8.11.2操作系统的不兼容性 153

8.11.3数值计算软件的不兼容性 153

8.11.4编译器的不兼容性 154

8.12为什么需要可移植性 156

8.13实现可移植性的技术 157

8.13.1可移植的系统软件 157

8.13.2可移植的应用软件 157

8.13.3可移植的数据 158

8.13.4模型驱动结构 158

本章回顾 159

进一步阅读指导 159

习题 160

第9章 计划和估算 162

9.1计划和软件过程 162

9.2周期和成本估算 163

9.2.1产品规模的度量 164

9.2.2成本估算技术 166

9.2.3中间COCOMO 167

9.2.4 COCOMO11 170

9.2.5跟踪周期和成本估算 170

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

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

9.5 IEEE软件项目管理计划 172

9.6计划测试 174

9.7计划面向对象的项目 175

9.8培训需求 175

9.9文档标准 176

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

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

本章回顾 176

进一步阅读指导 177

习题 177

第二部分 软件生命周期的工作流 180

第10章 第一部分的关键内容 180

10.1软件开发:理论与实践 180

10.2迭代和递增 180

10.3统一过程 183

10.4工作流概述 183

10.5软件小组 184

10.6成本-效益分析法 184

10.7度量 184

10.8 CASE 184

10.9版本和配置 185

10.10测试术语 185

10.11执行测试和非执行测试 185

10.12模块性 185

10.13重用 186

10.14软件项目管理计划 186

本章回顾 186

习题 186

第11章 需求 188

11.1确定客户需要什么 188

11.2需求流概述 189

11.3理解应用域 189

11.4业务模型 190

11.4.1访谈 190

11.4.2其他技术 190

11.4.3用例 191

11.5初始需求 192

11.6对应用域的初始理解:MSG基金实例研究 192

11.7初始业务模型:MSG基金实例研究 194

11.8初始需求:MSG基金实例研究 196

11.9继续需求流:MSG基金实例研究 197

11.10修订需求:MSG基金实例研究 198

11.11测试流:MSG基金实例研究 203

11.12传统的需求阶段 209

11.13快速原型开发 209

11.14人的因素 210

11.15 重用快速原型 211

11.16需求流的CASE工具 212

11.17需求流的度量 212

11.18需求流面临的挑战 213

本章回顾 214

进一步阅读指导 214

习题 215

第12章 传统的分析 217

12.1规格说明文档 217

12.2非形式化规格说明 218

12.3结构化系统分析 219

12.4结构化系统分析:MSG基金实例研究 224

12.5其他半形式化技术 225

12.6建造实体-关系模型 226

12.7有穷状态机 227

12.8 Petri网 231

12.9 Z 234

12.9.1 Z:电梯问题实例研究 234

12.9.2 Z的分析 236

12.10其他的形式化技术 236

12.11传统分析技术的比较 237

12.12在传统分析阶段测试 238

12.13传统分析阶段的CASE工具 238

12.14传统分析阶段的度量 239

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

12.16传统分析阶段面临的挑战 239

本章回顾 239

进一步阅读指导 240

习题 241

第13章 面向对象分析 244

13.1分析流 244

13.2抽取实体类 245

13.3面向对象分析:电梯问题实例研究 245

13.4功能建模:电梯问题实例 研究 246

13.5实体类建模:电梯问题实例研究 247

13.5.1名词抽取 248

13.5.2 CRC卡片 249

13.6动态建模:电梯问题实例研究 249

13.7测试流:面向对象分析 251

13.8抽取边界类和控制类 257

13.9初始功能模型:MSG基金实例研究 257

13.10初始类图:MSG基金实例研究 258

13.11初始动态模型:MSG基金实例研究 260

13.12修订实体类:MSG基金实例研究 261

13.13抽取边界类:MSG基金实例研究 262

13.14抽取控制类:MSG基金实例研究 263

13.15 用例实现:MSG基金实例研究 263

13.15.1 Estimate Funds Availablefor Week用例 263

13.15.2 Manage an Asset用例 268

13.15.3 Update Estimated AnnualOperating Expenses用例 271

13.15.4 Produce a Report用例 271

13.16类图递增:MSG基金实例研究 276

13.17测试流:MSG基金实例研究 277

13.18统一过程中的规格说明文档 277

13.19关于参与者和用例更详细的内容 278

13.20面向对象分析流的CASE工具 279

13.21面向对象分析流的度量 279

13.22面向对象分析流面临的挑战 279

本章回顾 280

进一步阅读指导 281

习题 281

第14章 设计 283

14.1设计和抽象 283

14.2面向操作设计 284

14.3数据流分析 284

14.3.1小型实例研究:字数统计 285

14.3.2数据流分析扩展 287

14.4事务分析 289

14.5面向数据设计 290

14.6面向对象设计 290

14.7面向对象设计:电梯问题实例研究 291

14.8面向对象设计:MSG基金实例研究 293

14.9设计流 297

14.10测试流:设计 298

14.11测试流:MSG基金实例研究 299

14.12详细设计的形式化技术 299

14.13实时设计技术 299

14.14设计的CASE工具 300

14.15 设计的度量 300

14.16设计流面临的挑战 301

本章回顾 301

进一步阅读指导 302

习题 302

第15章 实现 304

15.1编程语言的选择 304

15.2第四代语言 306

15.3良好的编程实践 308

15.3.1使用一致和有意义的变量名 308

15.3.2自文档代码的问题 309

15.3.3使用参数 310

15.3.4为增加可读性的代码编排 310

15.3.5嵌套的if语句 310

15.4编码标准 311

15.5代码重用 312

15.6集成 312

15.6.1自顶向下的集成 312

15.6.2自底向上的集成 314

15.6.3三明治集成 314

15.6.4面向对象产品的集成 315

15.6.5集成的管理 315

15.7实现流 315

15.8实现流:MSG基金实例研究 315

15.9测试流:实现 316

15.10测试用例选择 316

15.10.1规格说明测试与代码测试 316

15.10.2规格说明测试的可行性 316

15.10.3代码测试的可行性 317

15.11黑盒单元测试技术 318

15.11.1等价测试和边界值分析 319

15.11.2功能测试 320

15.12黑盒测试用例:MSG基金实例研究 320

15.13玻璃盒单元测试技术 322

15.13.1结构测试:语句、分支和路径覆盖 322

15.13.2复杂性度量 323

15.14代码走查和审查 324

15.15 单元测试技术的比较 324

15.16净室 325

15.17测试对象时潜在的问题 325

15.18单元测试的管理方面 327

15.19何时该重实现而不是调试代码制品 327

15.20集成测试 328

15.21产品测试 329

15.22验收测试 329

15.23测试流:MSG基金实例研究 330

15.24实现的CASE工具 330

15.24.1软件开发全过程的CASE工具 330

15.24.2集成化开发环境 330

15.24.3商业应用环境 331

15.24.4公共工具基础结构 331

15.24.5环境的潜在问题 332

15.25测试流的CASE工具 332

15.26实现流的度量 332

15.27实现流面临的挑战 333

本章回顾 333

进一步阅读指导 334

习题 335

第16章 交付后维护 337

16.1开发与维护 337

16.2为什么交付后维护是必要的 338

16.3对交付后维护程序员的要求是什么 338

16.4交付后维护小型实例研究 340

16.5交付后维护的管理 341

16.5.1缺陷报告 341

16.5.2批准对产品的修改 341

16.5.3确保可维护性 342

16.5.4迭代维护造成的问题 342

16.6面向对象软件的维护 342

16.7交付后维护技能与开发技能 344

16.8逆向工程 345

16.9交付后维护期间的测试 345

16.10交付后维护的CASE工具 346

16.11交付后维护的度量 346

16.12交付后维护:MSG基金实例研究 346

16.13交付后维护面临的挑战 346

本章回顾 347

进一步阅读指导 347

习题 347

第17章UML的进一步讨论 349

17.1 UML不是一种方法 349

17.2类图 350

17.2.1聚合 350

17.2.2多重性 350

17.2.3组合 352

17.2.4泛化 352

17.2.5关联 352

17.3注解 353

17.4用例图 353

17.5构造型 353

17.6交互图 354

17.7状态图 355

17.8活动图 357

17.9包 358

17.10组件图 358

17.11部署图 359

17.12 UML图回顾 359

17.13 UML和迭代 359

本章回顾 359

进一步阅读指导 359

习题 359

第18章 新兴技术 361

18.1面向层面技术 361

18.2模型驱动技术 363

18.3基于组件技术 364

18.4面向服务技术 364

18.5面向服务技术和基于组件技术的比较 364

18.6社交计算 365

18.7 Web工程 365

18.8云技术 366

18.9 Web 3.0 366

18.10计算机安全 366

18.11模型检查 367

18.12目前和未来 367

本章回顾 367

进一步阅读指导 367

附录 368

附录A学期项目:巧克力爱好者匿名 368

附录B软件工程资源 370

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

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

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

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

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

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

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

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