搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
软件工程
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787302198123
  • 作      者:
    张海藩编著
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2009
收藏
内容介绍
  为了满足“软件工程”课程学时较少的高等学校对一本适用教材的迫切需求,作者对先后荣获了全国普通高等学校工科电子类专业优秀教材一等奖和全国优秀畅销书奖,并被评为北京高等教育精品教材的《软件工程导论》作了精心改编,保留了原书中较重要、较新颖的内容,删除或简化了一些较陈旧或较次要的内容,写出了《软件工程》。
  本书全面系统地讲述了软件工程的概念、原理和典型的方法学,并介绍了软件项目的管理技术。本书正文共13章,第1章是概述,第2章至第8章顺序讲述软件生命周期各阶段的任务、过程、结构化方法和工具,第9章至第12章分别讲述面向对象方法学引论、面向对象分析、面向对象设计和面向对象实现,第13章介绍软件项目管理。正文后面有两个附录,分别讲述了用面向对象方法和结构化方法开发两个软件的过程,对读者深入理解软件工程学很有帮助,也是上机实习的好材料。
  本书可作为高等院校“软件工程”课程的教材或教学参考书,也可供有一定实际经验的软件工作人员和需要开发应用软件的广大计算机用户阅读参考。
展开
精彩书摘
  第1章 软件工程学概述
  迄今为止,计算机系统已经经历了4个不同的发展阶段,但是,人们仍然没有彻底摆脱“软件危机”的困扰,软件已经成为限制计算机系统发展的瓶颈。
  为了更有效地开发与维护软件,软件工作者在20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科——计算机软件工程学(通常简称为“软件工程”)。
  1.1  软件危机
  在计算机系统发展的早期时代(20世纪60年代中期以前),通用硬件相当普遍,软件却是为每个具体应用而专门编写的。这时的软件通常是规模较小的程序,编写者和使用者往往是同一个(或同一组)人。这种个体化的软件环境,使得软件设计通常是在人们头脑中进行的一个隐含的过程,除了程序清单之外,没有其他文档资料保存下来。
  从20世纪60年代中期到70年代中期是计算机系统发展的第二个时期,这个时期的一个重要特征是出现了“软件作坊”,广泛使用产品软件。但是,“软件作坊”基本上仍然沿用早期形成的个体化软件开发方法。随着计算机应用的日益普及,软件数量急剧膨胀。在程序运行时发现的错误必须设法改正;用户有了新的需求时必须相应地修改程序;硬件或操作系统更新时,通常需要修改程序以适应新的环境。上述种种软件维护工作,以令人吃惊的比例耗费资源。更严重的是,许多程序的个体化特性使得它们最终成为不可维护的。“软件危机”就这样开始出现了1 1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了。
展开
目录
第1章 软件工程学概述1
1.1 软件危机1
1.1.1 软件危机的介绍1
1.1.2 产生软件危机的原因2
1.1.3 消除软件危机的途径4
1.2 软件工程4
1.2.1 软件工程的介绍4
1.2.2 软件工程的基本原理5
1.2.3 软件工程方法学5
1.3 软件生命周期8
1.4 软件过程11
1.4.1 瀑布模型11
1.4.2 快速原型模型13
1.4.3 增量模型15
1.4.4 螺旋模型16
1.4.5 喷泉模型18
1.4.6 Rational统一过程19
1.4.7 敏捷过程与极限编程22
1.4.8 微软过程26
1.5 小结28
习题129

第2章 可行性研究31
2.1 可行性研究的任务31
2.2 可行性研究过程32
2.3 数据流图34
2.3.1 符号34    2.3.2 例子35
2.3.3 命名38
2.3.4 用途39
2.4 数据字典40
2.4.1 数据字典的内容40
2.4.2 定义数据的方法41
2.4.3 数据字典的用途42
2.4.4 数据字典的实现42
2.5 成本/效益分析43
2.5.1 成本估计43
2.5.2 成本/效益分析的方法44
2.6 小结46
习题247

