The program dependence graph and its use in optimization
ACM Transactions on Programming Languages and Systems (TOPLAS)
Interprocedural slicing using dependence graphs
ACM Transactions on Programming Languages and Systems (TOPLAS)
The programmer's apprentice
Refactoring object-oriented frameworks
Refactoring object-oriented frameworks
Portability by automatic translation: a large-scale case study
Artificial Intelligence
CCFinder: a multilinguistic token-based code clone detection system for large scale source code
IEEE Transactions on Software Engineering
Using Slicing to Identify Duplication in Source Code
SAS '01 Proceedings of the 8th International Symposium on Static Analysis
Identifying Similar Code with Program Dependence Graphs
WCRE '01 Proceedings of the Eighth Working Conference on Reverse Engineering (WCRE'01)
Clone Detection Using Abstract Syntax Trees
ICSM '98 Proceedings of the International Conference on Software Maintenance
Winnowing: local algorithms for document fingerprinting
Proceedings of the 2003 ACM SIGMOD international conference on Management of data
ACM Transactions on Software Engineering and Methodology (TOSEM)
Using Origin Analysis to Detect Merging and Splitting of Source Code Entities
IEEE Transactions on Software Engineering
ICPC '06 Proceedings of the 14th IEEE International Conference on Program Comprehension
GPLAG: detection of software plagiarism by program dependence graph analysis
Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining
DECKARD: Scalable and Accurate Tree-Based Detection of Code Clones
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Scalable detection of semantic clones
Proceedings of the 30th international conference on Software engineering
Comparison and evaluation of code clone detection techniques and tools: A qualitative approach
Science of Computer Programming
A formal representation for plans in the programmer's apprentice
IJCAI'81 Proceedings of the 7th international joint conference on Artificial intelligence - Volume 2
Code Clone Detection on Specialized PDGs with Heuristics
CSMR '11 Proceedings of the 2011 15th European Conference on Software Maintenance and Reengineering
Analyzing Refactorings on Software Repositories
SBES '11 Proceedings of the 2011 25th Brazilian Symposium on Software Engineering
Automated detection of refactorings in evolving components
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
Fine slicing: theory and applications for computation extraction
FASE'12 Proceedings of the 15th international conference on Fundamental Approaches to Software Engineering
IEEE Transactions on Software Engineering
Hi-index | 0.00 |
The availability of automated refactoring tools in modern development environments allows programmers to refactor their code with ease. Such tools, however, enable developers to inadvertently create code clones that quickly diverge in form but not in meaning. Furthermore, in the hands of those looking to confuse plagiarism-detection tools, automated refactoring may be abused to avoid discovery of copied code. We present Cider, an algorithm that can detect code clones regardless of various refactorings that may have been applied to some of the copies but not to others. Most significant is the ability to discover interprocedural clones, where parts of one copy have been extracted to separate methods. We evaluated Cider on several open-source Java projects, attempting to detect interprocedural clones between successive versions of each project. Interprocedural clones were detected in all evaluated projects, demonstrating the pervasive nature of the problem. Compared to a manual assessment, Cider performed well in terms of both recall and precision.