[en] Web services provide a successful way to let distributed applications communicate, in a platform-independent and loosely coupled manner, providing the systems with great flexibility and easier maintenance. In this sense, academy and industry try to maintain every specific development issue in web service development separate by the use of encapsulation and different WS-* standard specifications. On the other hand, the software engineering community is currently moving on to application development based on models rather than technologies. Model-driven development allows us to focus on essential aspects of the system, delaying the decision of which technology to use in the implementation for a later step. Transformations between models enable the automated development of the system from the models themselves; therefore, model definition and transformation become key parts of the process. Besides, aspect-oriented software development deals with concerns which are tangled and scattered in the systems, modularizing and encapsulating them and therefore improving the decoupleness of software systems and reducing maintenance costs. In this regard, we can say that model-driven engineering, aspect-oriented software development and web service engineering have become widely accepted alternatives in order to tackle the design and building of complex distributed applications. Although these methodologies have the separation of concerns principle and their further integration as key factors to obtain high-quality and evolvable large software systems, they usually address this principle from their own perspective. In particular, model-driven architecture has focused on the explicit separation of platform-independent from platform-specific concerns and the model-driven generation processes, allowing the separation of a system's business logic, its functionality and the platforms and technologies supporting it. In addition, current software systems also have to deal with other concerns beside platform-specific concerns such as those related to extra-functional properties. These concerns tend to crosscut several components of the software architecture, reducing the maintenance of software systems. Aspect orientation is a software development methodology that just focuses on modeling crosscutting concerns, allowing their separate design and implementation and further integration (weaving) with the system components. Web service development aims to construct high quality, evolvable, large software systems in an efficient and affordable manner. Although web service implementation is properly achieved by development middlewares, there exists a gap in the sphere of extra-functional properties. The functionality which performs added value system objectives is scattered and tangled all over the main functionality code in these systems. As a consequence, concerning service models, the properties may not be considered at all, or, if considered, they are modeled as any other element in the system, despite their being transversal elements which should be tackled at a different modeling level. Regarding property code, it may appear tangled and scattered along the service code, damaging the maintenance and evolution of the system and losing the chance of reusing the properties in different applications. Therefore, there is a lack of tools for earlier stages of web service development in which extra-functional properties and WS-* standards integration are considered. When trying to solve this gap, we arrive at the use of model-driven development and aspect-oriented techniques in conjunction and we assert that the aforementioned methodologies may complement to each other to develop high quality software systems. This thesis provides a methodology that integrates extra-functional properties into web service model-driven development, where services and properties remain separated during all stages of development and property traceability across all these phases is maintained. In this regard, properties are defined as model elements and the possibility of adding them to services during modeling and to automatically generate code at a later stage is given. Furthermore, we provide the possibility for properties to be optional: the client can choose which properties he wants to be applied during his invocation. For this to happen, there needs to be a mechanism that indicates the properties chosen to be applied from the client side, and another one that determines which properties were selected by the client in the service side. The resulting approach increases the modularity and encapsulation of the different system modules, thus reducing and simplifying implementation and maintenance costs and keeping the traceability of the properties during all the stages of development.

