Refactoring planning and practice in agile software development: an empirical study

Agile software engineering increasingly seeks to incorporate design modification and continuous refactoring in order to maintain code quality even in highly dynamic environments. However, there does not currently appear to be an industry-wide consensus on how to do this and research in this area expresses conflicting opinions. This paper presents an empirical study based upon an industry survey aimed at understanding the different ways that refactoring is thought of by the different people carrying out different roles in agile processes and how these different people weigh the importance of refactoring versus other kinds of tasks in the process. The study found good support for the importance of refactoring, but most respondents agreed that deferred refactoring impacts the agility of their process. Thus there was no universally agreed-upon strategy for planning refactoring. The survey findings also indicated that different roles have different perspectives on the different kinds of tasks in an agile process although all seem to want to increase the priority given to refactoring during planning for the iterations in agile development. Analysis of the survey raised many interesting questions suggesting the need for a considerable amount of future research.

[1]  Tore Dybå,et al.  Empirical studies of agile software development: A systematic review , 2008, Inf. Softw. Technol..

[2]  Robert L. Nord,et al.  A study of enabling factors for rapid fielding combined practices to balance speed and stability , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[3]  Witold Pedrycz,et al.  A Case Study on the Impact of Refactoring on Quality and Productivity in an Agile Team , 2008, CEE-SET.

[4]  Mohammad Alshayeb,et al.  An empirical study of system design instability metric and design evolution in an agile software process , 2005, J. Syst. Softw..

[5]  Kent Beck,et al.  Extreme Programming Explained: Embrace Change (2nd Edition) , 2004 .

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

[7]  Ken Schwaber,et al.  Agile Software Development with SCRUM , 2001 .

[8]  A. Ananda Rao,et al.  Dependency oriented complexity metrics to detect rippling related design defects , 2009, SOEN.

[9]  John T. Stasko,et al.  Visualization of test information to assist fault localization , 2002, ICSE '02.

[10]  Dirk Muthig,et al.  Refactoring a legacy component for reuse in a software product line: a case study , 2006, J. Softw. Maintenance Res. Pract..

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

[12]  Takeo Imai,et al.  A quantitative evaluation of maintainability enhancement by refactoring , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[13]  S. Nidhra,et al.  Implementing the concept of refactoring in software development , 2012, 2012 CSI Sixth International Conference on Software Engineering (CONSEG).

[14]  Miryung Kim,et al.  An empirical investigation into the impact of refactoring on regression testing , 2012, 2012 28th IEEE International Conference on Software Maintenance (ICSM).

[15]  Harald C. Gall,et al.  On the relation of refactorings and software defect prediction , 2008, MSR '08.

[16]  Stas Negara,et al.  Using Continuous Code Change Analysis to Understand the Practice of Refactoring , 2012 .

[17]  Eleni Stroulia,et al.  Understanding the Economics of Refactoring , 2003 .

[18]  Kieran Conboy,et al.  Obstacles to decision making in Agile software development teams , 2012, J. Syst. Softw..

[19]  Claus Lewerentz,et al.  Metrics Based Refactoring , 2001, CSMR.

[20]  Sophia Kluge,et al.  The Survey Handbook , 2016 .

[21]  Alberto Sillitti,et al.  Does Refactoring Improve Reusability? , 2006, ICSR.

[22]  Ralph E. Johnson,et al.  The role of refactorings in API evolution , 2005, 21st IEEE International Conference on Software Maintenance (ICSM'05).

[23]  Mariela Inés Cortés,et al.  A Multiobjective Optimization Approach to the Software Release Planning with Undefined Number of Releases and Interdependent Requirements , 2011, ICEIS.

[24]  Mark Harman,et al.  Pareto optimal search based refactoring at the design level , 2007, GECCO '07.

[25]  Sarfraz Khurshid,et al.  Localizing failure-inducing program edits based on spectrum information , 2011, 2011 27th IEEE International Conference on Software Maintenance (ICSM).

[26]  Amr Elssamadisy,et al.  Recognizing and responding to "bad smells" in extreme programming , 2002, ICSE '02.

[27]  Günther Ruhe,et al.  A hybrid release planning method and its empirical justification , 2012, Proceedings of the 2012 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement.

[28]  Robert L. Nord,et al.  Architectural Tactics to Support Rapid and Agile Stability , 2012 .

[29]  Dirk Muthig,et al.  Refactoring a legacy component for reuse in a software product line: a case study: Practice Articles , 2006 .

[30]  Radu Marinescu,et al.  Measurement and Quality in Object-Oriented Design , 2005, ICSM.

[31]  Miryung Kim,et al.  A field study of refactoring challenges and benefits , 2012, SIGSOFT FSE.

[32]  Andrew Begel,et al.  Usage and Perceptions of Agile Software Development in an Industrial Context: An Exploratory Study , 2007, First International Symposium on Empirical Software Engineering and Measurement (ESEM 2007).

[33]  Eleni Stroulia,et al.  UMLDiff: an algorithm for object-oriented design differencing , 2005, ASE.