第1章 软件工程概述 1
1.1 软件的特点与分类 1
1.1.1 软件的概念与特点 1
1.1.2 软件的分类 2
1.2 软件危机 3
1.2.1 软件开发技术的发展过程 3
1.2.2 软件危机 3
1.2.3 生软件危机的原因 4
1.2.4 如何解决软件危机 5
1.3 软件工程过程与软件生存周期 5
1.3.1 什么是软件工程 5
1.3.2 软件工程过程 6
1.3.3 软件生存周期 6
1.4 软件开发模型 8
1.4.1 瀑布模型(Waterfall Model) 9
1.4.2 快速原型化模型 10
1.4.3 其他开发模型 12
1.5 软件工程的基本原理 13
1.5.1 软件工程的基本目标 13
1.5.2 软件工程的原理 13
本章小结 14
习题1 14
第2章 软件需求分析 16
2.1 可行性研究 16
2.1.1 可行性研究的内容 16
2.1.2 可行性研究报告的内容 16
2.2 需求分析 17
2.2.1 进行需求分析的原因 17
2.2.2 需求分析定义 17
2.3 需求分析的内容 18
2.3.1 需求分析的过程 18
2.3.2 需求获取的方法 19
2.4 结构化分析方法 20
2.4.1 结构化分析模型的结构 20
2.4.2 实体—关系图(ERD) 20
2.4.3 数据流图(DFD) 21
2.4.4 状态迁移图(STD) 25
2.4.5 数据词典 26
2.4.6 加工逻辑说明 27
2.5 需求分析的控制技术 28
2.5.1 有限状态机 29
2.5.2 Petri网 29
2.6 软件需求规格说明和需求评审 29
2.6.1 软件需求规格说明和初步用户手册 29
2.6.2 软件需求评审 33
本章小结 35
习题2 35
第3章 软件设计 39
3.1 软件设计的基本概念 39
3.1.1 什么是软件设计 39
3.1.2 如何将分析模型转换为软件结构设计 39
3.1.3 软件设计在软件开发中的地位 39
3.1.4 软件设计方法的分类 40
3.2 软件设计原则——模块独立性 40
3.2.1 模块独立性原则的含义 40
3.2.2 模块的耦合性 41
3.2.3 模块的聚合性 43
3.2.4 模块规模应该适中 45
3.3 软件设计的其他原则 46
3.3.1 信息隐蔽和局部化的原则 46
3.3.2 抽象的原则 47
3.3.3 控制层次适中的原则 47
3.4 概要设计 48
3.4.1 概要设计的过程 49
3.4.2 概要设计使用的图形工具 49
3.4.3 面向数据流的设计方法 50
3.5 详细设计 52
3.5.1 详细设计的任务 52
3.5.2 详细设计使用的图形工具 53
3.5.3 面向数据结构的设计方法 56
3.6 其他软件开发方法简介 60
3.6.1 面向问题的分析法 60
3.6.2 原型化方法 61
3.6.3 面向对象的软件开发方法 61
3.6.4 可视化开发方法 61
3.7 设计规格说明书与设计评审 62
3.7.1 软件概要设计说明书的大纲 62
3.7.2 软件详细设计说明书的大纲 64
3.7.3 设计评审 65
本章小结 65
习题3 66
第4章 程序编码 68
4.1 程序设计概述 68
4.1.1 程序设计的发展 68
4.1.2 程序设计语言特点 69
4.2 结构化程序设计 69
4.2.1 自顶向下的程序设计方法 69
4.2.2 结构化设计的原则 70
4.3 程序设计的风格 70
4.3.1 书写程序的风格 70
4.3.2 程序效率 71
4.4 程序设计的复杂性度量 72
本章小结 72
习题4 72
第5章 软件测试 74
5.1 基本概念 74
5.1.1 软件测试的定义 74
5.1.2 软件测试的基本原则 75
5.1.3 软件测试的分类 76
5.1.4 软件测试的信息流 77
5.2 软件测试的方法 77
5.2.1 黑盒测试 78
5.2.2 白盒测试 78
5.3 测试用例的设计 79
5.3.1 逻辑覆盖 79
5.3.2 等价类划分 84
5.3.3 边界值分析法 85
5.3.4 错误推测法 86
5.3.5 因果图法 86
5.4 软件测试的步骤 88
5.4.1 单元测试 89
5.4.2 集成测试 90
5.4.3 确认测试 93
5.4.4 系统测试 94
5.5 测试工具 95
5.5.1 人工测试 95
5.5.2 测试工具的分类 96
5.5.3 测试工具的选择 97
5.6 调试 97
5.6.1 调试的步骤 98
5.6.2 调试的策略 98
5.6.3 调试的原则 99
5.7 软件的可靠性 99
5.7.1 软件可靠性的定义 99
5.7.2 程序的正确性证明 100
本章小结 100
习题5 101
第6章 软件维护 104
6.1 软件维护的概念 104
6.1.1 软件维护的含义 104
6.1.2 影响维护工作量的因素 105
6.2 软件维护的特点 107
6.2.1 软件工程与软件维护的关系 107
6.2.2 维护成本 107
6.2.3 软件维护的内容 108
6.3 软件维护的过程 108
6.3.1 软件维护机构 108
6.3.2 软件维护申请报告 109
6.3.3 软件维护的工作流程 109
6.3.4 软件维护的实施 110
6.3.5 软件维护文档 111
6.3.6 软件维护的评价 111
6.4 软件的可维护性 112
6.4.1 可维护性的地位 112
6.4.2 软件的可维护性度量 112
6.4.3 提高软件可维护性的方法 112
6.5 软件维护的副作用 113
6.5.1 程序修改的步骤 113
6.5.2 修改程序的副作用 114
6.6 软件再生工程 115
本章小结 116
习题6 116
第7章 软件项目管理 119
7.1 软件项目管理过程 119
7.1.1 什么是软件项目管理 119
7.1.2 软件项目管理的过程 120
7.2 软件的生产率和质量的度量 121
7.2.1 如何评价软件的质量 121
7.2.2 影响软件生产率的因素 123
7.3 软件项目的估算 123
7.3.1 对估算的看法 123
7.3.2 软件项目计划的目标 124
7.3.3 软件规模是项目估算的基础 124
7.3.4 软件项目规模估算方法 124
7.3.5 软件开发中的资源 126
7.4 软件开发成本估算 127
7.4.1 软件开发成本估算方法 127
7.4.2 软件开发成本估算的经验模型 129
7.5 软件项目进度安排 130
7.5.1 进度安排中应考虑的几个问题 130
7.5.2 进度安排的方法 131
7.6 软件风险管理 131
7.6.1 风险的分类 132
7.6.2 风险的识别 132
7.6.3 风险评估 132
7.6.4 风险的评价 132
7.6.5 风险的驾驭和监控 132
7.7 软件项目的组织 133
7.7.1 软件项目管理的组织模式 133
7.7.2 人员组织与管理 133
7.8 软件配置管理 134
7.8.1 软件配置管理人员应完成的主要任务 135
7.8.2 软件配置管理应提供的功能 136
7.9 软件过程能力评估 136
7.9.1 国际标准ISO 9000 136
7.9.2 软件过程能力评估的CMM模型 137
本章小结 138
习题7 138
第8章 面向对象的技术和应用 140
8.1 面向对象的基本知识 140
8.1.1 面向对象的概念 140
8.1.2 面向对象方法及优点 142
8.2 面向对象的分析方法 142
8.2.1 面向对象的系统分析 142
8.2.2 如何进行对象的划分 143
8.2.3 制定协议 144
8.2.4 逐步求精 145
8.3 统一建模语言 145
8.3.1 统一建模语言简介 145
8.3.2 统一建模语言的内容 146
本章小结 147
习题8 147
参考文献 148