The UVicReverseEngineeringTutorial defines *program understanding* as * _The task of building mental models of the underlying software at various abstraction levels, ranging from models of the code itself to ones of the underlying application domain, for SoftwareMaintenance, SoftwareEvolution, and ReEngineering purposes._ Synonym: ProgramComprehension Program understanding is a central activity during SoftwareMaintenance: T. A. Corbi reports that up to 50% of the maintenance effort is spent on trying to understand code (IBM Systems Journal 28(2):294-306, 1989, _Program Understanding: Challenge for the 1990s_) Relevant topics: * Plan recognition * CognitiveModels * DocumentationGeneration * SoftwareVisualization ---- A general survey on program comprehension is given by SpencerRugaber: * _Program Comprehension_. In the Encyclopedia of Computer Science and Technology, 35(20), Marcel Dekker, Inc:New York, 341-368,1995. http://citeseer.nj.nec.com/rugaber95program.html SpencerRugaber defines program comprehension as the process of acquiring knowledge about a computer program. The survey covers cognitive processes, techniques for automated program understanding such as dataflow and control flow analysis, program comprehension tools, example applications, and resources. ---- Resources include * The international workshop on program comprehension IWPC. * The UnderstandingProgramUnderstanding repository * The CodeReadingAndProgramComprehensionBibliography * The OOPSLA 2001 SoftwareArcheologyWorkshop ---- The relationship between SoftwareProcess and ProgramUnderstanding is explored in ProgramComprehensionRisksAndOpportunitiesInXP -- ArieVanDeursen, Oct 2001. ---- An up to date account of program comprehenion theories can be found in AndrewWalenstein's PhD thesis, which contains over 750 references, and explores the relationship between program comprehension and software engineering tools. See http://www.cacs.louisiana.edu/~walenste/thesis.html -- ArieVanDeursen, Jan 2003, updated May 2004 by AndrewWalenstein ---- CategoryProgramUnderstanding | CategoryReengineeringWiki | Contributions by ArieVanDeursen