This paper describes three categories of canonical activities that are char
acteristic of reverse engineering for program understanding. The activities
are data gathering, knowledge management, and information exploration. All
tasks carried out by a software engineer during a program understanding ex
ercise can be mapped to a composition of one or more of these canonical act
ivities. The design space formed by the canonical activities can be used to
classify the capabilities provided by individual support mechanisms using
a common vocabulary. A descriptive model that categorizes important support
mechanism features based on a hierarchy of attributes is used to structure
the canonical activities.