CAN CSA ISO IEC TR 24718-06:高完整性系统中Ada编程语言使用指南详解

加拿大采纳的国际技术报告,为安全关键软件Ada开发提供系统化框架

CAN CSA ISO IEC TR 24718-06 是加拿大标准协会(CSA)正式采纳的国际技术报告,其基础文本为 ISO/IEC TR 24718:2006,中文标题为《信息技术 — 编程语言 — 高完整性系统中 Ada 编程语言使用指南》。该技术报告专为在航空航天、轨道交通、核电控制、医疗设备等安全苛求领域中使用 Ada 语言开发高完整性软件提供全流程指导。通过定义语言子集、编程约束、静态分析策略及测试要求,本报告帮助团队降低软件错误风险,提升系统可靠性和认证通过率。以下从标准概况、技术内容、实施要点及相关标准关系四个方面展开深度解析。

一、标准概况与适用范围

CAN CSA ISO IEC TR 24718-06 属于技术报告(Technical Report,TR)类别,并非具有强制力的国际标准,但它是公认的 Ada 语言高完整性应用最佳实践总结。标准发布于 2006 年,加拿大国家采纳版本为 2006 年(CAN/CSA-ISO/IEC TR 24718-06),适用于以下场景:

  • 基于 Ada 语言开发安全完整性等级(SIL)达到 2 级及以上(或类似分类体系)的嵌入式系统;
  • 需要符合行业规范(如 DO-178C、IEC 61508、ISO 26262、EN 50128)的软件认证项目;
  • 对代码可读性、可维护性和防错性有严格要求的长期维护项目;
  • 初次从其他语言迁移到 Ada 并希望最大化利用语言优势的开发团队。
提示: 技术报告本身并不强制要求团队100%遵循所有条款,但建议根据项目完整等级裁剪使用,并作为内部编程标准和审查检查单的基础。

二、主要技术内容与要求

该技术报告的核心是提供一套分层的 Ada 语言使用建议,包括语言子集划分、禁止/推荐特性列表、精度要求、静态分析规则以及动态测试策略。其主要章节涵盖:

1. 完整性等级与语言子集

报告定义了多个完整性等级(Integrity Level),并针对每一等级推荐了相应的 Ada 语言子集。等级越高,允许使用的语言特性越少,约束越严格。下表给出了典型的对应关系:

完整性等级 Ada 子集示例 禁止特性举例 最低验证要求
Level 0(最低) 完整 Ada 受限任务结构等少数风险项 代码审核 + 语句覆盖
Level 1 安全子集 A 动态内存分配(allocators)、泛型实例的复杂组合 分支覆盖 + 静态分析
Level 2 安全子集 B 异常处理不能覆盖所有路径、Unchecked_Access、 Unchecked_Conversion MC/DC 覆盖 + 模型检查
Level 3(最高) 极小子集 任务动态创建、非纯函数、递归 形式化验证 + 全路径覆盖

2. 关键编程规则

指南提炼出数十条规则,分为必需(shall)、推荐(should)和建议(may)三级。典型规则包括:

  • 禁止使用不定(unconstrained)数组作为函数返回值(除非经过额外检查);
  • 必需为每个包(package)显式定义规格(specification)和体(body);
  • 推荐利用 Ada 的类型系统对物理量进行维度保护(如使用 m/s 类型);
  • 必需对所有整数运算提供溢出检测或使用安全算术库。

3. 静态分析与测试

要求采用至少满足 SIL 要求的静态分析工具(如 SPARK 检查器)检测数据流、信息流和控制流异常。动态测试方面,根据等级确定覆盖率目标并配合随机测试。

注意: 即使采用语言子集,也不能保证设计无缺陷。必须将子集约束与严格的设计、编写、审查和测试流程相结合。切忌只靠工具忽略人工评审。

三、实施/应用要点

要将 CAN CSA ISO IEC TR 24718-06 有效落地,团队需要从以下三个维度入手:

1. 工具链选择

优先选用支持 Ada 高完整性分析的编译器与 IDE(如 GNAT Pro High-Integrity Edition),并配备 SPARK 或 similar 形式化验证工具。这些工具能自动检查大多数子集规则,降低人工审查成本。

2. 项目适配与裁剪

根据项目所属行业标准的安全完整性等级,从技术报告中选择适用的完整性等级和对应子集,并撰写项目级的 Ada 编码标准文档。例如,DO-178C Level A 的项目可采用 Level 2 或 Level 3 要求。

3. 人员培训与过程集成

开发团队必须理解 Ada 语言的安全特性以及技术报告中每条规则背后的动机。建议在开发流程中设置“Ada 安全特性”培训课程,并将规则检查纳入持续集成流水线,以确保每次提交都通过子集合规性检查。

实施益处: 遵循本技术报告可显著减少运行阶段因语言误用导致的故障,使代码更易通过证书当局的审查,同时降低维护阶段引入缺陷的概率。

四、与其他标准的关系

CAN CSA ISO IEC TR 24718-06 并非孤立的文档,它与一系列国际/行业标准紧密关联:

  • ISO/IEC 8652(Ada 语言标准): 本技术报告基于 ISO/IEC 8652:1995/Amd 1:2007 及后续版本,是 Ada 正式标准的上层使用指南。
  • ISO/IEC 24719: 同一系列的技术报告,提供 Ada 编译器在高完整性应用中的验证要求。两个 TR 通常配合使用。
  • IEC 61508 / ISO 26262 / EN 50128: 这些系统安全标准在软件侧不特定于语言,而本 TR 则针对 Ada 语言提供具体的实现指导。开发者可以将 TR 中的建议映射到上述标准的软件规范要求中。
  • DO-178C(机载系统): 航空领域常将本 TR 与 DO-178C 结合,尤其在工具鉴定和源代码验证方面。
安全关键要求: 任何安全相关项目若未按照本技术报告推荐的规则进行编码,必须提供等效的合理性论证。否则,认证机构可能以“未被充分验证”为由拒绝通过最终审计。

常见问题(FAQ)

问: CAN CSA ISO IEC TR 24718-06 与普通的 Ada 编码惯例有何不同?
答: 普通编码惯例侧重风格与可读性;本技术报告则聚焦于安全完整性,通过限制或禁止某些 Ada 语言特性来消除不可预测行为,并且其建议紧密关联完整性等级和认证目标,因此更适合高完整性系统开发。
问: 是否必须使用 SPARK 工具才能符合该技术报告?
答: 不一定。SPARK 是推荐的形式化验证工具,能够最高效地满足技术报告中的静态分析要求。但若团队通过其他 Ada 静态分析工具(如 CodePeer 或自家检测器)达到相同的覆盖率和信息流检查效果,同样可被认为合规。
问: 该技术报告是否需要每年更新或复审?
答: 技术报告本身的内容是相对稳定的;但建议项目在启动阶段咨询最新版的 Ada 语言标准(ISO/IEC 8652)以及相关的行业安全标准,以便整合新的 Ada 特性(如 Ada 2022)并评估是否可以使用更灵活的子集。
问: 小型团队是否可以裁剪该技术报告以减轻负担?
答: 可以。最低要求是识别项目的完整性等级,并从技术报告中选取对应的最低规则集。建议至少采纳所有“必需”级别的规则,并记录裁剪理由。裁剪后的规范仍应接受外部评估以确保充分性。

注:版权信息 — 本文章基于 2026 年仍有效的 CAN/CSA-ISO/IEC TR 24718-06 版本撰写,实际应用时请确认最新采纳版本。

📥 标准文件下载

🔒
请等待 10 秒,广告加载完成后将自动显示下载链接

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注