软件工程方法与实践 第3版
作者 : 主编 窦万峰 参编 李亚楠 潘媛媛 林燕平
出版日期 : 2016-10-08
ISBN : 978-7-111-54948-2
适用人群 : 本书适合作为高等院校软件工程课程的教材,即适用于计
定价 : 45.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 322
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书分别从传统的结构化软件开发方法学和面向对象软件开发方法学两个方面介绍软件的开发理论与方法,并把理论与方法融入到软件开发的实践当中,通过丰富的案例理解软件分析与设计方法及其模型,深入地介绍软件开发中各个阶段的技术、方法和管理过程。本书包括软件工程基础、结构化软件分析与设计、面向对象软件分析与设计、软件工程项目维护及管理四部分。

图书特色

本书针对传统的结构化软件开发方法学和面向对象软件开发方法学两大体系,通过5个实用系统案例,深入讲解软件开发各个阶段的原理、技术、方法和管理过程,主要内容包括:软件工程基础,结构化分析、设计与测试,面向对象分析、设计与测试,软件维护与项目管理。
本书特点
以问题为引导,详细讨论软件工程中的不同过程及其优缺点,使学生对问题产生的原因和新方法的提出有更深入的理解,支持学生进行深入阅读。
将结构化方法学和面向对象方法学分开介绍,易于学生理解二者的本质区别,厘清其分析与设计模型的不同点,从而针对不同项目做出合理选择。
针对两大方法学选取代表性案例,如结对编程系统、ATM系统、POS机系统和胰岛素输送系统等,循序渐进,引导学生将理论方法应用于实际系统。
注重本科生研究性教学实践,针对敏捷方法中的结对编程,分析其中存在的问题和解决方法,结合系统需求进行设计、实现与测试,可将其作为学期项目。

图书前言

软件工程包含一系列软件开发的基本原理、方法和实践经验,用来指导人们进行正确的软件开发。软件工程强调从工程化的原理出发,按照

标准化规程和软件开发实践来引导软件开发人员进行软件开发和实践活动,并进行过程改进,促进软件企业向标准化和成熟化的方向发展。

软件工程是一门理论与实践相结合的学科,更注重通过实践来理解原理和方法。为此,我们结合多年的软件工程教学和项目开发经验,通过

5个项目实例,从不同的角度、利用不同的方法学来循序渐进地介绍软件开发过程中所涉及的原理、方法和技术。本书的另一个特色是从问

题的角度引导学生根据自己的体会来讨论软件开发过程中的问题,进而理解软件工程的概念和原理,总结出一些有效的方法和实践经验。
编写思想
本书强调以问题为引导的软件工程所涉及的概念和方法,进而讨论具体的过程及其优缺点,并结合具体案例进行解析,让学生对问题产生的

原因和新方法的提出有更深入的理解,还支持学生进行深入阅读。
我们将传统的结构化方法学和面向对象方法学分开介绍,这有利于学生理解二者的本质区别,厘清其分析与设计模型的不同特点,从而针对

不同的项目来选择不同的开发方法学和过程。从结构化到面向对象的路线也便于学生逐步接受软件开发的思想和本质。
结构化方法学。重点讨论开发过程、原理和方法,这些都可以推广到面向对象的开发范型中。最后通过胰岛素输送这一高要求系统案例介绍

如何将这些方法应用到实践中。
面向对象方法学。重点讨论面向对象分析模型和设计模型的构建,强调它们之间的关系,抓住面向对象模型开发的要点,通过UML建模语言

来描述分析和设计模型,进一步加深学生对面向对象模型本质的理解,同时也清楚其适用的情况。最后通过POS机这一复杂系统案例帮助学

生掌握面向对象分析与设计的主要思想。
本书还注重本科生研究性教学实践,针对现代软件开发方法—敏捷方法,重点介绍结对编程,在帮助学生理解结对编程思想的同时,分析其

中存在的问题和解决方法,结合系统需求进行设计、实现与测试。通过这一过程可达到研究性教学的目的,也可将结对编程作为学期项目。
组织结构
本书分为四个部分,共14章内容。第一部分“软件工程基础”(第1~4章)主要从软件危机引出软件工程的基本概念和基本原理,介绍软件

开发的工程化思想和开发过程等。第二部分“结构化分析、设计与测试”(第5~9章)针对传统结构化的软件开发方法学,主要介绍其基本