软件工程目 录 第3章 需求分析49
3.1 需求分析的任务50
3.1.1 确定对系统的综合要求50
3.1.2 分析系统的数据要求51
3.1.3 导出系统的逻辑模型52
3.1.4 修正系统开发计划52
3.2 与用户沟通获取需求的方法52
3.2.1 访谈52
3.2.2 面向数据流自顶向下求精53
3.2.3 简易的应用规格说明技术54
3.2.4 快速建立软件原型55
3.3 分析建模与规格说明56
3.3.1 分析建模56
3.3.2 软件需求规格说明56
3.4 实体-联系图56
3.4.1 数据对象57
3.4.2 属性57
3.4.3 联系57
3.4.4 实体-联系图的符号58
3.5 数据规范化58
3.6 状态转换图59
3.6.1 状态59
3.6.2 事件59
3.6.3 符号60
3.6.4 例子60
3.7 其他图形工具61
3.7.1 层次方框图62
3.7.2 Warnier图62
3.7.3 IPO图63
3.8 验证软件需求64
3.8.1 从哪些方面验证软件需求的正确性64
3.8.2 验证软件需求的方法64
3.8.3 用于需求分析的软件工具65
3.9 小结66
习题367

第4章 形式化说明技术69
4.1 概述69
4.1.1 非形式化方法的缺点69
4.1.2 形式化方法的优点70
4.1.3 应用形式化方法的准则70
4.2 有穷状态机71
4.2.1 概念71
4.2.2 例子73
4.2.3 评价76
4.3 Petri网76
4.3.1 概念76
4.3.2 例子78
4.4 Z语言79
4.4.1 简介79
4.4.2 评价82
4.5 小结82
习题483

第5章 总体设计85
5.1 设计过程85
5.2 设计原理87
5.2.1 模块化87
5.2.2 抽象89
5.2.3 逐步求精89
5.2.4 信息隐藏和局部化90
5.2.5 模块独立91
5.3 启发规则93
5.4 描绘软件结构的图形工具95
5.4.1 层次图和HIPO图95
5.4.2 结构图96
5.5 小结97
习题598

第6章 详细设计101
6.1 结构程序设计101
6.2 人机界面设计103
6.2.1 设计问题103
6.2.2 设计过程105
6.2.3 人机界面设计指南106
6.3 过程设计的工具108
6.3.1 程序流程图108
6.3.2 盒图108
6.3.3 PAD图109
6.3.4 判定表110
6.3.5 判定树111
6.3.6 过程设计语言112
6.4 程序复杂程度的定量度量113
6.4.1 McCabe方法113
6.4.2 Halstead方法116
6.5 小结116
习题6117

第7章 实现121
7.1 编码122
7.1.1 选择程序设计语言122
7.1.2 编码风格122
7.2 软件测试基础123
7.2.1 软件测试的目标123
7.2.2 软件测试准则124
7.2.3 测试方法124
7.2.4 测试步骤125
7.2.5 测试阶段的信息流126
7.3 单元测试126
7.3.1 测试重点127
7.3.2 代码审查128
7.3.3 计算机测试128
7.4 集成测试130
7.4.1 自顶向下集成130
7.4.2 自底向上集成132
7.4.3 不同集成测试策略的比较132
7.4.4 回归测试133
7.5 确认测试133
7.5.1 确认测试的范围134
7.5.2 软件配置复查134
7.5.3 Alpha和Beta测试134
7.6 白盒测试技术135
7.6.1 逻辑覆盖135
7.6.2 控制结构测试138
7.7 黑盒测试技术144
7.7.1 等价划分145
7.7.2 边界值分析148
7.7.3 错误推测148
7.8 调试149
7.8.1 调试过程149
7.8.2 调试途径151
7.9 软件可靠性152
7.9.1 基本概念152
7.9.2 估算平均无故障时间的方法153
7.10 小结155
习题7156

