I. Introduction
Studies indicate that software maintenance costs can account for up to 90% of the total software lifecycle costs [2], [4]. Some portion of these maintenance costs are the result of using programming practices like code cloning in inappropriate situations. Code cloning is commonly used by programmers to save time and effort over writing new code from scratch [7]. Cloning saves effort by reusing complex frameworks and by replicating design patterns and other high level code structures. Initially, the term code clone had a negative connotation because of the belief that cloned code required additional effort during maintenance (e.g., propagation of defects through cloning code) [8]. More recently, a number of studies indicate that code clones are not harmful to software quality [5], [6], [8], [11]. As this discussion indicates, much of the research about code clones has focused on understanding and evaluating their effects during maintenance. By contrast, little research has focused on understanding developers’ rationale for cloning code during development.