概念、分析与设计过程、分析与设计模型、软件测试原理和技术、高要求系统的分析与设计方法等。第三部分“面向对象分析、设计与测试

”(第10~12章)将介绍面向对象方法学的基本概念、用例分析模型及其设计过程、面向对象分析与设计模型、面向对象的实现以及测试技

术。第四部分“软件维护与项目管理”(第13、14章)主要介绍软件维护策略与方法、软件项目管理概念与原理、软件成本估算以及项目计

划与管理。
案例
由于本书分别介绍了传统的结构化方法学和面向对象方法学两大体系,因此专门选择了适合不同方法学的具有代表性的案例进行研究,以便

读者能够深入理解其各自的优势。这些案例中既有简单常见的应用系统,如面对面结对编程系统和ATM系统;也有比较实用的系统,如POS机

系统;还有一些稍微复杂的系统,如分布式结对编程系统和胰岛素输送系统。这些系统由简单到复杂,循序渐进,引导学生逐步理解系统的

开发过程和关键问题。
面对面结对编程系统是一个辅助学生进行结对编程和学习的系统,该系统支持角色交换、信息统计和相容性分析等功能,克服了编程过程中

的一些不便,如交换位置、相互干扰等。同时,该系统采用一台主机支持结对,还具有节约实验室建设费用等优点。
POS机系统是电子收款机系统的简称,通过计算机来处理销售和支付信息。该系统包括计算机终端、条码扫描仪、现金抽屉、票据打印机等

硬件以及支持系统运转的软件,能够为不同服务的应用程序提供接口。收银员通过条码扫描仪读取的或键盘输入的商品条码号来记录商品信

息,系统自动计算销售总价。收银员通过系统能够处理支付,包括现金支付、信用卡支付和支票支付。经理通过系统能够处理顾客退货。
ATM系统即自动柜员机系统,能够自动处理银行储户的各种业务,如取款、存款、转账、查询、修改密码等。ATM软件系统使客户能够直接访

问银行计算机完成交易,无需银行工作人员的介入。
分布式结对编程系统支持跨地域的结对编程或学习。为了支持异地结对者像在本地一样方便地工作,系统通过文本、音频和视频进行交流。

系统与集成开发环境进行集成,包括VC++、Eclipse等开发环境。系统支持角色交换,但通常不严格遵循“驱动者”和“领航者”的角色,

所以分布结对编程的工具应该允许合作者很容易地访问控制键盘。
胰岛素输送系统是关于人体胰腺操作(一种体内组织)的仿真,其目标是帮助那些糖尿病患者控制血糖水平。该系统用于监控血糖浓度,根

据需要输送正确剂量的胰岛素,对安全性的要求非常高。
意见与反馈
本书第1~4章由窦万峰编写,第5~9章由窦万峰和林燕平编写,第10~13章由窦万峰和李亚楠编写,第14章由窦万峰和潘媛媛编写。全书由

窦万峰统稿、校对。
由于作者水平有限,因此难免有疏漏之处,恳请各位读者指正,意见可发至邮箱douwf-fly@163.com。尤其是关于书中所选案例的详细程度

和多样性,请读者多提意见,以便以后进行改进和完善。

作者
2016年9月

上架指导

计算机\软件工程

封底文字

本书针对传统的结构化软件开发方法学和面向对象软件开发方法学两大体系,通过5个实用系统案例,深入讲解软件开发各个阶段的原理、技术、方法和管理过程,主要内容包括:软件工程基础,结构化分析、设计与测试,面向对象分析、设计与测试,软件维护与项目管理。

本书特色:
·以问题为引导,详细讨论软件工程中的不同过程及其优缺点,使学生对问题产生的原因和新方法的提出有更深入的理解,支持学生进行深入阅读。
·将结构化方法学和面向对象方法学分开介绍,易于学生理解二者的本质区别,厘清其分析与设计模型的不同点,从而针对不同项目做出合理选择。
·针对两大方法学选取代表性案例,如结对编程系统、ATM系统、POS机系统和胰岛素输送系统等,循序渐进,引导学生将理论方法应用于实际系统。
·注重本科生研究性教学实践,针对敏捷方法中的结对编程,分析其中存在的问题和解决方法,结合系统需求进行设计、实现与测试,可将其作为学期项目。

图书目录

