第1章软件工程概述3
1.1软件的概念和特征3
1.1.1软件的概念3
1.1.2软件的分类4
1.2软件危机5
1.2.1软件危机的主要表现6
1.2.2产生软件危机的原因7
1.2.3解决软件危机的途径8
1.3软件工程9
1.3.1软件工程的定义9
1.3.2软件工程的目标10
1.3.3软件工程的研究内容11
1.3.4软件工程的基本原理12
1.4软件生存周期13
1.4.1软件生存周期定义14
1.4.2软件生存周期的基本任务14
1.5软件生存周期模型14
1.5.1瀑布模型14
1.5.2原型模型15
1.5.3增量模型17
1.5.4螺旋模型17
1.5.5喷泉模型18
1.5.6形式化方法模型19
1.5.7基于组件的开发模型19
1.5.8第四代技术模型20
1.5.9混合模型20
小结20
习题20软件工程实用教程(第2版) 目录 第2章可行性研究与软件开发计划22
2.1可行性研究的任务22
2.2可行性研究的过程23
2.3成本/效益分析24
2.3.1成本估计方法24
2.3.2成本/效益分析方法25
2.4可行性研究报告27
2.5软件开发计划27
2.5.1软件作用范围28
2.5.2资源需求28
2.5.3进度安排28
2.6软件开发计划说明书28
小结29
习题30
第3章需求工程31
3.1软件需求定义31
3.1.1业务需求32
3.1.2用户需求32
3.1.3功能需求32
3.1.4非功能需求32
3.2需求工程过程33
3.3需求的获取34
3.3.1需求获取的过程34
3.3.2需求获取的常用方法35
3.4需求分析37
3.4.1需求分析的特点37
3.4.2需求分析的原则37
3.4.3需求分析的任务38
3.4.4需求分析的方法39
3.4.5需求分析过程40
3.5需求定义40
3.6需求验证42
3.7需求管理44
3.8案例:小型教学管理系统46
小结49
习题49
第4章结构化分析50
4.1结构化分析方法50
4.1.1结构化分析策略50
4.1.2SA的描述工具51
4.1.3SA的分析步骤51
4.2数据流图52
4.2.1数据流图符号52
4.2.2绘制分层数据流图的方法53
4.2.3实例54
4.2.4数据流图的绘制与其他流程图的差别56
4.3数据字典57
4.3.1数据字典的内容57
4.3.2数据字典使用符号58
4.3.3数据字典条目实例59
4.4数据加工逻辑60
4.4.1结构化语言60
4.4.2判定表61
4.4.3判定树62
4.5实体关系图63
4.6结构化分析实例64
小结69
习题70
第5章总体设计71
5.1软件设计基础71
5.1.1软件设计的目标71
5.1.2软件设计的任务72
5.1.3总体设计过程72
5.2软件设计的基本原理73
5.2.1模块化设计原理73
5.2.2抽象和逐步求精75
5.2.3信息隐蔽和局部化76
5.2.4模块独立性76
5.2.5软件结构设计优化原则79
5.3表示软件结构的图形80
5.3.1层次图和HIPO图80
5.3.2软件结构图82
5.4结构化设计方法83
5.4.1结构化设计的流程83
5.4.2典型的数据流类型和系统结构84
5.4.3变换分析86
5.4.4事务分析90
5.5总体设计文档及复审93
小结94
习题94
第6章详细设计95
6.1结构化程序设计95
6.2详细设计的任务95
6.3详细设计的原则96
6.4详细设计工具96
6.4.1程序流程图96
6.4.2盒图(NS图)97
6.4.3问题分析图98
6.4.4过程设计语言100
6.4.5详细设计工具的选择102
6.5程序复杂性度量103
6.6详细设计文档及复审105
小结107
习题107
第7章软件编码109
7.1程序设计语言109
7.1.1程序设计语言的特性109
7.1.2程序设计语言的分类110
7.1.3程序设计的选择112
7.2程序设计的风格113
7.2.1源程序文档化113
7.2.2数据说明114
7.2.3语句结构114
7.2.4输入/输出115
7.2.5重用116
7.3效率116
小结118
习题118
第8章软件测试119
8.1软件测试基本理论119
8.1.1软件测试的概念119
8.1.2软件测试的原则119
8.1.3软件测试过程121
8.1.4软件测试方法121
8.2白盒测试技术122
8.2.1逻辑覆盖法122
8.2.2基本路径测试法126
8.2.3循环测试法130
8.3黑盒测试技术131
8.3.1等价类划分法131
8.3.2边界值分析法134
8.3.3错误猜测法136
8.3.4因果图法137
8.4软件测试策略137
8.4.1单元测试138
8.4.2集成测试139
8.4.3确认测试141
8.4.4系统测试142
小结143
习题144
第9章软件维护145
9.1软件维护概述145
9.1.1软件维护分类145
9.1.2软件维护成本146
9.2软件维护过程148
9.2.1软件维护活动148
9.2.2软件维护技术151
9.3软件可维护性151
9.3.1影响软件可维护性的因素152
9.3.2软件可维护性度量152
9.3.3提高可维护性的方法154
9.4软件维护的副作用155
9.4.1代码的副作用155
9.4.2数据副作用155
9.4.3文档副作用156
9.5软件再工程156
9.5.1软件再工程概述156
9.5.2软件再工程过程157
9.5.3软件再工程方法159
小结159
习题159第二部分面向对象的软件工程
第10章面向对象基础163
10.1面向对象方法论概述163
10.1.1传统软件开发方法中存在的问题163
10.1.2面向对象方法主要优点165
10.1.3面向对象方法的发展史及现状简介167
10.2面向对象的基本概念168
10.2.1对象168
10.2.2类168
10.2.3消息168
10.2.4封装性168
10.2.5继承性169
10.2.6多态性169
10.3面向对象软件工程170
10.3.1面向对象的开发方法170
10.3.2统一建模语言UML171
10.3.3RUP过程171
10.3.4工具175
小结176
习题176
第11章UML建模语言177
11.1UML统一建模语言简介177
11.1.1UML的发展历史177
11.1.2UML的特点178
11.1.3UML用于软件的开发178
11.2UML的基本模型179
11.2.1UML的事物179
11.2.2UML的关系181
11.2.3UML的图185
11.3用例图187
11.3.1用例图描述187
11.3.2建立用例模型190
11.3.3用例图示例191
11.4类图192
11.4.1类图描述192
11.4.2类的表示方法192
11.4.3类的关系193
11.4.4类图示例193
11.5对象图194
11.5.1对象图描述194
11.5.2对象的表示方法194
11.5.3对象图示例195
11.6包图195
11.6.1包图描述195
11.6.2包的表示方法196
11.6.3包之间的关系196
11.6.4包图示例196
11.7状态机图197
11.7.1状态机图描述197
11.7.2状态的表示方法197
11.7.3转换198
11.7.4事件199
11.7.5状态图示例199
11.8活动图200
11.8.1活动图描述200
11.8.2活动的表示方法200
11.8.3泳道201
11.8.4对象流和控制流202
11.8.5活动图示例202
11.9顺序图203
11.9.1顺序图描述203
11.9.2顺序图表示方法203
11.9.3顺序图示例204
11.10通信图205
11.10.1通信图描述205
11.10.2通信图表示方法205
11.10.3通信图示例207
11.11构件图207
11.11.1构件图描述207
11.11.2构件的表示方法208
11.11.3接口208
11.11.4依赖关系209
11.11.5构件图示例209
11.12部署图210
11.12.1部署图描述210
11.12.2部署图表示方法211
11.12.3部署图示例212
小结213
习题213
第12章面向对象分析215
12.1面向对象分析过程215
12.2建立用例模型216
12.2.1确定系统的执行者216
12.2.2确定用例216
12.2.3确定用例模型217
12.2.4用例模型说明218
12.2.5用例模型评价220
12.2.6优化用例模型221
12.2.7构造系统原型221
12.3建立对象模型221
12.3.1补充用例说明222
12.3.2识别分析类222
12.3.3描述类的职责224
12.3.4建立分析类之间的关系225
12.3.5描述每个类的属性226
12.4建立动态模型226
12.5评审分析模型228
小结229
习题229
第13章面向对象的设计230
13.1面向对象设计准则230
13.1.1设计准则230
13.1.2设计策略231
13.1.3系统分解与组织233
13.2问题域子系统设计235
13.3人机交互子系统设计236
13.4任务管理子系统设计238
13.5数据管理子系统设计240
13.5.1选择数据存储管理模式240
13.5.2设计数据管理子系统241
13.6对象设计243
13.6.1使用模式设计对象244
13.6.2接口规格说明设计244
13.6.3重构对象设计模型246
13.6.4优化对象设计模型246
小结247
习题247
第14章面向对象实现248
14.1面向对象程序设计语言248
14.2面向对象的程序实现特征249
14.3面向对象测试250
14.3.1面向对象测试模型251
14.3.2面向对象分析的测试251
14.3.3面向对象设计的测试252
14.3.4面向对象编程的测试253
14.3.5面向对象的单元测试254
14.3.6面向对象的集成测试256
14.3.7面向对象的系统测试257
小结258
习题258
第三部分软件工程管理
第15章软件工程管理概述261
15.1软件项目管理261
15.1.1软件项目管理的特点261
15.1.2软件项目管理活动262
15.1.3软件项目计划263
15.2软件风险管理274
15.2.1风险识别275
15.2.2风险分析278
15.2.3风险规划280
15.2.4风险控制280
15.3软件质量管理281
15.3.1软件质量基础281
15.3.2软件质量控制281
15.4软件配置管理283
15.4.1软件配置管理概述283
15.4.2软件配置管理过程284
15.5软件过程管理285
15.5.1ISO 9000体系285
15.5.2能力成熟度模型286
小结289
习题289
第四部分软件工程高级课题
第16章Web工程293
16.1基于Web的系统和应用特点293
16.2Web工程的层次295
16.2.1过程295
16.2.2方法296
16.2.3工具和技术296
16.3Web分析297
16.3.1内容分析模型297
16.3.2交互分析模型297
16.3.3功能分析模型298
16.3.4配置分析模型298
16.3.5关系导航分析模型299
16.4Web设计300
16.4.1界面设计300
16.4.2美学设计301
16.4.3内容设计302
16.4.4体系结构设计302
16.4.5导航设计303
16.4.6构件设计304
16.5Web测试304
16.5.1内容测试304
16.5.2界面测试305
16.5.3构件级测试306
16.5.4导航测试307
16.5.5配置测试307
16.5.6安全性测试308
16.5.7性能测试309
16.6Web项目管理310
16.6.1Web队伍310
16.6.2项目管理311
16.6.3配置管理312
小结312
习题313
第17章基于构件的软件开发314
17.1软件复用概述314
17.1.1软件复用的定义315
17.1.2软件复用的形式和级别315
17.1.3软件复用的过程317
17.1.4软件复用的意义318
17.2构件与构件技术319
17.2.1构件的定义及基本特征319
17.2.2构件技术的产生与基本思想320
17.3构件与构件系统322
17.3.1对可复用构件的要求322
17.3.2构件模型及系统323
17.3.3构件的分类模式324
17.3.4构件库的管理326
17.4领域工程327
17.4.1领域工程过程327
17.4.2领域工程实施329
17.4.3组织机构329
17.4.4相关技术330
17.5基于构件的软件开发330
17.5.1CBSE/CBD概述330
17.5.2CBSE过程332
17.5.3基于构件的系统的开发332
17.5.4构件构造333
17.5.5软件构件技术规范 333
17.6CBD与传统的软件开发方法比较336
小结338
习题338
第18章分布式系统的软件开发339
18.1分布式系统概述339
18.2客户/服务器体系结构341
18.3分布式对象技术342
18.4机构间分布式计算345
18.4.1对等体系结构346
18.4.2面向服务的系统体系结构346
小结348
习题348
第19章敏捷开发349
19.1敏捷方法概述349
19.1.1敏捷方法发展史350
19.1.2敏捷宣言350
19.2敏捷方法的特点352
19.3敏捷方法与传统软件开发方法的区别352
19.4主要敏捷方法简介353
19.5极限编程355
19.5.1XP的含义355
19.5.2XP的4个核心价值356
19.5.3为什么使用XP356
19.5.4XP的开发过程357
19.5.5XP的实践358
19.6Scrum模型361
19.6.1Scrum简介361
19.6.2角色的作用361
19.6.3会议的作用362
19.6.4Scrum开发模式的流程363
小结364
习题364
参考文献365