《软件工程》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:鄂大伟主编
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2010
  • ISBN:9787302226802
  • 页数:444 页
图书介绍:本书内容主要包括四个部分:软件工程与项目管理,结构化开发方法,面向对象的开发方法,软件工程高级专题。

第1篇 软件工程与项目管理 3

第1章 软件工程概述 3

1.1 软件的定义与特点 3

1.1.1 什么是软件 3

1.1.2 软件的特点与本质 4

1.1.3 “没有银弹”——复杂性是“软件危机”的本质原因 6

1.2 软件工程的定义及研究的内容 9

1.2.1 科学、工程与技术的界定 9

1.2.2 软件工程的定义与原理 10

1.2.3 软件工程的3个要素 11

1.2.4 软件开发方法——对客观世界的认知观 12

1.2.5 软件工程与相关科学的关系 14

1.3 软件工程的教育与知识体系 15

1.3.1 软件工程的教育体系 15

1.3.2 CC2005的4个方向专业规范 17

1.3.3 软件工程的知识体系——SWEBOK 18

1.4 软件工程的标准 20

1.4.1 软件工程标准化的意义 20

1.4.2 软件工程的国际标准与体系 21

1.4.3 国家标准 22

1.5 计算机辅助软件工程 23

1.6 软件工程人员的职业道德与行为准则 24

本章小结 25

思考与练习 26

第2章 软件过程 27

2.1 软件过程 27

2.1.1 过程及其特征 27

2.1.2 软件过程的公共框架 28

2.2 软件过程模型 29

2.2.1 理解软件过程模型 29

2.2.2 瀑布模型 29

2.2.3 演化软件过程模型 30

2.2.4 快速原型开发方法 33

2.2.5 统一软件过程 34

2.2.6 核心工作流 36

2.2.7 形式化方法模型 37

2.2.8 软件复用——基于构件的开发方法 37

2.2.9 第4代技术 39

2.2.10 微软公司的软件过程模型 39

2.3 软件过程改进 41

2.3.1 软件能力成熟度模型——CMM与CMMI 41

2.3.2 CMM/CMMI的应用及面临的问题 44

2.3.3 个体软件过程 45

2.3.4 团队软件过程 46

2.3.5 CMM、TSP、PSP三者的关系 47

本章小结 47

思考与练习 48

第3章 软件工程领域下的项目管理 49

3.1 项目管理的历史实践 49

3.1.1 远古的伟大工程实践 49

3.1.2 沟通的故事——巴比伦塔的倒塌 50

3.2 软件项目管理的范围与内容 51

3.2.1 什么是项目管理 51

3.2.2 软件项目管理的范围 52

3.2.3 人员 53

3.2.4 产品 55

3.2.5 过程 57

3.2.6 项目 57

3.3 软件项目管理的活动——从这里开始 58

3.3.1 软件项目管理的活动概述 59

3.3.2 项目沟通与需求管理 59

3.3.3 软件项目计划的制定 61

3.3.4 项目范围与管理 62

3.3.5 工作分解结构 63

3.3.6 软件项目的组织 65

3.4 项目进度管理 66

3.4.1 项目里程碑 67

3.4.2 人员与工作量分配 68

3.4.3 项目进度管理的可视化工具 69

3.4.4 项目管理软件及其功能 70

本章小结 72

思考与练习 72

第4章 软件项目估算 74

4.1 软件项目估算概述 74

4.1.1 什么是估算 74

4.1.2 软件项目估算的特点 75

4.1.3 软件项目估算的复杂性分析 75

4.1.4 软件项目估算的相关内容 77

4.2 项目规模估算 78

4.2.1 基于代码行的规模估算 79

4.2.2 功能点估算 80

4.2.3 基于计划评审技术的规模估算 82

4.3 工作量估算 83

4.3.1 用代码行与功能点估算工作量的例子 84

4.3.2 基于数学模型的工作量估算 84

4.3.3 COCOMO模型 85

4.3.4 COCOMOⅡ模型 87

4.3.5 Putnam模型 90

4.4 软件成本估算 91

4.4.1 软件项目成本的组成 91

4.4.2 软件成本的估算方法 92

4.4.3 估算技术的应用与评价 95

4.5 项目进度估算 98

4.5.1 三点估算方法 98

4.5.2 项目进度获取值分析——项目计划与实际进展的定量比较 99

4.6 软件工程经济学 101

4.6.1 经济学与工程经济学 101

4.6.2 软件工程经济学研究的基本问题 101

4.6.3 资金的时间价值 102

4.6.4 软件工程经济学中的成本效益评价技术 106

本章小结 108

思考与练习 108

第5章 软件质量管理 111

5.1 软件质量及其特性 111

5.1.1 难以定义和度量的软件质量 111

5.1.2 软件质量特性 112

5.1.3 软件质量保证及其活动 114

5.2 软件配置管理 115

5.2.1 制定项目的配置计划 116

5.2.2 软件配置项及其标识 117

5.2.3 版本控制 118

