安全需求检查清单

简介

新建、修改或更新的需求必须符合要求。这意味着需求必须无歧义、可唯一标识、可行、可测试等。为确保这一点,必须在相应的拉取请求中评审每项需求,确认其是否满足作为需求的基本要求。本检查清单规定了评审需求 PR 时至少需要考虑的事项。

需求结构与指南

Zephyr 项目采用的方法见 安全需求

评审说明

本检查清单列出了在评审中批准需求时应考虑的主题和问题。评审结果必须记录在 PR 评审中,明确说明已使用本检查清单,并记录有关未决问题、发现的问题或批准结论的实际评审结果。对于安全评估范围内新增或变更的需求,在该安全范围所涵盖的内容发布之前,必须至少应用一次本检查清单。

需求集中存放在独立的仓库中:需求仓库

评审可以在两个层面开展:针对单项需求,或针对一组需求。检查项如下:

每项需求的评审检查项

必须分析每项新增或变更的需求,确保其符合要求,并确定其是否会以任何方式影响 Zephyr 的安全性。

需求评审检查项

标识符

问题

说明

示例

VerReq_1_0

该需求是否清晰易懂且无歧义?

为确保能够分析该需求,其表述必须易于理解,且不得留有对其功能作不同解释的空间。

避免使用模糊的表述,例如 一些、足够的、典型的、许多、若干、少量…… 。诸如 Zephyr 内核宜在可能的情况下提供 xyz 功能 这样的表述不够精确,留有不同解释的空间。此外,必须将 宜(should) 替换为含义明确的 应(shall) 。必须将 在可能的情况下 替换为明确定义,说明需求作者希望在哪些情况下提供该功能。这可以是一组具体情形、系统状态或其他条件,只要定义清晰即可。

VerReq_1_1

该需求是否具有原子性?

一项需求必须只描述一件需要满足的事项。否则,可能会妨碍安全分析、与架构组件及实现的唯一关联,以及可验证性。

诸如 信号 a 应控制黄色 LED 的亮灭,并且应通过点亮红色 LED 指示错误状态 这样的表述不具有原子性。应将其拆分为两项需求:REQ1:信号 a 应控制黄色 LED 的亮灭。 和 REQ2:应通过点亮红色 LED 指示错误状态。 还可以补充一项需求:REQ3(变体 a):黄色 LED 和红色错误指示 LED 必须相互独立 或 REQ3(变体 b):在待定(TBD)的情况下,黄色 LED 和红色错误指示 LED 可以合并使用 。

VerReq_1_2

该需求是否内部一致?

需求本身的内容必须完全一致,不得自相矛盾。

诸如 系统应使用抢占式 RTOS,以保证任务调度的确定性。系统还需要确保所有任务(包括低优先级的后台日志记录任务)均在不被抢占的情况下完成,以保持数据完整性。 这样的表述存在矛盾,必须避免。如果需要同时提供这两种选项,就必须定义各选项的适用条件及其配置方式。

VerReq_1_3

该需求是否可行、可实现且可验证?

需求不是不切实际的愿望清单,必须能够通过合理的手段实现(当然,不同项目对“合理”的界定可能不同)。因此,通常应避免提出那些纸面上看起来不错,但技术上无法实现、内部自相矛盾或违反系统基本约束的需求。这里的可验证是指,必须能够通过测试、(代码)评审、分析或其他手段,验证该需求是否已得到满足。

一个反例是 RTOS 应保证在所有条件下对所有设备进行零延迟中断处理。 这在物理上不可能实现,因为任何硬件都无法在真正为零的时间内作出响应。更好的表述应更加具体,例如 RTOS 应保证在目标硬件架构以 80 MHz 运行且系统处于最大负载时,中断延迟 ≤ 5 µs。

VerReq_1_4

需求是否完整?

为清楚表达需求意图而需要明确的所有信息是否齐备?

