《软件工程 第3版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:李代平编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2011
  • ISBN:9787302234999
  • 页数:530 页
图书介绍:本书共分为4部分,主要介绍了软件工程基础、软件工程结构方法、面向对象方法与实现、质量与工程管理等内容。

第1部分 基础理论 3

第1章 绪论 3

1.1 软件概述 3

1.1.1 什么是计算机软件 4

1.1.2 软件的特点 4

1.1.3 软件的分类 5

1.1.4 软件的发展 7

1.1.5 软件危机 8

1.2 软件工程 10

1.2.1 软件工程与方法学 10

1.2.2 软件工程的基本原理 12

1.2.3 软件工程的目标 13

1.2.4 软件工程的内容 15

1.2.5 软件工程的原则 15

1.2.6 软件工程面临的问题 17

小结 17

综合练习一 18

第2章 基本理论 19

2.1 软件工程过程 19

2.2 软件生命周期 20

2.2.1 软件分析时期 21

2.2.2 软件设计时期 22

2.2.3 编码与测试时期 23

2.2.4 运行与维护时期 23

2.3 软件生命周期模型 24

2.3.1 软件生命周期模型的概念 24

2.3.2 瀑布模型 24

2.3.3 原型模型 26

2.3.4 增量模型 27

2.3.5 螺旋模型 28

2.3.6 喷泉模型 30

2.3.7 基于知识的模型 30

2.3.8 变换模型 31

2.4 软件开发方法 32

2.4.1 结构化方法 32

2.4.2 Jackson方法 32

2.4.3 维也纳开发方法 33

2.4.4 面向对象的开发方法 33

2.5 软件工具与开发 34

2.5.1 软件工具箱 34

2.5.2 软件开发环境 34

2.5.3 计算机辅助软件工程 34

小结 35

综合练习二 35

第3章 可行性研究 37

3.1 可行性研究任务与步骤 37

3.1.1 研究任务 38

3.1.2 研究步骤 41

3.2 系统分析 42

3.2.1 系统分析员 42

3.2.2 面临的问题域 43

3.2.3 通信技术 44

3.3 分析原理 45

3.3.1 信息域 46

3.3.2 建立模型 47

3.3.3 分解 47

3.4 系统模型与模拟 48

3.4.1 系统模型 48

3.4.2 系统建模和模拟 49

3.5 成本-效益分析 50

3.6 可行性研究的文档 52

3.7 项目开发计划 53

3.7.1 方案选择 53

3.7.2 制定项目开发计划 54

小结 54

综合练习三 54

第2部分 结构化方法 59

第4章 需求分析与体系结构 59

4.1 需求分析 59

4.1.1 需求分析的特点 60

4.1.2 需求分析的原则 60

4.1.3 需求分析的任务 61

4.1.4 需求分析的方法 62

4.2 结构化分析 63

4.2.1 自顶向下逐层分解 64

4.2.2 结构化分析步骤 65

4.3 系统流程图 66

4.4 数据流图 67

4.4.1 基本图形符号 68

4.4.2 画数据流图 69

4.4.3 结构化分析方法的应用 71

4.5 数据字典 76

4.5.1 内容及格式 76

4.5.2 数据字典的实现 78

4.6 从需求到体系结构 79

4.7 RTRSM的基本元素 82

4.7.1 状态转换图 83

4.7.2 模板 84

4.7.3 规则集 85

4.8 RTRSM到体系结构的转换步骤 85

4.8.1 描述系统的功能单元(组件) 86

4.8.2 描述连接件 87

4.8.3 描述软件的配置 88

4.9 基于软件体系结构开发方法 88

4.9.1 软件体系结构的开发过程 88

4.9.2 分布式对象技术 89

4.9.3 体系结构与分布式对象结合方法 89

4.10 软件体系结构求精方法 91

4.10.1 行为替代的体系结构求精方法 92

4.10.2 基于风格的体系结构求精方法 92

