Content area
Programmers spend more than half of their time comprehending code, and in particular struggle to answer questions about the rationale, intent, and history behind software artifacts. Through this dissertation, I explore how history-aware tools can help programmers understand unfamiliar software artifacts. First, I investigated how providing additional context -- historical code changes grouped by the original developer's stated subgoals and the web foraging activity of the original developer impacted the process of code reuse. I found that programmers utilized these resources to 1) make better analogies between their reuse scenario and what code was already written, and 2) anchor into the code base, but that separating history from the IDE introduced extraneous load. I then show that presenting this additional contextual information to programmers in the form of a narrative story improved their recollection of the information. Finally, I investigated how programmers actually utilized web foraging activity, historical subgoals, and narrative summaries of this information directly embedded into their IDE during various software evolution tasks. I show that programmers turn to narrative stories when answering questions about the temporal relationships between history items, prefer subgoal labels to quickly map high level intentions to code, and use web documentation to understand the rationale of the original developer.