《软件工程 实践者的研究方法》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)罗杰·S.普莱斯曼(Roger S.Pressman),(美)布鲁斯·R.马克西姆(Bruce R.Maxim)著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2016
  • ISBN:7111548973
  • 页数:666 页
图书介绍:本书自第1版出版至今,30多年来在软件工程界产生了巨大而深远的影响。第8版不仅加入了移动应用软件项目等与时俱进的内容,而且调整了篇章结构,更利于教师针对不同课程进行选择。同时,第8版全面继承了之前版本的风格与优势,全面且系统地讲解软件过程、建模、质量管理、项目管理等基础知识,涵盖相关概念、原则、方法和工具,并且提供丰富的辅助阅读资源和网络资源,指导有兴趣的读者进行更深入的学习和研究。本书适合作为软件工程相关专业高年级本科生和研究生教材,也可供软件专业技术人员和管理人员阅读参考。

第1章 软件的本质 1

1.1 软件的本质 3

1.1.1 定义软件 3

1.1.2 软件应用领域 4

1.1.3 遗留软件 5

1.2 软件的变更本质 6

1.2.1 WebApp 6

1.2.2 移动App 7

1.2.3 云计算 7

1.2.4 产品线软件 8

1.3 小结 8

习题与思考题 8

扩展阅读与信息资源 9

第2章 软件工程 10

2.1 定义软件工程学科 11

2.2 软件过程 11

2.2.1 过程框架 12

2.2.2 普适性活动 12

2.2.3 过程的适应性调整 13

2.3 软件工程实践 13

2.3.1 实践的精髓 14

2.3.2 通用原则 14

2.4 软件开发神话 16

2.5 这一切是如何开始的 18

2.6 小结 19

习题与思考题 19

扩展阅读与信息资源 19

第一部分 软件过程 22

第3章 软件过程结构 22

3.1 通用过程模型 23

3.2 定义框架活动 24

3.3 明确任务集 24

3.4 过程模式 25

3.5 过程评估与改进 27

3.6 小结 28

习题与思考题 28

扩展阅读与信息资源 28

第4章 过程模型 29

4.1 惯用过程模型 30

4.1.1 瀑布模型 30

4.1.2 增量过程模型 32

4.1.3 演化过程模型 32

4.1.4 并发模型 36

4.1.5 演化过程的最终评述 37

4.2 专用过程模型 38

4.2.1 基于构件的开发 38

4.2.2 形式化方法模型 39

4.2.3 面向方面的软件开发 39

4.3 统一过程 40

4.3.1 统一过程的简史 41

4.3.2 统一过程的阶段 41

4.4 个人过程模型和团队过程模型 42

4.4.1 个人软件过程 42

4.4.2 团队软件过程 43

4.5 过程技术 44

4.6 产品和过程 45

4.7 小结 46

习题与思考题 46

扩展阅读与信息资源 47

第5章 敏捷开发 48

5.1 什么是敏捷 49

5.2 敏捷及变更成本 50

5.3 什么是敏捷过程 50

5.3.1 敏捷原则 51

5.3.2 敏捷开发战略 52

5.4 极限编程 52

5.4.1 极限编程过程 52

5.4.2 工业极限编程 54

5.5 其他敏捷过程模型 56

5.5.1 Scrum 56

5.5.2 动态系统开发方法 57

5.5.3 敏捷建模 58

5.5.4 敏捷统一过程 59

5.6 敏捷过程工具集 60

5.7 小结 61

习题与思考题 61

扩展阅读与信息资源 62

第6章 软件工程的人员方面 64

6.1 软件工程师的特质 64

6.2 软件工程心理学 65

6.3 软件团队 66

6.4 团队结构 67

6.5 敏捷团队 68

6.5.1 通用敏捷团队 68

6.5.2 XP团队 69

6.6 社交媒体的影响 70

6.7 软件工程中云的应用 71

6.8 协作工具 71

6.9 全球化团队 72

6.10 小结 73

习题与思考题 73

扩展阅读与信息资源 74

第二部分 建模 76

第7章 指导实践的原则 76

7.1 软件工程知识 77

7.2 核心原则 77

7.2.1 指导过程的原则 78

7.2.2 指导实践的原则 78

7.3 指导每个框架活动的原则 80

7.3.1 沟通原则 80

