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

  • 购买积分:15 如何计算积分?
  • 作  者:李代平编著
  • 出 版 社:北京:冶金工业出版社
  • 出版年份:2006
  • ISBN:7502441255
  • 页数:492 页
图书介绍:本书是论述软件工程学及应用的专著。从理论上介绍软件工程的基本理论,可行性研究方法。详细介绍了结构化方法和面向对象方法的基本理论,系统需求分析与设计的基本概念、用户界面设计,开发过程、关键问题以及在各领域应用。同时介绍了形式化方法,软件质量,软件实现,软件容错技术,软件测试,软件维护,软件项目管理与计划。

第1章 绪论 1

1.1 软件概述 1

1.1.1 什么是计算机软件 1

1.1.2 软件的特点 2

1.1.3 软件的分类 3

1.1.4 软件的发展 5

1.1.5 软件危机 5

1.2 软件工程 7

1.2.1 软件工程与方法学 8

1.2.2 软件工程的基本原理 9

1.2.3 软件工程的目标 11

1.2.4 软件工程的内容 12

1.2.5 软件工程原则 13

1.2.6 软件工程面临的问题 14

小结 15

综合练习一 15

一、填空题 15

二、选择题 15

三、简答题 16

第2章 基本理论 17

2.1 软件工程过程 17

2.2 软件生命周期 17

2.2.1 软件分析时期 18

2.2.2 软件设计时期 19

2.2.3 编码与测试时期 20

2.2.4 运行与维护时期 21

2.3 软件生命周期模型 21

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

2.3.2 瀑布模型 22

2.3.3 原型模型 23

2.3.4 增量模型 24

2.3.5 螺旋模型 26

2.3.6 喷泉模型 27

2.3.7 基于知识的模型 28

2.3.8 变换模型 29

2.4 软件开发方法 29

2.4.1 结构化方法 29

2.4.2 Jackson方法 30

2.4.3 维也纳开发方法 30

2.4.4 面向对象的开发方法 31

2.5 软件工具与开发 31

2.5.1 软件工具箱 31

2.5.2 软件开发环境 32

2.5.3 计算机辅助软件工程 32

小结 32

综合练习二 33

一、填空题 33

二、选择题 33

三、简答题 33

第3章 可行性研究 34

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

3.1.1 研究任务 35

3.1.2 研究步骤 37

3.2 系统分析 39

3.2.1 系统分析员 39

3.2.2 面临的问题域 40

3.2.3 通信技术 40

3.3 分析原理 42

3.3.1 信息域 42

3.3.2 建立模型 43

3.3.3 分解 44

3.4 系统模型与模拟 45

3.4.1 系统模型 45

3.4.2 系统建模和模拟 46

3.5 成本-效益分析 47

3.6 可行性研究的文档 49

3.7 项目开发计划 50

3.7.1 方案选择 50

3.7.2 制定项目开发计划 50

小结 51

综合练习三 51

一、填空题 51

二、选择题 51

三、简答题 52

第4章 软件需求分析 53

4.1 需求分析 53

4.1.1 需求分析的特点 53

4.1.2 需求分析的原则 54

4.1.3 需求分析的任务 54

4.1.4 需求分析的方法 55

4.2 结构化分析 57

4.2.1 自顶向下逐层分解 57

4.2.2 结构化分析步骤 58

4.3 系统流程图 59

4.4 数据流图 60

4.4.1 基本图形符号 61

4.4.2 画数据流图 62

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

4.5 数据字典 69

4.5.1 内容及格式 69

4.5.2 数据字典的实现 71

4.6 关系数据理论 71

4.6.1 数据依赖 72

4.6.2 关系模式的操作异常 72

4.6.3 范式 73

4.6.4 EAR方法 77

小结 80

综合练习四 80

一、填空题 80

二、选择题 80

三、简答题 81

第5章 总体设计 82

5.1 软件设计的重要性 82

5.2 设计过程 83

5.3 软件总体设计 84

5.4 设计基本原理 85

5.4.1 抽象 86

5.4.2 细化 86

5.4.3 模块化 87

5.4.4 软件体系结构 88

5.4.5 程序结构 89

5.4.6 数据结构 90

5.4.7 软件过程 91

5.5 体系结构设计 92

5.5.1 软件结构图 92

5.5.2 模块的大小 94

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

