《软件工程》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:张秋余,张聚礼,柯铭,张红,马威编著
  • 出 版 社:西安:西安电子科技大学出版社
  • 出版年份:2014
  • ISBN:9787560635101
  • 页数:406 页
图书介绍:软件工程是计算机、软件等专业的一门专业核心课程。通过本课程的学习,使学生掌握系统的软件开发理论、技术和方法,使用正确的工程方法开发出成本低、可靠性好并在机器上能高效运行的软件,为今后从事软件开发和维护打下坚实的基础。本教材充分吸收软件工程名著精华,紧密结合软件工程实践,采用案例驱动教学,使学生学会软件工程的工具、方法和技术,引导学生积极参与教学实践,做到理论和实践的统一。

第1章 软件工程学概论 1

1.1 软件的基本概念 1

1.1.1 软件与软件特性 1

1.1.2 软件的分类 2

1.2 软件危机 4

1.3 软件工程 5

1.3.1 软件工程的基本原理 6

1.3.2 软件工程学科包含的领域 7

1.4 软件工程的方法、工具与环境 8

1.4.1 软件工程的方法、工具与环境 8

1.4.2 软件开发的基本策略 11

1.5 软件过程与软件生命周期 12

1.5.1 软件过程 12

1.5.2 软件生命周期的各个阶段 13

1.6 常见的软件过程模型 16

1.6.1 瀑布模型 16

1.6.2 快速原型模型 17

1.6.3 演化模型 18

1.6.4 螺旋模型 19

1.6.5 喷泉模型 20

1.7 小结 21

习题1 22

第2章 项目分析与软件需求分析 23

2.1 软件项目的问题定义 23

2.2 软件项目可行性分析 24

2.3 软件系统的需求 27

2.3.1 功能需求 27

2.3.2 非功能需求 28

2.3.3 软件需求分析的风险 30

2.4 用户需求获取 31

2.5 软件需求文档与规格说明 33

2.5.1 自然语言描述 33

2.5.2 结构化描述 34

2.5.3 软件需求文档 35

2.6 系统流程图 36

2.7 数据流图 38

2.7.1 数据流图的符号 38

2.7.2 设计数据流图的步骤和示例 39

2.7.3 数据流图中命名的可理解性 41

2.7.4 数据流图的用途 42

2.7.5 数据流图中的数据字典 43

2.8 实体-联系图 46

2.9 需求分析中使用的其他图形工具 48

2.10 面向数据流的建模 51

2.11 需求有效性验证 53

2.12 实例分析——教材征订业务分析 54

2.13 小结 58

习题2 58

第3章 软件总体设计 60

3.1 总体设计 60

3.2 软件总体设计原理 64

3.2.1 设计原理 64

3.2.2 启发式规则 71

3.3 描绘软件结构的图形工具 73

3.3.1 层次图和HIPO图 73

3.3.2 软件结构图 74

3.4 映射数据流到软件结构 75

3.4.1 变换流 75

3.4.2 事务流 76

3.4.3 变换映射(变换分析) 76

3.4.4 事务映射(事务分析) 78

3.4.5 设计优化——精化软件结构 79

3.5 数据库结构设计过程 80

3.6 实例分析 81

3.7 小结 83

习题3 84

第4章 软件详细设计 85

4.1 结构化程序设计 86

4.1.1 结构化的控制结构 86

4.1.2 结构化程序设计的实现方法 87

4.1.3 结构化程序设计的特点 88

4.2 用户界面设计 88

4.2.1 黄金规则 89

4.2.2 用户界面的分析与设计 90

4.2.3 界面分析 92

4.2.4 界面设计步骤 94

4.3 程序算法设计工具 96

4.3.1 图形化设计工具 97

4.3.2 表格式设计表示 101

4.3.3 程序设计语言 102

4.3.4 程序算法设计工具的比较 103

4.4 面向数据结构的设计方法 104

4.4.1 Jackson数据结构图 104

4.4.2 改进的Jackson图 105

4.4.3 Jackson方法的设计过程 105

4.5 程序复杂度的概念及度量方法 108

4.6 小结 111

习题4 111

第5章 软件实现 113

5.1 软件编码 113

5.1.1 编码目的 113

5.1.2 程序设计语言的选择 114

5.1.3 良好的编程实践 115

5.1.4 程序员的基本素质 117

5.2 软件测试基础 118

5.3 测试设计和管理 120

5.3.1 错误曲线 120

5.3.2 软件测试配置 120

5.3.3 测试用例设计 122

