On the Comprehension of Program Comprehension

Research in program comprehension has evolved considerably over the past decades. However, only little is known about how developers practice program comprehension in their daily work. This article reports on qualitative and quantitative research to comprehend the strategies, tools, and knowledge used for program comprehension. We observed 28 professional developers, focusing on their comprehension behavior, strategies followed, and tools used. In an online survey with 1,477 respondents, we analyzed the importance of certain types of knowledge for comprehension and where developers typically access and share this knowledge. We found that developers follow pragmatic comprehension strategies depending on context. They try to avoid comprehension whenever possible and often put themselves in the role of users by inspecting graphical interfaces. Participants confirmed that standards, experience, and personal communication facilitate comprehension. The team size, its distribution, and open-source experience influence their knowledge sharing and access behavior. While face-to-face communication is preferred for accessing knowledge, knowledge is frequently shared in informal comments. Our results reveal a gap between research and practice, as we did not observe any use of comprehension tools and developers seem to be unaware of them. Overall, our findings call for reconsidering the research agendas towards context-aware tool support.

[1]  Françoise Détienne,et al.  Software Design — Cognitive Aspects , 2001, Practitioner Series.

[2]  Dimitra Dodou,et al.  Five-Point Likert Items: t test versus Mann-Whitney-Wilcoxon , 2010 .

[3]  Thomas Zimmermann,et al.  Information needs in bug reports: improving cooperation between developers and users , 2010, CSCW '10.

[4]  A. Marie Vans,et al.  Program Comprehension And Enhancement Of Software , 1998 .

[5]  Torgeir Dingsøyr,et al.  Knowledge management in software engineering: A systematic review of studied concepts, findings and research methods used , 2008, Inf. Softw. Technol..

[6]  Volker Wulf,et al.  Sharing Expertise: Beyond Knowledge Management , 2002 .

[7]  Emerson Murphy-Hill,et al.  Improving software developers' fluency by recommending development environment commands , 2012, SIGSOFT FSE.

[8]  Brad A. Myers,et al.  Designing the whyline: a debugging interface for asking questions about program behavior , 2004, CHI.

[9]  Andrew P. Black,et al.  How we refactor, and how we know it , 2009, 2009 IEEE 31st International Conference on Software Engineering.

[10]  Mik Kersten,et al.  How are Java software developers using the Elipse IDE? , 2006, IEEE Software.

[11]  Kate Ehrlich,et al.  Empirical Studies of Programming Knowledge , 1984, IEEE Transactions on Software Engineering.

[12]  Martin P. Robillard,et al.  What Makes APIs Hard to Learn? Answers from Developers , 2009, IEEE Software.

[13]  Premkumar T. Devanbu,et al.  Clones: what is that smell? , 2010, 2010 7th IEEE Working Conference on Mining Software Repositories (MSR 2010).

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

[15]  Robert J. Walker,et al.  Systematizing pragmatic software reuse , 2012, TSEM.

[16]  Andrew Begel,et al.  On the perceived interdependence and information sharing inhibitions of enterprise software engineers , 2012, CSCW.

[17]  Miguel P Caldas,et al.  Research design: qualitative, quantitative, and mixed methods approaches , 2003 .

[18]  Brad A. Myers,et al.  An Exploratory Study of How Developers Seek, Relate, and Collect Relevant Information during Software Maintenance Tasks , 2006, IEEE Transactions on Software Engineering.

[19]  Elliot Soloway,et al.  Mental models and software maintenance , 1986, J. Syst. Softw..

[20]  MaalejWalid,et al.  On the Comprehension of Program Comprehension , 2014 .

[21]  R. Grice Minimalism Beyond the Nurnberg Funnel , 1998 .

[22]  Walid Maalej,et al.  Task-First or Context-First? Tool Integration Revisited , 2009, 2009 IEEE/ACM International Conference on Automated Software Engineering.

[23]  Anneliese Amschler Andrews,et al.  Identification of Dynamic Comprehension Processes During Large Scale Maintenance , 1996, IEEE Trans. Software Eng..

[24]  Thomas D. LaToza,et al.  Maintaining mental models: a study of developer work habits , 2006, ICSE.

[25]  Stas Negara,et al.  Use, disuse, and misuse of automated refactorings , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[26]  Scott R. Klemmer,et al.  Example-centric programming: integrating web search into the development environment , 2010, CHI.

[27]  Thomas Fritz,et al.  Using information fragments to answer the questions developers ask , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[28]  B. Myers Debugging Reinvented: Asking and Answering Why and Why Not Questions about Program Behavior , 2008 .

[29]  Kevin C. Desouza,et al.  Barriers to effective use of knowledge management systems in software engineering , 2003, CACM.

[30]  Rainer Koschke,et al.  How do professional developers comprehend software? , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[31]  Walid Maalej,et al.  Can development work describe itself? , 2010, 2010 7th IEEE Working Conference on Mining Software Repositories (MSR 2010).