7.3.2 策划原则 81

7.3.3 建模原则 83

7.3.4 构建原则 87

7.3.5 部署原则 89

7.4 工作实践 90

7.5 小结 91

习题与思考题 92

扩展阅读与信息资源 92

第8章 理解需求 94

8.1 需求工程 95

8.2 建立根基 100

8.2.1 确认利益相关者 100

8.2.2 识别多重观点 100

8.2.3 协同合作 101

8.2.4 首次提问 101

8.2.5 非功能需求 102

8.2.6 可追溯性 102

8.3 获取需求 103

8.3.1 协作收集需求 103

8.3.2 质量功能部署 105

8.3.3 使用场景 106

8.3.4 获取工作产品 106

8.3.5 敏捷需求获取 107

8.3.6 面向服务的方法 107

8.4 开发用例 107

8.5 构建分析模型 111

8.5.1 分析模型的元素 112

8.5.2 分析模式 114

8.5.3 敏捷需求工程 114

8.5.4 自适应系统的需求 114

8.6 协商需求 115

8.7 需求监控 116

8.8 确认需求 117

8.9 避免常见错误 117

8.10 小结 118

习题与思考题 118

扩展阅读与信息资源 119

第9章 需求建模:基于场景的方法 121

9.1 需求分析 122

9.1.1 总体目标和原理 122

9.1.2 分析的经验原则 123

9.1.3 域分析 123

9.1.4 需求建模的方法 125

9.2 基于场景建模 126

9.2.1 创建初始用例 126

9.2.2 细化初始用例 128

9.2.3 编写正式用例 129

9.3 补充用例的UML模型 131

9.3.1 开发活动图 131

9.3.2 泳道图 132

9.4 小结 133

习题与思考题 133

扩展阅读与信息资源 133

第10章 需求建模:基于类的方法 135

10.1 识别分析类 135

10.2 描述属性 138

10.3 定义操作 138

10.4 类-职责-协作者建模 140

10.5 关联和依赖 145

10.6 分析包 145

10.7 小结 146

习题与思考题 146

扩展阅读与信息资源 146

第11章 需求建模:行为、模式和Web/移动App 148

11.1 生成行为模型 148

11.2 识别用例事件 149

11.3 状态表达 149

11.4 需求建模的模式 152

11.4.1 发现分析模式 152

11.4.2 需求模式举例:执行器-传感器 153

11.5 Web/移动App的需求建模 156

11.5.1 多少分析才够用 156

11.5.2 需求建模的输入 157

11.5.3 需求建模的输出 157

11.5.4 内容模型 158

11.5.5 WebApp和移动App的交互模型 159

11.5.6 功能模型 159

11.5.7 WebApp的配置模型 160

11.5.8 导航建模 161

11.6 小结 161

习题与思考题 162

扩展阅读与信息资源 162

第12章 设计概念 163

12.1 软件工程中的设计 164

12.2 设计过程 166

12.2.1 软件质量指导原则和属性 166

12.2.2 软件设计的演化 168

12.3 设计概念 169

12.3.1 抽象 169

12.3.2 体系结构 169

12.3.3 模式 170

12.3.4 关注点分离 170

12.3.5 模块化 171

12.3.6 信息隐蔽 171

12.3.7 功能独立 172

12.3.8 求精 172

12.3.9 方面 173

12.3.10 重构 173

12.3.11 面向对象的设计概念 174

12.3.12 设计类 174

12.3.13 依赖倒置 176

12.3.14 测试设计 177

12.4 设计模型 177

12.4.1 数据设计元素 178

12.4.2 体系结构设计元素 178

12.4.3 接口设计元素 179

12.4.4 构件级设计元素 180

12.4.5 部署级设计元素 181

12.5 小结 181

习题与思考题 182

扩展阅读与信息资源 183

第13章 体系结构设计 184

13.1 软件体系结构 185

13.1.1 什么是体系结构 185

13.1.2 体系结构为什么重要 186

13.1.3 体系结构描述 186

13.1.4 体系结构决策 187

13.2 体系结构类型 188

13.3 体系结构风格 188

13.3.1 体系结构风格的简单分类 189

13.3.2 体系结构模式 191

13.3.3 组织和求精 192

13.4 体系结构考虑要素 192

13.5 体系结构决策 194

13.6 体系结构设计 194