前言
第一部分 软件工程基础
第1章 软件工程概述2
1.1 引言2
1.2 什么是软件2
1.2.1 软件的定义与特性2
1.2.2 软件技术的演化3
1.3 什么是软件工程4
1.3.1 软件危机4
1.3.2 解决软件危机的途径5
1.3.3 软件工程的定义5
1.4 软件工程的基本原理与基本原则7
1.4.1 基本原理7
1.4.2 基本原则8
1.5 软件工程开发方法学8
1.5.1 结构化开发方法学9
1.5.2 面向对象开发方法学9
1.5.3 重型软件工程与轻型软件工程10
1.6 小结10
习题11
第2章 软件过程12
2.1 引言12
2.2 什么是软件过程12
2.2.1 软件过程的定义12
2.2.2 软件过程框架13
2.3 软件产品与过程15
2.4 软件生存周期17
2.5 软件工程活动18
2.6 小结20
习题21
第3章 软件过程模型22
3.1 引言22
3.2 什么是软件过程模型22
3.3 传统的软件过程模型22
3.3.1 瀑布模型22
3.3.2 增量模型24
3.3.3 螺旋模型25
3.4 面向对象模型26
3.4.1 构件集成模型26
3.4.2 统一过程模型27
3.5 小结29
习题29
第4章 敏捷软件开发方法30
4.1 引言30
4.2 敏捷软件开发过程30
4.2.1 敏捷过程30
4.2.2 敏捷开发原则31
4.3 Scrum开发过程31
4.3.1 Scrum的特点31
4.3.2 Scrum模型与过程32
4.4 极限编程  33
4.4.1 什么是极限编程33
4.4.2 极限编程的要素34
4.5 结对编程35
4.5.1 什么是结对编程36
4.5.2 结对编程的优势分析37
4.5.3 结对编程的分类39
4.5.4 结对编程的方式39
4.6 小结41
习题41
第二部分 结构化分析、设计与测试
第5章 软件需求分析44
5.1 引言44
5.2 什么是软件需求44
5.3 需求分析过程45
5.4 会谈技术49
5.4.1 非正式会谈49
5.4.2 正式会谈49
5.5 调查技术50
5.5.1 确定调查内容50
5.5.2 可靠可信分析51
5.6 场景分析技术51
5.7 小结52
习题52
第6章 结构化分析53
6.1 引言53
6.2 结构化分析模型53
6.3 面向数据流的建模方法54
6.3.1 数据流建模方法54
6.3.2 实例分析57
6.4 面向数据的建模方法58
6.4.1 数据建模方法58
6.4.2 实例分析59
6.5 面向状态的建模方法60
6.5.1 状态建模方法60
6.5.2 实例分析61
6.6 规格说明书编写示例62
6.7 小结70
习题70
第7章 结构化设计71
7.1 引言71
7.2 软件设计过程71
7.3 软件模块化设计75
7.4 软件结构78
7.5 结构化概要设计79
7.5.1 数据流模型79
7.5.2 数据流设计方法80
7.5.3 实例分析81
7.6 概要设计文档编写示例83
7.7 详细设计90
7.8 结构化详细设计91
7.9 详细设计文档编写示例98
7.10 编码实现101
7.10.1 编码语言101
7.10.2 编码风格102
7.11 小结103
习题103
第8章 结构化软件测试106
8.1 引言106
8.2 软件测试的目的和原则106
8.3 软件测试的基本过程108
8.3.1 单元测试108
8.3.2 集成测试110
8.3.3 确认测试110
8.3.4 系统测试111
8.4 测试用例设计111
8.5 黑盒测试技术112
8.5.1 等价类划分112
8.5.2 边界值分析113
8.5.3 错误推测114
8.5.4 因果图114
8.6 白盒测试技术117
8.6.1 逻辑覆盖117
8.6.2 路径覆盖120
8.6.3 循环路径测试策略122
8.7 集成测试技术123
8.7.1 集成策略123
8.7.2 性能测试125
8.7.3 实例分析127
8.8 调试技术133
8.8.1 调试过程133
8.8.2 调试策略134
8.9 软件测试文档135
8.9.1 软件测试计划文档135
8.9.2 集成测试文档137
8.10 小结139
习题139
第9章 高要求系统的分析与设计140
9.1 引言140
9.2 什么是高要求系统140
9.3 高要求系统的需求分析142
9.3.1 风险需求描述143
9.3.2 安全性描述146
9.3.3 信息安全描述146
9.3.4 软件可靠性描述146
9.3.5 胰岛素输送系统完整的需求描述147
9.4 形式化描述方法149
9.4.1 软件过程中的形式化描述149
9.4.2 接口描述方法150
9.4.3 行为描述153
9.5 高要求系统的设计155
9.6 高要求系统的开发156
9.7 系统验证160
9.7.1 可靠性验证160
9.7.2 安全性保证161
9.7.3 信息安全评估164
9.8 小结165
习题166
第三部分 面向对象分析、设计与测试
第10章 面向对象分析168
10.1 引言168
10.2 面向对象模型168
10.3 UML170
10.3.1 UML的组成170
10.3.2 UML的视图171
10.4 面向对象分析过程172
10.5 用例驱动分析173
10.5.1 用例建模分析173
10.5.2 开发活动图177
10.5.3 开发泳道图178
10.6 领域与业务建模179
10.6.1 识别业务类和领域类179
10.6.2 业务类图180
10.6.3 识别属性和操作181
10.6.4 开发协作图182
10.6.5 开发包图182
10.6.6 逻辑架构183
10.7 系统行为建模185
10.7.1 系统顺序图185
10.7.2 建立操作契约186
10.7.3 建立顺序图187
10.7.4 系统状态图188
10.8 POS机系统案例分析188
10.9 分布式结对编程系统分析191
10.9.1 项目概述191
10.9.2 功能描述192
10.9.3 逻辑分析与建模200
10.10 小结204
习题205
第11章 面向对象设计206
11.1 引言206
11.2 面向对象设计模型206
11.3 构件设计207
11.3.1 构件设计的步骤207
11.3.2 构件设计的原则208
11.4 并发性设计209
11.5 设计模式211
11.5.1 基于职责的设计211
11.5.2 常见的设计模式212
11.6 面向对象详细设计215
11.6.1 模型精化216
11.6.2 逻辑架构精化设计219
11.6.3 分层设计221
11.6.4 类操作设计223
11.7 方法设计229
11.8 精化设计234
11.9 数据存储与持久性设计238
11.10 部署设计与构件图243
11.11 小结244
习题245
第12章 面向对象实现与测试246
12.1 引言246
12.2 面向对象实现246
12.3 POS机系统实现247
12.4 分布式结对编程系统实现253
12.5 面向对象测试256
12.6 面向对象测试策略258
12.7 测试驱动开发261
12.7.1 什么是测试驱动开发261
12.7.2 测试驱动开发的步骤264
12.7.3 编写测试程序266
12.7.4 代码重构270
12.8 小结271
习题271
第四部分 软件维护与项目管理
第13章 软件维护274
13.1 引言274
13.2 软件的可维护性275
13.3 软件维护的类型275
13.4 软件维护方法277
13.5 提高软件的可维护性279
13.5.1 结构化维护与非结构化维护279
13.5.2 提高软件可维护性的技术途径280
13.6 小结281
习题281
第14章 软件项目管理283
14.1 引言283
14.2 软件项目组织285
14.3 软件过程管理287
14.3.1 软件过程度量287
14.3.2 软件过程改进288
14.3.3 软件项目度量289
14.4 软件项目风险管理289
14.4.1 风险识别289
14.4.2 风险预测290
14.4.3 风险管理290
14.5 软件配置管理291
14.5.1 基本概念291
14.5.2 软件配置管理过程292
14.6 软件项目估算293
14.6.1 软件项目资源293
14.6.2 软件规模度量294
14.6.3 估算管理296
14.7 分解技术296
14.7.1 基于问题分解的估算296
14.7.2 基于过程分解的估算298
14.8 经验估算技术299
14.8.1 专家类比推断299
14.8.2 中级COCOMO估算模型300
14.9 软件质量管理303
14.9.1 软件质量保证303
14.9.2 软件质量度量305
14.10 项目进度管理308
14.10.1 项目进度管理计划308
14.10.2 进度安排309
14.10.3 进度跟踪管理311
14.11 小结311
习题312
参考文献314

教学资源推荐
作者: (美)Jeffrey L. Whitten;Lonnie D. Bentley 著
作者: [美] 弗兰克•徐(Frank Tsui) 奥兰多•卡拉姆(Orlando Karam) 芭芭拉•博纳尔(Barbara Bernal)著
参考读物推荐
作者: Terry Quatrani;Jim Palistrant
作者: 葛志春 刘志成 聂艳明 冯向科