4.10.3 构件体系结构求精方法 93

4.10.4 形式化方法与Z语言 94

4.10.5 UML和Z结合的求精方法 97

4.11 一种新的软件体系结构设计方法 100

4.11.1 体系结构需求和软件体系结构 100

4.11.2 新的软件体系结构设计过程 103

小结 104

综合练习四 105

第5章 总体设计 107

5.1 软件设计的重要性 107

5.2 设计过程 108

5.3 软件总体设计 109

5.4 设计基本原理 111

5.4.1 抽象 111

5.4.2 细化 111

5.4.3 模块化 112

5.4.4 软件体系结构 113

5.4.5 程序结构 114

5.4.6 数据结构 115

5.4.7 软件过程 116

5.5 体系结构设计 117

5.5.1 软件结构图 117

5.5.2 模块的大小 119

5.5.3 扇出和扇入与深度和宽度 119

5.5.4 模块的耦合 120

5.5.5 模块的内聚 122

5.5.6 结构设计的一般准则 124

5.5.7 模块的作用域与控制域 125

5.6 结构化设计 126

5.6.1 数据流的类型 126

5.6.2 过程步骤 127

5.6.3 变换分析设计 128

5.6.4 事务分析设计 130

5.6.5 混合流设计 131

5.6.6 结构化设计方法应用示例 132

5.6.7 设计的后期处理 134

5.7 软件结构优化 134

5.7.1 软件结构设计优化准则 134

5.7.2 软件结构的HIPO图 136

小结 136

综合练习五 136

第6章 软件详细设计 138

6.1 详细设计的任务与方法 138

6.1.1 详细设计的基本任务 138

6.1.2 详细设计方法 139

6.2 设计表示法 140

6.2.1 结构化语言 140

6.2.2 判定表 141

6.2.3 判定树 142

6.3 结构化程序设计 142

6.3.1 流程图程序 142

6.3.2 三种基本控制结构 143

6.3.3 常用符号 145

6.3.4 正规程序 146

6.3.5 基本程序 147

6.3.6 结构化程序 149

6.4 结构化定理 149

6.4.1 程序函数 149

6.4.2 基本定理 150

6.4.3 非结构化转换为结构化 152

6.4.4 常见错误 154

6.5 过程设计语言 156

小结 159

综合练习六 159

第3部分 面向对象方法与实现第7章 面向对象方法概论 163

7.1 面向对象简介 163

7.1.1 什么是面向对象 164

7.1.2 面向对象方法的历史及现状 165

7.2 面向对象的相关概念 166

7.2.1 对象 166

7.2.2 类 167

7.2.3 对象图 168

7.2.4 属性 168

7.2.5 服务 169

7.2.6 封装 170

7.2.7 继承 170

7.2.8 多重继承 173

7.2.9 消息 176

7.2.10 结构与连接 177

7.2.11 多态性 178

7.2.12 永久对象 181

7.2.13 主动对象 181

7.2.14 对象类的表示方法 182

7.3 链接与关联 182

7.3.1 一般概念 182

7.3.2 重数 183

7.3.3 关联的重要性 184

7.3.4 三元关联 184

7.3.5 关联的候选关键字 184

7.3.6 异或关联 185

7.3.7 资格关联 185

7.3.8 链接属性 185

7.3.9 用关联模型化为类 186

7.3.10 角色名 186

7.3.11 排序 186

7.3.12 资格符 187

7.4 构造分组 187

7.4.1 模块 187

7.4.2 表 188

小结 188

综合练习七 188

第8章 模型 190

8.1 统一建模语言 190

8.1.1 模型的建立 192

8.1.2 UML的基本图标 192

8.1.3 UML语义 195

8.1.4 UML的基本元素 198

8.1.5 UML的词别 198

8.2 UML的评价 198

8.2.1 UML成功的因素 198

8.2.2 UML的积极作用 199

8.2.3 UML不能起到的作用 200

