《软件工程概论》是1998年4月1日清华大学出版社出版的图书,作者是郑人杰。
本书是根据作者出版的软件工程大学本科教材,结合在清华夜大学、高教自学考试培训、软件水平考试培训多年的教学实践,经过精练选材而写成的。
书中引入近年出现的软件工程新思想、新方法,保留了部分经典的传统技术,较为系统地介绍了软件开发技术和软件项目管理方法。其内容包括软件工程概述、软件需求分析与建模、软件设计与程序设计、软件测试、软件质量保证与标准、软件工程管理与过程改进等。同时在各章节结合实例,插入大量图表,使读者能够对软件工程的知识有一个全面的了解。全书文字流畅,内容丰富,可读性强。
本书可适用于大专院校软件工程课程教学,也可用于软件工程技术培训。对于非计算机专业的本科生与研究生,也可选用本书作为软件工程教科书。
目录
- 第1章软件工程概述1
- 1.1软件的概念、特点和分类1
- 1.1.1软件的概念与特点1
- 1.1.2软件的分类3
- 1.2软件的发展和软件危机6
- 1.3软件工程过程和软件生存期8
- 1.3.1软件工程过程(softwareengineeringprocess)1.3.2软件生存期(lifecycle)9
- 1.4软件生存期模型10
- 1.4.1瀑布模型(waterfallmodel)10
- 1.4.2演化模型(evolutionalmodel)11
- 1.4.3螺旋模型(spiralmodel)11
- 1.4.4喷泉模型(waterfountainmodel)13
- 1.4.5智能模型(intelligencemodel)13
- 1.5软件工程的基本目标13
- 1.5.1软件工程的定义13
- 1.5.2软件工程项目的基本目标14
- 第2章软件需求分析15
- 2.1软件需求分析概述15
- 2.1.1软件需求分析的任务15
- 2.1.2需求分析的过程16
- 2.1.3软件需求分析的原则19
- 2.2结构化分析方法21
- 2.2.1数据流图(DFD,dataflowdiagram)21
- 2.2.2数据词典(DD,datadictionary)24
- 2.2.3加工逻辑说明27
- 2.3结构化数据系统开发方法(DSSD)——面向数据结构的分析方法之一30
- 2.3.1Warnier图30
- 2.3.2DSSD的分析方法31
- 2.4Jackson系统开发方法(JSD)——面向数据结构的分析方法之二34
- 2.4.1进程模型35
- 2.4.2JSD方法的步骤35
- 2.4.3实体动作分析36
- 2.4.4实体结构分析37
- 2.4.5定义初始模型38
- 2.5原型化方法(prototyping)40
- 2.5.1软件原型的分类41
- 2.5.2快速原型开发模型41
- 2.6系统动态分析44
- 2.6.1状态迁移图44
- 2.6.2Petri网45
- 2.7结构化分析与设计方法(SADT)48
- 第3章软件设计51
- 3.1软件设计的目标和任务51
- 3.1.1软件设计在开发阶段中的重要性51
- 3.1.2软件设计任务52
- 3.2程序结构与程序结构图54
- 3.2.1程序的树状结构和网状结构55
- 3.2.2结构图(structurechart,简称SC)55
- 3.3模块的独立性57
- 3.3.1模块(module)57
- 3.3.2模块独立性(moduleindependence)58
- 3.3.3耦合性(coupling)58
- 3.3.4内聚性(cohesion)60
- 3.3.5信息隐蔽63
- 3.4结构化设计方法——面向数据流的设计方法63
- 3.4.1典型的系统结构形式64
- 3.4.2变换分析66
- 3.4.3事务分析69
- 3.4.4软件模块结构的改进71
- 3.5结构化数据系统开发方法(DSSD)
- ——面向数据结构的设计方法之一75
- 3.5.1一种简化的设计方法75
- 3.5.2导出逻辑输出结构76
- 3.5.3导出逻辑处理结构(LPS)76
- 3.6Jackson系统开发方法(JSD)
- ——面向数据结构的分析与设计方法之二78
- 3.6.1JSD功能描述78
- 3.6.2决定系统时间特性82
- 3.6.3实现82
- 第4章详细设计描述的工具87
- 4.1程序流程图(programflowchart)87
- 4.2N\|S图90
- 4.3PAD91
- 4.4PDL93
- 第5章程序编码100
- 5.1对源程序的质量要求100
- 5.2结构化程序设计101
- 5.2.1关于GOTO语句的争论101
- 5.2.2结构化程序设计的原则102
- 5.2.3程序设计自顶向下,逐步求精104
- 5.3程序设计风格106
- 5.3.1源程序文档化107
- 5.3.2数据说明110
- 5.3.3语句结构110
- 5.3.4输入和输出(I/O)114
- 5.4程序复杂性度量115
- 5.4.1代码行度量法115
- 5.4.2McCabe度量法116
- 5.4.3Halstead的软件科学117
- 第6章面向对象技术120
- 6.1面向对象的概念120
- 6.2基于复用的开发过程123
- 6.2.1应用生存期123
- 6.2.2类生存期124
- 6.3面向对象分析与模型化126
- 6.3.1面向对象分析(OOA,object\|orientedanalysis)126
- 6.3.2论域分析(domainanalysis)126
- 6.3.3应用分析(applicationanalysis)129
- 6.3.4对象模型技术(OMT,objectmodeltech.)129
- 6.4高层设计134
- 6.5类的设计135
- 6.5.1通过复用设计类135
- 6.5.2类设计的方针136
- 6.5.3类设计的过程138
- 6.6Coad与Yourdon面向对象分析与设计技术143
- 6.6.1面向对象的分析143
- 6.6.2面向对象的设计145
- 6.7Booch的方法146
- 6.7.1Booch方法的设计过程147
- 6.7.2Booch方法的基本的模型147
- 6.8面向对象设计的实现151
- 6.8.1类的实现151
- 6.8.2系统的实现153
- 第7章软件测试155
- 7.1软件测试的基础155
- 7.1.1什么是软件测试155
- 7.1.2软件测试的目的和原则156
- 7.1.3软件测试的对象157
- 7.1.4测试信息流158
- 7.1.5测试与软件开发各阶段的关系159
- 7.2测试用例设计160
- 7.3白盒测试的测试用例设计161
- 7.3.1逻辑覆盖161
- 7.3.2语句覆盖162
- 7.3.3判定覆盖163
- 7.3.4条件覆盖163
- 7.3.5判定\|条件覆盖164
- 7.3.6条件组合覆盖164
- 7.3.7路径测试165
- 7.4黑盒测试的测试用例设计165
- 7.4.1等价类划分165
- 7.4.2边界值分析168
- 7.4.3错误推测法171
- 7.4.4因果图171
- 7.5软件测试的策略174
- 7.5.1单元测试(unittesting)175
- 7.5.2组装测试(integratedtesting)177
- 7.5.3确认测试(validationtesting)181
- 7.5.4系统测试(systemtesting)183
- 7.5.5测试的步骤及相应的测试种类183
- 7.6人工测试186
- 7.6.1静态分析186
- 7.6.2人工测试187
- 7.7调试(Debug,排错)189
- 7.7.1调试的步骤189
- 7.7.2几种主要的调试方法190
- 7.7.3调试原则193 [2]
- 第8章软件维护194
- 8.1软件维护的概念194
- 8.1.1软件维护的定义194
- 8.1.2影响维护工作量的因素195
- 8.1.3软件维护的策略195
- 8.2软件维护活动196
- 8.2.1软件维护申请报告196
- 8.2.2软件维护工作流程197
- 8.2.3维护档案记录198
- 8.2.4维护评价198
- 8.3程序修改的步骤及修改的副作用198
- 8.3.1分析和理解程序199
- 8.3.2修改程序199
- 8.3.3重新验证程序202
- 8.4软件可维护性202
- 8.4.1软件可维护性的定义203
- 8.4.2可维护性的度量203
- 8.5提高可维护性的方法206
- 8.5.1建立明确的软件质量目标和优先级206
- 8.5.2使用提高软件质量的技术和工具206
- 8.5.3进行明确的质量保证审查207
- 8.5.4选择可维护的程序设计语言208
- 8.5.5改进程序的文档209
- 8.6逆向工程和再工程210
- 第9章软件工程标准化与软件文档211
- 9.1软件工程标准化211
- 9.1.1什么是软件工程标准211
- 9.1.2软件工程标准化的意义213
- 9.1.3软件工程标准的层次213
- 9.1.4中国的软件工程标准化工作214
- 9.2软件质量认证215
- 9.2.1ISO9000系列标准及软件质量认证215
- 9.2.2ISO9000系列标准的内容216
- 9.2.3制定与实施ISO9000系列标准217
- 9.2.4ISO9000\|3的要点218
- 9.3在开发机构中推行软件工程标准化220
- 9.4软件文档的作用与分类221
- 9.4.1软件文档的作用和分类221
- 9.4.2对文档编制的质量要求223
- 9.4.3文档的管理和维护225
- 9.5软件过程成熟度模型227
- 9.5.1软件机构的成熟性227
- 9.5.2软件过程成熟度模型228
- 9.5.3关键过程领域229
- 9.5.4成熟度提问单230
- 第10章软件管理232
- 10.1软件生产率和质量的度量232
- 10.1.1软件度量232
- 10.1.2面向规模的度量232
- 10.1.3面向功能的度量233
- 10.1.4软件质量的度量234
- 10.1.5影响软件生产率的因素235
- 10.2软件项目的估算236
- 10.2.1对估算的看法236
- 10.2.2软件项目计划的目标237
- 10.2.3软件的范围237
- 10.2.4软件开发中的资源237
- 10.2.5软件项目估算240
- 10.2.6分解技术241
- 10.3软件开发成本估算243
- 10.3.1软件开发成本估算方法244
- 10.3.2专家判定技术245
- 10.3.3软件开发成本估算的经验模型245
- 10.4软件项目进度安排249
- 10.4.1软件开发小组人数与软件生产率250
- 10.4.2任务的确定与并行性251
- 10.4.3制定开发进度计划251
- 10.4.4进度安排的方法252
- 10.4.5项目的追踪和控制254
- 10.5软件项目的组织与计划255
- 10.5.1软件项目管理的特点255
- 10.5.2制定计划257
- 10.5.3软件项目组织的建立258
- 10.5.4人员配备262
- 10.5.5指导与检验263
- 10.6软件配置管理265
- 10.6.1软件配置管理265
- 10.6.2配置标识267
- 10.6.3版本控制269
- 10.6.4变更控制269
- 10.6.5配置状态报告(configurationstatusreporting,CSR)271
- 10.6.6配置审计(configurationaudit)271
- 附录软件产品开发文档编写指南273
- 参考文献287