Recovering Design Patterns to Support Program Comprehension