《软件工程 修订版 第4版》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)莎丽·劳伦斯·弗里格(Shari Lawrence Pfleeger),(加)乔安妮·M.阿特利
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2019
  • ISBN:9787115498076
  • 页数:551 页
图书介绍:本书是软件工程领域的经典著作,被国际上众多名校采用为教材。本书分为3个部分:第一部分讨论项目计划的相关概念及其与软件开发过程的相关性;第二部分论述开发和维护的主要步骤;第三部分讲述软件评估和改进。两个贯穿全书的研究案例——一个信息系统和一个实时系统,以及书中的学期项目,引导读者很好地将概念有机地应用到实际项目中去。

第1章 软件工程概述 1

1.1什么是软件工程 1

1.1.1问题求解 2

1.1.2软件工程师的角色是什么 3

1.2软件工程取得了哪些进展 4

1.3什么是好的软件 6

1.3.1产品的质量 7

1.3.2过程的质量 8

1.3.3商业环境背景下的质量 8

1.4软件工程涉及的人员 10

1.5系统的方法 11

1.5.1系统的要素 11

1.5.2相互联系的系统 13

1.6工程的方法 14

1.6.1盖房子 15

1.6.2构建系统 16

1.7开发团队的成员 17

1.8软件工程发生了多大的变化 19

1.8.1变化的本质 19

1.8.2软件工程的W asserman规范 20

1.9信息系统的例子 25

1.10实时系统的例子 26

1.11本章对单个开发人员的意义 27

1.12本章对开发团队的意义 28

1.13本章对研究人员的意义 28

1.14学期项目 28

1.15 主要参考文献 29

1.16练习 30

第2章 过程和生命周期的建模 32

2.1过程的含义 32

2.2软件过程模型 34

2.2.1瀑布模型 34

2.2.2 V模型 37

2.2.3原型化模型 37

2.2.4可操作规格说明 38

2.2.5可转换模型 38

2.2.6阶段化开发:增量和迭代 39

2.2.7螺旋模型 40

2.2.8敏捷方法 41

2.3过程建模工具和技术 44

2.3.1静态建模:Lai表示法 45

2.3.2动态建模:系统动力学 47

2.4实际的过程建模 49

2.4.1 Marvel的案例研究 49

2.4.2过程建模工具和技术应该具有的特性 51

2.5信息系统的例子 51

2.6实时系统的例子 53

2.7本章对单个开发人员的意义 54

2.8本章对开发团队的意义 54

2.9本章对研究人员的意义 54

2.10学期项目 54

2.11主要参考文献 56

2.12练习 57

第3章 计划和管理项目 58

3.1跟踪项目进展 58

3.1.1工作分解和活动图 60

3.1.2估算完成时间 61

3.1.3跟踪进展的工具 65

3.2项目人员 67

3.2.1人员角色和特性 67

3.2.2工作风格 70

3.2.3项目组织 71

3.3工作量估算 73

3.3.1专家判断 75

3.3.2算法方法 77

3.3.3机器学习方法 81

3.3.4找出适合具体情形的模型 83

3.4风险管理 84

3.4.1什么是风险 84

3.4.2风险管理活动 85

3.5项目计划 87

3.6过程模型和项目管理 88

3.6.1注册管理 88

3.6.2责任建模 90

3.6.3紧密结合里程碑 92

3.7信息系统的例子 94

3.8实时系统的例子 95

3.9本章对单个开发人员的意义 96

3.10本章对开发团队的意义 96

3.11本章对研究人员的意义 96

3.12学期项目 96

3.13主要参考文献 97

3.14练习 97

第4章 获取需求 100

4.1需求过程 101

4.2需求引发 102

4.3需求的类型 105

4.3.1解决冲突 107

4.3.2两种需求文档 108

4.4需求的特性 109

4.5建模表示法 110

4.5.1实体-联系图 111

4.5.2例子:UML类图 112

4.5.3事件踪迹 114

4.5.4例子:消息时序图 114

4.5.5状态机 115

4.5.6例子:UML状态图 116

4.5.7例子:Petri网 119

4.5.8 数据流图 121

4.5.9例子:用例 122

4.5.10函数和关系 123

4.5.11例子:判定表 124

4.5.12例子:Parnas表 124

4.5.13逻辑 125

