An Empirical Investigation of the Key Factors for Refactoring Success in an Industrial Context

Refactoring is an increasingly practiced method in industrial software development. Stated simply, refactoring is an ongoing software improvement process that simplifies the internal structure of existing software, without changing its external behavior. The purpose is to improve the software and facilitate future maintenance and enhancement. Existing studies on refactoring mainly focus on its technical aspects and thus do not consider the team and human factors that influence its success. To identify the major facilitating factors for the success of refactoring, we interviewed 10 industrial software developers, and combined their responses with a study of the existing literature, formulated a model of refactoring success. The resulting conceptual model comprises both technical and non-technical factors. Technical factors include: level, testing and debugging, and tools, while the non-technical factors include: communication and coordination, support activities, individual capability/skills, and programmer participation. We propose to verify this model empirically through a survey of professional software developers (main body of refactoring practitioners). The survey design is provided.

[1]  Patricia J. Guinan,et al.  Enabling Software Development Team Performance During Requirements Definition: A Behavioral Versus Technical Approach , 1998, Inf. Syst. Res..

[2]  Carlos Guedes Soares,et al.  Methods and Tools , 2009 .

[3]  Zhenchang Xing,et al.  Refactoring Practice: How it is and How it Should be Supported - An Eclipse Case Study , 2006, 2006 22nd IEEE International Conference on Software Maintenance.

[4]  Alan W. Brown,et al.  Why evaluating CASE environments is different from evaluating CASE tools , 1994, Proceedings of 3rd Symposium on Assessments of Quality Software Development Tools.

[5]  Holger Keding,et al.  The Developer's Guide to Debugging , 2008 .

[6]  James D. Herbsleb,et al.  Splitting the organization and integrating the code: Conway's law revisited , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[7]  James D. Herbsleb,et al.  Socio-technical congruence: a framework for assessing the impact of technical and work dependencies on software development productivity , 2008, ESEM '08.

[8]  J. Pinto,et al.  Project team communication and cross-functional cooperation in new program development , 1990 .

[9]  Vinod Goel,et al.  The Structure of Design Problem Spaces , 1992, Cogn. Sci..

[10]  Shimon Rura Refactoring Aspect-Oriented Software , 2003 .

[11]  James D. Herbsleb,et al.  Global software development at siemens: experience from nine projects , 2005, ICSE.

[12]  Don Roberts,et al.  Practical analysis for refactoring , 1999 .

[13]  Tom Mens,et al.  A survey of software refactoring , 2004, IEEE Transactions on Software Engineering.

[14]  Victor R. Basili,et al.  Communication and Organization in Software Development: An Empirical Study , 1997, IBM Syst. J..

[15]  Reidar Conradi,et al.  An empirical study on the utility of formal routines to transfer knowledge and experience , 2001, ESEC/FSE-9.

[16]  Boris Beizer,et al.  Software Testing Techniques , 1983 .

[17]  E. Mayo,et al.  The Social Problems of an Industrial Civilization. , 1946 .

[18]  Tore Dybå,et al.  An empirical investigation of the key factors for success in software process improvement , 2005, IEEE Transactions on Software Engineering.

[19]  David Gelperin,et al.  The growth of software testing , 1988, CACM.

[20]  M. Hoegl,et al.  Teamwork Quality and the Success of Innovative Projects , 2001 .

[21]  Raymonde Guindon Designing the design process: exploiting opportunistic thoughts , 1990 .

[22]  David Sands,et al.  Total correctness by local improvement in the transformation of functional programs , 1996, TOPL.

[23]  Jan Wloka,et al.  Tool-Supported Discovery and Refactoring of Structural Weaknesses in Code , 2002 .

[24]  Larry Constantine The Peopleware Papers: Notes on the Human Side of Programming , 2001 .

[25]  James D. Herbsleb,et al.  Team Knowledge and Coordination in Geographically Distributed Software Development , 2007, J. Manag. Inf. Syst..

[26]  Birgit Geppert,et al.  Looking for More Confidence in Refactoring? How to Assess Adequacy of Your Refactoring Tests , 2008, 2008 The Eighth International Conference on Quality Software.

[27]  Gerhard Schmitt,et al.  Classes of design — classes of methods — classes of tools , 1991 .

[28]  David Lorge Parnas A technique for software module specification with examples , 1983, CACM.

[29]  James D. Herbsleb,et al.  Identification of coordination requirements: implications for the Design of collaboration and awareness tools , 2006, CSCW '06.

[30]  Natalia Juristo Juzgado,et al.  Emphasizing human capabilities in software development , 2006, IEEE Software.

[31]  William F. Opdyke,et al.  Refactoring object-oriented frameworks , 1992 .

[32]  Andrew P. Black,et al.  Breaking the barriers to successful refactoring: observations and tools for extract method , 2008, ICSE.

[33]  Tom Mens,et al.  A formal foundation for object-oriented software evolution , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[34]  Robert E. Kraut,et al.  Coordination in software development , 1995, CACM.

[35]  Krishna M. Kavi,et al.  Guest Editors' Introduction: Software Tools Assessment , 1996, IEEE Softw..

[36]  Charles Chowa,et al.  Information System Success: Individual and Organizational Determinants , 2006, Manag. Sci..

[37]  Kent L. Beck,et al.  Extreme programming explained - embrace change , 1990 .

[38]  Jan Wloka,et al.  Tool-supported refactoring of aspect-oriented programs , 2008, AOSD.

[39]  Andrew P. Black,et al.  Refactoring Tools: Fitness for Purpose , 2008, IEEE Software.

[40]  Tore Dybå Improvisation in Small Software Organizations , 2000, IEEE Software.

[41]  T. C. Nicholas Graham,et al.  A study of collaboration in software design , 2003, 2003 International Symposium on Empirical Software Engineering, 2003. ISESE 2003. Proceedings..

[42]  Alan S. Fisher CASE: Using Software Development Tools , 1988 .

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

[44]  Bill Curtis,et al.  A field study of the software design process for large systems , 1988, CACM.

[45]  Steve Counsell,et al.  Refactoring Steps, Java Refactorings and Empirical Evidence , 2008, 2008 32nd Annual IEEE International Computer Software and Applications Conference.