Building Usage Contexts During Program Comprehension

Software developers often work on multiple simultaneous projects. Even when only a single project is underway, everyday distractions interrupt the development effort. Consequently, developers spend significant effort pursuing recovery of their context. By context, we focus on the classes and methods within the code that are relevant to a specific bug being fixed or enhancement made. Context is reified by a program in terms of a set of presentations (windows a containing source code, command executions, and data files); however, it is not enough to save the latest context. Even when working on a single task, programmers flip between contexts as they extend their understanding, and when they decide on a change, they may have to visit several contexts in order to address all possible ripple effects. Consequently, we would like to record a history of contexts and be able to retrieve them as demanded by the current task. We introduce a novel technique to obtain a context, consisting of a set of methods relevant for the current task, from a programmer's interactions with an IDE. Using this context, we demonstrate how to improve the ability of a programmer to recover the mental state associated with tasks and to facilitate the exploration of software through recommendation systems

[1]  Mary Jean Harrold,et al.  Empirical evaluation of the tarantula automatic fault-localization technique , 2005, ASE.

[2]  Laszlo A. Belady,et al.  A Study of Replacement Algorithms for Virtual-Storage Computer , 1966, IBM Syst. J..

[3]  Andreas Zeller,et al.  Mining version histories to guide software changes , 2005, Proceedings. 26th International Conference on Software Engineering.

[4]  Tao Luo,et al.  Effective personalization based on association rule discovery from web usage data , 2001, WIDM '01.

[5]  Kristian J. Hammond,et al.  Mining navigation history for recommendation , 2000, IUI '00.

[6]  Janice Singer,et al.  An examination of software engineering work practices , 1997, CASCON.

[7]  Iyad Zayour,et al.  A cognitive and user centric based approach for reverse engineering tool design , 2000, CASCON.

[8]  Mary Czerwinski,et al.  A diary study of task switching and interruptions , 2004, CHI.

[9]  Catherine Plaisant Conference Companion on Human Factors in Computing Systems , 1994 .

[10]  Tomasz Imielinski,et al.  Mining association rules between sets of items in large databases , 1993, SIGMOD Conference.

[11]  Mik Kersten,et al.  Mylar: a degree-of-interest model for IDEs , 2005, AOSD '05.

[12]  Hausi A. Müller,et al.  Cognitive design elements to support the construction of a mental model during software visualization , 1997, Proceedings Fifth International Workshop on Program Comprehension. IWPC'97.

[13]  James D. Hollan,et al.  Edit wear and read wear , 1992, CHI.

[14]  Gerhard Fischer,et al.  Supporting reuse by delivering task-relevant and personalized information , 2002, ICSE '02.

[15]  Mary Czerwinski,et al.  Towards understanding programs through wear-based filtering , 2005, SoftVis '05.

[16]  Susan T. Dumais,et al.  Keeping found things found on the web , 2001, CIKM '01.

[17]  Janice Singer,et al.  NavTracks: supporting navigation in software maintenance , 2005, 21st IEEE International Conference on Software Maintenance (ICSM'05).

[18]  Jacek Gwizdka,et al.  Timely reminders: a case study of temporal guidance in PIM and email tools usage , 2000, CHI Extended Abstracts.

[19]  David M. Frohlich,et al.  Timespace in the workplace: dealing with interruptions , 1995, CHI 95 Conference Companion.