5.4 软件测试过程 124

5.4.1 软件测试基本原则 125

5.4.2 软件测试的步骤、测试信息流 126

5.4.3 软件测试组织与人员 127

5.5 软件测试的基本方法 128

5.5.1 软件测试方法与技术 128

5.5.2 软件测试的误区 130

5.6 软件测试策略 132

5.6.1 测试策略 132

5.6.2 单元测试 133

5.6.3 集成测试(组装测试) 135

5.6.4 确认测试(有效性测试) 139

5.6.5 系统测试与验收测试 140

5.7 白盒测试 142

5.7.1 逻辑覆盖法 142

5.7.2 基本路径测试法 146

5.8 黑盒测试 149

5.8.1 等价类划分法 149

5.8.2 边界值分析法 150

5.8.3 错误推测法 151

5.8.4 状态测试法 151

5.9 回归测试 152

5.10 软件调试 153

5.10.1 软件调试的目的与原则 154

5.10.2 软件调试技术 154

5.10.3 调试技巧 156

5.11 小结 156

习题5 156

第6章 软件维护 159

6.1 软件维护的基本概念 159

6.2 软件维护的任务和分类 160

6.3 软件维护过程 161

6.4 维护的管理 164

6.5 预防性维护 169

6.6 软件维护的副作用 170

6.7 软件文档与编写要求及方法 171

6.7.1 软件文档的重要性与分类 171

6.7.2 软件文档应该满足的要求 173

6.7.3 对软件文档编制的质量要求 174

6.7.4 软件文档的管理和维护 175

6.8 软件逆向工程和再工程 176

6.9 小结 178

习题6 178

第7章 面向对象软件工程方法学 179

7.1 面向对象的概念 179

7.2 从认识论看面向对象方法的形成 181

7.2.1 软件开发——对事物的认识和描述 181

7.2.2 语言的鸿沟 181

7.2.3 面向对象编程语言的发展使鸿沟变小 182

7.2.4 软件工程学的作用 183

7.3 面向对象方法的基本概念 186

7.3.1 面向对象的基本概念 186

7.3.2 面向对象的主要特征 186

7.4 统一过程与统一建模语言 187

7.4.1 统一过程概述 187

7.4.2 统一过程生命周期 189

7.4.3 统一建模语言 192

7.5 迭代和增量过程 194

7.5.1 为什么采用迭代和增量的开发方法 194

7.5.2 迭代方法是风险驱动的 198

7.5.3 通用迭代过程 198

7.5.4 一次迭代产生一个增量结果 200

7.5.5 在整个生命周期上的迭代 200

7.5.6 由迭代过程来演化模型 202

7.6 小结 202

习题7 203

第8章 用例驱动 204

8.1 用例驱动开发概述 205

8.2 为什么使用用例 206

8.2.1 根据需求的价值捕获用例 207

8.2.2 用例驱动开发过程 207

8.3 确定客户需要什么 208

8.4 需求工作流 209

8.5 领域模型 211

8.6 业务模型 212

8.7 补充需求 216

8.8 初始需求 216

8.9 初始需求:考勤系统实例研究 218

8.9.1 聆听 218

8.9.2 确定参与者 219

8.9.3 确定用例 220

8.9.4 简要说明用例 222

8.9.5 描述用例模型 223

8.10 继续需求流:考勤系统实例研究 224

8.10.1 区分用例的优先级 224

8.10.2 详细描述用例 225

8.10.3 构造用户界面原型 230

8.11 修订需求:考勤系统实例研究 233

8.12 测试工作流:考勤系统实例研究 241

8.13 需求规格说明书 242

8.14 小结 243

习题8 243

第9章 面向对象分析 244

9.1 分析工作流 244

9.2 分析模型 246

9.3 确定分析包 248

9.3.1 处理分析包之间的共性 248

9.3.2 确定服务包 249

9.3.3 确定分析包间的依赖 250

9.4 提取实体类 251

9.4.1 实体类的提取 251

9.4.2 面向对象分析:电梯问题实例研究 251

9.4.3 功能建模:电梯问题实例研究 252

9.4.4 实体类建模:电梯问题实例研究 253

9.4.5 动态建模:电梯问题实例研究 256

9.4.6 测试工作流:电梯问题案例研究 257

9.5 提取边界类和控制类 260

9.6 初始功能模型:考勤系统实例研究 260

9.6.1 划分用例等级 260

9.6.2 寻找候选对象 264

9.7 分析类 268

9.7.1 确定职责 268

