《软件工程实用案例教程》结合软件工程的发展与教学需要,系统地阐述了软件工程这一领域的基本概念、原理与方法。《软件工程实用案例教程》共包括11章,主要内容有:软件工程综述,软件过程,可行性研究,结构化需求分析,结构化软件设计,面向对象的需求分析,面向对象的设计,基于构件的开发,软件项目的测试,软件实施、维护与进化,软件工程标准与文档等。 全书内容丰富、组织严谨,原理和方法结合密切,结构化方法和面向对象的方法均有一个实例贯穿始终,丰富的图表和应用实例有助于培养读者的实际分析设计能力和文档写作能力,书中含有丰富的例题与习题便于教学及读者自学。 《软件工程实用案例教程》可以作为高等院校软件工程专业、计算机科学与技术专业、计算机应用专业,以及其他相关专业高年级本科生的教材,同时可作为从事软件分析、设计与开发人员的参考书。
通过完整、系统的软件工程案例,改变目前软件工程教学中抽象、空泛的现状,并在一定程度上激发学生的学习兴趣,能够提高软件工程课程的教学质量,让学生真正学有所用。教材的内容组织科学、合理、系统,理论与实践并重,同时课后都配有练习题供读者思考与巩固所学知识。
前 言
软件工程学是一门综合型应用科学,它将计算机科学理论与现代工程方法论相结合,着重研究软件过程模型、设计方法及工程开发技术和工具,以指导软件的生产和管理。随着计算机科学和软件产业的迅猛发展,软件工程学已经成为一个重要的计算机分支学科,也是一个异常活跃的研究领域,新方法、新技术不断涌现。
软件工程是计算机专业学生必修的一门专业课程,也是工科各专业学生在计算机应用方面的一门重要选修课程。在多年的软件工程教学过程中,我们的教研团队参考或使用过许多软件工程教材,但很多教材大都侧重理论的讲解,教材中的案例较少,尤其没有一个完整、系统的软件工程案例贯穿其中,由于本科生普遍缺乏软件工程项目开发的实践经验,因此学习软件工程课程感觉非常抽象、空泛与枯燥。为改变目前软件工程教学中这种抽象、空泛的学习现状,我们决定编写《软件工程实用案例教程》。
《软件工程实用案例教程》的特色可以归纳为以下五点。
(1) 从软件危机、软件过程模型,再到软件可行性分析、需求分析、系统设计,都引入大量实际案例,解决软件工程理论教学过程中过于抽象和晦涩的问题;在第4章结构化的分析方法中引入了电梯控制系统案例的完整分析,主要是考虑到结构化分析与设计的优势在嵌入式系统中会更加凸显,而在第6、7章面向对象的需求分析与设计方法中引入了网上计算机销售系统案例,在电子商务如此发达的今天,让学生对自己熟悉的网上销售系统进行分析设计,有利于收集需求,同时能激发学生的学习兴趣。
(2) 第4章结构化需求分析详细介绍了业务需求、用户需求和系统需求3个层次需求各自的特点。系统讲解了需求工程活动,包括需求获取、需求分析、需求规格说明、需求验证和需求管理。其中需求分析包括过程建模和数据建模。过程建模引入食品订货系统案例。数据建模引入学生研讨班案例和EMS表单项目案例。最后引入了电梯控制系统完整案例,按照创建上下文、建立0层图、产生N层图、定义逻辑说明、定义数据存储和数据流的步骤进行了系统完整的需求分析。
(3) 第7章面向对象的设计,遵循分析类 设计模式=设计类原则,逻辑体系架构的介绍从分层结构到三层架构再到熟知MVC模式演化,并对软件的MVC设计模式进行了详细的介绍,这种软件分层模式的理解与掌握对于从事软件开发的读者尤为重要。目前市面上的绝大多数的软件都是采用多层框架结构来实现的,依据构件的划分,对构件内部分析阶段得到的实体类,结合三层的设计模式,补充边界类、控制类、模型类得到可以用来指导开发的详细设计类图。
(4) 第8章基于构件的开发,该章节的主要内容是基于一个构件详细设计类图进行编码开发的,构件详细设计类图是第7章设计阶段的工作成果,将分析设计的模型直接指导编码,帮助读者领会软件工程的真正意义所在。很多从事软件开发的程序员容易重编程轻设计,往往问题还没想清楚就开始编码,这章的内容告诉读者只要分析设计做得详尽,编码就会水到渠成。
(5) 《软件工程实用案例教程》提供第8章的构件开发代码,以及全套软件工程文档,供读者阅读及下载使用。
《软件工程实用案例教程》由梁洁、金兰主编,张硕、宋亚岚、孔德华任副主编。其中,梁洁编写第1章、第2章、第6~8章、第11章,金兰编写第4章和第5章,张硕编写第9章和第10章,宋亚岚编写第3章。全书由宋亚岚、孔德华统稿。
《软件工程实用案例教程》的宗旨是为了提高软件工程课程的教学质量,让学生真正学有所用。《软件工程实用案例教程》具有内容组织科学、合理、系统,注重理论与实践并重的特点,同时课后都配有和教学内容完全一致的练习题供读者思考与巩固知识。
《软件工程实用案例教程》可以作为高等院校软件工程专业、计算机科学与技术专业、计算机应用专业,以及其他相关专业高年级本科生的教材,同时可供从事软件工程、计算机应用、计算机软件专业,以及其他相关专业的科研人员、软件开发人员及有关大专院校的师生参考。
在《软件工程实用案例教程》的编写过程中得到了武昌首义学院的领导和同事们的支持与帮助,在此一并表示感谢。
由于编者水平有限,书中难免存在不妥与疏漏之处,敬请广大读者批评指正。
《软件工程实用案例教程》PPT课件等相关教学资源可通过http://www.tupwk.com.cn/downpage下载。
服务邮箱:wkservice@163.com。
编者
2019年3月
目 录
第1章 软件工程综述 1
1.1 软件工程的背景 1
1.1.1 软件及其特性 1
1.1.2 软件危机 4
1.2 软件工程概述 5
1.2.1 软件工程的基本概念 5
1.2.2 软件工程的目标 6
1.2.3 软件工程三要素 7
1.2.4 软件工程的多样性 9
1.2.5 软件工程与Web 10
1.2.6 软件工程的通用原则 13
1.2.7 软件工程人员的职业道德 14
本章小结 15
本章练习题 16
第2章 软件过程 18
2.1 软件过程概述 18
2.1.1 软件描述 18
2.1.2 软件设计与实现 19
2.1.3 软件有效性验证 21
2.1.4 软件进化 22
2.1.5 软件开发团队组成 23
2.2 软件过程模型概述 24
2.2.1 软件过程模型 24
2.2.2 应对变更 28
2.2.3 Rational统一过程 31
2.3 敏捷软件开发 33
本章小结 36
本章练习题 36
第3章 可行性研究 38
3.1 可行性研究的任务 38
3.2 可行性研究的重要性 39
3.3 可行性研究过程 40
3.4 系统流程图与工作流程 41
3.4.1 流程图规范 42
3.4.2 流程图分析案例 42
3.4.3 分层 43
3.5 数据流图与系统功能 43
3.5.1 数据流图规范 44
3.5.2 数据流图分析案例 44
3.5.3 命名 46
3.5.4 用途 46
3.6 成本/效益分析 47
3.6.1 成本估计 47
3.6.2 成本/效益分析的方法 48
本章小结 49
本章练习题 50
第4章 结构化需求分析 51
4.1 需求 51
4.1.1 需求的定义 51
4.1.2 需求的层次 52
4.1.3 需求的分类 54
4.2 需求工程 55
4.2.1 需求工程的任务 55
4.2.2 需求工程的活动 55
4.3 需求获取 56
4.3.1 需求获取中的常见困难 57
4.3.2 定义项目前景和范围 59
4.3.3 选择信息的来源 61
4.3.4 需求获取的方法 62
4.4 需求分析 63
4.4.1 过程建模 63
4.4.2 数据建模 75
4.4.3 过程模型与数据模型的联系 82
4.4.4 结构化分析的局限性 82
4.5 需求规格说明 82
4.5.1 需求规格说明文档的类型 83
4.5.2 软件需求规格说明文档的读者 83
4.5.3 软件需求规格说明文档模板 84
4.6 需求验证 84
4.6.1 需求验证的概念 84
4.6.2 需求验证的方法 85
4.7 需求管理 86
4.7.1 建立和维护需求基线 86
4.7.2 建立需求跟踪信息 87
4.7.3 进行变更控制 87
4.8 结构化需求分析方法案例 88
本章小结 93
本章练习题 93
第5章 结构化软件设计 97
5.1 软件设计的相关概念 97
5.1.1 软件设计的任务 97
5.1.2 软件设计的原则 98
5.1.3 结构化设计图形工具 103
5.1.4 软件设计的启发规则 105
5.2 体系结构设计 108
5.2.1 数据流类型 109
5.2.2 变换流的映射方法 109
5.2.3 事务流的映射方法 114
5.3 数据设计 117
5.3.1 文件设计 117
5.3.2 数据库设计 117
5.4 接口设计 120
5.4.1 接口设计概述 120
5.4.2 人机界面的交互设计 121
5.5 过程设计 122
5.5.1 结构化程序设计 122
5.5.2 过程设计工具 122
5.6 软件设计规格说明书文档 124
本章小结 125
本章练习题 125
第6章 面向对象的需求分析 129
6.1 面向对象的基本概念 129
6.1.1 对象与类 129
6.1.2 封装、继承和多态性 131
6.1.3 面向对象分析概述 135
6.2 案例说明 136
6.3 上下文模型 137
6.4 活动图与业务流程 137
6.4.1 活动图规范 138
6.4.2 活动图建模 139
6.5 用例图与系统需求 141
6.5.1 用例规范 141
6.5.2 从业务流程到用例图建模 143
6.6 静态结构与类图 147
6.6.1 静态结构与类图的分类 147
6.6.2 类图规范 148
6.6.3 类图建模 150
6.7 时序图与交互模型 155
6.7.1 时序图规范 156
6.7.2 时序图验证 157
6.8 状态图与事件驱动模型 159
6.8.1 状态图规范 159
6.8.2 识别状态空间 161
6.8.3 状态图建模 162
本章小结 162
本章练习题 163
第7章 面向对象的设计 165
7.1 面向对象软件设计概述 165
7.1.1 面向对象设计的过程 165
7.1.2 面向对象设计准则 167
7.2 体系结构设计 168
7.2.1 分层体系结构 169
7.2.2 三层架构 169
7.2.3 采用MVC模式的Web体系结构 171
7.2.4 系统逻辑结构与类包图 173
7.2.5 系统物理体系结构与构件图 175
7.2.6 系统物理体系结构与部署图 177
7.3 构件级设计 179
7.3.1 从分析类到设计类 179
7.3.2 从用例场景到设计类 181
7.3.3 构件详细类图建模 184
7.4 用户界面设计 185
7.4.1 把控制权交给用户 186
7.4.2 减轻用户的记忆负担 186
7.4.3 保持界面一致 187
本章小结 187
本章练习题 188
第8章 基于构件的开发 190
8.1 实施阶段的准备工作 190
8.2 基于构件的编码 191
8.2.1 开发环境 191
8.2.2 从雇员管理构件设计类图到编码 192
8.2.3 雇员管理构件编码 193
8.3 实现问题 205
8.3.1 复用 206
8.3.2 配置管理 207
8.3.3 宿主机-目标机开发 207
本章小结 208
本章练习题 208
第9章 软件项目的测试 210
9.1 软件测试概述 210
9.2 软件测试技术 213
9.2.1 黑盒测试 213
9.2.2 白盒测试 218
9.2.3 灰盒测试 221
9.3 软件测试过程 222
9.3.1 单元测试 222
9.3.2 集成测试 223
9.3.3 确认测试 224
9.3.4 系统测试 225
9.3.5 验收测试 226
9.3.6 回归测试 226
本章小结 227
本章练习题 227
第10章 软件实施、维护与进化 230
10.1 软件实施概述 230
10.2 软件维护概述 232
10.2.1 软件维护的类型 232
10.2.2 软件维护存在的问题 233
10.2.3 软件维护的风险 234
10.2.4 软件维护的过程 235
10.2.5 软件的可维护性 236
10.3 软件进化概述 237
10.3.1 进化过程 238
10.3.2 遗留系统 238
10.3.3 软件再工程 240
本章小结 242
本章练习题 243
第11章 软件工程标准与文档 244
11.1 软件工程标准 244
11.2 软件工程国家标准 245
11.3 软件工程文档标准(GB/T 8567-2006国家标准) 247
11.3.1 软件生存周期与各种文档的编制 247
11.3.2 文档编制中的考虑因素 249
11.3.3 可行性研究报告 251
11.3.4 软件开发计划 253
11.3.5 系统/子系统需求规格说明 258
11.3.6 系统/子系统设计(结构设计)说明 266
11.3.7 数据需求说明 272
11.3.8 软件测试说明 274
11.3.9 软件测试报告 278
11.3.10 项目开发总结报告 280
11.3.11 软件用户手册 282
11.3.12 面向对象软件的文档编制 285
本章小结 294
本章练习题 294