[en] Model-Driven Engineering (MDE) is a Software Engineering methodology that raises models to first-class artifacts of the software engineering process. In this way, models are no longer used only to document software, but they are also employed to describe, simulate, and generate code. This paradigm has been proven to be successful in a lot of scenarios where the complexity of the systems is not trivial and cannot be tackled by traditional software engineering practices. However, the quality and ease of use of the modelling tools still remain a limiting factor that prevents MDE from being used more extensively in practice. On the other hand, Machine Learning (ML) is an Artificial Intelligence paradigm that has been applied to solve complex tasks in a wide variety of application domains. ML algorithms learn a mathematical function that maps a set of inputs to a set of outputs. This function is usually learnt from the data and, depending on the data's shape, these algorithms can be roughly classified into supervised, unsupervised, and reinforcement learning. ML has been successfully applied in the Software Engineering field. Particularly, it has been used to improve integrated development environments (IDEs) for code. This has been done by incorporating ML models trained on code auto-completion, documentation generation, defect detection, and test-case generation. Unlike code IDEs, modelling tools have not been able yet to take advantage of ML techniques. One reason is the absence of high-quality and extensive curated datasets, either labelled or unlabelled, to train ML models. This aspect limits the generalization of such ML models and prevents the application of deep learning technologies. Moreover, ML models cannot receive as input a raw modelling artifact and it must be transformed into a representation suitable to feed the ML model (e.g., numeric vectors). There have been several proposals to address this, but this aspect has not been systematically studied for a given MDE task and ML model. Finally, the number of MDE tasks addressed with ML is scarce and the approaches used are simplistic. This thesis tries to overcome the aforementioned issues by bridging the gap between ML and MDE. The first result of the thesis is the MAR search engine. This search engine collects several software artifacts of different types, analyses and stores them in a centralized database, providing query facilities to get relevant models. From an ML point of view, this result can be seen as an extensive unlabelled dataset that can be used for unsupervised learning. In addition, MAR is currently the model search engine with the largest collection of models. To address supervised learning scenarios, a set of UML and Ecore models were taken from MAR and labelled with their main category and secondary labels of interest. As a result, the ModelSet dataset was created, which is the largest corpus of labelled models in the context of ML for MDE. This dataset enables interesting applications of supervised learning to MDE. Using ModelSet as the target dataset, a comparative study was carried out to compare different model encodings and ML algorithms in the context of model classification. This study shows that for model classification simple representations based on text (e.g., TF-IDF) and simple models (e.g., SVM or feed-forward neural networks) are good choices. Also, it shows that semantic embeddings can also improve the performance of these models in the case of UML. Finally, deep learning architectures have been employed to solve a complex MDE problem: the generation of realistic models. In particular, a model generator based on autoregressive deep neural networks is proposed, which achieves state-of-the-art performance in terms of realism.

[es] La Ingeniería Dirigida por Modelos (MDE; Model-Driven Engineering) es una metodología de Ingeniería del Software que propone el uso activo de modelos durante todas las fases del desarrollo de un sistema software. Así, los modelos no son solo documentación pasiva, sino que se utilizan para describir, simular, probar y generar código. Este paradigma se ha aplicado exitosamente en diversos escenarios complejos que son inabordables por metodologías software tradicionales. No obstante, la calidad y la facilidad de uso de las herramientas de modelado sigue siendo un factor limitante para una adopción más amplia. Por otra parte, el aprendizaje automático (Machine Learning; ML) es un paradigma de la inteligencia artificial que ha sido aplicado con éxito para resolver tareas complejas en diversos dominios. En general, los algoritmos ML aprenden una función matemática que asocia una serie de entradas con una serie de salidas. Esta función se aprende de los datos y, dependiendo de la forma de estos, tenemos los siguientes tipos de aprendizaje: supervisado, no supervisado y por refuerzo. Las técnicas de ML han sido aplicadas exitosamente en varios campos de la Ingeniería del Software. En particular, estas técnicas han sido empleadas para mejorar los entornos de desarrollo integrados (Integrated Development Environments; IDEs) de código: generación automática de documentación, detección automática de defectos en código, o incluso generación automática de tests. A diferencia de los IDEs, las herramientas de modelado todavía no aprovechan los algoritmos de ML para mejorar su funcionalidad. Una razón es la falta de conjuntos de datos (datasets) de modelos. Esto limita la generalización de los modelos ML e imposibilita la aplicación de técnicas de aprendizaje profundo (Deep Learning). Por otro lado, los modelos ML no pueden recibir como entrada un artefacto software en bruto, sino que es necesario transformarlo a una representación adecuada y legible por el modelo ML (p. ej., vectores numéricos). Han habido varias propuestas para tratar este problema. Sin embargo, aún no se ha estudiado sistemáticamente cuál es la mejor codificación de un modelo software para una tarea dada y un modelo ML. Finalmente, la cantidad de tareas MDE cubiertas por trabajos previos con técnicas de ML es pequeña y los enfoques empleados han sido principalmente simplistas. Esta tesis aborda los problemas anteriores e intenta cubrir la brecha actual entre las técnicas de ML y el MDE. El primer resultado de esta tesis es el buscador de modelos MAR. Este buscador recolecta modelos software de diferentes tipos, los analiza y los guarda en una base de datos centralizada. Además, pone a disposición del usuario varios mecanismos de consulta. Desde un punto de vista del ML, este resultado puede ser visto como un gran dataset no etiquetado sobre el que se puede aplicar aprendizaje no supervisado. Además, MAR es actualmente el buscador con más modelos indexados. Para abordar tareas usando aprendizaje supervisado, se etiquetó un subconjunto de modelos UML y Ecore del buscador con su categoría principal y etiquetas secundarias. Como resultado, se obtuvo ModelSet, el dataset etiquetado más grande en el contexto de ML para MDE. Usando dicho dataset, se llevó a cabo un estudio sistemático para comparar varias codificaciones de modelos y algoritmos ML en el contexto de la clasificación de modelos. Se concluyó que las codificaciones simples basadas en texto y modelos simples obtienen los mejores resultados. Además, se observó que vectores semánticos mejoran la generalización en el caso de los modelos UML. Finalmente, se emplearon arquitecturas de aprendizaje profundo para resolver el problema de la generación de modelos realistas. En particular, se ha propuesto un generador realista basado en redes neuronales autorregresivas obteniéndose resultados de vanguardia en realismo de los modelos generados.