第1章 概述 1
1.1软件工程的概念 1
1.1.1软件工程定义 1
1.1.2软件工程的基本约束 3
1.1.3软件工程的研究内容 6
1.2航天实施软件工程的必要性 9
1.2.1软件质量问题影响型号任务成败 10
1.2.2航天型号软件研制面临挑战 15
第2章 航天型号软件工程化的要素和方法 18
2.1航天型号软件的分类 18
2.2航天型号软件工程的核心要素 20
2.2.1软件开发过程 20
2.2.2软件开发方法 31
2.2.3软件工程工具 34
2.3航天型号软件工程的管理内容 38
2.3.1策划管理 38
2.3.2需求管理 38
2.3.3过程追踪与监控 38
2.3.4配置管理 38
2.3.5过程与产品质量保证 38
2.3.6外协管理 39
2.3.7评审管理 39
2.3.8文档管理 39
2.3.9开发工具的使用管理 39
第3章 国外航天型号软件工程化情况 40
3.1软件过程改进标准和方法 40
3.1.1 ISO 9000 40
3.1.2 CMM和CMMI 40
3.2 NASA软件工程化实践 45
3.2.1 NASA软件研制的管理体系 46
3.2.2 NASA标准、规范与流程 46
3.3 ESA软件工程化实践 56
3.3.1 ESA软件研制的管理体系 56
3.3.2 ESA标准、规范与流程 58
第4章 国内航天型号软件工程化情况 65
4.1航天型号软件工程化概述 65
4.2载人航天工程软件工程化发展历程 66
4.2.1启动探索期 66
4.2.2全面实施期 67
4.2.3巩固发展期 68
4.2.4软件工程化成绩 68
4.3载人航天工程软件工程化标准体系 70
4.3.1管理规定 70
4.3.2技术标准 71
第5章 航天型号软件研制过程 74
5.1技术流程分类 74
5.1.1新研软件技术流程 75
5.1.2沿用软件技术流程 76
5.1.3参数修改软件技术流程 76
5.1.4适应性修改软件技术流程 77
5.2系统级分析与设计 78
5.2.1系统分析与设计 79
5.2.2分系统分析与设计 82
5.3软件需求分析 85
5.3.1输入与输出 85
5.3.2工作内容 87
5.3.3出口准则 88
5.4软件设计 88
5.4.1概要设计 88
5.4.2详细设计 90
5.5软件实现 92
5.5.1输入与输出 93
5.5.2工作内容 93
5.6软件测试 94
5.6.1软件集成测试 94
5.6.2软件配置项测试 96
5.7系统测试 97
5.7.1软件系统测试 98
5.7.2系统试验验证 99
5.8验收交付 101
5.9运行维护 101
5.9.1输入与输出 101
5.9.2工作内容 102
5.9.3出口准则 102
第6章 系统级分析与设计 103
6.1概述 103
6.2系统分解方法 104
6.2.1产品分解结构 104
6.2.2功能流框图 105
6.2.3软件结构HIPO图 106
6.3软硬件协同设计 108
6.3.1软硬件协同设计定义 109
6.3.2软硬件协同设计与仿真验证 110
6.3.3软硬件协同设计平台 111
6.4软件复用与外购 113
6.4.1已有软件复用过程 113
6.4.2软件复用技术 114
第7章 软件需求分析 119
7.1概述 119
7.1.1需求的定义 119
7.1.2需求的类型 121
7.1.3需求分析原则 123
7.2结构化需求分析方法 123
7.2.1数据流图 124
7.2.2数据字典 127
7.2.3加工规格说明 128
7.2.4实体-关系图 128
7.2.5数据对象描述 129
7.2.6状态迁移图 129
7.3面向对象的需求分析方法 130
7.3.1面向对象分析方法概述 130
7.3.2识别分析类和对象 132
7.3.3定义类之间的关系 134
7.3.4标识类的属性和服务 135
7.4软件需求管理 136
7.4.1内容与要求 136
7.4.2需求追踪方法 138
7.4.3需求管理工具 140
第8章 软件设计 142
8.1概述 142
8.2软件设计的原则 143
8.2.1模块化 143
8.2.2抽象 146
8.2.3逐步求精 147
8.2.4信息隐藏 147
8.3结构化软件设计方法 147
8.3.1面向数据流的设计方法 147
8.3.2面向数据结构的设计方法 152
8.3.3结构化程序设计图形工具 156
8.4面向对象软件设计方法 159
8.4.1系统设计与对象设计 160
8.4.2面向对象程序设计 160
8.4.3面向对象设计工具 162
8.5数据库结构设计 163
第9章 软件实现 166
9.1概述 166
9.1.1编程语言分类 167
9.1.2编程语言的选择 168
9.2编程风格与编码规范 169
9.2.1程序设计风格 169
9.2.2 C语言编码规范 175
9.3高安全可靠的软件编码环境 181
9.3.1编译器对软件安全可靠性的影响 181
9.3.2安全可信编译器 182
第10章 软件测试 184
10.1概述 184
10.1.1测试策划 184
10.1.2测试设计与实现 185
10.1.3测试执行 185
10.1.4测试总结 186
10.2测试方法 186
10.2.1静态测试 186
10.2.2动态测试 187
10.3软件单元测试 195
10.3.1单元测试的内容 195
10.3.2单元测试的方法 198
10.4软件集成测试 203
10.4.1集成测试的内容 203
10.4.2集成测试的方法 204
10.5软件配置项测试 205
10.5.1功能测试 206
10.5.2性能测试 206
10.5.3接口测试 206
10.5.4人机交互界面测试 207
10.5.5强度测试 207
10.5.6余量测试 208
10.5.7恢复性测试 208
10.5.8安装性测试 208
10.5.9边界测试 209
10.5.10安全性测试 209
10.5.11互操作性测试 210
10.5.12敏感性测试 210
10.5.13数据处理测试 210
10.5.14容量测试 210
10.6系统测试 211
10.6.1软件系统测试 211
10.6.2系统试验验证 211
10.7回归测试 212
10.8第三方评测 213
10.9软件测试工具 213
10.9.1静态分析工具 213
10.9.2单元测试工具 215
10.9.3嵌入式软件白盒测试工具 216
10.9.4测试管理工具 217
第11章 软件运行维护 219
11.1概述 219
11.1.1软件维护的定义 219
11.1.2影响维护工作量的因素 220
11.1.3软件可维护性 221
11.2软件维护的实施 224
11.2.1维护机构 224
11.2.2维护的流程 224
11.3遗留系统的再工程 226
11.3.1遗留系统的演化 226
11.3.2软件再工程和逆向工程 227
第12章 软件安全可靠性 231
12.1概述 231
12.1.1安全关键软件定义 232
12.1.2安全关键软件开发难点和挑战 233
12.2安全关键软件开发过程 235
12.2.1软件安全计划 236
12.2.2系统/分系统设计与分析 238
12.2.3软件安全性需求开发 252
12.2.4软件安全性设计 267
12.2.5软件安全性实现 271
12.2.6软件安全性测试 271
12.2.7软件运行维护 272
12.2.8软件安全性追踪分析及软件变更安全性分析 273
12.3软件可靠性设计和测试验证 274
12.3.1软件可靠性分配与预计 274
12.3.2软件可靠性设计 277
12.3.3软件可靠性分析 279
12.3.4软件可靠性测试 280
12.3.5软件可靠性评估 282
第13章 软件项目管理与计划 285
13.1概述 285
13.2软件项目管理过程 286
13.2.1启动软件项目 286
13.2.2成本估算 287
13.2.3风险分析 287
13.2.4进度安排 287
13.2.5追踪和控制 287
13.3软件开发计划的实现过程 287
13.3.1计划初始阶段 288
13.3.2制订软件开发计划 288
13.3.3对软件开发计划进行审查和批准 288
13.3.4实施软件开发计划 288
13.3.5软件开发过程的度量和评价 289
13.3.6修改软件开发计划 289
13.4软件开发成本估算 289
13.4.1基于参数化模型的软件成本估算 290
13.4.2非参数化的软件成本估算 295
13.5进度安排 296
13.5.1制订开发进度计划 297
13.5.2进度安排的图形方法 297
13.5.3追踪与控制 298
13.6风险管理 298
13.6.1风险识别 299
13.6.2风险估算 299
13.6.3风险评价 299
13.6.4风险监控与应对 300
第14章 配置管理 301
14.1概述 301
14.1.1术语和定义 303
14.1.2配置管理库 304
14.1.3配置管理的组织和职责 305
14.2配置管理流程 306
14.2.1制订配置管理计划 308
14.2.2建立配置管理系统 310
14.2.3创建和发布基线 311
14.2.4跟踪与控制变更 312
14.2.5配置记录和报告 315
14.2.6配置审核 316
14.3技术状态控制 317
14.3.1系统级分析与设计 317
14.3.2软件需求分析 318
14.3.3软件设计 318
14.3.4软件实现 319
14.3.5软件测试 319
14.3.6验收交付 320
14.3.7运行维护 320
14.4配置管理工具 320
14.4.1常用配置管理工具 320
14.4.2选型与使用注意事项 322
第15章 软件质量保证 323
15.1概述 323
15.2质量保证组织机构 324
15.3质量保证流程 324
15.3.1制订软件质量保证计划 326
15.3.2实施软件质量保证活动 326
15.3.3不符合项处理 330
15.3.4质量保证维护 331
15.4软件评审 331
15.4.1评审的分类 331
15.4.2评审原则 332
15.4.3评审计划 333
15.4.4评审流程 333
第16章 模型驱动软件开发方法 335
16.1概述 335
16.2模型驱动架构 340
16.3体系结构描述语言 343
16.3.1 UML 344
16.3.2 SysML 344
16.3.3 AADL 346
16.3.4 MARTE 349
16.3.5比较分析 350
16.4模型驱动开发方法的关键技术 351
16.4.1需求分析 352
16.4.2面向领域的建模语言语义扩展 352
16.4.3模型转换 355
16.4.4代码生成 356
16.4.5基于模型的验证技术 356
16.4.6部署与重构 357
16.5工具支持 358
16.5.1商业工具 358
16.5.2开源工具 359
16.5.3领域模型驱动开发环境研制 363
16.6小结 365
第17章 形式化软件开发方法 367
17.1概述 367
17.2形式化方法的选用原则 369
17.2.1形式化程度 370
17.2.2形式化方法的使用范围 370
17.2.3合理的预期 371
17.3形式化软件开发过程 372
17.3.1软件系统刻画阶段 372
17.3.2建模阶段 373
17.3.3规约阶段 373
17.3.4分析阶段 374
17.3.5归档阶段 374
17.3.6维护阶段 374
17.4需求描述及形式化 375
17.4.1需求捕捉的层次 375
17.4.2需求陈述的明确性 375
17.4.3需求追踪性 376
17.4.4底层原理和直观描述的可用性 376
17.5形式化建模 376
17.5.1数学模型 377
17.5.2离散和连续域的数学模型 379
17.6形式化规格说明 382
17.6.1形式化规约语言 382
17.6.2形式化规约语言风格 384
17.6.3形式化规约和生存周期的关系 385
17.6.4检测形式化规格说明中的错误 386
17.6.5形式化规格说明的效用 388
17.7形式化分析 390
17.7.1自动演绎 390
17.7.2有限状态方法 393
17.8工具支持 395
17.8.1模型验证工具 395
17.8.2定理证明工具 395
17.9小结 396
17.9.1应用类型 396
17.9.2规模和结构 397
17.9.3类型选择 397
17.9.4形式化级别 397
17.9.5使用范围 397
17.9.6工具支持 397
参考文献 398