Program understanding is an essential part of all software maintenance and
enhancement activities. As currently practiced, program understanding consi
sts mainly of code reading. The few automated understanding tools that are
actually used in industry provide helpful but relatively shallow informatio
n, such as the line numbers on which variable names occur or the calling st
ructure possible among system components. These tools rely on analyses driv
en by the nature of the programming language used. As such, they are adequa
te to answer questions concerning implementation details, so called what qu
estions. They are severely limited, however, when trying to relate a system
to its purpose or requirements, the why questions. Application programs so
lve real-world problems. The part of the world with which a particular appl
ication is concerned is that application's domain. A model of an applicatio
n's domain can serve as a supplement to programming-language-based analysis
methods and tools. A domain model carries knowledge of domain boundaries,
terminology, and possible architectures. This knowledge can help an analyst
set expectations for program content. Moreover, a domain model can provide
information on how domain concepts are related. This article discusses the
role of domain knowledge in program understanding. It presents a method by
which domain models, together with the results of programming-language-bas
ed analyses, can be used to answers both what and why questions. Representi
ng the results of domain-based program understanding is also important, and
a variety of representation techniques are discussed. Although domain-base
d understanding can be performed manually, automated tool support can guide
discovery, reduce effort, improve consistency, and provide a repository of
knowledge useful for downstream activities such as documentation, reengine
ering, and reuse. A tools framework for domain-based program understanding,
a dowser, is presented in which a variety of tools work together to make u
se of domain information to facilitate understanding. Experience with domai
n-based program understanding methods and tools is presented in the form of
a collection of case studies. After the case studies are described, our wo
rk on domain-based program understanding is compared with that of other res
earchers working in this area. The paper concludes with a discussion of the
issues raised by domain-based understanding and directions for future work
.