When designing a new application, experienced software engineers usually ad
opt solutions that have proven successful in previous projects. Such reuse
of code organizations is seldom made explicit. Nevertheless, it represents
important information, which can be extremely valuable in the maintenance p
hase by documenting the design choices underlying the implementation. In ad
dition it can be reused whenever a similar problem is encountered. In this
paper an approach for the inference of recurrent design patterns directly f
rom the code is proposed. No assumption is made on the availability of any
pattern library, and the concept analysis algorithm-adapted for this purpos
e-is able to infer the presence of class groups which instantiate a common,
repeated pattern. In fact, concept analysis provides sets of objects shari
ng attributes, which-in the case of object-oriented design patterns-become
class members or inter-class relations. The approach was applied to three C
++ applications for which the structural relations among classes led to the
extraction of a set of design patterns, which could be enriched with non-s
tructural information about class members and method invocations. The resul
ting patterns could be interpreted as meaningful organizations aimed at sol
ving general problems which have several instances in the applications anal
yzed. Copyright (C) 2001 John Wiley & Sons, Ltd.