13.6.1 系统环境的表示 195

13.6.2 定义原型 195

13.6.3 将体系结构细化为构件 196

13.6.4 描述系统实例 197

13.6.5 WebApp的体系结构设计 198

13.6.6 移动App的体系结构设计 198

13.7 评估候选的体系结构设计 199

13.7.1 体系结构描述语言 200

13.7.2 体系结构评审 201

13.8 经验学习 201

13.9 基于模式的体系结构评审 202

13.10 体系结构一致性检查 203

13.11 敏捷性与体系结构 203

13.12 小结 204

习题与思考题 205

扩展阅读与信息资源 205

第14章 构件级设计 207

14.1 什么是构件 208

14.1.1 面向对象的观点 208

14.1.2 传统的观点 209

14.1.3 过程相关的观点 211

14.2 设计基于类的构件 212

14.2.1 基本设计原则 212

14.2.2 构件级设计指导方针 214

14.2.3 内聚性 215

14.2.4 耦合性 216

14.3 实施构件级设计 217

14.4 WebApp的构件级设计 222

14.4.1 构件级内容设计 222

14.4.2 构件级功能设计 222

14.5 移动App的构件级设计 222

14.6 设计传统构件 223

14.7 基于构件的开发 223

14.7.1 领域工程 223

14.7.2 构件的合格性检验、适应性修改与组合 224

14.7.3 体系结构不匹配 225

14.7.4 复用的分析与设计 226

14.7.5 构件的分类与检索 226

14.8 小结 227

习题与思考题 228

扩展阅读与信息资源 228

第15章 用户界面设计 230

15.1 黄金规则 231

15.1.1 把控制权交给用户 231

15.1.2 减轻用户的记忆负担 232

15.1.3 保持界面一致 233

15.2 用户界面的分析和设计 234

15.2.1 用户界面分析和设计模型 234

15.2.2 过程 235

15.3 界面分析 236

15.3.1 用户分析 236

15.3.2 任务分析和建模 237

15.3.3 显示内容分析 240

15.3.4 工作环境分析 240

15.4 界面设计步骤 241

15.4.1 应用界面设计步骤 241

15.4.2 用户界面设计模式 243

15.4.3 设计问题 243

15.5 WebApp和移动App的界面设计 245

15.5.1 界面设计原则与指导方针 245

15.5.2 WebApp和移动App的界面设计工作流 248

15.6 设计评估 249

15.7 小结 250

习题与思考题 250

扩展阅读与信息资源 251

第16章 基于模式的设计 253

16.1 设计模式 254

16.1.1 模式的种类 255

16.1.2 框架 256

16.1.3 描述模式 257

16.1.4 模式语言和模式库 258

16.2 基于模式的软件设计 258

16.2.1 不同环境下基于模式的设计 258

16.2.2 用模式思考 259

16.2.3 设计任务 260

16.2.4 建立模式组织表 260

16.2.5 常见设计错误 261

16.3 体系结构模式 262

16.4 构件级设计模式 263

16.5 用户界面设计模式 264

16.6 WebApp设计模式 266

16.6.1 设计焦点 266

16.6.2 设计粒度 266

16.7 移动App模式 267

16.8 小结 268

习题与思考题 268

扩展阅读与信息资源 269

第17章 WebApp设计 271

17.1 WebApp设计质量 272

17.2 设计目标 273

17.3 WebApp设计金字塔 274

17.4 WebApp界面设计 274

17.5 美学设计 275

17.5.1 布局问题 276

17.5.2 平面设计问题 276

17.6 内容设计 277

17.6.1 内容对象 277

17.6.2 内容设计问题 278

17.7 体系结构设计 278

17.7.1 内容体系结构 279

17.7.2 WebApp体系结构 280

17.8 导航设计 281

17.8.1 导航语义 281

17.8.2 导航语法 283

17.9 构件级设计 283

17.10 小结 283

习题与思考题 284

扩展阅读与信息资源 284

第18章 移动App设计 286

18.1 挑战 287

18.1.1 开发因素 287

18.1.2 技术因素 288

18.2 开发移动App 289

18.2.1 移动App质量 290

18.2.2 用户界面设计 291

18.2.3 环境感知App 292

18.2.4 经验教训 293

18.3 移动App设计的最佳实践 294

18.4 移动开发环境 295

18.5 云 297