4.5.14例子:对象约束语言(OCL) 126

4.5.15例子:Z 127

4.5.16代数规格说明 129

4.5.17例子:SDL数据 130

4.6需求和规格说明语言 132

4.6.1统一建模语言(UML) 132

4.6.2规格说明和描述语言(SDL) 133

4.6.3软件成本降低(SCR) 133

4.6.4需求表示法的其他特征 134

4.7原型化需求 134

4.8需求文档 135

4.8.1需求定义 136

4.8.2需求规格说明 137

4.8.3过程管理和需求的可跟踪性 138

4.9确认和验证 138

4.9.1需求确认 139

4.9.2验证 141

4.10测量需求 142

4.11选择规格说明技术 143

4.12信息系统的例子 145

4.13实时系统的例子 147

4.14本章对单个开发人员的意义 149

4.15本章对开发团队的意义 149

4.16本章对研究人员的意义 149

4.17学期项目 150

4.17.1前提和假设 150

4.17.2功能的高层描述 150

4.17.3功能需求 150

4.17.4数据约束 151

4.17.5设计和接口约束 152

4.17.6质量需求 152

4.18主要参考文献 152

4.19练习 153

第5章 设计体系结构 156

5.1设计过程 156

5.1.1设计是一种创造性过程 157

5.1.2设计过程模型 160

5.2体系结构建模 161

5.3分解和视图 162

5.4体系结构风格和策略 165

5.4.1管道和过滤器 165

5.4.2客户-服务器 166

5.4.3对等网络 167

5.4.4发布-订阅 168

5.4.5信息库 168

5.4.6分层 169

5.4.7组合体系结构风格 170

5.5满足质量属性 171

5.5.1可修改性 171

5.5.2性能 173

5.5.3安全性 174

5.5.4可靠性 175

5.5.5健壮性 177

5.5.6易使用性 178

5.5.7商业目标 178

5.6协作设计 179

5.7体系结构的评估和改进 180

5.7.1测量设计质量 181

5.7.2故障树分析 181

5.7.3安全性分析 183

5.7.4权衡分析 184

5.7.5成本效益分析 188

5.7.6原型化 190

5.8文档化软件体系结构 191

5.8.1视图间的映射 193

5.8.2文档化设计合理性 193

5.9体系结构设计评审 193

5.9.1确认 194

5.9.2验证 194

5.10软件产品线 195

5.10.1战略范围 197

5.10.2产品线体系结构的优势 197

5.10.3产品线的演化 198

5.11信息系统的例子 198

5.12实时系统的例子 200

5.13本章对单个开发人员的意义 201

5.14本章对开发团队的意义 201

5.15本章对研究人员的意义 202

5.16学期项目 202

5.17主要参考文献 203

5.18练习 203

第6章 设计模块 205

6.1设计方法 205

6.2设计原则 207

6.2.1模块化 207

6.2.2接口 212

6.2.3信息隐藏 213

6.2.4增量式开发 214

6.2.5抽象 215

6.2.6通用性 216

6.3面向对象的设计 218

6.3.1术语 218

6.3.2继承与对象组合 221

6.3.3可替换性 222

6.3.4德米特法则 223

6.3.5依赖倒置 224

6.4在UML中体现面向对象设计 225

6.4.1过程中的UML 225

6.4.2 UML类图 227

6.4.3其他UML图 232

6.5面向对象设计模式 240

6.5.1模板方法模式 241

6.5.2工厂方法模式 241

6.5.3策略模式 242

6.5.4装饰者模式 242

6.5.5观察者模式 244

6.5.6组合模式 244

6.5.7访问者模式 245

6.6设计中其他方面的考虑 247

6.6.1数据管理 247

6.6.2异常处理 247

6.6.3用户界面设计 249

6.6.4框架 250

6.7面向对象度量 250

6.7.1面向对象系统规模的度量 251

6.7.2面向对象系统设计质量的度量 252

6.7.3在何处进行面向对象测量 258

6.8设计文档 259

6.9信息系统的例子 261

6.10实时系统的例子 262

6.11本章对单个开发人员的意义 263

6.12本章对开发团队的意义 263

6.13本章对研究人员的意义 263

6.14学期项目 263

6.15 主要参考文献 264

6.16练习 264

