Could you please help us to understand the following terms.
- Vertical traceability
- Horizontal traceability
- Bi-Directional traceability
Which of Vertical & Horizontal is mandatory ?
Ah, the 'ol "bi-directional traceability question!" This one is a topic of much discussion at Lead Appraiser geek fests, and most people have there own particular spin on it. Here's mine.
Traceability helps us to understand the relationships between work products, whether they be requirements, code, designs, tests, or others, and helps ensure that those relationships have integrity.
For Requirements, traceability helps us to understand the link between the elicited customer need and the product, sub-product, and test (VER) requirements (often a 1:many relationship). The ability to start "at the top" and trace it all the way to the many test cases, or start at a single test case (or sub product requirement) and trace it "up to the top" is what we call "bi-directional traceability." This is also an example of vertical traceability and is also what is implied by "requirements traceability" in the CMMI.
If you're a software engineer it helps to think of these relationships as an object model. A master object has below it many others that directly support it and inherit its attributes and behaviors, and these can all be traced together as part of the object model taxonomy. The same goes for requirements.
Horizontal traceability is less common (although equally important), and applies to the tracing of functionality across multiple related components, such as interfaces or data access components, and helps to enable more effective integration testing, troubleshooting, and implementation.
Most seem to agree that vertical traceability is what REQM.SP1.4 is all about (in its bi-directional form) and that horizontal traceability, though valuable, is not specifically expected by the CMMI.