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

  • 购买积分:16 如何计算积分?
  • 作  者:李代平等编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2008
  • ISBN:7302157316
  • 页数:524 页
图书介绍:本书介绍软件工程概论,学科形成与发展,基本内容,学科特点等。

第一部分 基础理论 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 软件工程原则 16

1.2.6 软件工程面临的问题 17

小结 18

综合练习一 18

第2章 基本理论 20

2.1 软件工程过程 20

2.2 软件生命周期 21

2.2.1 软件分析时期 22

2.2.2 软件设计时期 23

2.2.3 编码与测试时期 24

2.2.4 运行与维护时期 24

2.3 软件生命周期模型 25

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

2.3.2 瀑布模型 25

2.3.3 原型模型 27

2.3.4 增量模型 28

2.3.5 螺旋模型 30

2.3.6 喷泉模型 31

2.3.7 基于知识的模型 32

2.3.8 变换模型 33

2.4 软件开发方法 33

2.4.1 结构化方法 33

2.4.2 Jackson方法 34

2.4.3 维也纳开发方法 34

2.4.4 面向对象的开发方法 35

2.5 软件工具与开发 35

2.5.1 软件工具箱 36

2.5.2 软件开发环境 36

2.5.3 计算机辅助软件工程 36

小结 37

综合练习二 37

第3章 可行性研究 39

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

3.1.1 研究任务 40

3.1.2 研究步骤 43

3.2 系统分析 44

3.2.1 系统分析员 44

3.2.2 面临的问题域 45

3.2.3 通信技术 46

3.3 分析原理 47

3.3.1 信息域 48

3.3.2 建立模型 49

3.3.3 分解 49

3.4 系统模型与模拟 50

3.4.1 系统模型 50

3.4.2 系统建模和模拟 51

3.5 成本-效益分析 52

3.6 可行性研究的文档 54

3.7 项目开发计划 55

3.7.1 方案选择 55

3.7.2 制定项目开发计划 56

小结 57

综合练习三 57

第二部分 结构化方法第4章 软件需求分析 61

4.1 需求分析 61

4.1.1 需求分析的特点 61

4.1.2 需求分析的原则 62

4.1.3 需求分析的任务 62

4.1.4 需求分析的方法 64

4.2 结构化分析 65

4.2.1 自顶向下逐层分解 66

4.2.2 结构化分析步骤 67

4.3 系统流程图 67

4.4 数据流图 69

4.4.1 基本图形符号 70

4.4.2 画数据流图 71

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

4.5 数据字典 78

4.5.1 内容及格式 78

4.5.2 数据字典的实现 81

4.6 关系数据理论 81

4.6.1 数据依赖 81

4.6.2 关系模式的操作异常 82

4.6.3 范式 83

4.6.4 EAR方法 87

小结 90

综合练习四 90

第5章 总体设计 91

5.1 软件设计的重要性 91

5.2 设计过程 92

5.3 软件总体设计 93

5.4 设计基本原理 95

5.4.1 抽象 95

5.4.2 细化 95

5.4.3 模块化 96

5.4.4 软件体系结构 97

5.4.5 程序结构 98

5.4.6 数据结构 99

5.4.7 软件过程 100

5.5 体系结构设计 101

5.5.1 软件结构图 102

5.5.2 模块的大小 103

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

5.5.4 模块的耦合 105

5.5.5 模块的内聚 107

5.5.6 结构设计的一般准则 109

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

5.6 结构化设计 111

5.6.1 数据流的类型 111

5.6.2 过程步骤 113

5.6.3 变换分析设计 113

5.6.4 事务分析设计 115

5.6.5 混合流设计 116

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

5.6.7 设计的后期处理 119

5.7 软件结构优化 119

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

5.7.2 软件结构的HIPO图 121

小结 121

综合练习五 122

第6章 软件详细设计 123

6.1 细节设计的任务与方法 123

6.1.1 细节设计的基本任务 123

6.1.2 细节设计方法 124

6.2 设计表示法 125

6.2.1 结构化语言 125

6.2.2 判定表 126

6.2.3 判定树 127

6.3 结构化程序设计 127

6.3.1 程序流程图 128

6.3.2 三种基本控制结构 128

6.3.3 常用符号 130

6.4 结构化定理 131

6.4.1 程序函数 131

6.4.2 基本定理 132

6.4.3 常见错误 133

6.4.4 过程设计语言 135

6.5 面向数据结构的设计 138

6.5.1 Jackson图 139

6.5.2 纲要逻辑 140

6.5.3 Jackson方法 141

6.5.4 JSP应用 141

6.5.5 JSD方法 144

小结 149

