La computación ubicua o pervasiva plantea proveer de inteligencia a nuestros entornos desplegando en ellos dispositivos capaces de sensar la información que los rodea (como la temperatura, la localización de los usuarios, etc.) y de controlar los objetos cotidianos (como luces, persianas, etc.) que contienen. Uno de los objetivos más importantes de construir estos entornos es ofrecer servicios a los usuarios que permitan automatizar las tediosas tareas rutinarias que tienen que llevar a cabo cada día. Esta automatización mejoraría considerablemente la calidad de vida de los usuarios, permitiendo que se despreocupen de realizar estas tareas y evitando que malgasten su tiempo en llevarlas a cabo. Además, al automatizarse, las tareas pueden ser ejecutadas ofreciendo más confort a los usuarios y de manera mas eficiente, reduciendo el consumo de recursos naturales como energía y agua. Sin embargo, la automatización de tareas es un tema complicado ya que, si se realiza erróoneamente, puede resultar muy molesto para los usuarios. Si el sistema automatiza tareas que los usuarios no desean o las automatizan de una manera diferente a como ellos quieren, el resultado de la automatización puede acabar siendo intrusivo, interfiriendo en los objetivos de los usuarios, o siendo incluso peligroso. Para evitar estas consecuencias no deseadas, las tareas deben automatizarse atendiendo a los deseos y necesidades de los usuarios. Este es el objetivo principal de esta tesis: automatizar las tareas rutinarias de los usuarios tal y como ellos desean que sean automatizadas. Para conseguirlo, proponemos, por una parte, dos modelos de alto nivel de abstracción para describir las rutinas. Estos modelos proporcionan conceptos cercanos a los usuarios, facilitando su participación en la descripción de las rutinas. Además, los modelos están diseñados para ser interpretados por máquinas, y para proporcionar información suficientemente precisa para poder ser directamente ejecutables. Por otra parte, proporcionamos también una infraestructura software que es capaz de ejecutar los modelos interpretándolos en runtime; lo que permite automatizar las rutinas tal y como están descritas en los modelos. De esta manera, éstos constituyen la única representación de las rutinas que deben automatizarse, lo que los convierte en los medios principales para entenderlas y modificarlas. Esto facilita considerablemente la evolución de las rutinas para adaptarlas a los cambios de comportamiento de los usuarios. Sin esta adaptación, la automatización acabaría siendo inútil e incluso una molestia para los usuarios. En nuestra aproximación, la evolución de las rutinas se lleva a cabo mediante la adaptación de los modelos, ya que en cuanto éstos cambian, los cambios son tenidos en cuenta por la infraestructura software que los interpreta. Para dar soporte a esta evolución, proporcionamos tanto mecanismos de alto nivel de abstracción como una herramienta gráfica que permite evolucionar las rutinas en runtime mediante la modificación de los modelos. El trabajo presentado en esta tesis ha sido validado siguiendo una evaluación basada en casos de estudio en la han participado usuarios finales. Esta validación prueba que la propuesta presentada es capaz de automatizar las tareas rutinarias que los usuarios quieren y tal y como ellos quieren.