5.2.4 变更控制 120

5.2.5 正式技术复审 121

本章小结 123

思考与练习 124

第6章 软件风险管理 125

6.1 软件项目的风险管理 125

6.1.1 风险与项目风险 125

6.1.2 软件项目风险与管理 127

6.1.3 软件风险的定义 129

6.1.4 软件风险的类型 130

6.2 软件风险管理的体系框架 131

6.2.1 常见风险管理过程框架 131

6.2.2 软件风险管理的一般过程 133

6.3 风险识别 134

6.3.1 风险识别过程 134

6.3.2 风险识别的方法与工具 135

6.4 风险分析 138

6.4.1 风险分析过程 138

6.4.2 风险分析的技术与工具 139

6.5 风险规划 143

6.5.1 风险规划过程 143

6.5.2 风险规划的工具与技术 144

6.6 风险监控 144

6.6.1 风险监控过程 144

6.6.2 风险监控的技术与方法 146

6.6.3 风险监控与管理计划——RMMM计划 147

本章小结 147

思考与练习 148

第2篇 结构化开发方法 153

第7章 面向过程的结构化分析 153

7.1 系统工程 153

7.1.1 系统论 153

7.1.2 系统工程 154

7.1.3 系统工程层次结构 155

7.1.4 业务过程工程 156

7.1.5 产品工程 156

7.2 需求分析 157

7.2.1 需求分析概述和特点 158

7.2.2 软件需求分析的目标 159

7.2.3 需求分析的过程 159

7.2.4 需求获取技术 161

7.3 结构化分析方法 162

7.3.1 数据流图 163

7.3.2 状态图 178

7.3.3 实体-关系图(E-R图) 178

本章小结 180

思考与练习 180

第8章 面向过程的结构化设计 182

8.1 软件设计的基本概念和原理 182

8.1.1 抽象 182

8.1.2 信息隐蔽 183

8.1.3 模块化设计 183

8.1.4 模块独立 184

8.1.5 耦合 184

8.1.6 内聚 185

8.1.7 结构图 186

8.2 软件总体设计的任务和目标 187

8.3 结构化软件设计 188

8.3.1 基本概念 188

8.3.2 变换分析 191

8.3.3 事务分析 194

8.4 过程设计 197

8.4.1 程序流程图 198

8.4.2 盒式(N-S)图 199

8.4.3 PAD 200

8.4.4 PDL 201

8.4.5 判定表 203

8.4.6 判定树 203

8.5 Jackson设计方法 204

本章小结 208

思考与练习 208

第9章 面向过程的结构化实现 211

9.1 概述 211

9.2 编码 211

9.2.1 软件编码的基本概念 211

9.2.2 程序设计语言的选择 212

9.2.3 编码风格 213

9.3 软件测试 213

9.3.1 软件测试的概述 213

9.3.2 软件测试方法 215

9.3.3 软件测试步骤 224

9.4 调试 229

9.5 软件测试文档 231

本章小结 232

思考与练习 232

第10章 软件的技术度量 234

10.1 软件度量的基本概念 234

10.1.1 测量、测度、度量、指标和估算 234

10.1.2 软件度量的分类 235

10.1.3 软件度量的目的 235

10.1.4 有效软件度量的属性 235

10.2 分析模型的度量 236

10.2.1 基于功能点的度量 236

10.2.2 bang度量 237

10.2.3 规格说明质量的度量 239

10.3 设计模型的度量 239

10.3.1 体系结构设计度量 239

10.3.2 构件级设计度量 241

10.4 源代码度量 244

10.5 对测试的度量 246

10.6 对维护的度量 246

10.7 软件质量的度量 247

本章小结 251

思考与练习 252

第3篇 面向对象的开发方法 257

第11章 面向对象概述 257

11.1 面向对象的基本思想 257

11.2 面向对象软件开发方法的优缺点 259

11.3 面向对象的基本概念 260

11.3.1 对象 260

11.3.2 类 261

11.3.3 属性和方法 261

11.3.4 抽象、封装和信息隐藏 261

11.3.5 继承 262

11.3.6 多态 263

11.3.7 关联 264

11.3.8 协作 264

11.3.9 聚合 265

11.3.10 持久性 265

11.4 统一建模语言:UML概述 266

11.4.1 UML的发展历程 266

11.4.2 UML的特点 267

11.5 UML的视图 268

11.5.1 用例图 269

11.5.2 类图 269

11.5.3 对象图 270

11.5.4 顺序图 271

11.5.5 协作图 272

11.5.6 状态图 272

11.5.7 包图 273

11.5.8 部署图 273

11.6 面向对象软件的开发过程 274

11.7 UML建模工具 275

11.7.1 商用建模工具 275

11.7.2 开源UML建模工具 276

本章小结 276

思考与练习 277

第12章 面向对象分析 279

12.1 收集需求 280

12.1.1 面向对象的软件需求概述 280

12.1.2 系统范围 281

12.1.3 参与者 282

12.1.4 用例 284

12.1.5 用例图 285

