Software archaeology or software archeology is the study of poorly documented or undocumented legacy software implementations, as part of software maintenance.[1][2] Software archaeology, named by analogy with archaeology,[3] includes the reverse engineering of software modules, and the application of a variety of tools and processes for extracting and understanding program structure and recovering design information.[1][4] Software archaeology may reveal dysfunctional team processes which have produced poorly designed or even unused software modules.[5] The term has been in use for decades,[6] and reflects a fairly natural metaphor: a programmer reading legacy code may feel that he or she is in the same situation as an archaeologist exploring the rubble of an ancient civilization.[7]