QP/C  7.4.0-rc.2
Real-Time Embedded Framework
No Matches

Purpose and Scope

Traceability is the cornerstone of the Functional Safety Management. It enables product teams to associate every work artifact (e.g., a specific requirement) with all the related project artifacts, both backward and forward. Traceability enables everyone to see how every work artifact relates to the requirement — and vice versa — at any point during development. This ability fosters team collaboration and enables early detection of possible production risks.

Unique Identifiers (UIDs)

Traceability is enabled by the consistent use of Unique Identifiers (UIDs), which are short text labels associated with all work artifact, such as requirements, architecture elements, design elements, coding standard deviations, tests, etc.

The most important feature of UIDs is their uniqueness within the whole system under consideration. To avoid name conflicts, it is advantageous to establish general rules for constructing the UIDs. Throughout QP/C documentation, the UIDs have the general structure consisting of fields separated by dashes:

 +---------------- [1] Work artifact class (e.g., 'SRS' for Software Requirement Specification)
 |  +------------- [2] Project identifier ('QP' for QP Framework or 'QA' for QP Application)
 |  |  +---------- [3] Work artifact ID
 |  |  |  +------- [4] Work artifact number
 |  |  |  |   +--- [5] Optional variant letter ('A', 'B', 'C'...)
 |  |  |  |   |+-- [6] Optional version number (1, 2, 3...)
 |  |  |  |   ||


  • SRS-QP-AO_30 - requirement for the QP Framework, group AO, number 30 within the group

The various fields in the UID are as follows:

[1] the UID starts with a fields corresponding to the class of the work artifact:

  • SRS Software Requirement Specification
  • SSR Software Safety Requirement
  • SAS Software Architecture Specification
  • SDS Software Design Specification
  • SHR Software Hazard and Risk artifact
  • DVR Deviation Record (e.g. coding standard violation)
  • DVP Deviation Permit (e.g. coding standard violation)
  • TUN Test (unit)
  • TIN Test (integration)

[2] the Project Unique Identifier (PUI), which is QP for the QP Framework and QA for QP Application. The PUI should be unique enough to avoid name conflicts with other software components in a larger system

[3] "Artifact ID" field identifies the artifact within the "work artifact class" [1]. This is the most flexible part in the UID to accommodate other existing conventions, such as MISRA deviations, the work artifact ID field should be easily identifiable with the MISRA Rule/Directive ID, such as D04_01 for "Directive 4.1", or R10_04 for "Rule 10.4". Still, please note that the more structured UID convention of using two-digits for feature groups (e.g., D04_10 instead of D4_10) provide additional benefits, such as correct order under a simple alphabetical sort. This property is missing in the original MISRA IDs (e.g., a simple alphabetical sort will place Rule 10.8 before Rule 8.10).

[4] optionally, the UID might contain a variant letter ('A', 'B', 'C',...)

[5] optionally, the UID might end with a single-digit version number (0..9).

The structure of UIDs is flexible to accommodate various existing naming conventions. But for compatibility with the widest possible range of cross-referencing systems and tools, the UIDs are restricted to contain only upper-case letters (A..Z), numbers (0..9), dashes ('-'), and underscores ('_'). Among others, UIDs cannot contain spaces, punctuation, parentheses, or any special characters.

Backward Traceability

Backward traceability begins at a specific work artifact and links it to the original artifact. For example, architecture element can be linked with an original requirement. Backward traceability gives visibility into why specific artifacts were created and how different pieces of a system fit together. Tracing in this way also allows testers to find gaps or missing work artifacts.

Backward traceability is the most efficient way of specifying hierarchical relationships, such as superclass-subclass in OOP. Class inheritance is universally represented in the subclasses, which store their superclass (backward traceability). In contrast, superclasses don't show their subclasses (forward traceability). The QP/C documentation applies this approach to all work artifacts, starting with the requirements at the top, through architecture, design, source code, tests, etc.

As illustrated in the diagram below, backward traceability is provided explicitly in the QP/C documentation and QP/C source code. Specifically, the downstream work artifacts provide trace information to the related upstream artifact by means of Unique Identifier (UIDs).

Schematic View of Backward Traceability in the QP/C documentation
The QP/C documentation traceability system includes the source code. This is achieved by placing special traceability links, such as @ref SRS-QP-EVT_23 or @ref DVR-QP-R04_11, inside the doxygen documentation for the source code.

Forward Traceability

Forward traceability begins at the original artifact and links it with all the resulting forward work items. For example, a requirement can be linked with source code elements that implement that requirement. This type of trace ensures that each original artifact (e.g., requirement) is not only satisfied but verified and validated.

forward traceability allows the teams to perform impact analysis to identify the potential consequences of a change of a given artifact.

In the QP/C documentation the forward traceability can be achieved quite simply by automatically searching the project for the UID of the specific work artifact. For example, the following grep command shows the forward traceability for the requirement SRS-QP-EVT_21.

C:\qp-dev\qpc>grep -r -n @tr{SRS-QP-SM_00} ../fsm-qp . --exclude=3rd_party
./include/qep.h:344:* @tr{SRS-QP-SM_00}, @tr{SRS-QP-SM_10}
./include/qep.h:472:* @tr{SRS-QP-SM_00}, @tr{SRS-QP-SM_10}

Bidirectional Traceability

Bidirectional traceability is the ability to perform both forward and backward traceability. Bidirectional traceability is the optimal type of traceability because it gives teams full visibility from requirements through architecture, design, source code, tests, and back again. The system implemented in the QP/C documentation provides such bidirectional traceability.

The whole system of traceability offered in QP is extensible and it is highly recommended that the QP Applications adopt it as well.

Purpose and Scope