Los robots sociales son robots autónomos que trabajan en entornos sociales reales donde tienen que interactuar con seres humanos e incluso con otros robots. La implementación de estos sistemas robóticos está moviendose hacia el uso de frameworks basados en componentes, los cuales se centran en la reusabilidad y en la evolución del software. De esta manera, el software de un robot está compuesto por entidades binarias (componentes) distribuidos que se comunican entre sí utilizando un middleware de comunicaciones, que permite abstraer al desarrollador de los detalles de bajo nivel y comunicar sistemas heterogéneos. Si embargo, el uso de estos frameworks basados en componentes y middleware para robótica implica una curva de aprendizaje muy pronunciada, además de introducir nuevos desafíos a los desarrolladores para poder satisfacer los requisitos de alto rendimiento y otras calidades de servicio. El análisis y la verificación de esas propiedades no funcionales debe incluir formas de monitorizar los diferentes valores del sistema. Normalmente, las herramientas de monitorización para robótica incluyen sólo información sobre el estado de los componentes y la acción típica a realizar, en caso de detectar que no se satisface algún requisito, es parar el software, lo que suele implicar parar el robot. Obviamente, este escenario no es la mejor opción para los robots sociales, a menos que introduzcamos un mecanismo que garantice que el sistema de control del robot se autoadaptará y reparará él mismo si es necesario (y posible). De esta forma, aparece un nuevo requisito: un sistema de control de un robot debe de ser tolerante a fallos, permitiendo auto-adaptarse, es decir: detectar cambios significativos, decidir cómo reaccionar, y actuar para ejecutar tales decisiones.