需求陈述必须清楚说明所有必要的数据和信息,或提供可靠的引用,以便找到这些数据。这意味着所引用的数据源必须由需求作者或利益相关方掌控;可能随时间变化的引用(例如指向外部资源的互联网 URL)并不适用。

VerReq_1_5

需求的定义是否不涉及具体实现?

需求必须描述“做什么”,而不是“如何做”。在某些特殊情况下,需求会有意限制可选的实现方式,通常是出于某些设计原因。这些原因必须在需求的理由说明或注释中写明(取决于实际采用哪种形式)。

避免使用这样的陈述: RTOS 应使用基于优先级的抢占式调度器,并采用轮转算法调度同等优先级的任务 ,可以考虑着重描述功能需求: RTOS 应支持任务调度,确保高优先级任务能够抢占低优先级任务,并以避免饥饿的方式调度同等优先级的任务。

VerReq_1_6

是否定义了需求在功能安全或信息安全方面的关键性?

对于可能损害 Zephyr 功能安全完整性(或信息安全完整性)的功能,所有影响这些功能的需求都需要标记为功能安全(或信息安全)关键需求,以便进行相应处理。

目前尚未规定将某项功能标记为与功能安全或信息安全相关的具体方式;需求或功能的相关性取决于其定义所在的范围。

VerReq_1_7

是否为每项需求定义了验证和/或验收标准?

每项需求都必须可验证。如果无法为某项需求定义验收标准,就需要重新审视该需求,并且可能需要以不同的方式定义它。验收标准至少必须能够从需求的表述中推导出来。

确保已有可用的测试,或已计划创建测试。评估测试覆盖是否足以验证该需求。如果不足,请联系功能安全工作组或测试工作组解决此问题。

VerReq_1_8

目标读者是否清楚理解该需求中使用的所有术语?

这项检查同时关注需求的准确性和可理解性。需求中所用术语的含义必须明确。对于在项目中具有特殊含义的术语,需要在术语表中或随需求一起给出清晰的定义。

以下陈述可能存在问题: RTOS 应支持邮箱和信号量等 IPC 机制,用于任务同步 ,因为读者(测试人员、管理人员、产品负责人等)可能不熟悉 IPC,甚至不了解邮箱或信号量在 RTOS 中的含义。如果没有面向所有利益相关方解释这些术语的术语表,可以考虑将该需求表述为: RTOS 应提供允许任务交换数据并协调其执行的机制,例如消息传递和信号通知功能。

针对一组需求的评审检查点

需求评审检查项

标识符

问题

说明

示例

VerReq_2_0

需求的分组和结构是否合理?

合理的需求结构通常按层级组织,并在各层级内根据功能、关键性、父需求的来源等对需求进行分组。

需求分组不当的情况包括位于错误的章节或错误的层级(例如,某项需求定义了内核组件的特定属性,因此应属于软件组件层级,却被放在系统需求中)。章节也可能包含过多内容,需要进一步划分为子章节。

VerReq_2_1

每项需求是否具有外部一致性?

需求之间不得相互冲突或矛盾。

假设有两项需求: 需求 A:RTOS 应最多支持 10 个并发任务。需求 B:RTOS 应为高性能应用支持最多 20 个并发任务。 ——这两项需求显然相互矛盾,但各自的编写者可能都认为自己的需求是正确的。遇到此类需求时,通常需要需求作者之间进行沟通。一种可能的解决方案如下: RTOS 应支持最多 20 个并发任务,标准应用的默认配置为 10 个任务。

VerReq_2_2

每项需求是否都具备适当的可追溯性?

每项需求都需要有明确的来源(来自何处、为何存在等)、相关的验证和/或验收准则,以及下级需求或架构元素。

除最高层级需求外,每项需求都必须关联一项父需求;即使是最高层级需求,也需要在需求的理由说明、备注或注释中加以解释。

VerReq_2_3

该需求是否唯一?

需求不得重复。如果需要在多个位置使用同一项需求来澄清相关内容,应确保其中一处为“主需求”,其他位置仅提供关联信息。

这一点不言自明,必须避免出现两项相同或相似的需求。