第8章 维护161
8.1 软件维护的定义161
8.2 软件维护的特点162
8.2.1 结构化维护与非结构化维护差别巨大162
8.2.2 维护的代价高昂162
8.2.3 维护的问题很多163
8.3 软件维护过程164
8.4 软件的可维护性166
8.4.1 决定软件可维护性的因素166
8.4.2 文档167
8.4.3 可维护性复审168
8.5 预防性维护169
8.6 软件再工程过程170
8.7 小结172
习题8173

第9章 面向对象方法学引论175
9.1 面向对象方法学概述175
9.1.1 面向对象方法学的要点175
9.1.2 面向对象方法学的优点177
9.2 面向对象的概念181
9.2.1 对象181
9.2.2 其他概念183
9.3 面向对象建模187
9.4 对象模型188
9.4.1 类图的基本符号189
9.4.2 表示关系的符号190
9.5 动态模型195
9.6 功能模型196
9.6.1 用例图196
9.6.2 用例建模199
9.7 3种模型之间的关系200
9.8 小结201
习题9201

第10章 面向对象分析203
10.1 面向对象分析的基本过程203
10.1.1 概述203
10.1.2 3个子模型与5个层次204
10.2 需求陈述205
10.2.1 书写要点205
10.2.2 例子206
10.3 建立对象模型207
10.3.1 确定类与对象208
10.3.2 确定关联210
10.3.3 划分主题213
10.3.4 确定属性213
10.3.5 识别继承关系216
10.3.6 反复修改216
10.4 建立动态模型219
10.4.1 编写脚本219
10.4.2 设想用户界面220
10.4.3 画事件跟踪图221
10.4.4 画状态图222
10.4.5 审查动态模型223
10.5 建立功能模型225
10.5.1 画出基本系统模型图225
10.5.2 画出功能级数据流图226
10.5.3 描述处理框功能226
10.6 定义服务227
10.7 小结228
习题10228

第11章 面向对象设计231
11.1 面向对象设计的准则231
11.2 启发规则233
11.3 软件重用235
11.3.1 概述235
11.3.2 类构件237
11.3.3 软件重用的效益238
11.4 系统分解239
11.5 设计问题域子系统242
11.6 设计人机交互子系统245
11.7 设计任务管理子系统247
11.8 设计数据管理子系统249
11.8.1 数据存储管理模式选择249
11.8.2 数据管理子系统设计250
11.8.3 例子252
11.9 设计类中的服务252
11.9.1 确定类中应有的服务252
11.9.2 设计实现服务的方法253
11.10 设计关联254
11.11 设计优化255
11.11.1 确定优先级255
11.11.2 提高效率的几项技术256
11.11.3 调整继承关系257
11.12 小结259
习题11260

第12章 面向对象实现261
12.1 程序设计语言261
12.1.1 面向对象语言的优点261
12.1.2 面向对象语言的技术特点262
12.1.3 选择面向对象语言266
12.2 程序设计风格266
12.2.1 提高可重用性267
12.2.2 提高可扩充性269
12.2.3 提高健壮性269
12.3 测试策略270
12.3.1 面向对象的单元测试270
12.3.2 面向对象的集成测试271
12.3.3 面向对象的确认测试271
12.4 设计测试用例271
12.4.1 测试类的方法272
12.4.2 集成测试方法273
12.5 小结275
习题12276

第13章 软件项目管理277
13.1 估算软件规模277
13.1.1 代码行技术277
13.1.2 功能点技术278
13.2 工作量估算280
13.2.1 静态单变量模型280
13.2.2 动态多变量模型280
13.2.3 COCOMO2模型281
13.3 进度计划284
13.3.1 估算开发时间284
13.3.2 Gantt图286
13.3.3 工程网络287
13.3.4 估算工程进度288
13.3.5 关键路径290
13.3.6 机动时间290
13.4 人员组织292
13.4.1 民主制程序员组292
13.4.2 主程序员组293
13.4.3 现代程序员组294
13.5 质量保证296
13.5.1 软件质量296
13.5.2 软件质量保证措施298
13.6 软件配置管理300
13.6.1 软件配置301
13.6.2 软件配置管理过程301
13.7 能力成熟度模型303
13.8 小结306
习题13307

