We detect interaction patterns in legacy code combining static
and dynamic analyses. The analyses do not depend on coding or
naming conventions. We classified potential pattern instances
according to the evidence our analyses provide.
We discuss our approach with the Observer Pattern as an example.
Our Java implementation analyzes Java programs.
We evaluated our approach by self applying the tool looking for
Observers in its code. In general, our tool detects all
Observer Pattern instances actually contained in the code as
candidates, i.e., we do not miss a single pattern instance. In
the example, the candidates our tool considers Observers with
high evidence include 80% of the actual Observer Pattern
instances and no false positives.