12.1.6 用例规约 285

12.1.7 使用包组织用例 288

12.2 基于类的建模 289

12.2.1 识别类 289

12.2.2 CRC建模 291

12.2.3 分析类的职责 293

12.2.4 寻找协作者 294

12.2.5 通过场景验证CRC模型 294

12.2.6 CRC建模的优缺点 296

12.3 类模型 296

12.3.1 类、属性和方法 297

12.3.2 类的层次结构 297

12.3.3 关联 297

12.3.4 聚合 298

12.3.5 类图 298

12.4 动态交互建模 299

12.4.1 顺序图 300

12.4.2 协作图 302

12.4.3 活动图 302

12.5 基于控制行为建模 304

本章小结 305

思考与练习 306

第13章 面向对象设计 309

13.1 划分分析模型 310

13.2 系统逻辑架构 312

13.2.1 经典3层架构 312

13.2.2 多层架构 313

13.3 类模型设计 314

13.3.1 类的设计 314

13.3.2 接口设计 315

13.3.3 属性、方法建模 316

13.3.4 对象之间可见性设计 316

13.3.5 用例迭代实现 317

13.3.6 重构 318

13.4 类的设计原则 319

13.4.1 开闭原则 319

13.4.2 Liskov替换原则 320

13.4.3 依赖倒置原则 322

13.4.4 接口分离原则 322

13.5 设计模式 324

13.5.1 单件模式 324

13.5.2 抽象工厂模式 325

13.6 对象持久性建模 327

13.6.1 映射对象 328

13.6.2 继承关系映射 328

13.6.3 关联和聚合映射 330

13.6.4 持久性框架 331

13.7 部署建模 331

本章小结 332

思考与练习 333

第14章 面向对象测试 335

14.1 全生命周期面向对象测试 336

14.2 面向对象测试策略 336

14.2.1 面向对象的单元测试 337

14.2.2 面向对象的集成测试 337

14.2.3 面向对象的确认测试 337

14.3 基于场景的模型测试 338

14.3.1 场景设计 338

14.3.2 测试用例设计 339

14.4 类测试 340

14.4.1 类的代码检查 340

14.4.2 覆盖和路径测试 341

14.4.3 类的随机测试 341

14.4.4 类的划分测试 341

14.5 类间测试 342

14.5.1 多个类测试 342

14.5.2 从类的行为模型导出的测试 343

本章小结 343

思考与练习 344

第15章 面向对象系统的技术度量 345

15.1 OO度量的识别特征 345

15.1.1 局部化 346

15.1.2 封装 346

15.1.3 信息隐蔽 346

15.1.4 继承 346

15.1.5 抽象 346

15.2 分析、设计模型的度量 347

15.3 OO项目的度量 348

15.4 面向类的度量 349

15.4.1 CK度量套件 349

15.4.2 LK度量组 352

15.4.3 MOOD度量套件 353

15.5 面向操作的度量 355

15.6 面向对象测试的度量 356

本章小结 356

思考与练习 357

第4篇 软件工程高级专题 363

第16章 敏捷过程开发 363

16.1 敏捷的定义 364

16.1.1 什么是敏捷 364

16.1.2 什么是敏捷过程 365

16.2 敏捷过程模型 365

16.2.1 极限编程 365

16.2.2 自适应软件开发 367

16.2.3 动态系统开发方法 369

16.2.4 Scrum 370

16.2.5 Crystal 372

16.2.6 特征驱动开发 373

16.2.7 精益开发 375

16.3 设计自己的敏捷方法 378

本章小结 378

思考与练习 379

第17章 Web工程 380

17.1 基于Web的系统及应用 380

17.1.1 Web应用的发展 380

17.1.2 Web应用的特点和分类 383

17.1.3 Web应用的开发团队 384

17.2 Web工程 386

17.3 Web工程技术 386

17.3.1 Web服务器技术 387

17.3.2 Web开发技术 388

17.3.3 Web辅助技术 389

17.4 Web工程的层次 391

17.4.1 质量 391

17.4.2 过程 392

17.4.3 方法 393

17.4.4 工具 395

17.5 Web工程过程 395

17.5.1 分析 396

17.5.2 设计 398

17.5.3 测试 403

17.5.4 发布、维护 408

本章小结 408

思考与练习 408

第18章 形式化方法 409

18.1 形式化方法简介 409

18.1.1 形式化方法的引入 409

18.1.2 形式化方法的分类 410

18.1.3 形式化规格方法的主要思想 411

18.2 Petri网 411

18.2.1 基本概念 411

18.2.2 Petri网的性质 415

18.2.3 Petri网的分析 417

18.2.4 实例:ATM系统 423

18.3 Z语言 424

18.3.1 基本概念 424

18.3.2 模式运算 426

18.3.3 操作模式 430

18.3.4 实例:ATM系统 431

18.4 形式化方法的优缺点 432

18.5 形式化方法的发展 433

本章小结 433

思考与练习 434

附录A 软件工程和知识可视化表征 436