附录A C++类库管理系统的分析与设计309
A.1 面向对象分析309
A.1.1 需求309
A.1.2 建立对象模型310
A.2 面向对象设计311
A.2.1 设计类库结构311
A.2.2 设计问题域子系统312
A.2.3 设计人机交互子系统313
A.2.4 设计其他类316

附录B 一个汉字行编辑程序的设计317
B.1 设计规格说明317
B.1.1 外部编辑命令317
B.1.2 编辑命令318
B.1.3 输出信息319
B.2 概要设计320
B.2.1 正文文件320
B.2.2 两个工作模式321
B.2.3 数据元素322
B.2.4 过程323
B.3 概要设计结果323
B.4 详细设计326
B.4.1 数据元素326
B.4.2 控制数据元素328
B.4.3 编辑过程328
B.4.4 输入模式的过程329
B.4.5 编辑模式的过程330
B.4.6 编辑程序的详细结构333

参考文献335

第1章 软件工程学概述1
1.1 软件危机1
1.1.1 软件危机的介绍1
1.1.2 产生软件危机的原因3
1.1.3 消除软件危机的途径4
1.2 软件工程5
1.2.1 软件工程的介绍5
1.2.2 软件工程的基本原理7
1.2.3 软件工程方法学9
1.3 软件生命周期11
1.4 软件过程14
1.4.1 瀑布模型15
1.4.2 快速原型模型16
1.4.3 增量模型17
1.4.4 螺旋模型19
1.4.5 喷泉模型21
1.4.6 Rational统一过程22
1.4.7 敏捷过程与极限编程25
1.4.8 微软过程29
1.5 小结31
习题132

第2章 可行性研究35
2.1 可行性研究的任务35
2.2 可行性研究过程36
2.3 系统流程图38    2.3.1 符号38
2.3.2 例子38
2.3.3 分层40
2.4 数据流图40
软件工程目 录 2.4.1 符号40
2.4.2 例子42
2.4.3 命名44
2.4.4 用途45
2.5 数据字典47
2.5.1 数据字典的内容47
2.5.2 定义数据的方法47
2.5.3 数据字典的用途48
2.5.4 数据字典的实现49
2.6 成本/效益分析49
2.6.1 成本估计50
2.6.2 成本/效益分析的方法51
2.7 小结53
习题253

第3章 需求分析55
3.1 需求分析的任务56
3.1.1 确定对系统的综合要求56
3.1.2 分析系统的数据要求57
3.1.3 导出系统的逻辑模型58
3.1.4 修正系统开发计划58
3.2 与用户沟通获取需求的方法58
3.2.1 访谈58
3.2.2 面向数据流自顶向下求精59
3.2.3 简易的应用规格说明技术59
3.2.4 快速建立软件原型61
3.3 分析建模与规格说明62
3.3.1 分析建模62
3.3.2 软件需求规格说明62
3.4 实体-联系图62
3.4.1 数据对象63
3.4.2 属性63
3.4.3 联系63
3.4.4 实体-联系图的符号64
3.5 数据规范化64
3.6 状态转换图65
3.6.1 状态65
3.6.2 事件65
3.6.3 符号66
3.6.4 例子66
3.7 其他图形工具67
3.7.1 层次方框图68
3.7.2 Warnier图68
3.7.3 IPO图69
3.8 验证软件需求70
3.8.1 从哪些方面验证软件需求的正确性70
3.8.2 验证软件需求的方法70
3.8.3 用于需求分析的软件工具71
3.9 小结72
习题373

第4章 形式化说明技术75
4.1 概述75
4.1.1 非形式化方法的缺点75
4.1.2 形式化方法的优点76
4.1.3 应用形式化方法的准则76
4.2 有穷状态机77
4.2.1 概念77
4.2.2 例子79
4.2.3 评价82
4.3 Petri网82
4.3.1 概念82
4.3.2 例子84
4.4 Z语言85
4.4.1 简介85
4.4.2 评价88
4.5 小结88
习题489