18.6 传统软件工程的适用性 298

18.7 小结 298

习题与思考题 299

扩展阅读与信息资源 299

第三部分 质量管理 302

第19章 质量概念 302

19.1 什么是质量 303

19.2 软件质量 304

19.2.1 Garvin的质量维度 304

19.2.2 McCall的质量因素 305

19.2.3 ISO 9126质量因素 306

19.2.4 定向质量因素 306

19.2.5 过渡到量化观点 307

19.3 软件质量困境 308

19.3.1 “足够好”的软件 308

19.3.2 质量的成本 309

19.3.3 风险 311

19.3.4 疏忽和责任 311

19.3.5 质量和安全 312

19.3.6 管理活动的影响 312

19.4 实现软件质量 313

19.4.1 软件工程方法 313

19.4.2 项目管理技术 313

19.4.3 质量控制 313

19.4.4 质量保证 313

19.5 小结 314

习题与思考题 314

扩展阅读与信息资源 314

第20章 评审技术 316

20.1 软件缺陷对成本的影响 317

20.2 缺陷的放大和消除 318

20.3 评审度量及其应用 319

20.3.1 分析度量数据 320

20.3.2 评审的成本效益 320

20.4 评审的正式程度 321

20.5 非正式评审 322

20.6 正式技术评审 323

20.6.1 评审会议 324

20.6.2 评审报告和记录保存 324

20.6.3 评审指导原则 325

20.6.4 样本驱动评审 326

20.7 产品完成后评估 327

20.8 小结 327

习题与思考题 327

扩展阅读与信息资源 328

第21章 软件质量保证 329

21.1 背景问题 330

21.2 软件质量保证的要素 330

21.3 软件质量保证的过程和产品特性 332

21.4 软件质量保证的任务、目标和度量 332

21.4.1 软件质量保证的任务 332

21.4.2 目标、属性和度量 333

21.5 软件质量保证的形式化方法 334

21.6 统计软件质量保证 335

21.6.1 一个普通的例子 335

21.6.2 软件工程中的六西格玛 336

21.7 软件可靠性 337

21.7.1 可靠性和可用性的测量 337

21.7.2 软件安全 338

21.8 ISO 9000质量标准 339

21.9 软件质量保证计划 340

21.10 小结 341

习题与思考题 341

扩展阅读与信息资源 341

第22章 软件测试策略 343

22.1 软件测试的策略性方法 344

22.1.1 验证与确认 344

22.1.2 软件测试组织 345

22.1.3 软件测试策略——宏观 346

22.1.4 测试完成的标准 347

22.2 策略问题 348

22.3 传统软件的测试策略 348

22.3.1 单元测试 348

22.3.2 集成测试 350

22.4 面向对象软件的测试策略 354

22.4.1 面向对象环境中的单元测试 354

22.4.2 面向对象环境中的集成测试 354

22.5 WebApp的测试策略 355

22.6 移动App的测试策略 355

22.7 确认测试 356

22.7.1 确认测试准则 356

22.7.2 配置评审 356

22.7.3 α测试和β测试 356

22.8 系统测试 358

22.8.1 恢复测试 358

22.8.2 安全测试 358

22.8.3 压力测试 358

22.8.4 性能测试 359

22.8.5 部署测试 359

22.9 调试技巧 360

22.9.1 调试过程 360

22.9.2 心理因素 361

22.9.3 调试策略 362

22.9.4 纠正错误 363

22.10 小结 363

习题与思考题 364

扩展阅读与信息资源 364

第23章 测试传统的应用软件 366

23.1 软件测试基础 367

23.2 测试的内部视角和外部视角 368

23.3 白盒测试 369

23.4 基本路径测试 369

23.4.1 流图表示 369

23.4.2 独立程序路径 371

23.4.3 生成测试用例 372

23.4.4 图矩阵 374

23.5 控制结构测试 375

23.6 黑盒测试 376

23.6.1 基于图的测试方法 376

23.6.2 等价类划分 378

23.6.3 边界值分析 378

23.6.4 正交数组测试 379

23.7 基于模型的测试 381

23.8 文档测试和帮助设施测试 381

23.9 实时系统的测试 382

23.10 软件测试模式 383

23.11 小结 384

习题与思考题 384

扩展阅读与信息资源 385

第24章 测试面向对象的应用 386

