Navegación

Búsqueda

Búsqueda avanzada

Search-based mutant selection for efficient test suite improvement: Evaluation and results

Las técnicas basadas en búsqueda se han aplicado a casi todas las áreas de la Ingeniería del Software, especialmente a la prueba de software, con el fin de abordar problemas de difícil resolución. Sin embargo, el problema de la selección de mutantes con el objetivo de mejorar el conjunto de pruebas no ha sido explorado tanto como otros problemas del mismo área, como puede ser la generación de datos de prueba. En este artículo aplicamos selección de mutantes basada en búsqueda para la mejora eficiente de la calidad de las pruebas. Concretamente, usamos la técnica conocida como prueba de mutación evolutiva (PME), la cual permite reducir el número de mutantes pero sin pérdida significativa de efectividad. A pesar de los beneficios que su aplicación ha reportado, los resultados empíricos hasta el momento han sido derivados de un número limitado de casos de estudio, un único conjunto de operadores de mutación así como una métrica poco representativa del rendimiento real de la técnica. Este artículo trata de aliviar estos defectos definiendo una nueva metodología para la evaluación de PME basada en la mejora real que se logra en el conjunto de pruebas al usar la estrategia evolutiva. Después, aplicamos esta metodología en nuevos experimentos con un conjunto de programas en C++ reales. Los resultados muestran que PME proporciona un buen rendimiento para la mayoría de casos y niveles de exigencia de mejora de las pruebas (en torno al 45% mejor que la selección aleatoria en el mejor caso). Los resultados revelan que incluso un conjunto reducido de mutantes seleccionado con PME es útil para incrementar la calidad de las pruebas, especialmente en los programas con un número mayor de mutantes. En definitiva, estos resultados apoyan el uso de técnicas basadas en búsqueda para resolver el problema de la selección de mutantes para la mejora eficiente de las pruebas. Adicionalmente, identificamos ciertos aspectos que previsiblemente podrían ayudar a mejorar la técnica PME.

ARTICULO RELEVANTE:Assessment of C++ object-oriented mutation operators: A selective mutation approach

La prueba de mutaciones está considerada como una técnicaefectiva, pero que es costosa en contrapartida. Varios estudios han pues-to de manifiesto que pueden existir mutantes redundantes y que, unavez eliminados, no suponen pérdida de la efectividad de la técnica. De lamisma manera, algunos mutantes pueden ser más efectivos que otros ala hora de guiarnos en la generación de nuevos casos de pruebas de altacalidad. En base a estos dos hallazgos, en este artículo presentamos unaevaluación de los operadores de mutación definidos para C++ en la queclasificamos dichos operadores en dos rankings diferentes tras estudiar losmutantes que cada uno de los operadores genera. La primera clasificaciónordena los operadores según el grado de redundancia de sus mutantes yla segunda en base a la calidad de las pruebas que ayudan a diseñar. Unavez establecidos ambos rankings, llevamos a cabo un proceso de mutaciónselectiva en el que seleccionamos subconjuntos de operadores desechandolos menos valorados. El objetivo es determinar qué relación existe entrela reducción que se obtendría al eliminar estos operadores y la pérdidade efectividad. Los resultados experimentales muestran de una maneraconsistente que al seleccionar los operadores que están en la parte altadel ranking podemos obtener una reducción significativa en el númerode mutantes con una mínima pérdida de efectividad. Esto se produce enambas clasificaciones a pesar de que los operadores se ordenan de for-ma distinta, lo cual valida el planteamiento de valorar los operadores demutación de una manera diferente según nuestro objetivo sea evaluar orefinar el conjunto de pruebas.P. Delgado-Pérez, S. Segura and I. Medina-Bulo, “Assessment of C++ object-oriented mutation operators: A selective mutation approach,” Software Testing,Verification and Reliability, vol. 27, num. 4–5, pp. e1630, 2017. http://dx.doi.org/10.1002/stvr.1630Factor de impacto revista: 1.588

Evaluación de la Mejora de Conjuntos de Casos de Prueba mediante la Prueba de Mutación Evolutiva

La Prueba de Mutación Evolutiva (PME) es una técnica surgida recientemente para reducir el número de mutantes a generar en la prueba de mutaciones y, por consiguiente, su alto coste computacional. Esto se logra a través de un algoritmo genético, el cual trata de localizar la mayor cantidad posible de los mutantes con potencial para guiar a la mejora del conjunto de casos de prueba (denominados mutantes fuertes) en ese subconjunto de mutantes generado. La técnica ha sido evaluada precisamente respecto a esa capacidad de encontrar mutantes fuertes, pero tal análisis omite el hecho de que parte de esos mutantes fuertes puede no aportar a la mejora de las pruebas ya que son mutantes equivalentes. Por esa razón, en este artículo se propone una nueva metodología para la evaluación de la PME. Esta realiza una estimación del refinamiento conseguido del conjunto de pruebas a través de los mutantes seleccionados por el algoritmo genético. Esta metodología se emplea sobre cuatro programas en C++ que aplican orientación a objetos, mostrando que la PME es capaz de aumentar el conjunto de pruebas generando un porcentaje menor de mutantes que la selección aleatoria.

Mejora del Rendimiento de la Prueba de Mutación Evolutiva mediante la Reducción de Mutantes Equivalentes