9.7.2 确定属性 269

9.7.3 确定关联和聚合 269

9.7.4 确定泛化 270

9.7.5 捕获特殊需求 270

9.8 初始类图:考勤系统实例研究 271

9.8.1 寻找“Login”中的关系 271

9.8.2 寻找“RecordFime”中的关系 272

9.8.3 寻找“ExportTimeEntries”中的关系 272

9.9 描述分析对象间的交互 273

9.10 用例实现:考勤系统实例研究 274

9.10.1 为“Login”添加假设的行为 274

9.10.2 为“Login”构建顺序图 275

9.11 分析包 277

9.12 类图递增:考勤系统实例研究 278

9.13 测试流与分析工作流中的规格说明文档 279

9.14 小结 280

习题9 281

第10章 构架为中心 282

10.1 构架概述 283

10.2 为什么需要构架 284

10.3 用例和构架 285

10.4 建立构架的步骤 287

10.4.1 构架基线是一个“小的、皮包骨的”系统 287

10.4.2 使用构架模式 288

10.4.3 描述构架 289

10.4.4 构架设计师创建构架 291

10.4.5 构架师 291

10.4.6 建立构架的过程 292

10.5 构架描述 293

10.6 建立软件构架:考勤系统实例研究 296

10.6.1 确立目标 296

10.6.2 将类分组并评估每个类 297

10.6.3 展示技术 301

10.6.4 抽取子系统 302

10.6.5 应用原则和目标对构架进行评估 303

10.7 小结 304

习题10 304

第11章 设计和模式 305

11.1 设计在软件生命周期中的作用 305

11.2 设计工作流 307

11.3 设计模式 311

11.3.1 设计原则 311

11.3.2 模式简介 312

11.3.3 设计模式的优势与应用 316

11.4 规划设计工作 316

11.4.1 建立整个设计目标 317

11.4.2 建立设计准则 318

11.4.3 寻找独立的设计工作 318

11.5 设计包或子系统 319

11.6 设计工作流:考勤系统实例研究 319

11.7 HTMLProduction框架 320

11.7.1 设计目标 320

11.7.2 按目标进行设计 323

11.7.3 填充细节 332

11.7.4 实现工作流 335

11.8 TimeCardUI包 338

11.8.1 评审 338

11.8.2 针对目标进行设计 340

11.8.3 用例设计 341

11.8.4 实现工作流 344

11.9 设计度量与用于设计的CASE工具 344

11.10 小结 345

习题11 346

第12章 面向对象实现 347

12.1 实现在软件生命周期中的作用 347

12.2 实现工作流 349

12.2.1 构架实现 349

12.2.2 系统集成 350

12.2.3 实现子系统 352

12.2.4 实现类 353

12.2.5 执行单元测试 354

12.3 集成 356

12.4 测试工作流 360

12.5 用于实现的CASE工具 364

12.6 小结 366

习题12 366

第13章 软件复用和构件技术 368

13.1 复用的概念 368

13.2 复用的障碍与复用技巧 369

13.3 对象和复用 372

13.3.1 OO方法对软件复用的支持 372

13.3.2 复用技术对OO方法的支持 373

13.4 构件及构件技术 374

13.4.1 构件 374

13.4.2 构件技术模型 375

13.4.3 当前主流构件模型 375

13.4.4 构件的开发与复用 377

13.5 设计和实现期间的复用 378

13.6 复用及互联网 381

13.7 小结 382

习题13 382

第14章 现代软件工程 383

14.1 现代软件工程发展的主要技术特点 383

14.2 开源软件运动 385

14.2.1 开源软件的定义与由来 385

14.2.2 Oss项目的优势与开发经验 387

14.2.3 如何看待开源软件 388

14.3 领域工程 389

14.3.1 基于领域工程的软件开发概述 389

14.3.2 基于构件的软件工程 390

14.3.3 领域工程建模过程 391

14.4 敏捷软件开发过程及实践 392

14.4.1 敏捷思想与实践原则 392

14.4.2 支持敏捷软件开发的技术和管理手段 394

14.4.3 极限编程 396

14.4.4 其他敏捷软件开发方法 397

14.5 测试驱动开发 398

14.5.1 测试驱动开发思想 398

14.5.2 支持测试驱动开发的软件工具 400

14.5.3 测试驱动开发过程 401

14.6 现代软件工程其他新方法 401

习题14 404

附录:软件工程师职业素质及道德规范 405

F1.软件工程师职业素质 405

F2.软件工程师道德规范 406