第5章 总体设计91
5.1 设计过程91
5.2 设计原理94
5.2.1 模块化94
5.2.2 抽象95
5.2.3 逐步求精95
5.2.4 信息隐藏和局部化96
5.2.5 模块独立97
5.3 启发规则99
5.4 描绘软件结构的图形工具102
5.4.1 层次图和HIPO图102
5.4.2 结构图103
5.5 面向数据流的设计方法104
5.5.1 概念104
5.5.2 变换分析105
5.5.3 事务分析111
5.5.4 设计优化112
5.6 小结113
习题5114

第6章  详细设计117
6.1 结构程序设计117
6.2 人机界面设计119
6.2.1 设计问题119
6.2.2 设计过程121
6.2.3 人机界面设计指南122
6.3 过程设计的工具124
6.3.1 程序流程图124
6.3.2 盒图125
6.3.3 PAD图126
6.3.4 判定表127
6.3.5 判定树128
6.3.6 过程设计语言128
6.4 面向数据结构的设计方法129
6.4.1 Jackson图130
6.4.2 改进的Jackson图131
6.4.3 Jackson方法132
6.5 程序复杂程度的定量度量136
6.5.1 McCabe方法137
6.5.2 Halstead方法139
6.6 小结140
习题6140

第7章  实现145
7.1 编码146
7.1.1 选择程序设计语言146
7.1.2 编码风格147
7.2 软件测试基础149
7.2.1 软件测试的目标150
7.2.2 软件测试准则150
7.2.3 测试方法151
7.2.4 测试步骤151
7.2.5 测试阶段的信息流152
7.3 单元测试153
7.3.1 测试重点153
7.3.2 代码审查154
7.3.3 计算机测试155
7.4 集成测试156
7.4.1 自顶向下集成157
7.4.2 自底向上集成158
7.4.3 不同集成测试策略的比较159
7.4.4 回归测试160
7.5 确认测试160
7.5.1 确认测试的范围160
7.5.2 软件配置复查161
7.5.3 Alpha和Beta测试161
7.6 白盒测试技术162
7.6.1 逻辑覆盖162
7.6.2 控制结构测试165
7.7 黑盒测试技术171
7.7.1 等价划分172
7.7.2 边界值分析175
7.7.3 错误推测175
7.8 调试176
7.8.1 调试过程176
7.8.2 调试途径178
7.9 软件可靠性179
7.9.1 基本概念179
7.9.2 估算平均无故障时间的方法180
7.10 小结182
习题7183

第8章  维护189
8.1 软件维护的定义189
8.2 软件维护的特点190
8.2.1 结构化维护与非结构化维护差别巨大190
8.2.2 维护的代价高昂190
8.2.3 维护的问题很多191
8.3 软件维护过程192
8.4 软件的可维护性194
8.4.1 决定软件可维护性的因素194
8.4.2 文档195
8.4.3 可维护性复审196
8.5 预防性维护197
8.6 软件再工程过程198
8.7 小结200
习题8201

第9章 面向对象方法学引论203
9.1 面向对象方法学概述203
9.1.1 面向对象方法学的要点203
9.1.2 面向对象方法学的优点205
9.2 面向对象的概念209
9.2.1 对象209
9.2.2 其他概念211
9.3 面向对象建模215
9.4 对象模型216
9.4.1 类图的基本符号217
9.4.2 表示关系的符号218
9.5 动态模型223
9.6 功能模型224
9.6.1 用例图224
9.6.2 用例建模227
9.7 3种模型之间的关系228
9.8 小结229
习题9229

