Performance Comparison of Source Code Tools
This table compares common techniques used to disguise copied
source-code. The exercise was performed in Summer 2002, and updated in
2007.
“Yes” in the table indicates that the technique named in
the first column appears to be detected by the relevant tool.
|
JPlag |
Moss |
Sherlock |
Changing identifiers
[e.g. changing names and types of variables, classes, methods, etc?]
|
yes |
yes |
yes |
| Changing the order of operands in expressions |
yes |
yes, provided the program structure is retained |
yes (not stable) |
Changing data types
[real for integer; exploding data structures] |
Java only | no |
Replacing expressions by equivalents
[" while found = false , do ..." for "while not found do .."] |
yes |
yes (not stable) |
yes (not stable) |
Adding redundant statements or variables
[unnecessary initialisations; additional output statements] |
Java only |
no |
yes, if same loop body structure |
Changing the order of independent statements
[rearranging Prolog clauses and reordering independent goals] |
yes, if a few extra lines only |
partially |
yes, if a few extra lines only |
Changing the structure of iteration statements
[using repeat for while , or while for for ] |
no |
Changing the structure of selection statements
[linearising nested ‘if’s; using ‘if’s for case |
no |
| Introducing non-structured statements |
yes, if a few extra lines only |
partially |
yes, if a few extra lines only |
| Combined original and copied program fragments |
yes |