Plagiarism Prevention and Detection

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