-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathSimilarFunction.qhelp
31 lines (26 loc) · 1.49 KB
/
SimilarFunction.qhelp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE qhelp PUBLIC
"-//Semmle//qhelp//EN"
"qhelp.dtd">
<qhelp>
<overview>
<p>If two functions share a lot of code then there is a lot of unnecessary code
duplication. This makes it difficult to make changes in future and makes the code less easy to read.
</p>
</overview>
<recommendation>
<p>While completely duplicated functions are rare, they are usually a sign of a simple oversight.
Usually the required action is to remove all but one of them. A common exception to this rule may
arise from generated code that simply occurs in several places in the source tree; the check can be
adapted to exclude such results.</p>
<p>It is far more common to see duplication of many lines between two functions, leaving just a few
that are actually different. Consider such situations carefully. Are the differences deliberate or a
result of an inconsistent update to one of the clones? If the latter, then treating the functions as
completely duplicate and eliminating one (while preserving any corrections or new features that may
have been introduced) is the best course. If two functions serve genuinely different purposes but
almost all of their lines are the same, then consider extracting the same lines to a separate function.
</p>
</recommendation>
<references>
<li>E. Juergens, F. Deissenboeck, B. Hummel and S. Wagner, <em>Do Code Clones Matter?</em>, 2009. (<a href="https://wwwbroy.in.tum.de/~juergens/publications/ICSE2009_RP_0110_juergens.pdf">available online</a>).</li>
</references>
</qhelp>