Differences Between a Static and a Dynamic Test-to-Code
Traceability Recovery Method
Tamás Gergely, Gergő Balogh, Ferenc Horváth, Béla Vancsics,
Árpád Beszédes and Tibor Gyimóthy
Recovering test-to-code traceability links may be
required in virtually every phase of development. This task might
seem simple for unit tests thanks to two fundamental unit testing
guidelines: isolation (unit tests should exercise only a single
unit) and separation (they should be placed next to this unit).
However, practice shows that recovery may be challenging because
the guidelines typically cannot be fully followed. Furthermore,
previous works have already demonstrated that fully automatic
test-to-code traceability recovery for unit tests is virtually
impossible in a general case.
In this work, we propose a semi-automatic method for this task,
which is based on computing traceability links using static and
dynamic approaches, comparing their results and presenting the
discrepancies to the user, who will determine the final
traceability links based on the differences and contextual
information. We define a set of discrepancy patterns, which can
help the user in this task. Additional outcomes of analyzing the
discrepancies are structural unit testing issues and related
refactoring suggestions. For the static test-to-code traceability,
we rely on the physical code structure, while for the dynamic, we
use code coverage information. In both cases, we compute combined
test and code clusters which represent sets of mutually traceable
elements. We also present an empirical study of the method
involving 8 non-trivial open source Java systems.
traceability, Traceability link recovery, Unit testing, Code
coverage, Structural test smells, Refactoring.