Detección de reutilización de código fuente monolingüe y translingüe

[EN] Automatic detection of source code re-use consists in determining whether a (piece of) code has been created considering another source.Plagiarism and forks in software projects are two examples of types of re-use in source codes. With the advent of the Web and electronic media it has grown enormously the ease of access to source code to be read, copied or modified. This represents a great temptation for developers with the aim of reducing (time or economic) costs, decide to use previously debugged and tested source codes. This phenomenon has caused experts in programming languages to study the problem. The large amount of resources available on the Web makes impossible a manual analysis of suspect source codes of being re-used. Therefore, there is an urgent need to develop automated tools that can accurately detect re-used cases. Automatic re-use detection tools based on natural language processing techniques and information retrieval are able to perform many comparisons of source codes efficiently. In this thesis we propose a set of models that are suitable at both monolingual or crosslingual level. That is, two source codes written in the same, or different, programming language can be compared. Therefore, it allows us to make comparisons between almost any pair of programming languages unlike the proposals of the state of the art. First, we studied the most common changes made by programmers to avoid the detection. To address these changes and improve the detection, we have proposed a set of pre-processing. The models have been evaluated and analysed in real academic settings as well as large-scale scenarios. Finally, our best proposals were compared with some of the state of the art proposals within the same evaluation framework. These tests of our models were performed millions of monolingual and crosslingual comparisons using several techniques that were effective when applied to detection re-use in texts written in natural language. Most of the resources developed in the framework of this thesis are freely available to the scientific community. Using part of these resources, we have set up two evaluation scenarios (monolingual and crosslingual) that are a reference for current and future research works can adjust and compare their proposals. [ES] La deteccion automatica de reutilizacion en codigos fuente consiste en determinar si un (fragmento de) codigo ha sido creado considerando otro como fuente. El plagio y las ramificaciones en proyectos software son dos ejemplos de tipos de reutilizacion en codigos fuente. Con la llegada de la Web y los medios electronicos ha crecido enormemente la facilidad de acceso a codigos fuente para ser leidos, copiados o modificados. Esto supone una gran tentacion para programadores que, con propositos de reducir costes (temporales o economicos), deciden utilizar codigos fuente previamente depurados y probados. Este fenomeno ha causado que expertos en lenguajes de programacion estudien el problema. La gran cantidad de recursos disponibles en la Web hace imposible un analisis manual de codigos fuente sospechosos de haber sido reutilizados. Por ello, existe una necesidad urgente de desarrollar herramientas automaticas capaces de detectar con precision los casos de reutilizacion. Basandose en tecnicas del procesamiento del lenguaje natural y recuperacion de informacion, las herramientas de deteccion automaticas de reutilizacion son capaces de realizar multitud de comparaciones de codigos fuente de forma eficiente. En esta tesis proponemos un conjunto de modelos que pueden aplicarse indistintamente a nivel monolingue o translingue. Es decir, se pueden comparar dos codigos que estan escritos en el mismo, o en distinto, lenguaje de programacion. Por lo tanto, nos permite realizar comparaciones entre casi cualquier par de lenguajes de programacion a diferencia de las propuestas del estado de la cuestion. %que solo se aplican a un grupo muy reducido de lenguajes de programacion. Inicialmente, hemos estudiado las modificaciones mas comunes realizadas por los programadores para evitar ser detectados. Para tratar estas modificaciones y mejorar la deteccion, hemos propuesto una serie de preprocesos. Se han evaluado y analizado los modelos tanto en un escenario academico real como en un escenario de deteccion a gran escala. Finalmente, nuestras mejores propuestas se han comparado con otras propuestas del estado de la cuestion dentro de un mismo marco de evaluacion. Estas pruebas de nuestros modelos se han realizado mediante millones de comparaciones tanto a nivel monolingue como translingue empleando diversas tecnicas que fueron efectivas al aplicarlas sobre textos escritos en lenguaje natural. La mayor parte de los recursos desarrollados en el marco de esta tesis estan a libre disposicion de la comunidad cientifica. Utilizando parte de estos recursos, hemos configurado dos escenarios (monolingues y translingues) de evaluacion que son un referente para que actuales y futuros trabajos de investigacion puedan ajustar y comparar sus propuestas. [CAT] La deteccio automatica de reutilitzacio en codis consisteix a determinar si un (fragment de) codi ha sigut creat considerant un altre com a font. El plagi i les bifurcacions en projectes de programari son dos exemples de tipus de reutilitzacio en codis font. Amb l'arribada de la Web i els mitjans electronics ha crescut enormement la facilitat d'acces a codis font per a ser llegits, copiats o modificats. Aco suposa una gran temptacio per a programadors que amb proposits de reduir costos (temporals o economics) decideixen utilitzar codis font previament depurats i provats. Aquest fenomen ha causat que experts en llenguatges de programacio estudien aquest problema. La gran quantitat de recursos en la Web fa impossible una analisi manual de codis font sospitosos d'haver sigut reutilitzats. Es per aquest motiu que existeix una necessitat urgent de desenvolupar eines automatiques capaces de detectar amb precisio els casos de reutilitzacio. Basant-se en tecnologies de teoria de llenguatges i recuperacio d'informacio, les eines de deteccio automatiques de reutilitzacio son capaces de realitzar multitud de comparacions de codis font de forma eficient. En aquesta tesi proposem un conjunt de models que poden aplicar-se indistintament a nivell monolingue o translingue. Es a dir, es poden comparar dos codis que estan escrits en el mateix, o diferent, llenguatge de programacio. Per tant, ens permet realitzar comparacions entre quasi qualsevol parell de llenguatges de programacio a diferencia de les propostes de l'estat de la questio. La nostra experimentacio ha seguit un cert paral$\cdot$lelisme entre la deteccio de reutilitzacio monolingue i la translingue. Inicialment, hem estudiat les modificacions mes comunes realitzades pels programadors per evitar ser detectats. Per tractar aquestes modificacions i millorar la deteccio, hem proposat una serie de preprocesos. S'han avaluat i analitzat els models tant en un escenari academic real com en un escenari de deteccio a gran escala. Finalment, hem comparat les nostres millors propostes amb altres propostes de l'estat de la questio dins d'un mateix marc d'avaluacio. Aquestes proves i comparacions dels nostres models s'han realitzat mitjancant milions de comparacions tant a nivell monolingue com translingue emprant diverses tecniques que van ser efectives en aplicar-se sobre textos escrits en lenguatge natural. La major part dels recursos creats en el marc d'aquesta tesi han estat de creacio propia i estan a lliure disposicio de la comunitat cientifica. Utilitzant part d'aquests recursos, hem proposat dos escenaris (monolingue i translingue) d'avaluacio que son un referent perque actuals i futurs treballs d'investigacio puguin ajustar i comparar les seves propostes.