dc.description.abstract | En los últimos años y con el creciente avance tecnológico, las empresas
ya no se centran exclusivamente en diseñar un producto para un cliente (por
ejemplo, el diseño de un sitio web para el Hotel Decameron), sino en producir
para un dominio (por ejemplo, el diseño de sitios web para hoteles); es decir,
el diseño de un producto que pueda adaptarse fácilmente a las diferentes variaciones
que puedan existir para un mismo producto y que se adapte a los
gustos individuales de los clientes.
En la ingeniería de software, esto puede lograrse a través de la gestión de
líneas de productos de software (SPL). Una SPL se define como un conjunto de
sistemas que comparten un conjunto común de características que satisfacen
la demanda de un mercado específico. Una SPL intenta reducir el esfuerzo y
el costo de implementar y mantener en el tiempo un conjunto de productos de
software similares; sin embargo, manejar la variabilidad en estos sistemas es
una tarea dif´ıcil, a mayor n´umero de productos m´as complejo se hace manejarlos.
Los modelos de caracter´ısticas (FMs) se emplean para representar gr´aficamente
las partes comunes y variables de una SPL. Dada la gran cantidad de
caracter´ısticas que se pueden derivar de un modelo de caracter´ıstica (FM), resulta
dif´ıcil de gestionarlos. Para hacer frente a estos problemas se ha propuesto
el An´alisis Autom´atico de Modelos de Caracter´ısticas (AAFM) que mediante
el uso de herramientas asistidas por ordenador, se ocupa de la extracci ´on
de información de los modelos de características. No obstante, existen ciertos
escenarios en los que la configuración de un producto se convierte en una
actividad compleja dado el número de componentes que existen para implementar
una determinada característica.
En esta tesis, exploramos técnicas inteligentes para resolver dos problemas
que surgen al manejar una SPL:
i. Por un lado, hemos identificado los problemas que surgen cuando un
desarrollador desea mantener sus aplicaciones al d´ıa con los últimos
avances tecnol´ogicos. La estrecha relaci ´on entre las caracter´ısticas de
aplicaci ´on y los componentes de plataforma es dif´ıcil de rastrear. Los desarrolladores deben ser conscientes de las consecuencias que podr´ıan
traer a las aplicaciones existentes cuando cambia el hardware donde
se va a ejecutar; por ejemplo, cuando una aplicaci ´on se traslada de un
smartphone a una computadora/tablet, o cuando una plataforma se actualiza
a una nueva versi´on. Los diferentes tama˜nos y resoluciones de
pantalla, la posible ausencia de un radio celular o el aumento de la cantidad
de memoria pueden tener impactos positivos o negativos en una
aplicaci ón. En este contexto, dado que las caracter´ısticas de aplicaci ´on y
de plataforma están conceptualmente separadas, sus caracter´ısticas pueden
modelarse en dos modelos distintos. Por consiguiente, manejar la
trazabilidad entre estas dos capas y c´omo los posibles cambios en ciertas
caracter´ısticas puedan afectar a la otra capa, es un problema que est´a por
resolver.
ii. Por otro lado, hemos encontrado lo complicado que es para el desarrollador
de aplicaciones configurar un producto cuando hay una variedad
de componentes de implementación para cada característica. Por ejemplo,
un desarrollador web en WordPress busca manualmente aquellos
componentes (plugins) que son factibles y más óptimos para cada sitio
web. Esta tarea lleva tiempo y no siempre garantiza que los componentes
seleccionados sean los m´as adecuados (en términos de calidad) para
la aplicación requerida. Dos escenarios podrían surgir durante esta
configuraci´on: primero, la selecci ´on emp´ırica de un componente, en la
pr´actica, puede no proporcionar los resultados esperados; adem´as, no
tener criterios basados en la experiencia de otros usuarios con respecto a
estos componentes, podr´ıa inducir una mala selecci ´on y lograr una mala
experiencia para el usuario final. En este contexto, el manejo de la relaci
´on entre los componentes de implementaci´on y sus caracter´ısticas es
otro problema a resolver.
Concretamente, las contribuciones de esta tesis se detallan a continuaci´on;
Modelos de caracter´ısticas en m´ ultiples capas: En esta ´area introducimos un
framework para el an´alisis de modelos de caracter´ısticas de m´ ultiples
capas, llamado MAYA. Los objetivos que perseguimos con esta soluci´on
son: i) modelar la variabilidad de los sistemas software en dos capas, incluyendo
sus respectivas interdependencias; ii) definir un conjunto de
operaciones que puedan imponerse a dichos modelos; iii) una implementaci
´on de referencia para el an´alisis de m´ ultiples capas basado en un
caso de estudio en Android, y finalmente; iv) dos evaluaciones emp´ıricas
que demuestran la viabilidad de nuestra propuesta en la pr´actica.
Componentes de implementaci´on: La configuraci´on de un producto es una de las actividades m´as propensas a errores, m´as a ´un cuando para cada
caracter´ıstica hay m´as de un componente que la implemente. Para
gestionar estas configuraciones, introducimos un sistema de recomendaci
´on basado en componentes llamado RESDEC que facilita la selecci ´on
de componentes de implementaci´on al crear productos en una SPL. Concretamente
las contribuciones que se presentan con esta propuesta son:
i) modelado del problema de selecci ´on de componentes de implementaci
´on como una tarea de recomendaci´on utilizando algoritmos de filtrado
colaborativo y por contenido; ii) dise ˜no de un prototipo de herramienta
de sistema de recomendaci´on basada en componentes lista para ser
utilizada y extendida a otros entornos a partir de la selecci ´on de componentes
de implementaci´on y, finalmente; iii) una evaluaci´on emp´ırica
basado en sitios web de comercio electr ´onico enWordPress. | es |