Vergelijkbare codedetector

Vergelijkbare codedetector


Ik ben op zoek naar een tool die broncodes kan vergelijken op gelijkenis.


We hebben op dit moment een heel triviaal systeem met een enorme hoeveelheid valse positieven en de echte positieven kunnen er gemakkelijk in worden begraven.


Mijn vereisten zijn:



  • redelijk kleine hoeveelheid valse positieven

  • goede detectiegraad (ja, deze gaan tegen elkaar in)

  • idealiter met een complexere uitvoer dan slechts een enkele waarde

  • bruikbaar voor C (C99) en C++ (C++03 en optimaal C++11)

  • nog steeds onderhouden

  • bruikbaar om twee bronbestanden met elkaar te vergelijken

  • bruikbaar in niet-interactieve modus


BEWERKEN:


Om verwarring te voorkomen, zijn de volgende twee codefragmenten identiek en moeten ze als zodanig worden gedetecteerd:


for (int i = 0; i < 10; i++) { bla; }


int i; while (i < 10) { bla; i++; }


Hier hetzelfde:


int x = 10; y = x + 5;


int a = 10; y = a + 5;


Antwoorden:


Ik heb in het verleden MOSS gebruikt:http://theory.stanford.edu/~aiken/moss/ om geplagieerde code te detecteren. Omdat het op een semantisch niveau werkt, zal het de situaties detecteren die u hierboven hebt gepresenteerd. De tool is taalbewust, dus opmerkingen worden niet in aanmerking genomen in de analyse, en het gaat een lange weg in het detecteren van code die is gewijzigd door eenvoudig zoeken en vervangen van variabele- en/of functienamen.


Opmerking:ik heb de tool een paar jaar geleden gebruikt toen ik informatica doceerde op de middelbare school, en het werkte uitstekend bij het detecteren van code die van internet was geplukt. Hier is een goed gedocumenteerd verslag van een soortgelijke toepassing:http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf


Als u googled op "software-overeenkomst meten", zou u nog een paar nuttige hits moeten vinden:
http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html