8.2.4 UML的缺点 200

8.2.5 UML的未来 206

8.3 对象模型 207

8.3.1 表示方法 208

8.3.2 表示结构 208

8.3.3 例子 210

8.4 动态模型 210

8.4.1 事件和状态 210

8.4.2 操作 215

8.4.3 嵌套状态图 216

8.4.4 实践技巧 219

8.5 功能模型 219

8.5.1 数据流图 220

8.5.2 指定的操作 220

8.5.3 约束 222

8.5.4 功能模型的实例 222

8.5.5 三种模型的关系 225

小结 226

综合练习八 226

第9章 对象分析 228

9.1 对象、主动对象以及它们的类 228

9.2 研究问题域和用户需求 230

9.2.1 研究用户需求,明确系统责任 230

9.2.2 研究问题域 231

9.2.3 确定系统边界 232

9.3 发现对象 233

9.3.1 正确地运用抽象原则 233

9.3.2 策略与启发 233

9.3.3 对象的发现和标识 235

9.3.4 审查和筛选 239

9.3.5 识别主动对象 241

9.4 对象分类,建立类图的对象层 241

9.4.1 异常情况的检查和调整 242

9.4.2 类的命名 242

9.4.3 建立类图的对象层 243

9.5 对象的属性和服务 243

9.6 定义属性 244

9.6.1 策略与启发 244

9.6.2 审查与筛选 245

9.6.3 推迟到OOD考虑的问题 247

9.6.4 属性的命名和定位 248

9.6.5 属性的详细说明 248

9.7 定义服务 248

9.7.1 对象的状态与状态转换图 248

9.7.2 行为分类 250

9.7.3 发现服务的策略与启发 251

9.7.4 审查与调整 252

9.7.5 认识对象的主动行为 252

9.7.6 服务的命名和定位 252

9.7.7 服务的详细说明 253

9.8 应用实例 254

9.8.1 功能需求 254

9.8.2 发现对象 254

9.8.3 对象层表示 255

9.8.4 电梯系统的属性描述 255

9.8.5 电梯系统的服务定义 257

9.8.6 电梯系统的特征层 262

小结 263

综合练习九 263

第10章 关系分析 264

10.1 一般-特殊结构 264

10.1.1 一般-特殊结构及其用途 264

10.1.2 如何发现一般-特殊结构 265

10.1.3 审查与调整 266

10.1.4 多继承及多态性问题 267

10.1.5 一般-特殊结构的简化 269

10.1.6 调整对象层和特征层 270

10.2 整体-部分结构 270

10.2.1 整体-部分结构及其用途 270

10.2.2 如何发现整体-部分结构 272

10.2.3 审查与筛选 273

10.2.4 简化对象的定义 274

10.2.5 支持软件复用 274

10.2.6 整体-部分结构的进一步运用 275

10.2.7 调整对象层和属性层 276

10.3 实例连接 276

10.3.1 简单的实例连接 276

10.3.2 复杂的实例连接及其表示 277

10.3.3 三元关联问题 279

10.3.4 如何建立实例连接 280

10.3.5 对象层、特征层的增补及实例连接说明 281

10.4 消息连接 281

10.4.1 消息的定义 281

10.4.2 顺序系统中的消息 282

10.4.3 并发系统中的消息 283

10.4.4 消息对OOA的意义 285

10.4.5 表示消息连接 285

10.5 如何建立消息连接 287

10.5.1 建立控制线程内部的消息连接 287

10.5.2 建立控制线程之间的消息连接 287

10.5.3 对象分布问题及其消息的影响 288

10.6 消息的详细说明 289

10.7 电梯例子 289

10.7.1 一般-特殊关系 289

10.7.2 整体-部分关系 289

10.7.3 连接 290

10.7.4 电梯控制系统的关系层 290

小结 291

综合练习十 291

第11章 控制驱动的设计 292

11.1 设计原则 292

