Experimental Validation of OO Design Patterns
Projects of the Experimental Software Engineering Group at the University of Maryland

Experimental Validation of

OO Design Patterns


The first step is to "reverse engineer" existing OO designs to see if structures analogous to proposed OODPs can be found. Patterns found within existing designs where the defect rates of the classes is known will be statistically analyzed in order to see if the defect rates in the corresponding classes were significantly different from error rates in classes designed according to no pattern. In addition we will use the statistical analysis to determine which are the most error-prone of the patterns we uncover.

If the analysis from the first step does in fact find that, in reinventing the proposed patterns on their own, system designers introduced extra errors into the system, then it may be the case that the design of such systems could be improved if a library of error-free patterns was provided. In this case, this experiment should be replicated with such an error-free library provided in order to be able to compare OO components developed from scratch with OO components developed from the library, to test for differences in error-proneness and implementation effort between the two categories.

Validation Strategy

We developed an inductive method, which we call BACKDOOR (Backwards Architecting Concerned with Knowledge Discovery of OO Relationships) aimed at helping us reverse architect OODPs from existing OO software systems and package them into reusable design solutions. Such a method will allow us to:
  • capture the experience of designers, by noting patterns which consistently appear in their work;
  • package useful patterns so that designers can tailor them to their own designs;
  • collect metrics on the OODPs in order to validate the usefulness of these patterns in terms of defect-proneness, rework effort, reusability, and other attributes;
  • refine the pattern discovery process by using these patterns to hone the search mechanism.
The method encompasses a procedure defined in order to be repeatable and usable by people who are not acquainted with reverse architecting processes.

Project Status


The first phase, reverse engineering OODPs from existing programs, has been completed. We describe a method, called BACKDOOR, which we developed to facilitate the reverse engineering process. We validated the usefulness of our method by applying it to C++ programs developed for a university course.

Now that a pool of design patterns has been found, it remains to associate the component classes with metrics in order to characterize the patterns and the programs in which they are found.


We described an inductive method making it possible to characterize OO systems with respect to their use of OODPs. The method was validated using a suite of OO projects developed in a controlled study performed at the University of Maryland in an upper-level class. Although it was shown that we may not yet be packaging patterns at the right level of generality, we have shown that our method is useful for finding implicit design patterns in system architectures. We have also shown that our method can provide an initial pattern base which can be expanded on further iterations of the pattern discovery process.

The results so far from this work seem to indicate that the creation of an OODP library would be a worthwhile endeavor; practitioners are using patterns in practice, but in general not using very sophisticated implementations. By associating metric values with the patterns in our knowledge base in the next step, we will be able to get a much clearer insight into the potential for a library. In particular, if system designers introduce extra errors into the system by reinventing these patterns from scratch, then system design could clearly be improved if a library of tailorable, error-free patterns was provided.

Top Level Page

<-Back to ESEG Home Page
Last updated: January 27, 1997 by Forrest Shull