La Prueba de Mutación Evolutiva (PME) busca la generación de un subconjunto de mutantes mediante un algoritmo genético con el objetivo de mejorar el conjunto de casos de prueba a un menor coste. A pesar de los resultados positivos obtenidos hasta el momento empleando esta técnica, otros avances paralelos en la prueba de mutaciones pueden aumentar la eficiencia de la PME. En este artículo se propone la incorporación en herramientas que aplican la PME de nuevas técnicas para ayudar a detectar mutantes que son equivalentes al programa original, exponiendo los beneficios de esta fusión.

MuBPEL: una Herramienta de Mutación Firme para WS-BPEL 2.0

La prueba de mutaciones evalúa la calidad de un conjunto de casos de prueba realizando cambios en el programa y comprobando si las pruebas los detectan. Se ha aplicado con éxito sobre programas FORTRAN, C y Java, entre otros. Dos problemas comunes son la dificultad de detectar cambios que no modifican el significado del programa, y su alto coste computacional. La mutación firme es una variante de la mutación fuerte tradicional que compara estados intermedios. En este trabajo presentamos MuBPEL, una herramienta de código abierto de mutación firme para composiciones de servicios Web escritas en WS-BPEL 2.0. Los operadores de mutación están implementados en XSLT 2.0 y su organización permite añadir nuevos operadores de forma sencilla. MuBPEL integra el motor ActiveBPEL y la biblioteca de pruebas unitarias BPELUnit de forma transparente y permite paralelizar el trabajo.

GAmeraHOM: una herramienta de generación de mutantes de orden superior para WS-BPEL

El desarrollo de técnicas para que la prueba de mutaciones disminuya el tiempo de cómputo y reduzca los mutantes producidos no han ido en paralelo al desarrollo de herramientas generadoras de mutantes que las implementen. Una de las técnicas de optimización propuestas sugiere utilizar mutantes de orden superior, sin embargo apenas existen herramientas que la implementen. En este trabajo se presenta GAmeraHOM, el primer generador de mutantes de orden superior para WS-BPEL, basado en la mutación evolutiva mediante el empleo de un algoritmo genético. Esto conlleva una reducción del número de mutantes generados y ejecutados, seleccionando principalmente los mutantes difíciles de matar y los potencialmente equivalentes. Este conjunto reducido permitirá mejorar la calidad del conjunto de casos de prueba. La herramienta GAmeraHOM provee una configuración fácilmente parametrizable y además permite adaptar el código del generador a otros lenguajes de forma independiente.

Operadores de Mutacíon de Cobertura para WS-BPEL 2.0

Dada la importancia que en los últimos años están cobrando los servicios web en el ámbito de los procesos de negocio, es imprescindible contar con un soporte de casos de prueba lo suficientemente amplio como para detectar fallos y hacer que se apliquen criterios de cobertura sobre estos servicios. En este contexto está enmarcada la prueba de mutaciones, una técnica de prueba basada en fallos que requiere la definicíon de un conjunto de operadores de mutacíon para realizar cambios sintácticos en el programa que se desea probar. En este trabajo se define e implementa, por primera vez, un conjunto de operadores de mutacíon de cobertura para WS-BPEL 2.0, que aplican los criterios de cobertura definidos dentro del contexto de las pruebas de caja blanca. Además se muestran los resultados experimentales obtenidos al aplicar dichos operadores a varias composiciones WS-BPEL, viendo la aportacíon de éstos en el proceso de prueba.

Generación de Mutantes Válidos en el Lenguaje de Programación C++

La prueba de mutaciones es una técnica basada en fallos que se ha desarrollado alrededor de un amplio rango de lenguajes de programación. Sin embargo, la construcción de un marco de trabajo de prueba de mutaciones no comercial para C++ ha sido pospuesto en favor de otros lenguajes, principalmente por la variedad de alternativas que ofrece C++. Este artículo presenta una solución factible y completa para la implementación de los operadores de mutación en C++, la cual se basa en la búsqueda de patrones en el árbol de sintaxis abstracta (AST) que el compilador Clang genera a partir del código fuente. Estos patrones se construyen según las reglas que determinan los distintos operadores de mutación, permitiendo localizar los puntos del código en los que es posible introducir una mutación. Asimismo, en el artículo se abordan distintas situaciones que han de ser consideradas para la validez de los mutantes creados. Este proceso se ilustra a través de un operador de mutación a nivel de clase, si bien este enfoque sirve para crear operadores a cualquier nivel del lenguaje.

Herramienta para la Prueba de Mutaciones en el Lenguaje C++

La prueba de mutaciones es una técnica basada en fallos en torno a la cual se han elaborado herramientas para un amplio abanico de lenguajes de programación. Sin embargo, el desarrollo de un marco de prueba de mutaciones no comercial para C++ estaba pendiente. En este artículo se presenta una herramienta que permite analizar código C++, generar mutantes y ejecutar un conjunto de casos de prueba para obtener resultados que nos permitan determinar su efectividad en la detección de errores en el código. La herramienta está diseñada para permitir la inclusión de nuevos operadores para cubrir cualquier característica del lenguaje. En este documento, el uso de la herramienta se muestra a través de un operador de mutación al nivel de clase.