Design pattern recovery in object-oriented software
design patterns : elements of reusable object - oriented software .