本书正文共13章,第1章是概述,第2~8章顺序讲述软件生命周期各阶段的任务、过程、结构化方法和工具,第9~12章分别讲述面向对象方法学引论、面向对象分析、面向对象设计和面向对象实现,第13章介绍软件项目管理。附录讲述了用面向对象方法开发软件的过程,对读者深入理解软件工程学很有帮助,也是上机实习的好材料。
目录
- 第1章软件工程学概述1
- 1.1软件危机11.1.1软件危机的介绍11.1.2产生软件危机的原因31.1.3消除软件危机的途径4
- 1.2软件工程51.2.1软件工程的介绍51.2.2软件工程的基本原理71.2.3软件工程方法学9
- 1.3软件生命周期11
- 1.4软件过程141.4.1瀑布模型151.4.2快速原型模型161.4.3增量模型171.4.4螺旋模型191.4.5喷泉模型211.4.6Rational统一过程221.4.7敏捷过程与极限编程251.4.8微软过程29
- 1.5小结31
- 习题132
- 第2章可行性研究35
- 2.1可行性研究的任务35
- 2.2可行性研究过程36
- 2.3系统流程图382.3.1符号382.3.2例子382.3.3分层40
- 2.4数据流图40[][]软件工程导论(第6版)[][]目录[][]2.4.1符号402.4.2例子422.4.3命名442.4.4用途45
- 2.5数据字典472.5.1数据字典的内容472.5.2定义数据的方法472.5.3数据字典的用途482.5.4数据字典的实现49
- 2.6成本/效益分析492.6.1成本估计502.6.2成本/效益分析的方法51
- 2.7小结53
- 习题253
- 第3章需求分析55
- 3.1需求分析的任务563.1.1确定对系统的综合要求563.1.2分析系统的数据要求573.1.3导出系统的逻辑模型583.1.4修正系统开发计划58
- 3.2与用户沟通获取需求的方法583.2.1访谈583.2.2面向数据流自顶向下求精593.2.3简易的应用规格说明技术593.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状态653.6.2事件65
- 3.6.3符号66
- 3.6.4例子66
- 3.7其他图形工具67
- 3.7.1层次方框图68
- 3.7.2Warnier图68
- 3.7.3IPO图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例子794.2.3评价82
- 4.3Petri网824.3.1概念82
- 4.3.2例子84
- 4.4Z语言854.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抽象955.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.3PAD图126
- 6.3.4判定表127
- 6.3.5判定树128
- 6.3.6过程设计语言128
- 6.4面向数据结构的设计方法129
- 6.4.1Jackson图130
- 6.4.2改进的Jackson图131
- 6.4.3Jackson方法132
- 6.5程序复杂程度的定量度量136
- 6.5.1McCabe方法137
- 6.5.2Halstead方法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.3Alpha和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维护的代价高昂1908.2.3维护的问题很多191
- 8.3软件维护过程192
- 8.4软件的可维护性194
- 8.4.1决定软件可维护性的因素194
- 8.4.2文档1958.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面向对象的概念2099.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.73种模型之间的关系228
- 9.8小结229
- 习题9229
- 第10章面向对象分析231
- 10.1面向对象分析的基本过程231
- 10.1.1概述231
- 10.1.23个子模型与5个层次232
- 10.2需求陈述23310.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 [2]
- 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.3COCOMO2模型309
- 13.3进度计划312
- 13.3.1估算开发时间312
- 13.3.2Gantt图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
- 附录AC++类库管理系统的分析与设计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
- 参考文献347