Cada vez más los sistemas software necesitan adaptar su comportamiento dinámicamente como respuesta a eventos de su propia infraestructura o del entorno físico que los rodea. La adaptabilidad se está convirtiendo en una capacidad básica para los sistemas software, particularmente para los sistemas altamente dinámicos como es el caso de los sistemas sensibles al contexto o los sistemas ubicuos. Sin embargo, estos sistemas han alcanzado un nivel de complejidad donde el esfuerzo requerido para mantenerlos operativos es demasiado elevado. Mediante la automatización de tareas como la instalación, adaptación o reparación, la Computación Autónoma propone entornos de computación que evolucionan sin la necesidad de intervención por parte de los usuarios. Sin embargo, pese a que existe una razonable cantidad de trabajo en el ámbito de su diseño teórico, la Computación Autónoma ha sido criticada como un “tema demasiado ambicioso” debido a la falta de implementaciones que materialicen las ideas propuestas. Además, la naturaleza de los sistemas de computación autónoma (donde su estado cambia en tiempo de ejecución de una manera dinámica) plantea un gran desafío para dar soporte al desarrollo de los mismos mediante guías, técnicas y herramientas. Esta tesis propone que la combinación de las ideas principales del Desarrollo de Software Dirigido por Modelos (los modelos como artefactos de primer orden) y las Líneas de Producto Software (la gestión de la variabilidad) puede jugar un papel importante para implementar las propiedades de autogestión propuestas por la Computación Autónoma. La propuesta presentada en esta tesis desarrolla sistemas que son capaces de modificar su propio comportamiento de acuerdo a cambios en su entorno. Esto se consigue utilizando modelos de variabilidad que juegan el rol de las políticas que dirigen la reconfiguración autónoma del sistema en tiempo de ejecución. Bajo un conjunto de comandos de reconfiguración, los componentes que forman la arquitectura software cooperan dinámicamente para cambiar la configuración del sistema. Este trabajo también proporciona la implementación de un Motor de Reconfiguración basado en Modelos (MoRE por sus siglas en inglés) para materializar las ideas propuestas. Dado un evento de contexto, MoRE consulta los modelos de variabilidad para determinar cómo debe evolucionar el sistema y luego proporciona mecanismos para modificar la arquitectura del sistema en consecuencia. El trabajo presentado ha sido validado desde tres perspectivas diferentes: (1) la escalabilidad de la propuesta, (2) los riesgos basados en la seguridad de las reconfiguraciones y (3) el nivel de comportamiento autónomo conseguido. Esta evaluación fue realizada con la participación de usuarios mediante el caso de estudio de un Hotel Inteligente que utilizaba dispositivos reales. Los experimentos muestran que la propuesta obtiene resultados satisfactorios respecto a escalabilidad y riesgo de la reconfiguraciones; sin embargo, encontramos algunos escenarios que requirieron un mayor nivel de detalle para definir el comportamiento autónomo, ya que estos escenarios entraban en conflicto con preferencias de los usuarios. Aunque estos escenarios podían ser abordados mediante componentes específicos para los casos no soportados, no parece realista construir características del sistema para satisfacer a cada usuario de forma individual. Nuestra intención es céntranos en generalizaciones y abstracciones que sean válidas a lo largo de conjuntos de usuarios, buscando un equilibrio entre personalización y reutilización.