综合练习六 149

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

7.1 面向对象简介 153

7.1.1 什么是面向对象 154

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

7.2 面向对象的相关概念 155

7.2.1 对象 156

7.2.2 类 157

7.2.3 对象图 158

7.2.4 属性 158

7.2.5 服务(操作或方法) 159

7.2.6 封装 160

7.2.7 继承 160

7.2.8 多重继承 163

7.2.9 消息 166

7.2.10 结构与连接 166

7.2.11 多态性 168

7.2.12 永久对象 171

7.2.13 主动对象 171

7.2.14 对象类的表示方法 172

7.3 链接与关联 172

7.3.1 一般概念 172

7.3.2 重数 173

7.3.3 关联的重要性 174

7.3.4 三元关联 174

7.3.5 关联的候选关键字 174

7.3.6 异或关联 175

7.3.7 资格关联 175

7.3.8 链接属性 175

7.3.9 用关联模型化为类 175

7.3.10 角色名 176

7.3.11 排序 176

7.3.12 资格符 177

7.4 构造分组 177

7.4.1 模块 177

7.4.2 表 177

小结 178

综合练习七 178

第8章 模型 180

8.1 统一建模语言 180

8.1.1 模型的建立 182

8.1.2 UML的基本图标 182

8.1.3 UML语义 186

8.1.4 UML的基本元素 188

8.1.5 UML的词别 189

8.2 UML的评价 189

8.2.1 UML成功的因素 189

8.2.2 UML能够起到的积极作用 190

8.2.3 UML不能起到的作用 190

8.2.4 UML存在的缺点与问题 191

8.2.5 从U2P提案看UML的未来 196

8.3 对象模型 198

8.3.1 表示方法 198

8.3.2 表示结构 199

8.3.3 例子 201

8.4 动态模型 201

8.4.1 事件和状态 202

8.4.2 操作 206

8.4.3 嵌套状态图 207

8.4.4 实践技巧 210

8.5 功能模型 211

8.5.1 数据流图 211

8.5.2 指定的操作 212

8.5.3 约束 213

8.5.4 功能模型的实例 214

8.5.5 功能模型与对象模型和动态模型的关系 216

小结 217

综合练习八 218

第9章 对象分析 219

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

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

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

9.2.2 研究问题域 222

9.2.3 确定系统边界 223

9.3 发现对象 224

9.3.1 正确地运用抽象原则 224

9.3.2 策略与启发 224

9.3.3 审查和筛选 226

9.3.4 识别主动对象 228

9.4 对象的发现和标识 228

9.4.1 动机 229

9.4.2 方法 229

9.4.3 三视图模型(3VM) 230

9.4.4 语言信息分析 231

9.5 对象分类,建立类图的对象层 233

9.5.1 异常情况的检查和调整 233

9.5.2 类的命名 234

9.5.3 建立类图的对象层 234

9.6 对象的属性和服务 234

9.7 定义属性 236

9.7.1 策略与启发 236

9.7.2 审查与筛选 237

9.7.3 推迟到OOD考虑的问题 239

9.7.4 属性的命名和定位 240

9.7.5 属性的详细说明 240

9.8 定义服务 240

9.8.1 对象的状态与状态转换图 241

9.8.2 行为分类 242

9.8.3 发现服务的策略与启发 243

9.8.4 审查与调整 244

9.8.5 认识对象的主动行为 244

9.8.6 服务的命名和定位 245

9.8.7 服务的详细说明 245

9.9 应用实例 246

9.9.1 功能需求 246

9.9.2 发现对象 247

9.9.3 对象层表示 247

9.9.4 电梯系统的属性描述 248

9.9.5 电梯系统的服务定义 249

9.9.6 电梯系统的特征层 255

小结 256

综合练习九 256

第10章 关系分析 257

10.1 整体-部分结构 257

10.1.1 整体-部分结构及其用途 257

10.1.2 表示法 260

10.1.3 如何发现整体-部分结构 260

10.1.4 审查与筛选 261

10.1.5 简化对象的定义 262

10.1.6 支持软件复用 262

10.1.7 整体-部分结构的进一步运用 263

10.1.8 调整对象层和属性层 264

10.2 一般-特殊结构 265

10.2.1 一般-特殊结构及其用途 265

10.2.2 表示法 266

10.2.3 如何发现一般-特殊结构 266

10.2.4 审查与调整 267

10.2.5 多继承及多态性问题 268

10.2.6 一般-特殊结构的简化 270

10.2.7 调整对象层和特征层 271

10.3 实例连接 271

10.3.1 简单的实例连接 271

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

10.3.3 三元关联问题 274

