Doppelgänger
Eina interactiva de detecció de clons de codi per identificar i eliminar codi Java duplicat.
Què és?
Doppelgänger és una aplicació interactiva que vaig crear per identificar i ajudar a eliminar codi duplicat en aplicacions Java. Combina l’anàlisi AST (Arbre de Sintaxi Abstracta) del backend amb eines d’exploració visual per fer la detecció de clons de codi tant exhaustiva com accionable.
L’eina analitza tant projectes locals com els allotjats en repositoris Git públics, proporcionant una interfície interactiva per explorar els clons detectats i treballar cap a la seva refactorització.
GitHub: https://github.com/loehnertz/Doppelgaenger
Per què el vaig crear
La duplicació de codi és una d’aquelles coses que tothom sap que és dolenta però que d’alguna manera continua passant. Copies un mètode per modificar-lo una mica, dupliques la lògica perquè és més ràpid que abstraure-la correctament, i abans que te n’adonis, estàs arreglant el mateix error en cinc llocs diferents.
Volia una eina que facilités detectar aquests duplicats, entendre les seves relacions i refactoritzar-los sistemàticament. La majoria d’eines d’anàlisi de codi o bé et donen una llista de números de línia (no és útil) o costen una fortuna (tampoc és útil per a projectes personals).
Tipus de detecció de clons
Doppelgänger suporta tres nivells de detecció de clons de codi:
Tipus u: Còpies exactes – Codi idèntic ignorant només els espais en blanc i els comentaris. Els clons de “literalment he copiat i enganxat això”.
Tipus dos: Similituds sintàctiques – Codi estructuralment similar permetent variacions d’identificadors (com noms de variables diferents). Els clons de “he copiat i enganxat això i he canviat el nom d’algunes coses”.
Tipus tres: Còpies modificades – Còpies de codi amb sentències modificades, afegides o eliminades. Els clons de “he copiat i enganxat això i he canviat unes quantes línies”.
Pots configurar els llindars de similitud i massa per equilibrar la precisió de la detecció amb la velocitat de l’anàlisi, cosa que és important per a codis font grans on no vols esperar una eternitat pels resultats.
Com funciona
El backend utilitza l’anàlisi AST i el hashing per identificar clons de codi. Això és més fiable que la simple comparació de text perquè entén l’estructura del codi en lloc de només comparar cadenes de text.
El frontend després et permet explorar visualment els clons detectats – veure on són, com de similars són i quins tindrien l’impacte més gran si es refactoritzessin.
Funcionalitats principals:
- Detectar codi font duplicat a través de projectes Java
- Analitzar projectes locals o repositoris Git públics
- Interfície de visualització avançada per explorar clons
- Flux de treball de refactorització interactiu
- Sensibilitat de detecció configurable
Stack tecnològic
Backend:
- Kotlin utilitzant el framework web Ktor
- Anàlisi AST i hashing per a la identificació de clons
- Algorismes de similitud configurables
Frontend:
- Vue.js per a la capa de visualització interactiva
- Exploració en temps real dels clons detectats
Desplegament:
- Contenidors Docker orquestrats via docker-compose
- Entorn autònom per a una configuració fàcil
Què vaig aprendre
Crear Doppelgänger em va reforçar que trobar clons de codi és la part fàcil – la part difícil és fer que els resultats siguin accionables. Una llista de 500 duplicats és aclaparadora. Una visualització interactiva que et permet filtrar, ordenar i prioritzar basant-se en l’impacte realment és útil.
També vaig aprendre que els diferents tipus de clons importa per raons diferents. Els clons de tipus u són els més fàcils d’arreglar però sovint els menys perjudicials (normalment són intencionats). Els clons de tipus tres són els més insidiosos perquè són prou similars perquè els errors es propaguin però prou diferents perquè les correccions no s’apliquin automàticament.
Amb llicència MIT, el projecte proporciona una alternativa pràctica i de codi obert a les eines comercials d’anàlisi de codi. Ha estat satisfactori veure que la gent realment el fa servir per netejar els seus codis font.