5.5.4 模块的耦合 95

5.5.5 模块的内聚 97

5.5.6 结构设计的一般准则 99

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

5.6 结构化设计 101

5.6.1 数据流的类型 102

5.6.2 过程步骤 103

5.6.3 变换分析设计 104

5.6.4 事务分析设计 105

5.6.5 混合流设计 106

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

5.6.7 设计的后期处理 109

5.7 软件结构优化 109

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

5.7.2 软件结构的HIPO图 111

小结 111

综合练习五 112

一、填空题 112

二、选择题 112

三、简答题 112

第6章 软件详细设计 113

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

6.1.1 细节设计的基本任务 113

6.1.2 细节设计方法 114

6.2 设计表示法 115

6.2.1 结构化语言 115

6.2.2 判定表 115

6.2.3 判定树 116

6.3 结构化程序设计 117

6.3.1 程序流程图 117

6.3.2 三种基本控制结构 118

6.3.3 常用符号 119

6.4 结构化定理 120

6.4.1 程序函数 121

6.4.2 基本定理 121

6.4.3 常见错误 122

6.4.4 过程设计语言 124

6.5 面向数据结构的设计 127

6.5.1 Jackson图 127

6.5.2 纲要逻辑 129

6.5.3 Jackson方法 129

6.5.4 JSP应用 130

6.5.5 JSD方法 132

小结 136

综合练习六 137

一、填空题 137

二、选择题 137

三、简答题 137

第7章 面向对象方法概论 139

7.1 面向对象简介 139

7.1.1 什么是面向对象 139

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

7.2 面向对象的相关概念 141

7.2.1 对象 141

7.2.2 类 143

7.2.3 对象图 144

7.2.4 属性 144

7.2.5 服务(操作或方法) 145

7.2.6 封装 145

7.2.7 继承 146

7.2.8 多重继承 149

7.2.9 消息 151

7.2.10 结构与连接 152

7.2.11 多态性 153

7.2.12 永久对象 156

7.2.13 主动对象 156

7.2.14 对象类的表示方法 157

7.3 链接与关联 157

7.3.1 一般概念 157

7.3.2 重数 158

7.3.3 关联的重要性 159

7.3.4 三元关联 159

7.3.5 关联的候选关键字 159

7.3.6 异或关联 160

7.3.7 资格关联 160

7.3.8 链接属性 160

7.3.9 用关联模型化为类 161

7.3.10 角色名 161

7.3.11 排序 162

7.3.12 资格符 162

7.4 聚合 163

7.4.1 聚合与关联 163

7.4.2 聚合与概括 163

7.4.3 递归聚合 164

7.4.4 操作的传播 165

7.4.5 物理聚合与分类聚合 165

7.4.6 物理聚合的语义扩展 166

7.4.7 分类聚合的语义扩展 166

7.5 概括 166

7.5.1 一般概念 166

7.5.2 概括的使用 167

7.5.3 重写特征 167

7.5.4 抽象类和具体类 168

7.5.5 概括与其他对象建模结构 168

7.6 构造分组 169

7.6.1 模块 169

7.6.2 表 169

小结 169

综合练习七 169

一、填空题 169

二、选择题 170

三、简答题 170

第8章 模型 171

8.1 统一建模语言 171

8.1.1 模型的建立 172

8.1.2 UML的基本图标 172

8.1.3 UML的基本元素 181

8.1.4 UML的语法规则 181

8.1.5 UML的词别 182

8.2 对象模型 182

8.2.1 表示方法 182

8.2.2 表示结构 183

8.2.3 例子 185

8.3 动态模型 185

8.3.1 事件和状态 186

8.3.2 操作 190

8.3.3 嵌套状态图 191

8.3.4 实践技巧 194

8.4 功能模型 195

8.4.1 数据流图 195

8.4.2 指定的操作 196

8.4.3 约束 197

8.4.4 功能模型的实例(飞行模拟机装置) 197

8.4.5 功能模型与对象模型和动态模型的关系 200

小结 201

综合练习八 201

一、填空题 201

二、选择题 201

三、简答题 202

第9章 发现对象、建立对象类 203

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

9.2 表示法 204

9.3 研究问题域和用户需求 205

9.3.1 研究用户需求,明确系统责任 205

9.3.2 研究问题域 206

9.3.3 确定系统边界 207

