Show simple item record

Identificación del lenguaje de programación a partir del código fuente

dc.contributor.advisorOrtín Soler, Francisco 
dc.contributor.advisorRodríguez Prieto, Óscar 
dc.contributor.authorPato Tellada, Alejandro
dc.contributor.otherIngeniería Informática, Escuela de spa
dc.date.accessioned2024-02-20T08:16:05Z
dc.date.available2024-02-20T08:16:05Z
dc.date.issued2023-07-20
dc.identifier.urihttps://hdl.handle.net/10651/71443
dc.description.abstractDesde sus inicios, el desarrollo software se ha enfrentado a tareas cada vez más complejas y específicas, dando lugar a la constante aparición de nuevos lenguajes de programación capaces de hacerles frente. En la actualidad, las crecientes exigencias de calidad de la industria requieren de soluciones software cada vez más amplias y complejas, lo que implica el uso de múltiples lenguajes de programación. Como resultado, los desarrolladores se ven obligados a conocer y trabajar con diferentes lenguajes. En este contexto, poder identificar automáticamente el lenguaje de programación en el que está escrito el código fuente ofrece distintas ventajas. De entre ellas, destacan el resaltado de sintaxis y formato adecuado del código en IDEs, editores y otros medios como foros o chats; el refinamiento de los resultados emitidos por motores de búsqueda; la actualización de metadatos en plataformas de almacenamiento y compartición de código y la detección de código embebido. Para cubrir esta necesidad, surgen los sistemas de identificación automática de código fuente, cuyo objetivo es determinar con precisión el lenguaje de programación al que pertenece el código. En la actualidad, existen varios trabajos que resuelven este problema con una exactitud (accuracy) muy alta (97-98%), pero necesitan ficheros enteros para poder realizar las inferencias (predicciones). Esto supone una limitación muy grande ya que, en los escenarios descritos, las unidades de código que interesa clasificar pueden ser mucho más pequeñas que un fichero entero de código. Por ello, también existen trabajos cuyo objetivo es la identificación de fragmentos (snippets) de código fuente. Al no disponer de tanta información, estos trabajos no tienen una exactitud tan alta (varía entre el 75 y el 93%) y, además, todos ellos necesitan un fragmento de código de varias líneas para poder llevar a cabo su función con la fidelidad esperada. Con el fin de superar las limitaciones de los sistemas actuales, este trabajo estudia en qué medida es posible determinar el lenguaje de programación, con tan sólo analizar una línea de código. Para su construcción, fue necesaria la confección de un extenso corpus de ficheros de código fuente, descargados de GitHub mediante el desarrollo de un rastreador (crawler). Además, se implementó un verificador automático para corroborar el lenguaje de los ficheros descargados y un procesador de lenguajes capaz de detectar y limpiar determinadas líneas de estos ficheros; aquéllas que contienen lenguaje natural. Con todo ello, se generó un conjunto de datos (dataset) representando las líneas de código como una sucesión de caracteres, con el que entrenamos numerosos modelos de aprendizaje automático. Los modelos con mayor rendimiento fueron aquéllos basados en redes neuronales, siguiendo la arquitectura del perceptrón multicapa. Dichos modelos fueron construidos y refinados mediante la búsqueda y ajuste de sus distintos hiperparámetros. El resultado es un sistema capaz de identificar una selección de los 21 lenguajes de programación de más utilizados según tres rankings, consiguiendo un 92.18% de exactitud y analizando una única línea de código de al menos 10 caracteres. Adicionalmente, este trabajo también aporta un corpus de 19,76 GB de tamaño, formado por 1,47 millones de ficheros de código fuente pertenecientes a estos lenguajes. Finalmente, se comparó el rendimiento de los modelos basados en redes neuronales con otros modelos de aprendizaje automático y con una herramienta actual de identificación automática de código, seleccionada tras un análisis de los distintos trabajos relacionados. Los resultados obtenidos muestran que los sistemas actuales, entrenados con fragmentos de código de varias líneas y a nivel de palabra, no son capaces de determinar con nuestra exactitud el lenguaje de programación de una sola línea de código de fuente.spa
dc.format.extent82 p.
dc.language.isospaspa
dc.rightsAttribution-NonCommercial-NoDerivatives 4.0 Internacional*
dc.rights.urihttp://creativecommons.org/licenses/by-nc-nd/4.0/*
dc.subjectLenguaje de programaciónspa
dc.subjectIdentificación de código fuentespa
dc.subjectFragmento de códigospa
dc.subjectCorpusspa
dc.subjectRastreadorspa
dc.subjectAprendizaje automáticospa
dc.subjectBig Codespa
dc.subjectRedes neuronalesspa
dc.titleIdentificación del lenguaje de programación a partir del código fuentespa
dc.typebachelor thesisspa
dc.rights.accessRightsopen access


Files in this item

untranslated

This item appears in the following Collection(s)

Show simple item record

Attribution-NonCommercial-NoDerivatives 4.0 Internacional
This item is protected with a Creative Commons License