JUCS - Journal of Universal Computer Science 4(12): 866-882, doi: 10.3217/jucs-004-12-0866
Functionality versus Practicality: Employing Existing Tools for Recovering Structural Design Patterns
expand article infoLutz Prechelt, Christian Krämer§
‡ Universitaet Karlsruhe, Karlsruhe, Germany§ Kanthor AG, Karlsruhe, Germany
Open Access
Abstract
The object-oriented design community has recently begun to collect so-called software design patterns: descriptions of proven solutions common software design problems, packaged in a description that includes a problem, a context, a solution, and its properties. Design pattern information can improve the maintainability of software, but is often absent in program documentation. We present a system called Pat for localizing instances of structural design patterns in existing C ++ software. It relies extensively on a commercial CASE tool and a PROLOG interpreter, resulting in a simple and robust architecture that cannot solve the problem completely, but is industrial-strength, it avoids much of the brittleness that many reverse engineering tools exhibit when applied to realistic software. The contribution of our work is not so much in the engineering value represented by this concrete system, but in its methodological approach. To evaluate Pat, we quantify its performance in terms of precision and recall. We examine four applications, including the popular class libraries zApp and LEDA. Within Pat s restrictions all pattern instances are found, the precision is about 40 percent, and manual filtering of the false positives is relatively easy. Therefore, we consider Pat a good compromise: modest functionality, but high practical stability for recovering design information.
Keywords
design patterns, design templates, reverse engineering, search