The QPath Blog
QTester APP beta 1: gestor de pruebas para el software cuántico
Circuitos de puertas cuánticasUno de los objetivos prioritarios de la Ingeniería del Software es el desarrollo de productos software de calidad, y en el caso de la computación cuántica, la emergente Ingeniería del Software Cuántico también debe velar por la calidad del software en todas sus formas.
Esto implica evaluar la corrección y el rendimiento de los algoritmos y programas cuánticos desde la perspectiva software, identificando y corrigiendo cualquier fallo o error, para garantizar que el software se comporte como se espera.
Los sistemas cuánticos son inherentemente diferentes de los sistemas clásicos y requieren diferentes enfoques de prueba. Esto, combinado con los retos de verificación que presentan las características específicas de los ordenadores cuánticos (como la superposición o el entrelazamiento), crea la necesidad de nuevos métodos sistemáticos para la verificación de la calidad de los programas cuánticos. El testing de software cuántico es, como todo lo relacionado con la computación cuántica, un nuevo campo de estudio relevante, repleto de retos por abordar y resolver.
Motivados por la novedad del tema y por la importancia de que el software cuántico sea testeado profesionalmente antes de ser liberarlo a la industria, a pesar de las enormes dificultades que esto implicaba dada la casi inexistente experiencia científica y técnica sobre las pruebas del software cuántico en 2019, basados en un diseño conceptual de QST, asumimos el reto de abordar la investigación sobre el testing del software cuántico. Desde entonces QST y el grupo de investigadores científicos de aQuantum, compuesto por los miembros del Grupo Alarcos, trabaja en estas tareas con el objetivo de determinar la viabilidad del desarrollo de un qtestware (conjunto de motores y generadores de casos de prueba) que permita asegurar el correcto funcionamiento del software en diferentes entornos cuánticos [1].
La investigación en curso contempla, atendiendo a las buenas prácticas de la Ingeniería de Software, el estudio de viabilidad del testing del software cuántico en los diferentes enfoques tecnológicos y, en cada uno de ellos, la investigación de diferentes técnicas y procedimientos de testing para poder evaluar y seleccionar los que mejores resultados aportan en cada enfoque tecnológico.
Entre las tareas relevantes de esta investigación sobre el testing de los circuitos de puertas cuánticas se destacan las siguientes:
· Búsqueda de errores habituales en circuitos cuánticos.
· Definición de las técnicas más adecuadas para el testing de circuitos de puertas cuánticas.
· Diseño de operadores de mutación cuánticos.
· Motor de generación de mutantes cuánticos.
· Diseño de los casos de pruebas
· Motor de ejecución.
· Construcción de perfil UML para testing cuántico.
Consolidados los primeros resultados de la investigación científica, el equipo de aQuantum abordó la no menos compleja tarea de extender esos resultados al ámbito de la investigación aplicada, lo que dio inicio al análisis, diseño y desarrollo de las herramientas más adecuadas para realizar el testing del software cuántico lo que, luego de superar más de un escollo técnico, nos permite presentar y compartir el uso de la primera versión beta de QTester (Ilustración 1), una APP de la plataforma QuantumPath® que proporciona diferentes opciones para realizar pruebas a los circuitos desarrollados con la plataforma QPath® para el enfoque tecnológico de puertas cuánticas.
Ilustración 1: Visión de la herramienta QTester, QPath® APP
Introducción al testing de circuitos cuánticos con QTester de QPath®
La herramienta QTester APP es parte del conjunto de aplicaciones de la plataforma QuantumPath®. En las versiones comerciales de QTester APP el Administrador de cada organización de QPath® será quien dará permiso a los miembros de sus equipos de prueba para acceder a la APP pero, para comenzar a trabajar con la versión 1 de la beta de QTester APP, es imprescindible con contar con una cuenta de usuario en QuantumPath®. En esta beta 1 de la aplicación, el acceso está soportado para todos los tipos de suscripción, incluido la “Free Developer”. Si no dispone de una cuenta de QuantumPath® deberá crear una cuenta de usuario Free Developer.
El acceso a la beta 1 de QTester APP se realiza desde la aplicación web de QPath®, en la sección QAPPS > QTester:
Ilustración 2: Acceso a QTester APP desde QuantumPath®
Si ya se dispone de una cuenta de usuario en QuantumPath® también se puede acceder directamente a través del siguiente enlace con las credenciales de QPath®:
· https://core.quantumpath.app/QAPPSTESTING
En la página de login de esta versión beta 1 de la aplicación, el usuario simplemente deberá proporcionar las mismas credenciales con las que accede a QuantumPath®.
Ilustración 3: Formulario de autenticación
Una vez autenticado, la aplicación permite al usuario trabajar en diferentes proyectos de testing, siendo estos contenedores de circuitos cuánticos sobre los que se va a lanzar un proceso de testing.
Para crear un nuevo proyecto, el usuario no tiene más que hacer clic en el botón “New Project” y proporcionar un nombre y una descripción al mismo.
Ilustración 4: Formulario de creación de un proyecto de testing
Una vez dentro de un proyecto de pruebas, el usuario puede añadir un circuito o sistema a probar (SUT de las siglas en inglés “System Under Test”), del catálogo de circuitos de QuantumPath® a los que el usuario tenga acceso.
Ilustración 5: Formulario para añadir un SUT a un proyecto de testing
Sobre el circuito seleccionado, que ahora queda vinculado al proyecto de testing, QTester APP permite lanzar un proceso de testing basado en casos de prueba. Esta técnica, siguiendo la filosofía del testing de software clásico, consiste en la definición de casos de uso de prueba, con una entrada y una salida esperada al circuito que se va a testear. Realizando un número elevado de ejecuciones de cada caso de uso, el sistema permite obtener un muestreo de resultados lo suficientemente amplio como para eliminar el indeterminismo intrínseco de los circuitos cuánticos y poder validar, en base a unos porcentajes configurados por el tester, la validez o no de cada caso de uso.
Complementariamente, la herramienta permite evaluar la calidad de un conjunto de casos de prueba, mediante la técnica de testing basado en mutantes. Esta técnica consiste en la generación de circuitos “mutantes”, aplicando pequeños cambios intencionados en el circuito original, y la ejecución de los casos de prueba sobre cada mutante, con el objetivo de evaluar la efectividad de la test suite.
Ilustración 6: Formulario de selección del tipo de prueba
Testing basado en casos de uso de prueba
Este tipo de testing consiste en la definición de casos de prueba, donde el usuario proporciona un conjunto de entradas y un conjunto de salidas esperadas. El sistema ejecuta de forma aislada cada caso de prueba en un simulador o dispositivo cuántico y analiza los resultados, comparándolos con la salida esperada para establecer el éxito o fallo del caso de prueba.
Para lanzar una prueba de este tipo, el usuario primero debe seleccionar si desea lanzarla a partir de los datos de una prueba anterior, o si por el contrario quiere inicializarla desde cero.
Ilustración 7: Testing basado en casos de prueba – inicialización
Seguidamente, el usuario debe indicar los casos de uso a ejecutar por el sistema. Cada caso de uso consiste en:
· Entrada: Un array de valores 0 o 1 que representa el valor de inicialización de cada cúbit del circuito.
· Salida esperada: Un array de valores 0 o 1 que representa el valor de salida esperado de cada cúbit del circuito. Cuando el valor de salida de algún cúbit sea indiferente, puede marcarse con un valor ‘X’.
· Probabilidad máxima y mínima: Rango de probabilidades (%) aceptado en el que debe aparecer el resultado esperado, calculado sobre el conjunto de 1000 ejecuciones del circuito que llevará a cabo del sistema.
Ilustración 8: Testing basado en casos de prueba – Definición de los casos de prueba
Por último, se selecciona la plataforma de ejecución de los casos de prueba. Debido a la alta carga de ejecución que puede suponer el testing, se recomienda seleccionar inicialmente un simulador cuántico.8
Ilustración 9: Testing basado en casos de prueba – Selección de la plataforma de ejecución
Al finalizar la ejecución, el sistema mostrará el resultado de cada caso de prueba, permitiendo generar un informe PDF con el resultado completo de la prueba.
Ilustración 10: Testing basado en casos de prueba – Resultado de la ejecución
Ilustración 11: Testing basado en casos de prueba – Resultado de un caso de prueba
Testing basado en mutantes.
El testing mediante mutación es una técnica que tiene como objetivo mejorar la calidad de una test suite y detectar nuevos errores que los casos de prueba no han podido identificar..
Ilustración 12: Visión general del proceso de testing de software cuántico basado en mutación
Tal y como se muestra en la anterior figura el proceso de testing basado en mutación implica los siguientes pasos:
· Generación de un conjunto de copias del circuito o sistema bajo test (SUT), denominados “mutantes. Estos mutantes se crean introduciendo fallos o errores en el código original mediante operadores de mutación que realizan cambios en determinadas puertas y qubits.
· Ejecución del conjunto de casos de prueba contra cada mutante en un dispositivo cuántico a través de la plataforma QuantumPath® y su API qSOA®.
· Análisis de los mutantes. Una vez ejecutados cada caso de prueba contra el conjunto de mutantes, el sistema se encarga de recoger el resultado y analizarlo, generando lo que se conoce como la “killing matrix” en la que cada mutante es etiquetado con uno de los siguientes estados:
o Killed: un mutante se considera “muerto” cuando al menos uno de los casos de prueba ejecutados contra él falla.
o Alive: un mutante se considera “vivo” cuando pasa todos los casos de prueba ejecutados contra él.
Calculando el porcentaje de mutantes que la test suite es capaz de “matar”, se obtiene lo que se conoce como “cobertura de mutación”, que es una métrica utilizada para medir la calidad del conjunto de casos de prueba: una alta cobertura de mutaciones indica que el conjunto de pruebas es eficaz para detectar fallas o errores, mientras que una baja cobertura de mutaciones sugiere que es posible que sea necesario mejorar el conjunto de pruebas. El análisis de los mutantes que no han sido matados por ningún caso de prueba puede ayudar además a identificar nuevos errores que no han sido detectados previamente por el conjunto original de casos de prueba.
Este proceso de testing puede ejecutarse iterativamente, refinando y mejorando el conjunto de casos de prueba hasta que la cobertura de mutación se acerque lo más posible al 100%, consiguiendo así una test suite lo suficientemente robusta y fiable, capaz de detectar la mayoría de los errores que podría contener el circuito original.
Desde QTester App, sobre un test en el que todos los casos de prueba definidos han pasado, el usuario puede comprobar la calidad de la test suite iniciando el proceso de testing por mutación.
Ilustración 13: Testing basado en mutantes – Inicialización
Inicialmente, el tester debe seleccionar el conjunto de operadores de mutación a aplicar sobre el circuito.
Ilustración 14: Testing basado en mutantes – Selección de operadores de mutación
Sobre el conjunto de mutantes generados, el usuario puede seleccionar aquellos que considere adecuados para probar.
Ilustración 15: Testing basado en mutantes – Selección de mutantes
Por último, el tester selecciona el simulador o máquina cuántica disponible en la plataforma QPath® sobre la que se lanzará la ejecución de los mutantes.
Ilustración 16: Testing basado en mutantes – Selección de la plataforma de ejecución
Ilustración 17: Testing basado en mutantes – Prueba en ejecución
Una vez finalizada la ejecución de los casos de prueba contra cada mutante, el sistema lleva a cabo el análisis de cada resultado en el cual se establece el estado (Killed o Alive) de cada mutante y calcula la cobertura de mutación, dividiendo el número de mutantes “muertos” por el total de mutantes generados. Cuanto más se acerque este porcentaje al 100%, la test suite se considerará más robusta.
Ilustración 18: Testing basado en mutantes – Killing matrix
Ilustración 19: Testing basado en mutantes – Resultado de ejecución de un mutante
Como utilidad, el sistema permite generar un informe en formato PDF con el resultado de la prueba.
El sistema permite al usuario lanzar este proceso tantes veces como desee, realizando correcciones en el circuito, modificando el conjunto de casos de prueba y analizando la calidad de la test suite, hasta que se garantice que el circuito bajo prueba no contiene errores y que los casos de prueba son eficaces para detectar errores en el futuro, pudiendo guardar finalmente los cambios en QuantumPath® como circuito testeado sin errores.
Resumen
El sistema permite al usuario lanzar tantas pruebas sobre el circuito como desee, realizando correcciones en el circuito y generando nuevos conjuntos de mutantes, hasta que el resultado de la prueba sea satisfactorio, pudiendo guardar finalmente los cambios en QuantumPath® como circuito testeado sin errores. Como se ha mostrado en el paso a paso del contenido, con la beta 1 de QTester APP es posible realizar el testing de circuitos cuánticos con dos tipos de testing: basados en casos de uso de prueba y basados en mutantes. Esto facilita al usuario optar el tipo de pruebas que considere más adecuada para cada circuito o, incluso, someter los circuitos complejos a ambos tipos de pruebas para lograr una mayor fiabilidad de la calidad del circuito cuántico a implementar en soluciones software críticas como, por ejemplo, en la salud.
La realización de las pruebas del software cuántico con QTester APP de QPath® repercute positivamente en la calidad del software cuántico desarrollado y también tiene un efecto económico positivo si las pruebas se realizan antes de ejecutar las soluciones en los ordenadores cuánticos, no solo porque de esta forma se evita el tiempo de ejecución de una solución con errores, sino también el coste que puede conllevar el uso de ordenadores cuánticos de pago para realizar ejecuciones con software que aún presenta defectos en su desarrollo.
Implementada la arquitectura y los requisitos fundamentales que hemos definido en la beta 1 para testear los circuitos de puertas cuánticas, el proyecto de desarrollo de QTester APP continúa en curso. Su roadmap prevé ampliar gradualmente sus procesos, añadir progresivamente nuevos tipos de testing del software cuántico para los diferentes enfoques tecnológicos y, sobre todo, incorporar funcionalidades avanzadas y servicios especializados que, aplicando los principios de Talavera Manifesto[1], faciliten a los desarrolladores poder ofrecer programas cuánticos con cero defectos y asegura la calidad del software cuántico creado con QuantumPath®.
Con la beta 1 de QTester APP damos los primeros pasos prácticos para aportar herramientas a los desarrolladores de circuitos de puertas cuánticas fundamentadas en las buenas prácticas de la Ingeniería del Software Cuántico. Con el acceso público a la beta, facilitamos que el software, basado en una amplia experiencia de usuarios, de variados casos de prueba, etc., se someta a una profunda prueba práctica de la APP que permitirá verificar, gracias al uso, no solo su utilidad para realizar el testing del software cuántico, sino también que la APP esté libre de posibles fallos y, de esta forma, contribuir a asegurar un adecuado nivel de calidad. Además, compartir con los usuarios el uso de la beta 1 nos ayudará, con la métrica de uso anónimo que ello generará, a mejorar QTester APP de QPath®, incorporando a la misma lo más relevante de las experiencias de los usuarios. Iremos informando regularmente de estos avances.
[1] Polo, M. García, I. García, A. Serrano, M.A. Piattini, M. Martínez, A. y Peterssen, G. (2022) Capítulo 7, Pruebas de software cuántico. En Peterssen, G. Hevia, J. L. Piattini, M. y otros (Ed.), Ingeniería del Software Cuántico & QuantumPath®. aQuantum.
[2] Idem.
[3] The Talavera Manifesto for Quantum Software Engineering and Programming, 2020. https://www.aquantum.es/manifesto/