How effective developers investigate source code: an exploratory study

Prior to performing a software change task, developers must discover and understand the subset of the system relevant to the task. Since the behavior exhibited by individual developers when investigating a software system is influenced by intuition, experience, and skill, there is often significant variability in developer effectiveness. To understand the factors that contribute to effective program investigation behavior, we conducted a study of five developers performing a change task on a medium-size open source system. We isolated the factors related to effective program investigation behavior by performing a detailed qualitative analysis of the program investigation behavior of successful and unsuccessful developers. We report on these factors as a set of detailed observations, such as evidence of the phenomenon of inattention blindness by developers skimming source code. In general, our results support the intuitive notion that a methodical and structured approach to program investigation is the most effective.

[1]  E. E. Grant,et al.  Exploratory experimental studies comparing online and offline programming performance , 1968, CACM.

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

[3]  Susan Wiedenbeck,et al.  An exploratory study of program comprehension strategies of procedural and object-oriented programmers , 2001, Int. J. Hum. Comput. Stud..

[4]  Laura Marie Leventhal,et al.  Longitudinal Studies of the Relation of Programmer Expertise and Role-expressiveness to Program Comprehension , 1994 .

[5]  Als-Nscort Eclipse Platform Technical Overview , 2003 .

[6]  Adele Goldberg,et al.  Smalltalk-80 - the interactive programming environment , 1984 .

[7]  Audris Mockus,et al.  Does Code Decay? Assessing the Evidence from Change Management Data , 2001, IEEE Trans. Software Eng..

[8]  Elliot Soloway,et al.  Designing documentation to compensate for delocalized plans , 1988, CACM.

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

[10]  Shari Lawrence Pfleeger Experimental Design and Analysis in Software Engineering: Types of Experimental Design , 1995, SOEN.

[11]  Shari Lawrence Pfleeger Experimental Design and Analysis in Software Engineering Part 3 : Types of Experimental Design , 2002 .

[12]  David F. Redmiles,et al.  Reducing the variability of programmers' performance through explained examples , 1993, INTERCHI.

[13]  Jean Scholtz,et al.  Characteristics of the Mental Representations of Novice and Expert Programmers: An Empirical Study , 1993, Int. J. Man Mach. Stud..

[14]  Magne Jørgensen,et al.  Can you Trust a Single Data Source Exploratory Software Engineering Case Study? , 2002, Empirical Software Engineering.

[15]  Tom DeMarco,et al.  Programmer performance and the effects of the workplace , 1985, ICSE '85.

[16]  Carolyn B. Seaman,et al.  Qualitative Methods in Empirical Studies of Software Engineering , 1999, IEEE Trans. Software Eng..

[17]  Susan Wiedenbeck,et al.  Novice comprehension of programs using task-specific and non-task-specific constructs , 2002, Proceedings IEEE 2002 Symposia on Human Centric Computing Languages and Environments.

[18]  WiedenbeckSusan,et al.  Characteristics of the mental representations of novice and expert programmers , 1993 .

[19]  C. V. Ramamoorthy,et al.  The C Information Abstraction System , 1990, IEEE Trans. Software Eng..

[20]  Meir M. Lehman,et al.  Program evolution: processes of software change , 1985 .

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

[22]  Steven P. Reiss,et al.  Support for Maintaining Object-Oriented Programs , 1992, IEEE Trans. Software Eng..

[23]  Thomas G. Moher,et al.  Some strategies of reuse in an object-oriented programming environment , 1989, CHI '89.

[24]  Anneliese Amschler Andrews,et al.  Program understanding behavior during corrective maintenance of large-scale software , 1999, Int. J. Hum. Comput. Stud..

[25]  Shari Lawrence Pfleeger Experimental design and analysis in software engineering, part 5: analyzing the data , 1995, SOEN.

[26]  Susan Wiedenbeck,et al.  Navigation and comprehension of programs by novice programmers , 2001, Proceedings 9th International Workshop on Program Comprehension. IWPC 2001.

[27]  Claes Wohlin,et al.  Experimentation in Software Engineering , 2000, The Kluwer International Series in Software Engineering.

[28]  Adele E. Howe,et al.  Program understanding behaviour during enhancement of large-scale software , 1997, J. Softw. Maintenance Res. Pract..

[29]  B. Curtis,et al.  Substantiating programmer variability , 1981, Proceedings of the IEEE.

[30]  David Lorge Parnas,et al.  Software aging , 1994, Proceedings of 16th International Conference on Software Engineering.

[31]  Jean Hartley,et al.  Case study research , 2004 .

[32]  Susan Wiedenbeck,et al.  Mental representations of expert procedural and object-oriented programmers in a software maintenance task , 1999, Int. J. Hum. Comput. Stud..

[33]  Daniel C. Halbert,et al.  The Trellis programming environment , 1987, OOPSLA '87.

[34]  Larry Masinter,et al.  The Interlisp Programming Environment , 1981, Computer.

[35]  Susan Wiedenbeck,et al.  Direction and scope of comprehension-related activities by procedural and object-oriented programmers: an empirical study , 2000, Proceedings IWPC 2000. 8th International Workshop on Program Comprehension.