9.4 发现对象 207

9.4.1 正确地运用抽象原则 207

9.4.2 策略与启发 208

9.4.3 审查和筛选 210

9.4.4 识别主动对象 212

9.5 对象的发现和标识 212

9.5.1 动机 212

9.5.2 方法 213

9.5.3 三视图模型(3VM) 213

9.5.4 语言信息分析 214

9.6 对象分类,建立类图的对象层 216

9.6.1 异常情况的检查和调整 216

9.6.2 类的命名 217

9.6.3 建立类图的对象层 217

9.7 电梯例子 218

9.7.1 功能需求 218

9.7.2 发现对象 218

9.7.3 对象层表示 219

小结 219

综合练习九 219

一、填空题 219

二、选择题 220

三、简答题 220

第10章 定义属性与服务 221

10.1 对象的属性和服务 221

10.2 表示法 222

10.3 定义属性 222

10.3.1 策略与启发 222

10.3.2 审查与筛选 223

10.3.3 推迟到OOD考虑的问题 225

10.3.4 属性的命名和定位 226

10.3.5 属性的详细说明 226

10.4 定义服务 226

10.4.1 对象的状态与状态转换图 226

10.4.2 行为分类 228

10.4.3 发现服务的策略与启发 229

10.4.4 审查与调整 229

10.4.5 认识对象的主动行为 230

10.4.6 服务的命名和定位 230

10.4.7 服务的详细说明 230

10.5 建立类图的特征层 231

10.6 电梯例子 231

10.6.1 电梯系统的属性描述 232

10.6.2 电梯系统的服务定义 233

10.6.3 电梯系统的特征层 238

小结 238

综合练习十 238

一、填空题 238

二、选择题 239

三、简答题 239

第11章 定义结构与连接 240

11.1 整体-部分结构 240

11.1.1 整体-部分结构及其用途 240

11.1.2 表示法 242

11.1.3 如何发现整体-部分结构 243

11.1.4 审查与筛选 244

11.1.5 简化对象的定义 244

11.1.6 支持软件复用 245

11.1.7 整体-部分结构的进一步运用 246

11.1.8 调整对象层和属性层 247

11.2 一般-特殊结构 247

11.2.1 一般-特殊结构及其用途 247

11.2.2 表示法 248

11.2.3 如何发现一般-特殊结构 249

11.2.4 审查与调整 250

11.2.5 多继承及多态性问题 250

11.2.6 一般-特殊结构的简化 253

11.2.7 调整对象层和特征层 253

11.3 实例连接 253

11.3.1 简单的实例连接 254

11.3.2 复杂的实例连接及其表示 255

11.3.3 三元关联问题 257

11.3.4 如何建立实例连接 257

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

11.4 消息连接 259

11.4.1 消息的定义 259

11.4.2 顺序系统中的消息 259

11.4.3 并发系统中的消息 260

11.4.4 消息对OOA的意义 263

11.4.5 OOA对消息的表示——消息连接 263

11.5 如何建立消息连接 264

11.5.1 建立控制线程内部的消息连接 264

11.5.2 建立控制线程之间的消息连接 265

11.5.3 对象分布问题及其消息的影响 265

11.6 消息的详细说明 266

11.7 电梯例子 267

11.7.1 一般-特殊关系 267

11.7.2 整体-部分关系 267

11.7.3 连接 267

11.7.4 电梯控制系统的关系层 268

小结 268

综合练习十一 268

一、填空题 268

二、选择题 268

三、简答题 269

第12章 面向对象设计原则 270

12.1 类型一致性与闭合行为 270

12.1.1 类与类型 270

12.1.2 类型一致性原则 270

12.1.3 闭合行为原则 271

12.2 封装与共生性 272

12.2.1 封装结构 272

12.2.2 共生性 273

12.2.3 面向对象系统中共生性的滥用 275

12.2.4 共生性的术语 276

12.3 领域、依附集和内聚 276

12.3.1 对象类的领域 276

12.3.2 依附集 278

12.3.3 类的内聚:一个类和它的特性 280

12.4 继承与多态性的危险性 282

12.4.1 继承的滥用 282

12.4.2 错误的聚集 282

12.4.3 倒置的层次结构 282

12.4.4 混淆类及其实例 283

12.4.5 误用 283

12.4.6 多态性的危险性 284