10.3.4 如何建立实例连接 274

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

10.4 消息连接 276

10.4.1 消息的定义 276

10.4.2 顺序系统中的消息 276

10.4.3 并发系统中的消息 277

10.4.4 消息对OOA的意义 280

10.4.5 OOA对消息的表示——消息连接 280

10.5 如何建立消息连接 281

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

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

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

10.6 消息的详细说明 283

10.7 电梯例子 284

10.7.1 一般-特殊关系 284

10.7.2 整体-部分关系 284

10.7.3 连接 284

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

小结 286

综合练习十 286

第11章 面向对象设计原则 287

11.1 类型一致性与闭合行为 287

11.1.1 类与类型 287

11.1.2 类型一致性原则 288

11.1.3 闭合行为原则 289

11.2 封装与共生性 289

11.2.1 封装结构 289

11.2.2 共生性 291

11.2.3 面向对象系统中共生性的滥用 292

11.2.4 共生性的术语 293

11.3 领域、依附集和内聚 294

11.3.1 对象类的领域 294

11.3.2 依附集 296

11.3.3 类的内聚:一个类和它的特性 298

11.4 继承与多态性的危险性 299

11.4.1 继承的滥用 300

11.4.2 错误的聚集 300

11.4.3 倒置的层次结构 300

11.4.4 混淆类及其实例 300

11.4.5 误用 301

11.4.6 多态性的危险性 301

11.5 状态空间和行为 303

11.5.1 一个类的状态空间和行为 303

11.5.2 子类的状态空间 303

11.5.3 子类的行为 304

11.5.4 类的不变式 304

11.5.5 前置条件和后置条件 305

11.5.6 类接口中支持的状态 306

11.5.7 类接口中支持的行为 307

11.5.8 类接口中操作的聚合 308

小结 308

综合练习十一 308

第12章 对象设计 310

12.1 对象设计综述 310

12.1.1 从分析和系统结构着手 310

12.1.2 对象设计的步骤 311

12.1.3 对象模型工具 311

12.2 组合三种模型 312

12.3 设计算法 312

12.3.1 选择算法 313

12.3.2 选择数据结构 314

12.3.3 定义内部类和操作 315

12.3.4 指定操作的职责 315

12.4 设计优化 316

12.4.1 添加冗余关联获取有效访问 316

12.4.2 重新安排执行次序以获得效率 317

12.4.3 保存导出属性避免重复计算 318

12.5 控制实现 319

12.5.1 在程序内进行状态设置 319

12.5.2 状态机器引擎 319

12.5.3 控制作为并发任务 320

12.6 继承的调整 320

12.6.1 重新安排类和操作 320

12.6.2 抽象出公共的行为 321

12.6.3 使用授权共享实现 322

12.7 关联设计 323

12.7.1 分析关联遍历 323

12.7.2 单向关联 323

12.7.3 双向关联 323

12.7.4 链接属性 324

12.8 对象的表示 324

12.9 物理打包 325

12.9.1 信息隐藏 325

12.9.2 实体的相关性 326

12.9.3 构造模块 326

12.10 设计决策文档 327

12.11 控制驱动部分 327

12.12 相关技术问题 327

12.12.1 系统总体方案 328

12.12.2 软件体系结构 329

12.12.3 分布式系统的体系结构风格 329

12.12.4 系统的并发性 332

12.13 如何设计控制驱动部分 335

12.13.1 选择软件体系结构风格 335

12.13.2 确定系统分布方案 336

12.13.3 识别控制流 339

12.13.4 用主动对象表示控制流 342

12.13.5 把控制驱动部分看作一个主题 343

小结 343

综合练习十二 344

第13章 接口设计 346

13.1 人的因素 347

13.1.1 分析活动者 347

13.1.2 从Use Case分析人机交互 348

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

13.1.4 命令的组织 351

13.1.5 输出信息的组织结构 354

13.2 界面设计风格 355

13.2.1 菜单的选择 355

13.2.2 对话框 357

13.2.3 窗口 357

13.3 人机界面的设计准则 358

13.4 人机界面设计过程 359

13.4.1 用户界面模型 360

13.4.2 界面支持系统 361

13.4.3 界面元素 362

13.4.4 设计的形式 362

13.5 描述方法与技术 364

13.5.1 灵境技术 365

13.5.2 多通道人机交互技术 366

13.6 数据管理系统及其选择 367

13.7 技术整合 373

13.8 数据接口 375

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

13.9.1 针对文件系统的设计 376

13.9.2 针对RDBMS的设计 380

13.9.3 使用OODBMS 389

小结 389

综合练习十三 390

第14章 形式化方法 392

14.1 基础知识 392

