Clonación de código en proyectos Go open source: un análisis de prevalencia y estructura en GitHub - Benítez Gutiérrez, Julián (Universidad Escuela Colombiana de Ingeniería, 2025)
En este trabajo de grado, se consideró la prevalencia de la clonación de código en repositorios Go open source en GitHub. Para la detección de los clones en los proyectos se refinó en el conjunto de datos PoolC el modelo pre-entrenado UniXcoder. Los repositorios fueron clasificados según sus dominios de aplicación por medio del modelado de temas, con el algoritmo de Latent Dirichlet Allocation, además se identificaron las grupos de clones formados por grupos de códigos similares dentro de cada dominio de aplicación.

In this thesis, we considered the prevalence of code cloning in Go open source repositories on GitHub. To detect clones in projects, the pre-trained UniXcoder model was refined in the PoolC dataset. The repositories were classified according to their application domains using topic modeling with the Latent Dirichlet Allocation algorithm. In addition, groups of clones formed by groups of similar codes within each application domain were identified.
Índicegeneral Declaracióndelautor ii Resumen iii Abstract iv Agradecimientosydedicatoria v Índicedefiguras ix Índicedecuadros xi 1. Introducción 1 1.1. Preguntasdeinvestigación . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2. Contribuciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1. Objetivogeneral . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.2. Objetivosespecíficos . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4. Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.1. Mineríaderepositorios . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.2. Prácticasdedesarrollo . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5. Contenidoresumido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.Marcoteórico 12 2.1. Clonacióndecódigo: fundamentos . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.1. ¿Quéesunclondecódigo?. . . . . . . . . . . . . . . . . . . . . . . 13 2.1.2. Tiposdeclonesdecódigo . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.3. Gruposdeclonessimilares . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.4. Codesmellsyduplicacióndecódigo. . . . . . . . . . . . . . . . . . 15 2.2. Técnicasdedeteccióndeclones . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.1. Formasderepresentarcódigofuente. . . . . . . . . . . . . . . . . . 17 2.2.2. Deteccióndeclonesconmodelosdemachinelearning . . . . . . . . 23 2.2.3. Deteccióndeclonesapoyadaenmodeladodetemas . . . . . . . . . 29 3. Estadodelarte 34 3.1. Identificacióndeliteraturarelevante. . . . . . . . . . . . . . . . . . . . . . 34 3.2. Deteccióndecódigoduplicadoenproyectos. . . . . . . . . . . . . . . . . . 37 4. Extraccióndedatosyevaluación 40 4.1. Resumendeetapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2. Muestreo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3. Exploración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.4. Modificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.4.1. Pre-procesadodelcorpusdetexto . . . . . . . . . . . . . . . . . . . 44 4.4.2. Pre-procesadodefunciones. . . . . . . . . . . . . . . . . . . . . . . 44 4.5. Modelado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.5.1. ModeloLatentDirichletAllocation . . . . . . . . . . . . . . . . . . 45 4.5.2. UniXcoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.6. Evaluación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.6.1. EvaluacióndelmodeloLDA . . . . . . . . . . . . . . . . . . . . . . 47 4.6.2. EvaluacióndelmodeloUniXcoder . . . . . . . . . . . . . . . . . . . 51 5. Resultadosyanálisisempírico 55 5.1. Gruposdeclonesidentificados . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.1.1. Clasificacióndefuncionesclonadas . . . . . . . . . . . . . . . . . . 56 5.2. Clonesenlosdominiosdeaplicación . . . . . . . . . . . . . . . . . . . . . 69 5.2.1. PI1-¿CómoinfluyeeldominiodeaplicacióndelosproyectosGode opensourceenelnúmerodeclonesdetectados? . . . . . . . . . . . 71 5.3. Clonesenlosrepositorios. . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.3.1. PI2-¿Cuáleslaprevalenciadelaclonacióndecódigoenlosproyectos Go? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.4. Característicasqueafectanlapresenciadelosclones . . . . . . . . . . . . 74 5.4.1. PI3-¿Cuáles latendenciadelnúmerodeclonesenunproyectoen relaciónconfactorescomoelnúmerodearchivos,commits,estrellas ycolaboradoresimplicadosensudesarrollo? . . . . . . . . . . . . . 77 5.5. Comparaciónconotroslenguajesdeprogramación. . . . . . . . . . . . . . 78 5.5.1. PI4-¿Quédisparidadesysimilitudespuedenidentificarsealcomparar los resultadosobtenidos, enrelaciónconhallazgos similaresen otroslenguajesdeprogramación? . . . . . . . . . . . . . . . . . . . 78 6. Discusión 80 6.1. Interpretacióndelosresultados . . . . . . . . . . . . . . . . . . . . . . . . 80 6.1.1. Influenciadeldominiodeaplicaciónenlapresenciadeclones . . . . 81 6.1.2. Prevalenciadeclonesenlosproyectos . . . . . . . . . . . . . . . . . 81 6.1.3. Relaciónentrecaracterísticasdelproyectoylaaparicióndeclones . 82 6.1.4. LosclonesdeGocomparadosconotroslenguajes . . . . . . . . . . 83 6.2. Recomendacionesyobservacionesderivadas . . . . . . . . . . . . . . . . . 83 6.2.1. Faltadeabstracciones . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.2.2. Clonesinevitables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 6.2.3. Nopresentanriesgosenelsoftware . . . . . . . . . . . . . . . . . . 86 6.2.4. RecomendacionesparadesarrolladoresGo . . . . . . . . . . . . . . 87 6.2.5. Impactoenlamantenibilidad . . . . . . . . . . . . . . . . . . . . . 88 6.2.6. Impactoenrendimiento . . . . . . . . . . . . . . . . . . . . . . . . 88 6.2.7. Impactoenladeudatécnica . . . . . . . . . . . . . . . . . . . . . . 89 6.3. ImplicacionesparaelecosistemadeGo . . . . . . . . . . . . . . . . . . . . 90 6.4. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 7. Conclusionesytrabajofuturo 92 Referencias 94
Keywords: Go (Lenguaje de programación); Go (Programming Language); Repositorios open source; Open source repositories; Programación orientada a objetos (Computadores); Object-oriented programming (Computer science); Desarrollo de software; Computer software - Development; Algoritmos computacionales; Computer algorithms; Golang; GitHub; Detección de clones; Machine learning; Categorización de texto; Clone detection; Aprendizaje automático; Text categorization