11.1.1 类型一致性与闭合行为 292

11.1.2 其他主要原则 293

11.1.3 类的状态空间和行为 294

11.2 相关技术问题 294

11.2.1 系统总体方案 294

11.2.2 软件体系结构 295

11.2.3 分布式系统的体系结构风格 303

11.2.4 系统的并发性 305

11.3 如何设计控制驱动 308

11.3.1 选择软件体系结构 309

11.3.2 确定系统分布方案 309

11.3.3 识别控制流 313

11.3.4 用主动对象表示控制流 315

11.3.5 把控制驱动部分看做一个主题 316

11.4 控制实现 316

11.4.1 在程序内进行状态设置 317

11.4.2 状态机器引擎 317

11.4.3 控制作为并发任务 317

小结 318

综合练习十一 318

第12章 问题域的设计 319

12.1 问题域部分设计环境 319

12.1.1 为适应编成环境的调整 319

12.1.2 从分析和系统结构着手 325

12.1.3 对象设计的步骤 325

12.1.4 对象模型工具 326

12.2 完善对象的细节 326

12.3 设计算法 332

12.3.1 选择算法 332

12.3.2 选择数据结构 333

12.3.3 定义内部类和操作 333

12.3.4 指定操作的职责 334

12.4 继承的调整 335

12.4.1 重新安排类和操作 335

12.4.2 抽象出公共的行为 335

12.4.3 使用授权共享实现 336

12.5 关联设计 337

12.5.1 分析关联遍历 338

12.5.2 单向关联 338

12.5.3 双向关联 338

12.5.4 链接属性 338

12.6 设计优化 339

12.6.1 性能的影响因素 339

12.6.2 改进性能的设计策略 341

12.6.3 重新安排执行次序以获得效率 345

12.6.4 保存导出属性避免重复计算 346

12.7 物理打包 347

12.7.1 信息隐藏 347

12.7.2 实体的相关性 348

12.7.3 构造模块 349

12.8 设计决策文档 349

小结 349

综合练习十二 350

第13章 用户界面设计 352

13.1 人的因素 353

13.1.1 分析活动者 353

13.1.2 从Use Case分析人机交互 354

13.1.3 分析处理异常事件的人机交互 356

13.1.4 命令的组织 357

13.1.5 输出信息的组织结构 360

13.2 界面设计风格 361

13.2.1 菜单 361

13.2.2 对话框 362

13.2.3 窗口 363

13.3 人机界面设计准则 364

13.4 人机界面设计过程 365

13.4.1 界面模型 365

13.4.2 界面支持系统 366

13.4.3 界面元素 367

13.4.4 界面设计形式 368

13.5 描述方法与技术 369

13.5.1 灵境技术 370

13.5.2 多通道人机交互技术 371

小结 372

综合练习十三 372

第14章 数据库及其接口设计 373

14.1 数据管理系统及其选择 373

14.2 技术整合 380

14.3 数据接口 381

14.4 对象存储方案和数据接口的设计策略 383

14.4.1 针对文件系统的设计 383

14.4.2 针对RDBMS的设计 387

14.4.3 使用OODBMS 396

小结 396

综合练习十四 396

第15章 形式化方法 398

15.1 基础知识 398

15.1.1 形式化方法概念 398

15.1.2 形式化规约语言 399

15.2 有限状态机 401

15.3 Petri网基本原理 402

15.3.1 静态结构 403

15.3.2 动态特征 403

15.3.3 转移启动规则 404

15.3.4 行为特性 406

15.3.5 行为特性分析方法 408

15.3.6 结构特性分析方法 414

15.3.7 Petri网到程序结构的转换 417

小结 420

综合练习十五 420

第16章 软件实现 422

16.1 程序设计语言的特性及选择 422

16.1.1 程序设计语言特性 422

16.1.2 程序设计语言的选择 424

16.2 程序设计风格 426

16.3 程序设计效率 428

16.3.1 代码效率 428