12.5 状态空间和行为 285

12.5.1 一个类的状态空间和行为 285

12.5.2 子类的状态空间 286

12.5.3 子类的行为 286

12.5.4 状态空间的一个约束条件:类的不变式 287

12.5.5 前置条件和后置条件 288

12.5.6 类接口中支持的状态 288

12.5.7 类接口中支持的行为 289

12.5.8 类接口中操作的聚合 290

小结 290

综合练习十二 290

一、填空题 290

二、选择题 291

三、简答题 291

第13章 控制驱动部分的设计 292

13.1 什么是控制驱动部分 292

13.2 相关技术问题 292

13.2.1 系统总体方案 292

13.2.2 软件体系结构 293

13.2.3 分布式系统的体系结构风格 294

13.2.4 系统的并发性 297

13.3 如何设计控制驱动部分 300

13.3.1 选择软件体系结构风格 300

13.3.2 确定系统分布方案 301

13.3.3 识别控制流 304

13.3.4 用主动对象表示控制流 306

13.3.5 把控制驱动部分看作一个主题 308

小结 308

综合练习十三 308

一、填空题 308

二、选择题 308

三、简答题 309

第14章 对象设计 310

14.1 对象设计综述 310

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

14.1.2 对象设计的步骤 311

14.1.3 对象模型工具 311

14.2 组合三种模型 311

14.3 设计算法 312

14.3.1 选择算法 312

14.3.2 选择数据结构 314

14.3.3 定义内部类和操作 314

14.3.4 指定操作的职责 315

14.4 设计优化 315

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

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

14.4.3 保存导出属性避免重复计算 317

14.5 控制实现 318

14.5.1 在程序内进行状态设置 318

14.5.2 状态机器引擎 319

14.5.3 控制作为并发任务 319

14.6 继承的调整 319

14.6.1 重新安排类和操作 319

14.6.2 抽象出公共的行为 320

14.6.3 使用授权共享实现 321

14.7 关联设计 322

14.7.1 分析关联遍历 322

14.7.2 单向关联 322

14.7.3 双向关联 323

14.7.4 链接属性 323

14.8 对象的表示 324

14.9 物理打包 324

14.9.1 信息隐藏 324

14.9.2 实体的相关性 325

14.9.3 构造模块 326

14.10 设计决策文档 326

小结 327

综合练习十四 327

一、填空题 327

二、选择题 327

三、简答题 328

第15章 数据库及其接口设计 329

15.1 数据管理系统及其选择 329

15.2 技术整合 336

15.3 数据接口 337

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

15.4.1 针对文件系统的设计 339

15.4.2 针对RDBMS的设计 343

15.4.3 使用OODBMS 352

小结 352

综合练习十五 353

一、填空题 353

二、选择题 353

三、简答题 353

第16章 用户界面设计 354

16.1 人的因素 354

16.1.1 分析活动者——与系统交互的人 354

16.1.2 从Use Case分析人机交互 355

16.1.3 分析处理异常事件的人机交互 358

16.1.4 命令的组织 358

16.1.5 输出信息的组织结构 362

16.2 界面设计风格 362

16.2.1 菜单的选择 363

16.2.2 对话框 364

16.2.3 窗口 365

16.3 人机界面的设计准则 365

16.4 人机界面设计过程 367

16.4.1 用户界面模型 367

16.4.2 界面支持系统 368

16.4.3 界面元素 369

16.4.4 设计的形式 369

16.5 描述方法与技术 371

16.5.1 灵境技术 372

16.5.2 多通道人机交互技术 372

小结 373

综合练习十六 373

一、填空题 373

二、选择题 374

三、简答题 374

第17章 形式化方法 375

17.1 基础知识 375

17.1.1 形式化方法概念 375

17.1.2 形式化规约语言 376

17.2 有限状态机(FSM) 378

17.3 Petri网基本原理 379

17.3.1 静态结构 379

17.3.2 动态特征 380

17.3.3 转移启动规则 381

17.3.4 行为特性 383

17.3.5 行为特性分析方法 386

17.3.6 结构特性分析方法 392

17.3.7 Petri网到程序结构的转换 395

小结 398

综合练习十七 398

一、填空题 398

二、选择题 398

三、简答题 399

第18章 软件质量 400

18.1 软件质量概述 400

18.1.1 软件质量的定义 400