24.1 扩展测试的视野 387

24.2 测试OOA和OOD模型 387

24.2.1 OOA和OOD模型的正确性 388

24.2.2 面向对象模型的一致性 388

24.3 面向对象测试策略 389

24.3.1 面向对象环境中的单元测试 389

24.3.2 面向对象环境中的集成测试 390

24.3.3 面向对象环境中的确认测试 390

24.4 面向对象测试方法 390

24.4.1 面向对象概念的测试用例设计含义 391

24.4.2 传统测试用例设计方法的可应用性 391

24.4.3 基于故障的测试 391

24.4.4 基于场景的测试设计 392

24.5 类级可应用的测试方法 392

24.5.1 面向对象类的随机测试 392

24.5.2 类级的划分测试 393

24.6 类间测试用例设计 394

24.6.1 多类测试 394

24.6.2 从行为模型导出的测试 395

24.7 小结 396

习题与思考题 396

扩展阅读与信息资源 397

第25章 测试WebApp 398

25.1 WebApp的测试概念 398

25.1.1 质量维度 399

25.1.2 WebApp环境中的错误 399

25.1.3 测试策略 400

25.1.4 测试计划 400

25.2 测试过程概述 401

25.3 内容测试 402

25.3.1 内容测试的目标 402

25.3.2 数据库测试 403

25.4 用户界面测试 404

25.4.1 界面测试策略 404

25.4.2 测试界面机制 405

25.4.3 测试界面语义 406

25.4.4 可用性测试 406

25.4.5 兼容性测试 408

25.5 构件级测试 409

25.6 导航测试 409

25.6.1 测试导航语法 409

25.6.2 测试导航语义 410

25.7 配置测试 411

25.7.1 服务器端问题 411

25.7.2 客户端问题 411

25.8 安全性测试 412

25.9 性能测试 413

25.9.1 性能测试的目标 413

25.9.2 负载测试 414

25.9.3 压力测试 414

25.10 小结 415

习题与思考题 416

扩展阅读与信息资源 417

第26章 测试移动App 418

26.1 测试准则 419

26.2 测试策略 420

26.2.1 传统方法适用吗 420

26.2.2 对自动化的要求 421

26.2.3 建立测试矩阵 422

26.2.4 压力测试 422

26.2.5 生产环境中的测试 423

26.3 与用户交互的各种情况 424

26.3.1 手语测试 425

26.3.2 语音输入和识别 425

26.3.3 虚拟键盘输入 425

26.3.4 警报和异常条件 426

26.4 跨界测试 426

26.5 实时测试问题 427

26.6 测试工具和环境 427

26.7 小结 428

习题与思考题 429

扩展阅读与信息资源 430

第27章 安全性工程 431

27.1 安全性需求分析 432

27.2 网络世界中的安全性与保密性 433

27.2.1 社交媒体 433

27.2.2 移动App 434

27.2.3 云计算 434

27.2.4 物联网 434

27.3 安全性工程分析 434

27.3.1 安全性需求获取 435

27.3.2 安全性建模 435

27.3.3 测度设计 436

27.3.4 正确性检查 436

27.4 安全性保证 437

27.4.1 安全性保证过程 437

27.4.2 组织和管理 438

27.5 安全性风险分析 438

27.6 传统软件工程活动的作用 440

27.7 可信性系统验证 441

27.8 小结 442

习题与思考题 443

扩展阅读与信息资源 443

第28章 形式化建模与验证 445

28.1 净室策略 446

28.2 功能规格说明 447

28.2.1 黑盒规格说明 448

28.2.2 状态盒规格说明 449

28.2.3 清晰盒规格说明 449

28.3 净室设计 449

28.3.1 设计细化 450

28.3.2 设计验证 450

28.4 净室测试 451

28.4.1 统计使用测试 451

28.4.2 认证 452

28.5 重新思考形式化方法 453

28.6 形式化方法的概念 454

28.7 其他争论 457

28.8 小结 457

习题与思考题 458

扩展阅读与信息资源 459

第29章 软件配置管理 460

29.1 软件配置管理概述 461

29.1.1 SCM场景 461

29.1.2 配置管理系统的元素 462

29.1.3 基线 463

29.1.4 软件配置项 464

29.1.5 依赖性和变更管理 464

29.2 SCM中心存储库 465