第10章 面向对象分析231
10.1 面向对象分析的基本过程231
10.1.1 概述231
10.1.2 3个子模型与5个层次232
10.2 需求陈述233
10.2.1 书写要点233
10.2.2 例子234
10.3 建立对象模型235
10.3.1 确定类与对象236
10.3.2 确定关联238
10.3.3 划分主题241
10.3.4 确定属性241
10.3.5 识别继承关系244
10.3.6 反复修改244
10.4 建立动态模型247
10.4.1 编写脚本247
10.4.2 设想用户界面248
10.4.3 画事件跟踪图249
10.4.4 画状态图250
10.4.5 审查动态模型251
10.5 建立功能模型253
10.5.1 画出基本系统模型图253
10.5.2 画出功能级数据流图254
10.5.3 描述处理框功能254
10.6 定义服务255
10.7 小结256
习题10256

第11章 面向对象设计259
11.1 面向对象设计的准则259
11.2 启发规则261
11.3 软件重用263
11.3.1 概述263
11.3.2 类构件265
11.3.3 软件重用的效益266
11.4 系统分解267
11.5 设计问题域子系统270
11.6 设计人机交互子系统273
11.7 设计任务管理子系统275
11.8 设计数据管理子系统277
11.8.1 选择数据存储管理模式277
11.8.2 设计数据管理子系统278
11.8.3 例子280
11.9 设计类中的服务280
11.9.1 确定类中应有的服务280
11.9.2 设计实现服务的方法281
11.10 设计关联282
11.11 设计优化283
11.11.1 确定优先级283
11.11.2 提高效率的几项技术284
11.11.3 调整继承关系285
11.12 小结287
习题11288

第12章 面向对象实现289
12.1 程序设计语言289
12.1.1 面向对象语言的优点289
12.1.2 面向对象语言的技术特点290
12.1.3 选择面向对象语言294
12.2 程序设计风格294
12.2.1 提高可重用性295
12.2.2 提高可扩充性297
12.2.3 提高健壮性297
12.3 测试策略298
12.3.1 面向对象的单元测试298
12.3.2 面向对象的集成测试299
12.3.3 面向对象的确认测试299
12.4 设计测试用例299
12.4.1 测试类的方法300
12.4.2 集成测试方法301
12.5 小结303
习题12304

第13章 软件项目管理305
13.1 估算软件规模305
13.1.1 代码行技术305
13.1.2 功能点技术306
13.2 工作量估算308
13.2.1 静态单变量模型308
13.2.2 动态多变量模型308
13.2.3 COCOMO2模型309
13.3 进度计划312
13.3.1 估算开发时间312
13.3.2 Gantt图314
13.3.3 工程网络315
13.3.4 估算工程进度316
13.3.5 关键路径318
13.3.6 机动时间318
13.4 人员组织320
13.4.1 民主制程序员组320
13.4.2 主程序员组321
13.4.3 现代程序员组322
13.5 质量保证324
13.5.1 软件质量324
13.5.2 软件质量保证措施326
13.6 软件配置管理328
13.6.1 软件配置329
13.6.2 软件配置管理过程329
13.7 能力成熟度模型331
13.8 小结334
习题13335

附录A C++类库管理系统的分析与设计337
A.1 面向对象分析337
A.1.1 需求337
A.1.2 建立对象模型338
A.2 面向对象设计339
A.2.1 设计类库结构339
A.2.2 设计问题域子系统340
A.2.3 设计人机交互子系统341
A.2.4 设计其他类344

附录B 一个汉字行编辑程序的设计347
B.1 设计规格说明347
B.1.1 外部编辑命令347
B.1.2 编辑命令348
B.1.3 输出信息349
B.2 概要设计350
B.2.1 正文文件350
B.2.2 两个工作模式351
B.2.3 数据元素352
B.2.4 过程353
B.3 概要设计结果353
B.4 详细设计356
B.4.1 数据元素356
B.4.2 控制数据元素357
B.4.3 编辑过程357
B.4.4 输入模式的过程359
B.4.5 编辑模式的过程360
B.5 详细设计结果364
B.5.1 编辑程序的详细结构364
B.5.2 类PASCAL伪码365
B.5.3 实现编辑程序的算法367

参考文献395
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证