it-swarm-eu.dev

Existují nástroje k určení podobnosti kódu?

Nemluvím o rozdílovém nástroji. Opravdu se dívám, jestli projekt obsahuje kód, který mohl být „refactored“ z jiného projektu. Je pravděpodobné, že se změní názvy funkcí, názvy proměnných a podobně. Podmíněné podmínky mohou být obráceny atd.

37
siljoy

Když jsem učil softwarové inženýrství, použil jsem (bezplatnou) službu na Stanford s názvem MOSS (Měření softwarové podobnosti). To mi umožnilo odhalit plagiátorství mezi studentskými projekty Systém mi také umožnil zadat příklady „známých dobrých“ kódů, které jsem použil při třídě a které byly ignorovány.

Skvělá věc (zcela vedlejší otázka) ohledně výsledků, které se vrátily, bylo to, že jsme mohli říct, kteří studenti pracovali společně - i když tento kód nehorázně nekopírovali, dostatečně diskutovali o problémech, že jejich kód je podobný. Smutnou částí bylo najít lichého studenta s žádnou podobností s jiným kódem. Obvykle to neudělali dobře.

10
Peter K.

Možná budete moci použít nástroj PMD k nalezení toho, co hledáte. Účelem je detekovat vyjmutí a vložení do kódové základny, ale pokud uvedete podezřelý zdroj projektu Origin, může vám pomoci zjistit, kam byl kód zkopírován.

8
busyspin

Nejblíže, co vím, co hledáte, je Clone Detective. Jedná se o plug-in Visual Studio.

Clone Detective je integrace Visual Studio, která vám umožní analyzovat C # projekty na zdrojový kód, který je duplikován někde jinde. Mít duplikáty může snadno vést k nesrovnalostem a často je indikátorem špatně faktorovaného kódu.

5
epotter

Zní to, jako byste chtěli spočítat rozdíl mezi dvěma abstraktními stromy syntaxe (AST), takže by vás mohl zajímat nástroj Smart Differencer .

Nalezeno na https://stackoverflow.com/questions/974855/Eclipse-abstract-syntax-tree-diff .

4
Matthew Rodatus

I když nemluvíte o rozdílovém nástroji, můžete jej použít, alespoň v určitém rozsahu, pro jeden. Pokud například vidím dvě části kódu, které vypadají podobně, často vkládám obě do programu BeyondCompare, abych viděl, kolik práce by bylo zjednodušení tím, že by došlo k reactoring běžné funkce.

Na druhou stranu, pokud nevíte, kde je podobný kód, ale zajímá vás, jestli existuje někde ... co hledáte? Automatizovaný nástroj k detekci plagiátů? Nejsem si jistý, že taková věc existuje.

1
Mason Wheeler

Tento článek o wikipedii na toto téma obsahuje také odkazy na několik nástrojů, které lze použít k nalezení podobného nebo duplikovaného kódu. Máme na to interní nástroj, takže nejsem obeznámen s externími nástroji uvedenými v článku.

1
Alan

Opravdu se mi líbí, jak CCFinderX vizualizuje podobnost, takže možná budete chtít zkontrolovat i tu. Podporuje poměrně málo jazyků, je zdarma a poměrně snadno nastavitelný (Python 2.6).

1
MaR

To, co opravdu chcete udělat, je zjistit, zda je kód klonován (zkopírován) napříč dvěma projekty (oba projekty sestávají z možných velkých souborů souborů). To lze provést spuštěním nástroje pro detekci klonů. Wikipedia uvádí jejich seznam.

Chcete-li se rozhodnout hrubě, je-li kopií mnoho, stačí pouze sladit zdrojové řádky a existuje celá řada přesných detektorů klonování zdrojových řádků. Věřím, že PMD je jedním z nich. Co neudělá, je najít kód, který je upravován kopírováním a vložením; najdou kód nezměněného kódu zkopírování a vložení z kotle, pravděpodobně zabalený kolem upravovaných věcí.

Pokud chcete vidět podrobnosti o kopírování kódu pro kopírování v minulosti, potřebujete detektor klonů, který najde „parametrizované“ klony. Detektory založené na tokenech to provádějí u úprav, které nahrazují pouze názvy proměnných nebo konstanty.

Detektory založené na abstraktní syntaxi (AST) to dělají pro úpravy zahrnující větší kusy, jako jsou výrazy, příkazy, inzerce, delece atd. Tito posledně uvedení mají sklon dávat lepší odpovědi, protože na rozdíl od detektorů tokenů mohou jako vodítko použít jazykovou strukturu zdrojového kódu počítače.

Náš nástroj CloneDR je takový detektor.

Nevím o nástrojích, které ve skutečnosti najdou „ekvivalentní“ kód (obrácené podmínky) atd. Vědci postavili detektory klonů, které něco podobného dělají, ale kombinatorika je velmi nákladná na provádění a výzkumné prototypy se špatně škálovaly.

1
Ira Baxter