第7章 编写程序 267

7.1编程标准和过程 267

7.1.1对单个开发人员的标准 268

7.1.2对其他开发人员的标准 268

7.1.3设计和实现的匹配 269

7.2编程的指导原则 269

7.2.1控制结构 269

7.2.2算法 270

7.2.3数据结构 271

7.2.4通用性指导原则 273

7.3文档 276

7.3.1内部文档 276

7.3.2外部文档 279

7.4编程过程 280

7.4.1将编程作为问题求解 280

7.4.2极限编程 281

7.4.3结对编程 281

7.4.4编程向何处去 282

7.5信息系统的例子 282

7.6实时系统的例子 283

7.7本章对单个开发人员的意义 284

7.8本章对开发团队的意义 284

7.9本章对研究人员的意义 284

7.10学期项目 285

7.11主要参考文献 285

7.12练习 285

第8章 测试程序 287

8.1软件故障和失效 287

8.1.1故障的类型 288

8.1.2正交缺陷分类 289

8.2测试的相关问题 291

8.2.1测试的组织 291

8.2.2对测试的态度 292

8.2.3谁执行测试 293

8.2.4测试对象的视图 293

8.3单元测试 295

8.3.1检查代码 295

8.3.2证明代码正确性 297

8.3.3测试程序构件 301

8.3.4技术比较 304

8.4集成测试 305

8.4.1自底向上集成 305

8.4.2自顶向下集成 306

8.4.3一次性集成 308

8.4.4三明治集成 308

8.4.5集成策略的比较 309

8.5测试面向对象系统 311

8.5.1代码测试 311

8.5.2面向对象测试和传统测试之间的区别 311

8.6测试计划 313

8.6.1计划的目的 313

8.6.2计划的内容 313

8.7自动测试工具 314

8.7.1代码分析工具 314

8.7.2测试执行工具 315

8.7.3测试用例生成器 316

8.8什么时候停止测试 316

8.8.1故障播种 317

8.8.2软件中的可信度 318

8.8.3其他的停止测试的标准 319

8.8.4识别易出故障的代码 319

8.9信息系统的例子 320

8.10实时系统的例子 321

8.11本章对单个开发人员的意义 321

8.12本章对开发团队的意义 322

8.13本章对研究人员的意义 322

8.14学期项目 322

8.15 主要参考文献 322

8.16练习 323

第9章 测试系统 325

9.1系统测试的原则 325

9.1.1软件故障根源 325

9.1.2系统测试过程 327

9.1.3配置管理 329

9.1.4 测试小组 333

9.2功能测试 334

9.2.1目的与职责 334

9.2.2因果图 335

9.3性能测试 338

9.3.1目的和职责 338

9.3.2性能测试的类型 338

9.4可靠性、可用性以及可维护性 339

9.4.1定义 339

9.4.2失效数据 340

9.4.3测量可靠性、可用性和可维护性 341

9.4.4可靠性稳定性和可靠性增长 342

9.4.5可靠性预测 343

9.4.6操作环境的重要性 345

9.5验收测试 346

9.5.1目的和职责 346

9.5.2验收测试的种类 346

9.5.3验收测试的结果 347

9.6安装测试 348

9.7自动化系统测试 348

9.8测试文档 349

9.8.1测试计划 349

9.8.2测试规格说明和评估 351

9.8.3测试描述 353

9.8.4测试分析报告 355

9.8.5问题报告表 355

9.9测试安全攸关的系统 357

9.9.1设计多样性 358

9.9.2软件安全性案例 359

9.9.3净室方法 361

9.10信息系统的例子 364

9.11实时系统的例子 366

9.12本章对单个开发人员的意义 367

9.13本章对开发团队的意义 367

9.14本章对研究人员的意义 367

9.15 学期项目 367

9.16主要参考文献 368

9.17练习 368

第10章 交付系统 372

10.1培训 372

10.1.1培训的种类 373

10.1.2培训助手 374

10.1.3培训的指导原则 375

10.2文档 375

10.2.1文档的种类 375

10.2.2用户帮助和疑难解答 379

10.3信息系统的例子 380

10.4实时系统的例子 381

10.5本章对单个开发人员的意义 381

10.6本章对开发团队的意义 381

10.7本章对研究人员的意义 382

10.8学期项目 382

