第1部分 概论 3
第1章 嵌入式软件概述 3
1.1 引言 3
1.1.1 嵌入式系统 3
1.1.2 嵌入式软件 7
1.2 可信软件 8
1.2.1 处理模型及其假设 10
1.2.2 可信性软件的研究内容 11
1.3 软件属性及软件可信性属性 12
1.3.1 软件可用性 15
1.3.2 软件可靠性 16
1.3.3 软件安全性 16
1.3.4 软件信息安全性 18
1.3.5 软件维修性 20
第2章 软件困惑 23
2.1 软件的特点 23
2.1.1 可塑性 23
2.1.2 变态性 24
2.1.3 开发过程 24
2.2 软件不可信因素 26
2.2.1 定义 26
2.2.2 错误 26
2.2.3 故障 28
2.2.4 失效 28
2.3 错误、故障、失效的关系 29
2.4 软件的困扰 31
第3章 软件工程概念 36
3.1 软件工程概念的提出 36
3.2 软件工程基本概念 39
3.2.1 狭义的软件工程化 39
3.2.2 广义的软件工程化 39
3.3 软件工程的基本原则 42
3.4 软件工程的研究内容 45
3.4.1 软件工程过程 45
3.4.2 软件工程方法研究 47
3.4.3 计算机辅助软件工程工具研究 56
第2部分 软件工程概念 61
第4章 软件全生命周期模型 61
4.1 瀑布模型 65
4.2 增量迭代模型 70
4.3 快速原型模型 73
4.4 螺旋模型 76
4.5 敏捷模型 79
4.5.1 极限编程 82
4.5.2 Scrum模式 86
第5章 开发计划与策划 89
5.1 软件策划与软件计划概述 91
5.1.1 软件策划过程是高质量软件的保证 91
5.1.2 软件策划的依据与参考 92
5.2 软件策划过程的目标 92
5.3 软件计划 92
5.3.1 软件开发计划 93
5.3.2 软件验证计划 93
5.3.3 软件配置管理计划 94
5.3.4 软件质量保证计划 95
5.4 软件开发标准 96
5.4.1 软件需求标准 96
5.4.2 软件设计标准 96
5.4.3 软件编码标准 96
5.5 软件计划和软件开发标准的配置管理 97
5.6 软件策划过程的评审和质量保证 97
第6章 需求开发及管理 98
6.1 需求标准 106
6.1.1 需求的正确性 107
6.1.2 需求完整性 108
6.1.3 需求的可验证性 110
6.1.4 非功能需求 112
6.1.5 需求的鲁棒性 117
6.2 需求开发技术 119
6.2.1 需求开发流程 120
6.2.2 需求获取 122
6.2.3 需求分析 127
6.2.4 需求验证 152
6.3 需求管理 154
6.3.1 需求基线管理 155
6.3.2 需求的变更控制 156
6.3.3 需求追溯 160
6.3.4 需求过程的风险 160
第7章 软件架构设计技术 163
7.1 软件架构设计 163
7.1.1 软件架构的定义 164
7.1.2 软件架构的运行基础 167
7.1.3 软件架构设计原则 167
7.1.4 软件架构设计方法 168
7.1.5 软件架构的层次化设计方法 171
7.1.6 机载软件的软件架构设计 173
7.1.7 软件架构设计常见的问题 178
7.2 架构设计与高可信性软件 179
7.2.1 保证软件的正确性:避错 179
7.2.2 使用容错的方法:避错 180
7.2.3 保证软件的安全性 183
7.2.4 保证软件信息安全性 184
7.2.5 可信性的实现与矛盾 184
第8章 机载软件的设计 186
8.1 机载软件设计要求 186
8.1.1 机载软件设计环境要求 186
8.1.2 机载软件特性设计要求 187
8.1.3 理论、算法和模型相关设计要求 188
8.2 机载软件的设计概念 198
8.2.1 并发处理 198
8.2.2 信息隐藏 199
8.2.3 有限状态机 200
8.3 机载软件的设计方法 201
8.3.1 设计策略的选取 201
8.3.2 结构化设计方法 202
8.3.3 面向对象设计方法 204
8.3.4 基于模型设计方法 204
8.4 机载软件的特性设计技术 205
8.4.1 软件特性概述 205
8.4.2 特性设计技术 206
8.5 机载软件的设计约束 209
8.5.1 接口设计约束 209
8.5.2 中断设计约束 210
8.5.3 模块设计约束 210
8.5.4 异常设计约束 210
8.5.5 数据安全设计约束 210
8.5.6 余量设计约束 211
8.5.7 其他设计约束 211
第9章 软件测试技术 213
9.1 软件测试概述 213
9.1.1 软件测试的定义 213
9.1.2 软件测试的重要性 215
9.1.3 软件测试与软件开发的关系 216
9.2 软件测试的工程应用 217
9.2.1 航空嵌入式软件测试 217
9.2.2 民机机载软件验证过程 222
9.2.3 GJB 5000A—2008的软件验证与确认过程 225
9.3 软件测试的研究内容 227
9.3.1 航空电子系统与软件测试技术 227
9.3.2 综合模块化航空电子系统软件测试 227
9.3.3 模型软件测试技术 231
第10章 软件质量保证 234
10.1 软件质量定义 235
10.1.1 软件质量概述 236
10.1.2 软件质量指标体系 237
10.1.3 软件质量模型 240
10.2 软件质量保证 248
10.3 软件开发质量保证 251
10.4 NASA定义的软件保证 254
第11章 软件可信性评估 261
11.1 软件可信性评估 263
11.1.1 基于软件开发过程的可信性评估 263
11.1.2 基于提交软件产品的可信性评估 266
11.1.3 基于软件产品应用阶段的可信性评估 267
11.2 评估方法 268
11.2.1 认知预演 268
11.2.2 启发式评估 268
11.2.3 用户测试法 269
11.3 NASA的软件评估 269
11.4 软件技术成熟度及其评估 270
11.4.1 技术成熟度的概念 274
11.4.2 软件技术成熟度(STRL)的定义 281
11.4.3 基于开发和使用维度的软件成熟度定义 288
11.4.4 软件成熟度评估(STRA) 294
11.4.5 系统成熟度等级(SRL) 294
第12章 软件可靠性 298
12.1 软件可靠性概念 298
12.1.1 软件可靠性定义 298
12.1.2 软件可靠性的特点 299
12.2 软件可靠性标准 299
12.2.1 IEEE的软件可靠性标准 299
12.2.2 我国软件可靠性标准 300
12.3 软件可靠性度量 301
12.3.1 IEEE可靠性度量参数体系 301
12.3.2 常用软件可靠性度量参数 302
12.4 软件可靠性评估 303
12.4.1 软件可靠性评估的目的 303
12.4.2 软件可靠性评估的时机 303
12.4.3 软件可靠性评估过程 304
12.4.4 软件可靠性评估模型 305
12.4.5 软件可靠性评估方法 306
12.5 软件可靠性分析 307
12.5.1 软件失效模式及影响分析 307
12.5.2 软件故障树分析 308
12.6 软件可靠性保障技术 309
12.6.1 软件避错技术 309
12.6.2 软件容错技术 311
第13章 软件安全性及其评估 313
13.1 机载软件与安全 313
13.2 软件安全性概述 313
13.2.1 软件安全性定义 313
13.2.2 软件安全性与系统安全性 314
13.2.3 软件安全性和硬件安全性 314
13.2.4 影响软件安全性的因素 315
13.2.5 软件安全性设计方法 316
13.3 对软件安全性的讨论 319
13.4 基于系统论的软件安全性分析方法 320
13.5 软件安全性设计工程措施 321
第3部分 机载软件及软件工程 325
第14章 机载嵌入式软件 325
14.1 操作系统 325
14.1.1 操作系统概述 325
14.1.2 嵌入式操作系统的概述 326
14.1.3 嵌入式操作系统的架构概述 328
14.1.4 机载嵌入式实时操作系统 332
14.2 嵌入式数据库 335
14.2.1 机载领域对数据库的要求 335
14.2.2 机载领域典型数据库介绍 337
14.2.3 后续研究的技术趋势 338
14.3 嵌入式文件系统 339
14.3.1 机载领域对文件系统的要求 339
14.3.2 机载领域典型文件系统介绍 339
14.3.3 后续研究的技术趋势 340
第15章 DO-178概要 342
15.1 适航与软件适航 342
15.2 DO-178的背景 344
15.2.1 DO-178 344
15.2.2 DO-178A 344
15.2.3 DO-178B 345
15.2.4 DO-178C 346
15.2.5 DO-178C主要变化 348
15.3 DO-178B/C的本质 351
15.4 机载软件研制和DO-178 352
15.5 面向适航的系统、软件与DO-178 353
15.6 DO-178B概要 357
15.6.1 DO-178B的基本架构 357
15.6.2 计划过程 359
15.6.3 软件开发过程 360
15.6.4 软件验证过程 361
15.6.5 软件配置管理过程 364
15.6.6 软件质量保证过程 365
15.6.7 合格审定联络过程 365
第16章 GJB 5000A—2008概要 366
16.1 GJB 5000A—2008概述 366
16.1.1 GJB 5000A—2008简介 366
16.1.2 GJB 5000A—2008与CMM的区别 366
16.1.3 发达国家CMM现状 367
16.2 实施GJB 5000A—2008的必要性 369
16.2.1 推进GJB 5000A—2008的必要性 369
16.2.2 GJB 5000A—2008推进的紧迫性 370
16.3 GJB 5000A—2008模型的结构及评价 372
16.3.1 GJB 5000A—2008各级别与过程域 372
16.3.2 过程域部件组成 374
16.3.3 GJB 5000A—2008过程域示例 376
16.4 GJB 5000A—2008推进的重点 378
16.4.1 GJB 5000A—2008推进的基本要求 378
16.4.2 实效推进的思路 379
第17章 知识管理 382
17.1 知识管理的必要性 382
17.2 知识管理的基本概念 383
17.2.1 什么是知识 383
17.2.2 什么是知识管理 384
17.2.3 知识管理的主要内容 385
17.2.4 知识管理的作用 386
17.3 实施知识管理的方法 387
17.3.1 知识管理及其关注点 387
17.3.2 知识管理:组织变革 387
17.3.3 知识管理系统及知识库 392
第4部分 一个可信性软件(天脉操作系统)的实践 401
第18章 天脉操作系统的研制策划 401
18.1 操作系统发展思路策划 401
18.1.1 操作系统与应用软件 401
18.1.2 天脉产生的必要性 403
18.1.3 早期原型与天脉操作系统研制 405
18.2 天脉操作系统研制目标 412
第19章 项目立项论证和研制总要求论证 414
19.1 项目立项论证 414
19.1.1 研制原则、目标、思路 414
19.1.2 必要性论证 415
19.1.3 可行性论证 417
19.1.4 工程实施方案论证 417
19.2 研制总要求论证 424
19.2.1 总体论证 425
19.2.2 指标体系论证 427
第20章 软件计划过程 430
20.1 制订计划 431
20.1.1 软件开发计划 431
20.1.2 软件配置管理计划 436
20.1.3 软件验证计划 437
20.1.4 软件质量保证计划 440
20.2 制定标准 441
20.2.1 软件需求标准 441
20.2.2 软件设计标准 444
20.2.3 软件编码标准 446
20.3 软件可靠性、安全性考虑 448
20.3.1 软件可靠性 448
20.3.2 软件安全性 450
第21章 软件开发过程实践 452
21.1 软件需求开发 452
21.1.1 需求开发过程 452
21.1.2 需求的表示 453
21.1.3 需求开发过程产品 456
21.2 软件设计开发 457
21.2.1 软件设计过程 457
21.2.2 关键技术设计 461
21.2.3 确定性的数据配置设计 465
21.3 软件实现 467
21.3.1 软件实现过程 467
21.3.2 代码安全性分析 467
21.3.3 软/硬件集成 468
21.4 软件验证 469
21.4.1 同行评审 469
21.4.2 软件测试 470
21.4.3 鲁棒性设计与测试 473
21.5 可靠性与安全性实践 473
21.5.1 可靠性 473
21.5.2 安全性 479
21.6 开发环境与OSS话题 481
21.6.1 开发环境组成 481
21.6.2 集成开源软件策略 482
21.6.3 开源软件缺陷处理原则 483
21.6.4 编译器验证 484
第22章 天脉操作系统定型阶段 487
22.1 软件定型测评 487
22.2 软件地面综合试验 488
22.3 应用软件空中试飞试验 489
22.4 天脉操作系统定型审查 490
第23章 天脉操作系统项目管理 491
23.1 项目管理策划 491
23.2 目标及范围管理 492
23.2.1 项目目标管理 493
23.2.2 项目范围管理 493
23.3 资源管理 495
23.3.1 项目团队建设 495
23.3.2 项目人力资源管理 500
23.3.3 项目外部资源管理 501
23.4 计划管理 502
23.4.1 项目总体计划制订 502
23.4.2 项目进程和活动控制 505
23.4.3 项目沟通管理 506
23.5 质量保证 507
23.5.1 质量保证组织的建立及其职责 507
23.5.2 质量保证的主要方法 507
23.5.3 质量保证数据 507
23.6 风险管理 508
缩略语 510
参考文献 516