29.2.1 一般特征和内容 465

29.2.2 SCM特征 466

29.3 SCM过程 466

29.3.1 软件配置中的对象标识 467

29.3.2 版本控制 468

29.3.3 变更控制 469

29.3.4 影响管理 471

29.3.5 配置审核 472

29.3.6 状态报告 472

29.4 WebApp和移动App的配置管理 473

29.4.1 主要问题 473

29.4.2 配置对象 474

29.4.3 内容管理 475

29.4.4 变更管理 477

29.4.5 版本控制 479

29.4.6 审核和报告 479

29.5 小结 480

习题与思考题 481

扩展阅读与信息资源 481

第30章 产品度量 483

30.1 产品度量框架 484

30.1.1 测度、度量和指标 484

30.1.2 产品度量的挑战 484

30.1.3 测量原则 485

30.1.4 面向目标的软件测量 485

30.1.5 有效软件度量的属性 486

30.2 需求模型的度量 487

30.2.1 基于功能的度量 487

30.2.2 规格说明质量的度量 490

30.3 设计模型的度量 491

30.3.1 体系结构设计的度量 491

30.3.2 面向对象设计的度量 493

30.3.3 面向类的度量——CK度量集 493

30.3.4 面向类的度量——MOOD度量集 495

30.3.5 Lorenz和Kidd提出的面向对象的度量 496

30.3.6 构件级设计的度量 496

30.3.7 面向操作的度量 496

30.3.8 用户界面设计的度量 497

30.4 WebAPP和移动App的设计度量 497

30.5 源代码的度量 499

30.6 测试的度量 500

30.6.1 用于测试的Halstead度量 500

30.6.2 面向对象测试的度量 500

30.7 维护的度量 501

30.8 小结 502

习题与思考题 503

扩展阅读与信息资源 503

第四部分 管理软件项目 506

第31章 项目管理概念 506

31.1 管理涉及的范围 507

31.1.1 人员 507

31.1.2 产品 507

31.1.3 过程 508

31.1.4 项目 508

31.2 人员 508

31.2.1 利益相关者 508

31.2.2 团队负责人 509

31.2.3 软件团队 509

31.2.4 敏捷团队 511

31.2.5 协调和沟通问题 512

31.3 产品 513

31.3.1 软件范围 513

31.3.2 问题分解 513

31.4 过程 514

31.4.1 合并产品和过程 514

31.4.2 过程分解 515

31.5 项目 516

31.6 W5HH原则 516

31.7 关键实践 517

31.8 小结 518

习题与思考题 518

扩展阅读与信息资源 519

第32章 过程度量与项目度量 521

32.1 过程领域和项目领域中的度量 522

32.1.1 过程度量和软件过程改进 522

32.1.2 项目度量 524

32.2 软件测量 525

32.2.1 面向规模的度量 526

32.2.2 面向功能的度量 527

32.2.3 调和代码行度量和功能点度量 527

32.2.4 面向对象的度量 528

32.2.5 面向用例的度量 529

32.2.6 WebApp项目的度量 530

32.3 软件质量的度量 531

32.3.1 测量质量 531

32.3.2 缺陷排除效率 532

32.4 在软件过程中集成度量 533

32.4.1 支持软件度量的论点 534

32.4.2 建立基线 534

32.4.3 度量收集、计算和评估 534

32.5 小型组织的度量 535

32.6 制定软件度量大纲 536

32.7 小结 537

习题与思考题 537

扩展阅读与信息资源 538

第33章 软件项目估算 540

33.1 对估算的观察 541

33.2 项目计划过程 542

33.3 软件范围和可行性 542

33.4 资源 543

33.4.1 人力资源 544

33.4.2 可复用软件资源 544

33.4.3 环境资源 544

33.5 软件项目估算 544

33.6 分解技术 545

33.6.1 软件规模估算 545

33.6.2 基于问题的估算 546

33.6.3 基于LOC估算的实例 547

33.6.4 基于FP估算的实例 548

33.6.5 基于过程的估算 549

33.6.6 基于过程估算的实例 550

33.6.7 基于用例的估算 550

33.6.8 基于用例点估算的实例 551

33.6.9 调和不同的估算方法 552

33.7 经验估算模型 553

33.7.1 估算模型的结构 553

33.7.2 COCOMOⅡ模型 553