18.1.2 软件质量特性 400

18.1.3 软件质量特性之间的竞争 404

18.2 软件质量的度量和评价 405

18.2.1 软件质量的度量 405

18.2.2 软件质量度量的分类 406

18.2.3 软件质量评价 406

18.3 软件质量保证 409

18.3.1 软件质量保证的概述 409

18.3.2 软件质量保证原则 409

18.3.3 软件质量保证计划 410

18.3.4 软件质量保证的措施 410

18.3.5 软件质量管理小组 410

18.4 技术评审与审查 411

18.4.1 评审过程 411

18.4.2 选择参加评审的成员 412

18.4.3 评审的管理和组织 412

18.4.4 评审的方法 412

18.4.5 走查和审查 412

18.4.6 开发过程的评审 413

18.4.7 对评审的综合评价 414

18.5 软件的可靠性 415

小结 415

综合练习十八 415

一、填空题 415

二、选择题 416

三、简答题 416

第19章 软件实现 417

19.1 程序设计语言的特性及选择 417

19.1.1 程序设计语言特性 417

19.1.2 程序设计语言的选择 418

19.2 程序设计风格 421

19.3 程序设计效率 423

19.3.1 代码效率 423

19.3.2 内存效率 423

19.3.3 I/O效率 424

19.4 冗余编程 424

19.5 软件容错技术 425

19.5.1 容错软件 425

19.5.2 容错的一般方法 426

19.5.3 容错软件的设计过程 429

19.5.4 软件的容错系统结构 429

小结 432

综合练习十九 432

一、填空题 432

二、选择题 432

三、简答题 433

第20章 软件测试 434

20.1 软件测试概述 434

20.1.1 软件测试的目的 434

20.1.2 软件测试的原则 434

20.2 测试方法 435

20.2.1 静态测试 435

20.2.2 动态测试 435

20.3 测试用例的设计 436

20.3.1 白盒技术 436

20.3.2 黑盒技术 441

20.4 测试过程 445

20.4.1 软件测试过程中的信息 445

20.4.2 软件测试的步骤与各开发阶段的关系 445

20.4.3 单元测试 446

20.4.4 集成测试 447

20.4.5 确认测试 450

20.5 调试 451

小结 452

综合练习二十 452

一、填空题 452

二、选择题 453

三、简答题 453

第21章 软件维护 454

21.1 软件维护概述 454

21.1.1 软件维护的定义 454

21.1.2 影响维护工作的因素 455

21.1.3 维护成本 455

21.2 软件可维护性 455

21.2.1 软件可维护性的定义 455

21.2.2 可维护性的度量 456

21.3 软件维护的特点 458

21.3.1 非结构化维护和结构化维护 458

21.3.2 维护的困难性 459

21.3.3 软件维护的费用 459

21.4 软件维护的实施 460

21.4.1 维护的组织 460

21.4.2 维护的流程 460

21.4.3 维护技术 461

21.4.4 维护的副作用 462

21.5 维护“老化代码” 463

21.6 逆向工程和再工程 464

21.6.1 预防性维护 464

21.6.2 逆向工程的元素 465

21.6.3 再工程中的重构技术 465

小结 468

综合练习二十一 469

一、填空题 469

二、选择题 469

三、简答题 469

第22章 软件项目管理与计划 470

22.1 软件项目管理概述 470

22.1.1 软件管理的对象 470

22.1.2 软件开发中的资源 471

22.1.3 分解技术 472

22.2 项目管理过程 472

22.3 软件开发成本估算 473

22.3.1 软件开发成本估算方法 473

22.3.2 软件开发成本估算的经验模型 474

22.4 风险分析 476

22.4.1 风险识别 477

22.4.2 风险估算 477

22.4.3 风险评价 478

22.4.4 风险驾驭和监控 479

22.5 进度安排 480

22.5.1 软件开发小组人数与软件生产率 481

22.5.2 任务的确定与并行性 481

22.5.3 制定开发进度计划 482

22.5.4 进度安排的图形方法 483

22.5.5 项目的追踪和控制 484

22.6 软件项目的组织 484

22.6.1 软件项目管理的特点 484

22.6.2 软件项目组织的建立 485

22.6.3 人员配备 487

小结 489

综合练习二十二 489

一、填空题 489

二、选择题 490

三、简答题 490

参考文献 491