En informática , ingeniería de software y pruebas de software , un oráculo de prueba (o simplemente un oráculo ) es un mecanismo para determinar si una prueba ha pasado o no. [1] El uso de oráculos implica comparar la (s) salida (s) del sistema bajo prueba, para una entrada de caso de prueba dada , con la (s) salida (s) que el oráculo determina que el producto debería tener. El término "oráculo de prueba" fue introducido por primera vez en un artículo de William E. Howden. [2] Elaine Weyuker exploró trabajos adicionales sobre diferentes tipos de oráculos . [3]
Los oráculos a menudo operan por separado del sistema bajo prueba. [4] Sin embargo, las condiciones posteriores del método son parte del sistema bajo prueba, como oráculos automatizados en modelos de diseño por contrato . [5] Determinar la salida correcta para una entrada determinada (y un conjunto de estados del programa o del sistema) se conoce como problema de oráculo o problema de prueba de oráculo, [6] : 507 que es un problema mucho más difícil de lo que parece e implica trabajar con problemas relacionados con la controlabilidad y la observabilidad. [7]
Categorías
Una encuesta de literatura de investigación que abarcó de 1978 a 2012 [6] encontró varias categorías potenciales de oráculos de prueba.
Especificado
Estos oráculos se asocian típicamente con enfoques formalizados para el modelado de software y la construcción de código de software. Están conectados a la especificación formal , [8] diseño basado en modelos que puede usarse para generar oráculos de prueba, [9] especificación de transición de estado para la cual se pueden derivar oráculos para ayudar a las pruebas basadas en modelos [10] y las pruebas de conformidad del protocolo , [ 11] y diseño por contrato para el cual el oráculo de prueba equivalente es una afirmación .
Los oráculos de prueba específicos tienen varios desafíos. La especificación formal se basa en la abstracción, que a su vez, naturalmente, puede tener un elemento de imprecisión, ya que todos los modelos no pueden capturar todo el comportamiento. [6] : 514
Derivado
Un oráculo de prueba derivado diferencia el comportamiento correcto e incorrecto mediante el uso de información derivada de los artefactos del sistema. Estos pueden incluir documentación, resultados de ejecución del sistema y características de las versiones del sistema bajo prueba. [6] : 514 Los conjuntos de pruebas de regresión (o informes) son un ejemplo de un oráculo de prueba derivado: se basan en el supuesto de que el resultado de una versión anterior del sistema se puede utilizar como ayuda (oráculo) para una versión futura del sistema. Las características de rendimiento previamente medidas se pueden utilizar como un oráculo para futuras versiones del sistema, por ejemplo, para generar una pregunta sobre la posible degradación del rendimiento observada. La documentación textual de versiones anteriores del sistema se puede utilizar como base para orientar las expectativas en futuras versiones del sistema.
Un pseudo-oráculo [6] : 515 entra en la categoría de oráculo de prueba derivado. Un pseudo-oráculo, como lo define Weyuker, [12] es un programa escrito por separado que puede tomar la misma entrada que el programa o sistema bajo prueba para que sus salidas puedan ser comparadas para entender si puede haber un problema que investigar.
Un oráculo parcial [6] : 515 es un híbrido entre el oráculo de prueba especificado y el oráculo de prueba derivado. Especifica propiedades importantes (pero no completas) del sistema bajo prueba. Por ejemplo, las pruebas metamórficas explotan esas propiedades, llamadas relaciones metamórficas, en múltiples ejecuciones del sistema.
Implícito
Un oráculo de prueba implícito se basa en información y suposiciones implícitas. [6] : 518 Por ejemplo, puede haber alguna conclusión implícita de un bloqueo del programa, es decir, comportamiento no deseado: un oráculo para determinar que puede haber un problema. Hay varias formas de buscar y probar el comportamiento no deseado, ya sea que algunos lo llamen prueba negativa, donde hay subconjuntos especializados como fuzzing .
Existen limitaciones en los oráculos de prueba implícitos, ya que se basan en conclusiones y suposiciones implícitas. Por ejemplo, un bloqueo de un programa o proceso puede no ser un problema prioritario si el sistema es tolerante a fallas y, por lo tanto, opera bajo una forma de autocuración / autogestión . Los oráculos de prueba implícitos pueden ser susceptibles a falsos positivos debido a las dependencias del entorno.
Humano
Cuando no se pueden usar oráculos de prueba especificados, derivados o implícitos, se requiere la participación humana para determinar los oráculos de prueba. [7] Estos pueden considerarse enfoques cuantitativos y cualitativos. [6] : 519–520 Un enfoque cuantitativo tiene como objetivo encontrar la cantidad correcta de información para recopilar en un sistema bajo prueba (por ejemplo, resultados de prueba) para que un interesado pueda tomar decisiones sobre la adecuación al propósito o la publicación de El software. Un enfoque cualitativo tiene como objetivo encontrar la representatividad e idoneidad de los datos de prueba de entrada y el contexto de la salida del sistema bajo prueba. Un ejemplo es usar datos de prueba realistas y representativos y dar sentido a los resultados (si son realistas). Estos pueden ser guiados por enfoques heurísticos , como instintos, reglas generales, ayudas para listas de verificación y experiencia para ayudar a adaptar la combinación específica seleccionada para el programa / sistema bajo prueba.
Ejemplos de
Los oráculos de prueba se basan más comúnmente en especificaciones y documentación . [13] [14] Una especificación formal utilizado como entrada para el diseño basado en modelo y pruebas basadas en modelos sería un ejemplo de un oráculo de prueba especificada . El oráculo basado en modelos usa el mismo modelo para generar y verificar el comportamiento del sistema. [15] La documentación que no es una especificación completa del producto, como una guía de uso o instalación, o un registro de características de rendimiento o requisitos mínimos de la máquina para el software, normalmente sería un oráculo de prueba derivado.
Un oráculo de coherencia compara los resultados de una ejecución de prueba con otra en busca de similitudes. [16] Este es otro ejemplo de un oráculo de prueba derivado.
Un oráculo para un programa de software podría ser un segundo programa que usa un algoritmo diferente para evaluar la misma expresión matemática que el producto bajo prueba. Este es un ejemplo de un pseudo-oráculo, que es un oráculo de prueba derivado. [12] : 466
Durante la búsqueda de Google , no tenemos un oráculo completo para verificar si la cantidad de resultados devueltos es correcta. Podemos definir una relación metamórfica [17] tal que una búsqueda de seguimiento restringida producirá menos resultados. Este es un ejemplo de un oráculo parcial, que es un híbrido entre el oráculo de prueba especificado y el oráculo de prueba derivado.
Un oráculo estadístico utiliza características probabilísticas, [18] por ejemplo con el análisis de imágenes donde se define un rango de certeza e incertidumbre para que el oráculo de prueba pronuncie una coincidencia o no. Este sería un ejemplo de un enfoque cuantitativo en un oráculo de prueba humano.
Un oráculo heurístico proporciona resultados representativos o aproximados sobre una clase de entradas de prueba. [19] Este sería un ejemplo de un enfoque cualitativo en un oráculo de prueba humano.
Referencias
- ^ Kaner, Cem; Un curso en pruebas de software de caja negra , 2004
- ^ Howden, WE (julio de 1978). "Estudios teóricos y empíricos de pruebas de programas". Transacciones IEEE sobre ingeniería de software . 4 (4): 293-298. doi : 10.1109 / TSE.1978.231514 .
- ^ Weyuker, Elaine J .; "The Oracle Assumption of Program Testing", en Actas de la 13ª Conferencia Internacional sobre Ciencias de Sistemas (ICSS), Honolulu, HI, enero de 1980 , págs. 44-49
- ^ Jalote, Pankaj; Un enfoque integrado de la ingeniería de software , Springer / Birkhäuser, 2005, ISBN 0-387-20881-X
- ^ Meyer, Bertrand; Fiva, Arno; Ciupa, Ilinca; Leitner, Andreas; Wei, Yi; Stapf, Emmanuel (septiembre de 2009). "Programas que se prueban a sí mismos". Computadora . 42 (9): 46–55. doi : 10.1109 / MC.2009.296 .
- ^ a b c d e f g h Barr, Earl T .; Harman, Mark; McMinn, Phil; Shahbaz, Muzammil; Yoo, Shin (noviembre de 2014). "El problema de Oracle en las pruebas de software: una encuesta" (PDF) . Transacciones IEEE sobre ingeniería de software . 41 (5): 507–525. doi : 10.1109 / TSE.2014.2372785 .
- ^ a b Ammann, Paul; y Offutt, Jeff; "Introducción a las pruebas de software", Cambridge University Press , 2008, ISBN 978-0-521-88038-1
- ^ Börger, E (1999). Hutter, D; Stephan, W; Traverso, P; Ullman, M (eds.). Diseño y análisis de sistemas de alto nivel utilizando máquinas de estado abstracto . Métodos formales aplicados - Tendencias FM 98 . Apuntes de conferencias en informática. 1641 . págs. 1-43. CiteSeerX 10.1.1.470.3653 . doi : 10.1007 / 3-540-48257-1_1 . ISBN 978-3-540-66462-8.
- ^ Peters, DK (marzo de 1998). "Utilizando oráculos de prueba generados a partir de la documentación del programa". Transacciones IEEE sobre ingeniería de software . 24 (3): 161-173. CiteSeerX 10.1.1.39.2890 . doi : 10.1109 / 32.667877 .
- ^ Utting, Mark; Pretschner, Alexander; Legeard, Bruno (2012). "Una taxonomía de enfoques de prueba basados en modelos" (PDF) . Pruebas, verificación y confiabilidad de software . 22 (5): 297–312. doi : 10.1002 / stvr.456 . ISSN 1099-1689 .
- ^ Gaudel, Marie-Claude (2001). Craeynest, D .; Strohmeier, A (eds.). Pruebas a partir de especificaciones formales, un enfoque genérico . Tecnologías de software fiables - Ada-Europe 2001 . Apuntes de conferencias en informática. 2043 . págs. 35–48. doi : 10.1007 / 3-540-45136-6_3 . ISBN 978-3-540-42123-8.
- ^ a b Weyuker, EJ (noviembre de 1982). "Sobre la prueba de programas no probables" . The Computer Journal . 25 (4): 465–470. doi : 10.1093 / comjnl / 25.4.465 .
- ^ Peters, Dennis K. (1995). Generación de una prueba de Oracle a partir de la documentación del programa (tesis de M. Ing.). Universidad McMaster. CiteSeerX 10.1.1.69.4331 .
- ^ Peters, Dennis K .; Parnas, David L. "Generación de una prueba de Oracle a partir de la documentación del programa" (PDF) . Actas del Simposio Internacional de 1994 sobre Pruebas y Análisis de Software . ISSTA. Prensa ACM. págs. 58–65.
- ^ Robinson, Harry; Pruebas basadas en modelos de estados finitos con poco presupuesto , STAR West 1999
- ^ Hoffman, Douglas; Análisis de una taxonomía para oráculos de prueba , Semana de la calidad, 1998
- ^ Zhou, ZQ; Zhang, S .; Hagenbuchner, M .; Tse, TH; Kuo, F.-C .; Chen, TY (2012). "Pruebas funcionales automatizadas de servicios de búsqueda online". Pruebas, verificación y confiabilidad de software . 22 (4): 221–243. doi : 10.1002 / stvr.437 . hdl : 10722/123864 .
- ^ Mayer, Johannes; Guderlei, Ralph (2004). "Probar oráculos utilizando métodos estadísticos" (PDF) . Actas del Primer Taller Internacional sobre Calidad del Software, Notas de la Conferencia en Informática . Primer Taller Internacional de Calidad del Software. Saltador. págs. 179–189.
- ^ Hoffman, Douglas; Oráculos de pruebas heurísticas , Revista de pruebas de software e ingeniería de calidad, 1999
Bibliografía
- Carpeta, Robert V. (1999). "Capítulo 18 - Oráculos" en la prueba de sistemas orientados a objetos: modelos, patrones y herramientas , Addison-Wesley Professional, 7 de noviembre de 1999, ISBN 978-0-201-80938-1