16.3.2 内存效率 428

16.3.3 I/O效率 429

16.4 冗余编程 429

16.5 软件容错技术 430

16.5.1 容错软件 431

16.5.2 容错的一般方法 431

16.5.3 容错软件的设计过程 433

16.5.4 软件的容错系统结构 434

小结 437

综合练习十六 437

第4部分 质量与工程管理第17章 软件质量 441

17.1 软件质量概述 441

17.1.1 软件质量的定义 441

17.1.2 软件质量的特性 441

17.1.3 软件质量特性之间的竞争 445

17.2 软件质量的度量和评价 447

17.2.1 软件质量的度量 447

17.2.2 软件质量度量的分类 447

17.2.3 软件质量的评价 448

17.3 软件质量保证 450

17.3.1 软件质量保证概述 450

17.3.2 软件质量保证原则 451

17.3.3 软件质量保证计划 451

17.3.4 软件质量保证措施 452

17.3.5 软件质量管理小组 452

17.4 技术评审与审查 452

17.4.1 评审过程 453

17.4.2 选择参加评审的成员 453

17.4.3 评审的管理和组织 454

17.4.4 评审的方法 454

17.4.5 走查和审查 454

17.4.6 开发过程的评审 454

17.4.7 对评审的综合评价 456

17.5 软件的可靠性 456

小结 458

综合练习十七 458

第18章 软件测试 460

18.1 软件测试概述 460

18.1.1 软件测试的目的 460

18.1.2 软件测试的原则 461

18.2 软件测试方法 461

18.2.1 静态测试 461

18.2.2 动态测试 462

18.3 测试用例的设计 463

18.3.1 白盒技术 463

18.3.2 黑盒技术 467

18.4 软件测试过程 471

18.4.1 软件测试过程中的信息 471

18.4.2 软件测试的步骤与各开发阶段的关系 471

18.4.3 单元测试 472

18.4.4 集成测试 473

18.4.5 确认测试 476

18.5 调试 477

小结 478

综合练习十八 478

第19章 软件维护 480

19.1 软件维护概述 480

19.1.1 软件维护的定义 480

19.1.2 影响维护工作的因素 481

19.1.3 维护成本 481

19.2 软件可维护性 482

19.2.1 软件可维护性的定义 482

19.2.2 可维护性的度量 482

19.3 软件维护的特点 484

19.3.1 非结构化维护和结构化维护 484

19.3.2 维护的困难性 485

19.3.3 软件维护的费用 486

19.4 软件维护的实施 486

19.4.1 维护的组织 486

19.4.2 维护的流程 487

19.4.3 维护技术 488

19.4.4 维护的副作用 489

19.5 维护“老化代码” 490

19.6 逆向工程和再工程 490

19.6.1 预防性维护 491

19.6.2 逆向工程的元素 492

19.6.3 再工程中的重构技术 492

小结 495

综合练习十九 496

第20章 软件项目管理与计划 497

20.1 软件项目管理概述 497

20.1.1 软件管理的对象 497

20.1.2 软件开发中的资源 498

20.1.3 分解技术 499

20.2 项目管理过程 499

20.3 软件开发成本估算 500

20.3.1 软件开发成本估算方法 501

20.3.2 软件开发成本估算的经验模型 502

20.4 风险分析 503

20.4.1 风险识别 504

20.4.2 风险估算 504

20.4.3 风险评价 505

20.4.4 风险驾驭和监控 506

20.5 进度安排 507

20.5.1 软件开发小组人数与软件生产率 508

20.5.2 任务的确定与并行性 508

20.5.3 制定开发进度计划 509

20.5.4 进度安排的图形方法 510

20.5.5 项目的追踪和控制 511

20.6 软件项目的组织 511

20.6.1 软件项目管理的特点 511

20.6.2 软件项目组织的建立 512

20.6.3 人员配备 514

小结 516

综合练习二十 516

参考答案 518

参考文献 529