Code Clones: Detection and Management

Abstract In a software system, similar or identical fragments of code are known as code clones. Instead of implementing a new code from scratch, most of the developers prefer copy–paste programming in which they use existing code fragments. So, the primary reason behind code cloning isboth developers and programming languages used by them. Reusing existing software for increasing software productivity is a key element of object oriented programming which makes clone detection and management a primary concern for current industry. As a software system grows, it becomes more complex which leads to difficulty in maintaining it. The main reason behind difficulty in software maintenance is code clones which do not lead to conclusion that code clones are only harmful for software development. Code clones can be both advantageous and disastrous for software development. Therefore, clones should be analysed before refactoring or removing them. For analysing the clones properly, there is a need to study all the clone detection techniques, various types of clones and techniques to manage them.The main purpose of this paper is to gain insight in to the research available in the area of clone detection and management and identify the research gaps to work upon. It will help the researchers to get started easily with clones as they can study the basic concepts, techniques, general steps for code clone detection and management and research gaps together at one place. Also, it will help in the selection of appropriate techniques for detecting and managing clones as comparative analysis of different techniques on the basis of various parameters is also given in the paper.

[1]  Chanchal K. Roy,et al.  A Survey on Software Clone Detection Research , 2007 .

[2]  Rainer Koschke,et al.  Clone Detection Using Abstract Syntax Suffix Trees , 2006, 2006 13th Working Conference on Reverse Engineering.

[3]  Jianjun Zhao,et al.  Rule-directed code clone synchronization , 2016, 2016 IEEE 24th International Conference on Program Comprehension (ICPC).

[4]  Martin P. Robillard,et al.  Clone region descriptors: Representing and tracking duplication in source code , 2010, TSEM.

[5]  Shinji Kusumoto,et al.  Incremental Code Clone Detection: A PDG-based Approach , 2011, 2011 18th Working Conference on Reverse Engineering.

[6]  Jeffrey C. Carver,et al.  Cloning: The need to understand developer intent , 2013, 2013 7th International Workshop on Software Clones (IWSC).

[7]  Jeffrey C. Carver,et al.  Effects of cloned code on software maintainability: A replicated developer study , 2013, 2013 20th Working Conference on Reverse Engineering (WCRE).

[8]  Akito Monden,et al.  Software quality analysis by code clones in industrial legacy software , 2002, Proceedings Eighth IEEE Symposium on Software Metrics.

[9]  Brenda S. Baker,et al.  On finding duplication and near-duplication in large software systems , 1995, Proceedings of 2nd Working Conference on Reverse Engineering.

[10]  Susan Horwitz,et al.  Using Slicing to Identify Duplication in Source Code , 2001, SAS.

[11]  Ettore Merlo,et al.  Experiment on the automatic detection of function clones in a software system using metrics , 1996, 1996 Proceedings of International Conference on Software Maintenance.

[12]  Raj Kumar Tekchandani,et al.  An efficient code clone detection model on Java byte code using hybrid approach , 2013 .

[13]  Michael W. Godfrey,et al.  Supporting the analysis of clones in software systems , 2006, J. Softw. Maintenance Res. Pract..

[14]  Michael W. Godfrey,et al.  “Cloning considered harmful” considered harmful: patterns of cloning in software , 2008, Empirical Software Engineering.

[15]  Chanchal Kumar Roy,et al.  Comparison and evaluation of code clone detection techniques and tools: A qualitative approach , 2009, Sci. Comput. Program..

[16]  Maninder Singh,et al.  Software clone detection: A systematic review , 2013, Inf. Softw. Technol..

[17]  Giuliano Antoniol,et al.  Comparison and Evaluation of Clone Detection Tools , 2007, IEEE Transactions on Software Engineering.