33.7.3 软件方程 553

33.8 面向对象项目的估算 554

33.9 特殊的估算技术 555

33.9.1 敏捷开发的估算 555

33.9.2 WebApp项目的估算 555

33.10 自行开发或购买的决策 556

33.10.1 创建决策树 557

33.10.2 外包 558

33.11 小结 559

习题与思考题 559

扩展阅读与信息资源 560

第34章 项目进度安排 561

34.1 基本概念 562

34.2 项目进度安排概述 563

34.2.1 基本原则 564

34.2.2 人员与工作量之间的关系 565

34.2.3 工作量分配 566

34.3 为软件项目定义任务集 567

34.3.1 任务集举例 567

34.3.2 主要任务的细化 568

34.4 定义任务网络 568

34.5 进度安排 569

34.5.1 时序图 570

34.5.2 跟踪进度 570

34.5.3 跟踪面向对象项目的进展 572

34.5.4 WebApp和移动App项目的进度安排 573

34.6 挣值分析 575

34.7 小结 576

习题与思考题 577

扩展阅读与信息资源 578

第35章 风险管理 579

35.1 被动风险策略和主动风险策略 580

35.2 软件风险 580

35.3 风险识别 581

35.3.1 评估整体项目风险 582

35.3.2 风险因素和驱动因子 583

35.4 风险预测 584

35.4.1 建立风险表 584

35.4.2 评估风险影响 585

35.5 风险细化 587

35.6 风险缓解、监测和管理 587

35.7 RMMM计划 589

35.8 小结 590

习题与思考题 590

扩展阅读与信息资源 591

第36章 维护与再工程 593

36.1 软件维护 594

36.2 软件可支持性 595

36.3 再工程 596

36.4 业务过程再工程 596

36.4.1 业务过程 596

36.4.2 BPR模型 597

36.5 软件再工程 598

36.5.1 软件再工程过程模型 598

36.5.2 软件再工程活动 599

36.6 逆向工程 600

36.6.1 理解数据的逆向工程 601

36.6.2 理解处理的逆向工程 602

36.6.3 用户界面的逆向工程 602

36.7 重构 603

36.7.1 代码重构 603

36.7.2 数据重构 604

36.8 正向工程 604

36.8.1 客户/服务器体系结构的正向工程 605

36.8.2 面向对象体系结构的正向工程 606

36.9 再工程经济学 606

36.10 小结 607

习题与思考题 607

扩展阅读与信息资源 608

第五部分 软件工程高级课题 612

第37章 软件过程改进 612

37.1 什么是SPI 613

37.1.1 SPI的方法 613

37.1.2 成熟度模型 614

37.1.3 SPI适合每个人吗 615

37.2 SPI过程 615

37.2.1 评估和差距分析 616

37.2.2 教育和培训 617

37.2.3 选择和合理性判定 617

37.2.4 设置/迁移 618

37.2.5 评价 618

37.2.6 SPI的风险管理 618

37.3 CMMI 619

37.4 人员CMM 622

37.5 其他SPI框架 622

37.6 SPI的投资收益率 624

37.7 SPI趋势 624

37.8 小结 625

习题与思考题 626

扩展阅读与信息资源 626

第38章 软件工程的新趋势 627

38.1 技术演变 628

38.2 关于纯粹工程学科的展望 629

38.3 观察软件工程的发展趋势 629

38.4 识别“软趋势” 630

38.4.1 管理复杂性 631

38.4.2 开放世界软件 632

38.4.3 意外需求 632

38.4.4 人才技能结合 633

38.4.5 软件构造块 633

38.4.6 对“价值”认识的转变 634

38.4.7 开源 634

38.5 技术方向 634

38.5.1 过程趋势 634

38.5.2 巨大的挑战 635

38.5.3 协同开发 636

38.5.4 需求工程 636

38.5.5 模型驱动的软件开发 637

38.5.6 后现代设计 637

38.5.7 测试驱动的开发 638

38.6 相关工具的趋势 639

38.7 小结 640

习题与思考题 640

扩展阅读与信息资源 640

第39章 结束语 642

39.1 再论软件的重要性 643

39.2 人员及其构造系统的方式 643

39.3 表示信息的新模式 644

39.4 远景 645

39.5 软件工程师的责任 646

39.6 写在最后 647

索引 648