Traceability within software development is the ability to establish and maintain the relationships between artefacts of various development phases, such as determining for a component of a software architecture from which requirement(s) it originates. While this information is essential for determining the impact of changing requirements on the actual system, it is also a vital part of the certification processes that safety-critical systems must undergo to ensure that no malfunction will lead to catastrophic consequences or endanger human lives.
Maintaining accurate tracing information between complex systems and their requirements is currently a major problem. Traceability needs to be updated for every change that occurs in either the requirement or the architecture of the system or both. Under ideal circumstances, a requirement specification, which consists of a set of individual requirements can be completely traced forward and backwards to elements of a software architecture that fulfills them (figure a), 1). Each requirement is linked to a set of associated architectural elements involved in implementing the requirement, and conversely, each architectural element is linked to a set of associated requirements from which it originated. However, over time often architectures evolve (2) to meet new requirements or to improve their quality attributes such as maintainability, performance, resilience, etc. For example, component interfaces may be relocated to ease access, or components may be split or restructured to improve adaptability and evolvability. While these changes do not (or at least should not) affect the functional behaviour, the trace information between requirements and architecture elements can be damaged (3, red dashed arrows) and it may no longer be possible to determine for each architecture element to which requirement(s) it belongs, and for requirements by which architecture elements they are realised.