There is more to software development than requirements and code. Developers routinely capture use cases and scenarios to describe workflows. Structural models (architectures, class diagrams) help developers break down complex tasks/systems in smaller, more manageable parts. State machines in turn describe the essential system behaviour. Today, developers use many models to help describe a software system and curb its complexity. The use of such models, however, also has a severe downside. Their very benefit, the separation of concerns, is also the foundation to their very problem. At the end, the separate models should make up a coherent software system. This is where traceability comes in. Traceabiliy describes how artifacts in different models are connected. Such traces are essential for software understanding, change management, error detection, and any forms of analysis. The lack thereof is recognized as a problem.
This project developed a novel approach for capturing and validating traceability that addressed several shortcomings in current state of the art. First, traces are known to be error prone and this work was able to 1) recommend corrections to incorrect trace input or, when this was not possible, to 2) isolate incorrect trace input from the reasoning process. Second, traces are often not understood completely and this work was able to recommend missing traceability. Third, traceability is often ambiguous because developers often capture traceability at a later time. By then key people may have moved on or their recollection of facts may be blurred or inconsistent. Here, our work was able to provide a language for capturing traceability that allows for uncertainty and incompleteness in traceability while still able to reason correctly about their logical consequences. As an added bonus, this project also performed a study that investigated the usefulness of traceability. It should be noted that despite the growing popularity of traces and there apparent benefits, there exists no published evaluation about the usefulness of requirements traceability. Do the benefits of traceability justify their cost? After all, trace capture and maintenance is not free. Our study focused on real maintenance tasks across two projects and 71 developers. The result showed that subjects with traceability performed on average 24% faster on a given task and created on average 50% more correct solutions -- suggesting that traceability not only saves effort but can profoundly improve software maintenance quality.