[en] Aiming at shedding light on data produced by systems, provenance has emerged to refer to the entire amount of information that contributes to the existence of a piece of data. The capture of provenance entails a number of benefits, from reproducibility to accountability, including assessing data quality and validity. With such tangible benefits, it is no wonder that the ability to consider the use of provenance from the early stages of the software development cycle, such as the design phase, has become critically important to support software designers in making provenance-aware applications; that is, applications with the functionality to answer questions regarding the provenance they produce. However, current approaches considering provenance during the design phase do not integrate with existing software engineering methodologies. This makes them challenging to use in practice. UML2PROV is a novel framework intended to bridge the gap between application design and provenance design, minimising software engineers intervention and without requiring them to have provenance skills. With UML2PROV, designers can follow their preferred software engineering methodology in order to create the UML diagrams representing an application's design, and then, UML2PROV comes into play to automatically generate: (1) the design of the provenance to be generated (expressed as PROV templates); and (2) a software module for collecting values of interest as application is running (encoded as variable-value associations referred to as bindings), and which can be deployed in the application with a minimal developers intervention. The combination of the PROV templates with the bindings generates high-quality provenance ready to be exploited. Hence, UML2PROV ultimately comes to help software engineers in making applications provenance-aware. Around UML2PROV, this thesis presents three main contributions. First, a systematic review of provenance systems, which, among other results, provides a six-dimensional taxonomy of provenance characteristics that can help researchers analyse provenance systems. Second, the conceptual definition of UML2PROV, consisting of a rigorously defined set of 17 patterns mapping UML diagrams to PROV templates, along with the requirements that any generated software module to be deployed in the application for collecting bindings must meet. This approach has been proposed aiming at minimising the intervention on software designers' and developers' modus operandi, as well as at facilitating the maintenance of the provenance-aware applications. Third, a reference implementation of UML2PROV based on Model Driven Development techniques. This implementation automatically generates, starting from the UML diagrams of an application, both the PROV templates and the module to collect bindings. Additionally, this reference implementation provides potential users with mechanisms for managing the collection of bindings in different ways. Thus, users may choose the mechanism that best suits their needs attending to the persistence system, the run-time overhead, and storage needs, among others. UML2PROV has also been systematically evaluated. We analysed the quality and efficiency of the provenance generated by our reference implementation, to show the benefits and trade-offs of applying UML2PROV, yielding relevant conclusions for the software engineering community. In particular, as the UML design drives both the design and capture of provenance, we study how different strategies followed during the UML design phase can affect aspects such as provenance design generation, application instrumentation, provenance capability maintenance, run-time overhead and storage needs, and quality of the generated provenance.

[es] Con el objeto de arrojar luz sobre los datos producidos por los sistemas, el término provenance ha surgido para referirse al conjunto de información que contribuye a la existencia de un dato. La captura de provenance conlleva una serie de beneficios que van desde la eproducibilidad hasta la responsabilidad, incluida la evaluación de la calidad y validez de los datos. A la vista de estos beneficios, resulta natural que el tener en cuenta el provenance desde las primeras etapas del ciclo de desarrollo del software, como la fase de diseño, haya adquirido una importancia crítica para ayudar a los diseñadotes de software a hacer aplicaciones con capacidades de provenance; es decir, aplicaciones con la funcionalidad para responder preguntas sobre el provenance que producen. Sin embargo, los enfoques actuales que consideran el provenance durante la fase de diseño no se integran con las metodologías de ingeniería de software existentes. Esto los hace difíciles de usar en la práctica. UML2PROV es un novedoso entorno de desarrollo orientado a cerrar la brecha entre el diseño de aplicaciones y el diseño de provenance, minimizando la intervención de los ingenieros del software y sin necesidad de que estos tengan conocimientos sobre provenance. Con UML2PROV, los diseñadotes pueden seguir la metodología de ingeniería del software que prefieran para crear los diagramas UML con el diseño de la aplicación, y posteriormente, UML2PROV entra en juego para generar automáticamente: (1) el diseño del provenance que va a ser generado (expresado a través de PROV templates); (2) un modulo software para capturar valores de interés mientras la aplicación esta ejecutándose (codificados como asociaciones variable-valor a las que nos referiremos como bindings). La combinación de los PROV templates con los bindings generará provenance de gran calidad, listo para ser explotado. Por lo tanto, UML2PROV ayudara a los ingenieros del software a hacer aplicaciones con capacidades de provenance. En relación a UML2PROV, esta tesis presenta tres contribuciones principales. Primero, una revisión sistemática de sistemas de provenance, la cual, entre otros resultados, ofrece una taxonomía de seis dimensiones que puede ayudar a los investigadores en el análisis de diferentes sistemas de provenance. Segundo, una definición conceptual de UML2PROV, la cual consiste en (1) un conjunto de 17 patrones rigurosamente definidos y que establecen una correspondencia entre elementos UML y PROV templates; y (2) un conjunto de requisitos que cualquier modulo software de captura de provenance debe satisfacer. Este modulo se integrara dentro de la aplicación para la obtención de bindings. Tercero, una implementación de referencia de UML2PROV basada en técnicas pertenecientes al Desarrollo Dirigido por Modelos. Partiendo de los diagramas UML, esta implementación genera automáticamente tanto los PROV templates como el modulo para obtener bindings. Además, esta implementación de referencia ofrece a los posibles usuarios de UML2PROV mecanismos para configurar la obtención de los bindings de diferentes formas. Por lo tanto, los usuarios pueden elegir el mecanismo que mejor se adapte a sus necesidades, atendiendo aspectos como el sistema de persistencia que deseen utilizar, el coste que supone disponer la captura de provenance en tiempo de ejecución, así como las necesidades de almacenamiento, entre otros. UML2PROV también ha sido evaluado de una forma sistemática. Concretamente, se presenta un análisis de la calidad y la eficiencia del provenance generado por nuestra implementación de referencia, con el objetivo de mostrar beneficios e inconvenientes de utilizar UML2PROV. Este análisis nos ha permitido extraer conclusiones relevantes para la comunidad de ingenieros de software. En particular, como el diseño UML controla tanto el diseño como la captura de provenance, se ha estudiado como diferentes estrategias adoptadas en la fase de diseño UML pueden afectar a aspectos como: la generación del diseño del provenance, la instrumentación de aplicaciones, el mantenimiento de los artefactos que proveen a la aplicación de capacidad de provenance, el coste que supone disponer de dichos artefactos en tiempo de ejecución, así como las necesidades de almacenamiento, y calidad del provenance generado.