
全书共分3部分,第1部分是软件工程概述,讲解软件工程的基本概念、原理与方法。第2部分是结构化方法介绍,第3部分是面向对象方法介绍,都用同一案例讲解了一个软件项目开发的全过程。
本书以理论与实践相结合的方式介绍了软件工程的基本思想、原理与方法。
本书在编写内容和编排形式上有以下特点。
全书突出了软件过程在软件工程中的基础地位。两种范型的案例分别选用不同的软件过程: 瀑布模型和敏捷过程。
本书对软件成本评估提出了实用的算法——多因素综合法;对用户故事转化为需求规格提出了一种新颖的操作方法——用户故事—用例模型转化法。
可理解性强。以同一案例贯穿全书,读者可以直观地对两种范型进行由表及里的比较,加深对软件工程思想和方法的理解,并清晰地了解一个软件项目在每种范型的开发过程中各个阶段的衔接与联系,从而对软件工程有一个整体的认识。
脉络清晰。书中对软件工程基础内容进行了精心取舍和组合,着力使叙述前后照应、协调一致;着力厘清软件工程不同思想、方法之间的关系,使之统一到一个有机的体系中。
实践性强。本书提供了同一案例在两种范型中的全部文档和源程序。文档完整、规范、翔实。源程序编码规范,并进行了严格的调试。这不仅有助于理解软件工程的思想和方法,还形象地展示了运用相关内容开发一个软件项目的全过程,便于读者理解软件工程的思想和方法,并能在软件开发实践中加以具体运用。
所选案例适合教学用,更适合开发人员理解软件工程的思想。在介绍结构化方法时,特意选用适合面向过程的C语言作为案例的编程语言,选用ODBC作为访问数据库平台接口,更便于理解和学习。
书中在多处插入了文本框,加注对当前内容的提示、观点、注意,或与读者分享有关开发经验。
由于本书特别注重软件工程思想的内在逻辑性,注重软件工程方法的实践性,所以很适合正在挑选软件工程教材的教师、正在寻找软件工程培训教材的培训机构人员以及希望用工程化方法规范开发过程的软件开发人员。
各章末结合该章内容编写了适量的习题,并提供参考答案。
案例的文档紧接在有关章节的后面,或案例开发的一个迭代周期的后面。
编者结合相关内容制作了配套电子课件,并提供全部插图(Word或Visio图形)。电子课件、案例的源程序与数据、插图可以直接从清华大学出版社网站下载。
最后需要说明的是,任何一个软件项目的开发过程都没有统一的标准,不同的设计者往往会有不同的设计风格,软件文档和软件源程序会因人而异。本书提供的案例文档和案例源程序仅供读者参考。
限于水平,书中错误或不当之处在所难免,热忱欢迎广大读者批评、指正。
编者2019年1月
第1部分软件工程概述
第1章认识软件工程3
1.1软件3
1.1.1软件的定义3
1.1.2软件的特点3
1.1.3软件的分类5
1.2软件危机催生软件工程7
1.2.1什么是软件危机7
1.2.2软件危机的主要表现7
1.2.3产生软件危机的原因8
1.3理解软件工程的定义及概念9
1.3.1软件工程的定义9
1.3.2理解软件工程的概念10
1.4软件工程方法学11
1.4.1传统方法学11
1.4.2面向对象方法学12
1.5软件工程层次13
习题113
第2章软件过程15
2.1软件过程概念15
2.1.1什么是软件过程15
2.1.2过程框架15
2.1.3软件生命周期17
2.1.4通用过程框架19
2.1.5过程模型19
2.2瀑布模型20
2.3增量模型21
2.4演化过程模型22
2.4.1快速原型模型22
2.4.2螺旋模型24
2.5统一过程25软件工程: 方法与实践2.6敏捷过程28
2.6.1XP30
2.6.2Scrum32
2.6.3XP与Scrum比较37
2.6.4敏捷过程与瀑布模型比较37
2.7能力成熟度模型38
习题239
第3章软件工程原则41
3.1抽象41
3.2逐步求精41
3.3模块化42
3.4信息隐藏43
3.5模块独立43
3.6重构46
3.7模式46
3.8模式与框架49
3.9案例描述49
3.9.1收文办理系统的描述49
3.9.2怎样编写系统描述51
习题351
第2部分结构化方法
第4章可行性分析55
4.1可行性分析的目的和任务55
4.2可行性分析的过程55
4.3可行性分析的方法或工具58
4.3.1系统流程图58
4.3.2数据流图59
4.3.3成本/效益分析68
4.3.4系统流程图与数据流图比较71
4.3.5数据字典72
4.4可行性分析报告74
习题482
第5章需求分析85
5.1定义需求85
5.2需求分析的过程87
5.3获取需求87
5.4分析与建模89
5.4.1建立功能模型89
5.4.2建立数据模型90
5.4.3建立行为模型95
5.5将需求文档化97
5.6需求验证97
5.7需求规格说明102
习题5110
第6章总体设计112
6.1任务112
6.2方法和原则112
6.3设计软件结构的工具113
6.4软件结构设计114
6.4.1变换分析117
6.4.2事务分析118
6.5数据库逻辑结构设计119
6.5.1关系模型的几个术语119
6.5.2概念模型转换为关系模型120
6.6总体设计说明122
习题6133
第7章详细设计135
7.1任务135
7.2方法136
7.3工具137
7.3.1程序流程图137
7.3.2NS图138
7.3.3PAD图140
7.3.4PDL141
7.4程序复杂性度量141
7.4.1代码行度量法142
7.4.2McCabe度量法142
7.5详细设计说明144
习题7154
第8章软件实现156
8.1编码规范156
8.2编程语言158
8.3效率159
8.4数据库实现160
8.5案例实现161
8.5.1选择数据库接口161
8.5.2ODBC应用程序基本步骤162
8.5.3建立ODBC数据源170
8.5.4创建数据库代码174
8.5.5选择编程语言和开发环境175
8.5.6软件测试计划177
8.5.7软件用户手册182
习题8190
第9章软件测试192
9.1软件测试概述192
9.2测试序表194
9.3测试信息流195
9.4黑盒测试196
9.5白盒测试197
9.6单元测试200
9.7集成测试202
9.8确认测试205
9.9调试206
9.10软件测试报告208
习题9212
第10章软件维护214
10.1软件维护分类214
10.2软件维护过程215
10.3修改程序217
10.4影响维护工作量的因素219
10.5软件的可维护性220
10.6软件再工程221
习题10222
第3部分面向对象方法
第11章面向对象基础227
11.1面向对象的基本观点227
11.2面向对象的主要概念227
11.2.1对象227
11.2.2类228
11.2.3封装228
11.2.4继承228
11.2.5多态性229
11.2.6消息229
11.2.7结构与连接230
11.3典型的面向对象开发方法231
11.3.1OOA/OOD231
11.3.2Booch方法233
11.3.3对象建模技术234
11.3.4面向对象软件工程234
11.3.5方法比较236
习题11236
第12章UML238
12.1UML概况238
12.1.1UML的组成238
12.1.2UML的功能239
12.2模型元素239
12.2.1活动者240
12.2.2用例240
12.2.3类240
12.2.4对象242
12.2.5消息242
12.2.6接口242
12.2.7包243
12.2.8组件243
12.2.9状态244
12.2.10活动244
12.2.11节点245
12.2.12关联245
12.2.13泛化248
12.2.14依赖249
12.3扩展机制249
12.3.1构造型250
12.3.2标记值250
12.3.3约束250
12.4图251
12.4.1用例图251
12.4.2类图251
12.4.3对象图252
12.4.4序列图253
12.4.5协作图253
12.4.6状态图254
12.4.7活动图255
12.4.8组件图257
12.4.9配置图258
12.5视图259
习题12260
第13章面向对象建模262
13.1功能模型262
13.1.1识别活动者262
13.1.2识别用例263
13.1.3画出用例图264
13.1.4用例描述264
13.2对象模型266
13.2.1识别类266
13.2.2识别类之间的关联269
13.2.3画出类图269
13.2.4识别类的属性269
13.2.5识别类的操作271
13.3动态模型271
13.3.1选择方法271
13.3.2补充新类272
13.3.3设计序列图272
13.43种模型之间的关系276
习题13276
第14章案例开发278
14.1定义软件过程278
14.2关于文档279
14.3版本管理280
14.4创建产品Backlog281
14.5迭代1284
14.5.1Sprint计划会议284
14.5.2策划285
14.5.3软件需求规格说明286
14.5.4设计290
14.5.5软件设计说明292
14.5.6编码295
14.5.7测试300
14.5.8测试用例集300
14.6迭代2302
14.6.1开发过程302
14.6.2文档305
14.7迭代3311
14.7.1开发过程311
14.7.2文档313
习题14319
习题参考答案320
附录动态模型333
参考文献335
本书在编写中,由于特别注重软件工程思想的内在逻辑性,注重软件工程方法的实践性,本书很适合正在挑选高等院校软件工程教材的教师、正在寻找软件工程培训教材的培训机构人员以及希望用工程化方法规范开发过程的软件开发人员。
1982年1月毕业于北京航空学院(现北京航空航天大学)。退休前供职于四川省经济信息中心,计算机正高级工程师。长期从事计算机软件、数据库及网络工程的开发工作,研制软件项目20余项,主要有“制表程序生成器”、“层次分析软件”、“排列、组合生成软件”、“多因素综合评判系统”、“四川省固定资产投资项目管理信息系统”、“四川省工业生产年度预测”、“四川省大中专招生计划管理信息系统”、“四川省‘一条线’项目管理信息系统”、“四川省发改委公文处理系统”、“四川省对外经济数据库”、“川东开发公司计划统计管理信息系统”及“专项资金管理信息系统”等。
在全国一级学会科技期刊发表科技论文20余篇,主要有《软件工作量评估初探》、《制表程序生成器的设计与实现》、《计算机数据处理系统的集成》、《亚太地区无线个人通信市场与发展》、《通信网的完整性》、《公用网的可靠性与抗毁性》、《Internet加密技术》、《Domino/Notes访问外部数据库》、《从ASP.NET三层结构示例程序看Crystal Reports应用》、《VC++.NET访问数据库编程》、《VC++.NET图形编程》及《VC++.NET报表编程》等。