En ingeniería de software , la virtualización de servicios o virtualización de servicios es un método para emular el comportamiento de componentes específicos en aplicaciones heterogéneas basadas en componentes, como aplicaciones impulsadas por API , aplicaciones basadas en la nube y arquitecturas orientadas a servicios . Se utiliza para proporcionar a los equipos de desarrollo de software y control de calidad/pruebas acceso a los componentes dependientes del sistema que son necesarios para ejecutar una aplicación bajo prueba (AUT), pero que no están disponibles o son de difícil acceso para fines de desarrollo y prueba. Con el comportamiento de los componentes dependientes "virtualizado", las pruebas y el desarrollo pueden continuar sin acceder a los componentes activos reales. Los proveedores, los analistas de la industria y las publicaciones de la industria reconocen que la virtualización de servicios es algo diferente a una burla. [1] [2] Consulte aquí para obtener una comparación de herramientas de simulación API .
La virtualización de servicios emula el comportamiento de los componentes de software para eliminar las limitaciones de dependencia de los equipos de desarrollo y pruebas. Estas restricciones se producen en entornos complejos e interdependientes cuando un componente conectado a la aplicación bajo prueba es:
Aunque el término "virtualización de servicios" refleja el enfoque inicial de la técnica en la virtualización de servicios web , la virtualización de servicios se extiende a todos los aspectos de las aplicaciones compuestas: servicios, bases de datos , mainframes , ESB y otros componentes que se comunican mediante protocolos de mensajería comunes. [3] [4] [5] Otras herramientas similares se denominan simuladores de API , herramientas de simulación de API y dobles de prueba por cable .
La virtualización de servicios emula únicamente el comportamiento de los componentes dependientes específicos que los desarrolladores o evaluadores deben ejercitar para completar sus transacciones de un extremo a otro. En lugar de virtualizar sistemas completos, virtualiza sólo porciones específicas de comportamiento dependiente críticos para la ejecución de tareas de desarrollo y prueba. Esto proporciona suficiente lógica de aplicación para que los desarrolladores o evaluadores obtengan lo que necesitan sin tener que esperar a que el servicio real esté completo y disponible. Por ejemplo, en lugar de virtualizar una base de datos completa (y realizar toda la gestión de datos de prueba asociada, así como configurar la base de datos para cada sesión de prueba), monitorea cómo interactúa la aplicación con la base de datos y luego emula el comportamiento de la base de datos relacionada (el SQL consultas que se pasan a la base de datos, los conjuntos de resultados correspondientes que se devuelven, etc.). [6] [7]
La virtualización de servicios implica la creación e implementación de un "activo virtual" que simula el comportamiento de un componente real que se requiere para ejecutar la aplicación bajo prueba, pero cuyo acceso es difícil o imposible para fines de desarrollo y prueba.
Un activo virtual sustituye a un componente dependiente al escuchar las solicitudes y devolver una respuesta adecuada, con el rendimiento adecuado. Para una base de datos, esto podría implicar escuchar una declaración SQL y luego devolver filas de origen de datos. Para un servicio web, esto podría implicar escuchar un mensaje XML a través de HTTP , JMS o MQ y luego devolver otro mensaje XML. La funcionalidad y el rendimiento del activo virtual pueden reflejar la funcionalidad/rendimiento real del componente dependiente, o pueden simular condiciones excepcionales (como cargas extremas o condiciones de error) para determinar cómo responde la aplicación bajo prueba en esas circunstancias.
Los activos virtuales suelen ser creados por:
Luego se configuran aún más para representar datos, funcionalidades y tiempos de respuesta específicos.
Los activos virtuales se implementan localmente o en la nube (pública o privada). Con los entornos de desarrollo/prueba configurados para utilizar los activos virtuales en lugar de los componentes dependientes, los desarrolladores o evaluadores pueden ejecutar la aplicación en la que están trabajando sin tener que esperar a que los componentes dependientes estén completos o sean fácilmente accesibles. [3] [4] [7]
Los analistas de la industria informan que la virtualización de servicios es más adecuada para "talleres de TI con experiencia significativa en 'saltar' pruebas de integración debido al 'software dependiente', y con un equipo de prueba razonablemente sofisticado. [8]
Un enfoque alternativo para solucionar las restricciones de acceso al entorno de prueba descritas en la introducción de este artículo es que los miembros del equipo desarrollen métodos auxiliares u objetos simulados que sustituyan a los recursos dependientes. La deficiencia de este enfoque se hizo evidente a principios de la década de 2000 con el surgimiento de la arquitectura orientada a servicios . [9] La proliferación de aplicaciones compuestas que dependen de numerosos servicios dependientes, además del aumento del desarrollo de software ágil tras la publicación del Manifiesto Ágil en 2001, hizo cada vez más difícil para los desarrolladores o evaluadores desarrollar manualmente el número, el alcance y la complejidad de Talones o simulacros necesarios para completar tareas de desarrollo y prueba para el desarrollo de aplicaciones empresariales modernas. [10]
El primer paso en la evolución del stubing a la virtualización de servicios fue la tecnología incluida en las herramientas de prueba SOA desde 2002. [11] Las primeras implementaciones de virtualización de servicios se diseñaron para automatizar el proceso de desarrollo de emulaciones simples tipo stub para que las aplicaciones compuestas pudieran ser probado de manera más eficiente. [12] A medida que los sistemas empresariales continuaron volviéndose cada vez más complejos y distribuidos, los proveedores de herramientas de software cambiaron su enfoque del stubping a la virtualización de servicios más centrada en el entorno. [2] Si bien el stubing aún se puede completar mediante el desarrollo y la gestión manual de stubs, lo que se conoce como "virtualización de servicios" se completa utilizando una de las tecnologías de virtualización de servicios comerciales disponibles (COTS) como plataforma para el desarrollo. y despliegue de sus "activos de virtualización de servicios". [10]
La creciente popularidad [13] del desarrollo de software ágil y DevOps ha creado una demanda de un nuevo conjunto de herramientas para ofrecer virtualización de servicios a las comunidades que trabajan de esta manera. [14] Prácticas como la entrega continua y el alejamiento del desarrollo de mainframe y monolitos hacia arquitecturas basadas en microservicios más distribuidas encajan bien con las capacidades de virtualización de servicios. Los equipos ágiles y DevOps prefieren trabajar con herramientas livianas que tengan menos sobrecarga acumulada y sin restricciones de licencia engorrosas. [15]