.. _safety_requirements: Safety Requirements ################### Introduction ************ The safety committee leads the effort to gather requirements that reflect the **actual** state of the implementation, following the `route 3s `_ approach of the project's safety effort. The goal is **NOT** to create new requirements to request additional features for the project. The requirements are gathered in the separate repository: `Requirement repository `__ Guidelines ********** Below are the guidelines for the requirements repository and the expectations of the safety committee when adding requirements to the repository. Scope ===== The scope of the requirements covers the KERNEL functionalities. Consistency =========== Maintain consistency across all requirements. The language and choice of words shall be consistent. (See: `Syntax`_) Levels of requirements in the repository ======================================== System Requirements System requirements describe the behaviour of the Zephyr RTOS (= the system here). They describe the functionality of the Zephyr RTOS from a very high-level perspective, without going into details of the functionality itself. The purpose of the system requirements is to get an overview of the currently implemented features of the Zephyr RTOS. In other words a person writing these requirements usually has some knowledge of the Zephyr RTOS Project as the requirements are specific to an RTOS. Software Requirements Software requirements refine the system-level requirements at a more granular level so that each requirement can be tested. These requirements define the specific actions the feature shall be able to execute and the behavior of the feature. Requirement UID (Unique identifier) Handling ============================================ The tool used to manage requirements, `strictDoc `_, is responsible for handling the Unique Identifier (UID) associated with each requirement. To manage UIDs, follow these steps: #. Don't add a requirement UID and UID field for new requirements #. After completing work on the new requirements execute: ``strictDoc manage auto-uid .`` #. Establish links between the requirements with the new attributed UIDs if needed After doing this, the requirements are ready and a pull request can be created. The CI in the PR will check if the requirements UIDs are valid or if there are duplicates in it. If there are duplicates in the PR, these need to be resolved by rebasing and re-executing the steps above. Requirement Types ================= * Functional * Non-Functional Requirement title convention ============================ Use short and succinct requirement titles. Pull Request requirement repository =================================== * Adhere to the :ref:`contribute_guidelines` of the Zephyr Project. * As long as they are applicable to the requirements repository. * Avoid creating large commits that contain both trivial and non-trivial changes. * Avoid moving and changing requirements in the same commit. Characteristics of a good requirement ===================================== * Unambiguous * Verifiable (e.g. testable for functional requirements) * Clear (concise, succinct, simple, precise) * Correct * Understandable * Feasible (realistic, possible) * Independent * Atomic * Necessary * Implementation-free (abstract) Characteristics of a set of requirements ======================================== * Complete * Consistent * Non redundant Syntax ====== * Use of a recognized Requirements Syntax is recommended. * `EARS `_ is a good reference. Particularly if you are unfamiliar with requirements writing. * Other formats are accepted as long as the characteristics of a requirement from above are met.