10.9主要参考文献 382

10.10练习 382

第11章 维护系统 384

11.1变化的系统 384

11.1.1系统的类型 384

11.1.2在系统生命周期过程中发生的变化 387

11.1.3系统生命周期跨度 388

11.2维护的本质 389

11.3维护问题 392

11.3.1人员问题 392

11.3.2技术问题 393

11.3.3必要的妥协 394

11.3.4维护成本 395

11.4测量维护特性 397

11.4.1可维护性的外部视图 398

11.4.2影响可维护性的内部属性 398

11.4.3其他的产品测量 400

11.5维护技术和工具 401

11.5.1配置管理 401

11.5.2影响分析 403

11.5.3自动化维护工具 406

11.6软件再生 407

11.6.1文档重构 408

11.6.2重组 409

11.6.3逆向工程 410

11.6.4再工程 410

11.6.5软件再生的前景 411

11.7信息系统的例子 412

11.8实时系统的例子 412

11.9本章对单个开发人员的意义 413

11.10本章对开发团队的意义 413

11.11本章对研究人员的意义 414

11.12学期项目 414

11.13主要参考文献 414

11.14练习 414

第12章 评估产品、过程和资源 416

12.1评估的方法 416

12.1.1特征分析 416

12.1.2调查 417

12.1.3案例研究 417

12.1.4正式试验 418

12.1.5准备评估 418

12.2选择评估技术 419

12.2.1关键选择因素 420

12.2.2相信什么 420

12.3评价与预测 423

12.3.1确认预测系统 423

12.3.2确认测量 425

12.3.3对确认的紧迫需求 425

12.4评估产品 426

12.4.1产品质量模型 426

12.4.2建立基线和设定目标 430

12.4.3软件可复用性 431

12.5评估过程 437

12.5.1事后分析 437

12.5.2过程成熟度模型 441

12.6评估资源 448

12.6.1人员成熟度模型 448

12.6.2投资回报 450

12.7信息系统的例子 451

12.8实时系统的例子 452

12.9本章对单个开发人员的意义 452

12.10本章对开发团队的意义 452

12.11本章对研究人员的意义 453

12.12学期项目 453

12.13主要参考文献 453

12.14练习 454

第13章 改进预测、产品、过程和资源 455

13.1改进预测 455

13.1.1预测的精确性 455

13.1.2处理偏误:u曲线 456

13.1.3处理噪声:prequential似然度 458

13.1.4重新校准预测 459

13.2改进产品 462

13.2.1审查 462

13.2.2复用 464

13.3改进过程 465

13.3.1过程和能力成熟度 465

13.3.2维护 467

13.3.3净室方法 468

13.4改进资源 470

13.4.1工作环境 470

13.4.2成本和进度的权衡 471

13.5总体改进指导原则 472

13.6 信息系统的例子 473

13.7实时系统的例子 473

13.8本章对单个开发人员的意义 473

13.9本章对开发团队的意义 474

13.10本章对研究人员的意义 474

13.11学期项目 474

13.12主要参考文献 475

13.13练习 475

第14章 软件工程的未来 476

14.1已经取得的进展 476

14.1.1 Wasserman的获得成熟度的措施 476

14.1.2当前要做的工作 478

14.2技术转移 478

14.2.1现在我们怎样做出技术转移的决策 479

14.2.2在技术决策中使用证据 479

14.2.3支持技术决策的证据 480

14.2.4对证据的进一步讨论 481

14.2.5技术转移的新模型 483

14.2.6改进技术转移的下一步 483

14.3软件工程中的决策 484

14.3.1大量的决策 484

14.3.2群体决策 486

14.3.3我们实际上如何决策 486

14.3.4群体实际上如何决策 488

14.3.5一个适度的观察研究 489

14.3.6获得的经验教训 492

14.4软件工程的职业化:执照发放、认证和伦理 492

14.4.1将重点放在人员上 493

14.4.2软件工程教育 493

14.4.3软件工程知识体系 495

14.4.4给软件工程师颁发执照 496

14.4.5认证 500

14.4.6伦理守则 502

14.4.7职业发展 503

14.4.8研究和实践的进一步发展 504

14.5学期项目 505

14.6主要参考文献 505

14.7练习 505

参考文献注解 507

索引 536