[es] Los servicios web facilitan la comunicación entre aplicaciones distribuidas, de una manera independiente de plataforma y débilmente acoplada, proporcionando una gran flexibilidad y más fácil mantenimiento de los sistemas. En este sentido, la academia y la industria intentan mantener todas las cuestiones relacionadas con el desarrollo de los servicios web separadas mediante el uso de la encapsulación y de diversas especificaciones de estándares WS-*. Por otra parte, la comunidad de ingeniería del software se orienta actualmente hacia el desarrollo de aplicaciones basadas en modelos en lugar de en tecnologías. El desarrollo dirigido por modelos nos permite centrarnos en los aspectos esenciales del sistema, retrasando a un paso posterior la decisión sobre qué tecnología usar en la implementación. Las transformaciones entre modelos permiten el desarrollo automático de sistemas desde los mismos; así pues, la definición del modelo y su transformación se convierten en las partes claves del proceso. Además, el desarrollo de software orientado a aspectos trata con propiedades de interés que se encuentran entrelazadas y dispersas en los sistemas, modularizándolas y encapsulándolas y, por tanto, mejorando el desacoplamiento del sistemas de software, así como reduciendo sus costes. En este sentido, podemos decir que la ingeniería dirigida por modelos, el desarrollo de software orientado a aspectos y la ingeniería de servicios web se han convertido en alternativas fuertemente aceptadas a la hora de enfrentarse a la construcción y al desarrollo de aplicaciones distribuidas. Aunque todas estas metodologías tienen como principio la separación de propiedades de interés y su posterior integración como claves para la obtención de sistemas de software de alta calidad y larga evolución, normalmente afrontan este principio desde su propia perspectiva. En particular, la arquitectura dirigida por modelos se ha centrado en la separación explícita de elementos específicos de plataforma, de aquéllos que son independientes de plataforma y de los procesos de generación dirigidos por modelos, permitiendo la separación de la lógica de negocio del sistema de su funcionalidad, y de las plataformas y tecnologías que la soportan. Adicionalmente, los sistemas actuales de software también tienen que tratar con otras propiedades de interés aparte de las específicas de la plataforma como aquéllas relacionadas con las propiedades extra-funcionales. Estas propiedades tienden a cortar y atravesar varios componentes de las arquitecturas software, dificultando el mantenimiento de los sistemas. La orientación a aspectos es una metodología de desarrollo que solamente se ha centrado en el modelado de propiedades de interés que cortan y atraviesan el sistema, permitiendo su diseño e implementación de manera separada y su posterior integración (tejido) con los componentes del sistema. El desarrollo de servicios web pretende la construcción de grandes sistemas de software de alta calidad y de rápida evolución de una manera eficiente y económicamente factible. Aunque las plataformas de desarrollo afrontan apropiadamente la implementación de servicios web, existe un vacío en el ámbito de las propiedades extra-funcionales. La funcionalidad que no lleva a cabo objetivos principales de un sistema, sino objetivos de valor añadido, se encuentra dispersa y mezclada con el código que implementa la funcionalidad principal en estos sistemas. Consecuentemente, respecto a los modelos de los servicios, las propiedades o ni siquiera se consideran o, de hacerlo, se encuentran modeladas como cualquier otro elemento del sistema, a pesar de tratarse de elementos transversales que deberían abordarse a un nivel de modelado diferente. Con respecto al código de la propiedad, puede aparecer mezclado y disperso a lo largo de del sistema, perjudicando el mantenimiento y la evolución de éste y desaprovechando la oportunidad de reutilizar las propiedades en distintas aplicaciones. Así pues, hay una falta de herramientas para etapas tempranas del desarrollo de servicios web en las que se consideren las propiedades extra-funcionales y la integración de estándares WS-*. Cuando tratamos de cubrir este hueco, nos decantamos por el uso conjunto del desarrollo dirigido por modelos y las técnicas de orientación a aspectos y afirmamos que las tecnologías citadas previamente pueden complementarse unas a otras para realizar satisfactoriamente el desarrollo de sistemas software de alta calidad. Esta tesis proporciona un mecanismo para la integración de propiedades extra-funcionales en el desarrollo de servicios web dirigido por modelos, en el que los servicios y las propiedades permanecen separados durante todas las etapas del desarrollo y la trazabilidad se mantiene a lo largo de todas las fases. A este respecto, las propiedades serán definidas como elementos de los modelos y se proporcionará la posibilidad de añadirlas a los servicios durante el modelado, permitiendo además la generación automática de código en un paso posterior. Es más, proporcionamos la posibilidad de que las propiedades se ejecuten de manera opcional: el cliente puede elegir qué propiedades son aplicadas en el servicio durante su ejecución. Para habilitar esta posibilidad, es necesario un mecanismo que nos permita indicar las propiedades elegidas para su aplicación en la parte del cliente y otro en la parte del servicio que permita determinar qué propiedades fueron seleccionadas por el cliente. La aproximación resultante incrementa la modularidad y la encapsulación de los distintos módulos del sistema, reduciendo y simplificando así los costes de implementación y mantenimiento y salvaguardando la trazabilidad de las propiedades durante todas las etapas del desarrollo.