[32]  Thomas Fritz,et al.  Collecting and Processing Interaction Data for Recommendation Systems , 2014, Recommendation Systems in Software Engineering.

[33]  K. A. Ericsson,et al.  Protocol Analysis: Verbal Reports as Data , 1984 .

[34]  Martin P. Robillard,et al.  A field study of API learning obstacles , 2011, Empirical Software Engineering.

[35]  Angel Cabrera,et al.  Knowledge-Sharing Dilemmas , 2002 .

[36]  Philip J. Guo,et al.  Two studies of opportunistic programming: interleaving web foraging, learning, and writing code , 2009, CHI.

[37]  James D. Herbsleb,et al.  Program comprehension as fact finding , 2007, ESEC-FSE '07.

[38]  Janice Singer,et al.  How software engineers use documentation: the state of the practice , 2003, IEEE Software.

[39]  B. Adelson,et al.  The Role of Domain Expenence in Software Design , 1985, IEEE Transactions on Software Engineering.

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

[41]  Norman Wilde,et al.  The role of concepts in program comprehension , 2002, Proceedings 10th International Workshop on Program Comprehension.

[42]  Miryung Kim,et al.  An ethnographic study of copy and paste programming practices in OOPL , 2004, Proceedings. 2004 International Symposium on Empirical Software Engineering, 2004. ISESE '04..

[43]  James Fogarty,et al.  Assieme: finding and leveraging implicit references in a web search interface for programmers , 2007, UIST '07.

[44]  Timothy Lethbridge,et al.  The relevance of software documentation, tools and technologies: a survey , 2002, DocEng '02.

[45]  Walid Maalej,et al.  Automatically detecting developer activities and problems in software development work , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[46]  Gail C. Murphy,et al.  Asking and Answering Questions during a Programming Change Task , 2008, IEEE Transactions on Software Engineering.

[47]  Tracy L. Tuten,et al.  Internet Surveys and Data Quality : A Review , 2002 .

[48]  Emerson R. Murphy-Hill,et al.  Peer interaction effectively, yet infrequently, enables programmers to discover new tools , 2011, CSCW.

[49]  Audris Mockus,et al.  An Empirical Study of Speed and Communication in Globally Distributed Software Development , 2003, IEEE Trans. Software Eng..

[50]  Tore Dybå,et al.  Challenges and Recommendations When Increasing the Realism of Controlled Software Engineering Experiments , 2003, ESERNET.

[51]  Ruven E. Brooks,et al.  Towards a Theory of the Comprehension of Computer Programs , 1983, Int. J. Man Mach. Stud..

[52]  Allen E. Milewski,et al.  Guidelines for Effective Bridging in Global Software Engineering , 2008, 2008 IEEE International Conference on Global Software Engineering.

[53]  Heather Kanuka,et al.  E-Research: Methods, Strategies, and Issues , 2003 .

[54]  C MurphyGail,et al.  How Are Java Software Developers Using the Eclipse IDE , 2006 .

[55]  Martin P. Robillard,et al.  How effective developers investigate source code: an exploratory study , 2004, IEEE Transactions on Software Engineering.

[56]  Audris Mockus,et al.  Expertise Browser: a quantitative approach to identifying expertise , 2002, Proceedings of the 24th International Conference on Software Engineering. ICSE 2002.

[57]  Martin P. Robillard,et al.  Creating and evolving developer documentation: understanding the decisions of open source contributors , 2010, FSE '10.

[58]  Brian D. Fisher,et al.  Managing software change tasks: an exploratory study , 2005, 2005 International Symposium on Empirical Software Engineering, 2005..

[59]  Robert DeLine,et al.  Information Needs in Collocated Software Development Teams , 2007, 29th International Conference on Software Engineering (ICSE'07).

[60]  Volker Wulf,et al.  Expert Recommender: Designing for a Network Organization , 2009, Learning in Communities.

[61]  Emerson R. Murphy-Hill The Future of Social Learning in Software Engineering , 2014, Computer.

[62]  Martin P. Robillard,et al.  Patterns of Knowledge in API Reference Documentation , 2013, IEEE Transactions on Software Engineering.

[63]  Robert Rosenthal,et al.  Beginning Behavioral Research: A Conceptual Primer , 1993 .

[64]  James D. Herbsleb,et al.  Communication networks in geographically distributed software development , 2008, CSCW.

[65]  Spencer Rugaber,et al.  Resumption strategies for interrupted programming tasks , 2009, 2009 IEEE 17th International Conference on Program Comprehension.

[66]  Elliot Soloway,et al.  Delocalized Plans and Program Comprehension , 1986, IEEE Software.

[67]  Spencer Rugaber,et al.  Resumption strategies for interrupted programming tasks , 2009, ICPC.