14.1.1 形式化方法概念 392

14.1.2 形式化规约语言 393

14.2 有限状态机(FSM) 395

14.3 Petri网基本原理 396

14.3.1 静态结构 397

14.3.2 动态特征 397

14.3.3 转移启动规则 398

14.3.4 行为特性 400

14.3.5 行为特性分析方法 402

14.3.6 结构特性分析方法 408

14.3.7 Petri网到程序结构的转换 411

小结 414

综合练习十四 414

第15章 软件实现 416

15.1 程序设计语言的特性及选择 416

15.1.1 程序设计语言特性 416

15.1.2 程序设计语言的选择 418

15.2 程序设计风格 420

15.3 程序设计效率 422

15.3.1 代码效率 422

15.3.2 内存效率 423

15.3.3 I/O效率 423

15.4 冗余编程 424

15.5 软件容错技术 424

15.5.1 容错软件 425

15.5.2 容错的一般方法 426

15.5.3 容错软件的设计过程 428

15.5.4 软件的容错系统结构 429

小结 431

综合练习十五 432

第四部分 质量与工程管理第16章 软件质量 435

16.1 软件质量概述 435

16.1.1 软件质量的定义 435

16.1.2 软件质量特性 435

16.1.3 软件质量特性之间的竞争 439

16.2 软件质量的度量和评价 441

16.2.1 软件质量的度量 441

16.2.2 软件质量度量的分类 441

16.2.3 软件质量评价 442

16.3 软件质量保证 444

16.3.1 软件质量保证的概述 444

16.3.2 软件质量保证原则 445

16.3.3 软件质量保证计划 445

16.3.4 软件质量保证的措施 446

16.3.5 软件质量管理小组 446

16.4 技术评审与审查 446

16.4.1 评审过程 447

16.4.2 选择参加评审的成员 447

16.4.3 评审的管理和组织 448

16.4.4 评审的方法 448

16.4.5 走查和审查 448

16.4.6 开发过程的评审 448

16.4.7 对评审的综合评价 450

16.5 软件的可靠性 450

小结 452

综合练习十六 452

第17章 软件测试 454

17.1 软件测试概述 454

17.1.1 软件测试的目的 454

17.1.2 软件测试的原则 455

17.2 测试方法 455

17.2.1 静态测试 455

17.2.2 动态测试 456

17.3 测试用例的设计 457

17.3.1 白盒技术 457

17.3.2 黑盒技术 461

17.4 测试过程 465

17.4.1 软件测试过程中的信息 465

17.4.2 软件测试的步骤与各开发阶段的关系 466

17.4.3 单元测试 466

17.4.4 集成测试 468

17.4.5 确认测试 470

17.5 调试 471

小结 472

综合练习十七 473

第18章 软件维护 474

18.1 软件维护概述 474

18.1.1 软件维护的定义 474

18.1.2 影响维护工作的因素 475

18.1.3 维护成本 475

18.2 软件可维护性 476

18.2.1 软件可维护性的定义 476

18.2.2 可维护性的度量 476

18.3 软件维护的特点 478

18.3.1 非结构化维护和结构化维护 478

18.3.2 维护的困难性 479

18.3.3 软件维护的费用 480

18.4 软件维护的实施 481

18.4.1 维护的组织 481

18.4.2 维护的流程 481

18.4.3 维护技术 483

18.4.4 维护的副作用 483

18.5 维护“老化代码” 484

18.6 逆向工程和再工程 485

18.6.1 预防性维护 485

18.6.2 逆向工程的元素 486

18.6.3 再工程中的重构技术 487

小结 490

综合练习十八 490

第19章 软件项目管理与计划 492

19.1 软件项目管理概述 492

19.1.1 软件管理的对象 492

19.1.2 软件开发中的资源 493

19.1.3 分解技术 494

19.2 项目管理过程 494

19.3 软件开发成本估算 495

19.3.1 软件开发成本估算方法 496

19.3.2 软件开发成本估算的经验模型 497

19.4 风险分析 499

19.4.1 风险识别 499

19.4.2 风险估算 500

19.4.3 风险评价 500

19.4.4 风险驾驭和监控 501

19.5 进度安排 503

19.5.1 软件开发小组人数与软件生产率 503

19.5.2 任务的确定与并行性 503

19.5.3 制定开发进度计划 504

19.5.4 进度安排的图形方法 505

19.5.5 项目的追踪和控制 506

19.6 软件项目的组织 507

19.6.1 软件项目管理的特点 507

19.6.2 软件项目组织的建立 508

19.6.3 人员配备 510

小结 512

综合练习十九 512

参考答案 514

参考文献 524