第1章 概述 1
1.1 软件开发的历史与软件危机 1
1.1.1 个体手工方式时期 1
目录 1
1.1.2 软件作坊时期 2
1.1.3 程序设计时期 2
1.1.4 软件危机实例 2
1.1.5 软件危机 3
1.2 软件工程概述 5
1.2.1 软件工程学科 5
1.1.6 软件危机的医治 5
1.2.2 软件生命周期 6
1.3 软件工程学发展现状 9
1.3.1 新的软件开发模式 9
1.3.2 计算机辅助软件工程CASE 9
1.3.3 软件自动生成器 9
1.3.4 软件工程与人工智能 9
1.4 软件工程的目标与常用模型 10
1.4.1 软件工程的目标 10
1.4.2 软件工程的基本模型 11
1.5 软件开发的基本策略 12
1.5.1 抽象与模型方法 13
1.5.2 懒汉方法——复用 14
1.5.3 模块化方法——分解 15
1.5.4 聪明方法——平衡 16
1.6 软件工程基本观念 17
1.6.1 一些不正确的观念 17
1.6.2 一些有争议不正确的观念 17
1.6.3 软件项目常见错误 18
1.7 软件行业概况 19
1.7.1 政府管理者 19
1.7.2 行业管理者 19
1.7.3 中国软件产业现状 20
1.7.4 相关信息 20
2.1.1 项目管理概述 22
第2章 软件开发相关知识 22
2.1 项目管理 22
2.1.2 项目阶段和项目生命周期 23
2.1.3 项目属性与目标 24
2.1.4 项目管理知识体系 25
2.1.5 项目管理软件介绍 26
2.1.6 软件项目管理 28
2.1.7 项目管理实施案例 29
2.1.8 IT公司项目管理规范 32
2.2 CMM 38
2.2.1 CMM概述 38
2.2.3 初始级(等级1) 41
2.2.2 CMM体系结构 41
2.2.4 可重复级(等级2) 42
2.2.5 定义级(等级3) 43
2.2.6 管理级(等级4) 44
2.2.7 优化级(等级5) 44
2.2.8 CMM改进与实施 45
2.2.9 CMM实施案例 46
2.3 ISO9000 50
2.3.1 ISO9000概述 50
2.3.2 ISO9000软件相关规则 50
2.3.4 CMM和ISO9000对比 52
2.3.3 软件行业推行ISO 9000的典型步骤与注意事项 52
2.3.5 ISO9000范例 54
2.4 印度软件开发概况 54
2.4.1 软件企业的组织结构 55
2.4.2 项目组结构 55
2.4.3 项目计划 56
2.4.4 印度软件项目管理 56
第3章 软件开发组织及人力资源管理 59
3.1 软件开发组织 59
3.1.1 软件开发组织模型 59
3.1.2 软件开发团队策略 61
3.1.3 软件开发人员的组织与分工 63
3.1.4 范例:J2EE项目中开发团队的组建 64
3.2 程序员 65
3.3.1 程序经理素质 66
3.3 程序经理 66
3.3.2 程序经理技能 67
3.3.3 程序员等级制度 68
3.4 软件组织人力资源管理 69
3.4.1 组织规划(管理规划) 70
3.4.2 人员组织 71
3.4.3 团队发展 73
3.5 软件集成公司组织结构范例(开发维护部分) 77
3.5.1 产品开发立项 77
3.5.2 设计实现阶段 77
3.5.4 产品推广阶段 78
3.5.3 测试阶段 78
3.5.5 项目实施与维护阶段 79
第4章 项目计划和项目工具 80
4.1 项目计划 80
4.1.1 项目计划概述 80
4.1.2 项目计划过程 80
4.1.3 项目规划技巧 82
4.1.4 软件项目开发计划编写规范 83
4.2 软件项目规模估算方法 85
4.2.1 软件估算的基础与影响 85
4.2.2 进度计划方法 88
4.2.3 成本估算方法 91
4.3.1 甘特图(Gantt Chart) 92
4.3 项目计划方法 92
4.3.2 网络计划方法 93
4.3.3 活动排序的工具和方法 100
4.3.4 工作分解结构(WBS) 101
4.3.5 责任矩阵 103
4.3.6 工期压缩方法——时间/成本平衡法 104
第5章 可行性分析 107
5.1 可行性分析定义 107
5.2 可行性分析的要素 107
5.2.1 经济 107
5.2.2 技术 109
5.3 可行性研究步骤 110
5.2.3 社会环境 110
5.4 可行性分析范例 112
5.4.1 某航空机票预订系统可行性分析报告 112
5.4.2 ×××虚拟主机管理系统可行性分析 115
第6章 需求分析 121
6.1 需求分析基础 121
6.1.1 需求分析概念 121
6.1.2 需求工程难点分析 122
6.1.3 需求风险 124
6.2 需求分析原则 125
6.3 需求分析方法 127
6.3.1 未雨绸缪 127
6.3.2 灵活应变 128
6.3.4 需求控制方法 129
6.3.5 原型化方法 129
6.3.3 参考法 129
6.4 需求分析人员与工具 131
6.4.1 需求分析人员 131
6.4.2 需求分析工具 131
6.5 需求分析过程 134
6.5.1 需求类型 134
6.5.2 需求获取与表达 134
6.5.3 需求评审 135
6.5.4 需求确认与变更 137
6.5.6 需求验证 139
6.5.5 需求跟踪 139
6.6 需求分析规范 140
6.7 需求分析案例 143
6.7.1 需求分析示例1——销售系统 143
6.7.2 需求分析示例2——校园学籍管理系统 144
第7章 系统设计 149
7.1 系统设计概述 149
7.1.1 系统设计概念与重要性 149
7.1.2 系统设计的任务与策略 149
7.2 软件配置管理 150
7.2.1 配置标示/配置项 150
7.2.3 变更管理 151
7.2.2 版本管理 151
7.2.4 配置审核 152
7.3 概要设计 153
7.3.1 软件体系结构设计 154
7.3.2 数据设计 156
7.4 详细设计 157
7.4.1 模块设计 158
7.4.2 用户界面设计 159
7.4.3 详细设计规范 162
7.5 系统设计范例 163
8.1.1 程序语言特性 169
8.1.2 程序设计语言的选择 169
8.1 编码 169
第8章 编码、测试与改错 169
8.1.3 编码规范范本 170
8.2 软件测试 175
8.2.1 软件测试的教训 175
8.2.2 软件测试目的与概念 175
8.2.3 软件测试分类 176
8.2.4 软件测试原则与完成准则 178
8.2.5 软件测试过程 178
8.2.6 软件测试规范 180
8.3.3 Bug跟踪与管理 186
8.3.2 调试方法 186
8.3.1 改错步骤 186
8.3 改错 186
第9章 软件维护 188
9.1 软件维护常识 188
9.1.1 维护类型 188
9.1.2 维护比重 188
9.2 软件维护的代价及其影响因素 189
9.2.1 软件维护成本 189
9.2.2 软件维护影响因素 189
9.2.3 软件维护工作量 190
9.2.4 软件维护的策略 190
9.4.1 软件维护相关报告 191
9.4 软件维护档案 191
9.3 软件维护流程 191
9.4.2 软件维护记录 192
9.5 维护评价与总结 192
9.6 提高可维护性的方法 193
9.7 逆向工程和再生工程 194
9.7.1 逆向工程 194
9.7.2 再生工程 195
第10章 软件项目开发实例 196
10.1 系统结构 196
10.2 数据库建立 197
10.3 系统功能设计 199
参考文献 207