Las pruebas de mutación (MT) tienen como objetivo la evaluación de los casos de prueba midiendo su eficiencia para detectar fallos. Esta técnica implica modificar los programas bajo prueba para emular fallos comunes de programación y evaluar si los casos de prueba existentes detectan dichas mutaciones. Las pruebas de mutación se han estudiado de forma exhaustiva desde 1970, y se han propuesto muchas herramientas de pruebas de mutación para lenguajes utilizados ampliamente como C, Java, Fortran, Ada y SQL, y notaciones como redes de Petri. No obstante, crear herramientas de pruebas de mutación es costoso y propenso a errores, lo que puede obstaculizar su creación para nuevos lenguajes de programación y lenguajes de dominio-específico (de modelado).
En este trabajo, se propone un entorno llamado Wodel-Test que reduce el esfuerzo para crear herramientas de pruebas de mutación. Con este objetivo, se sigue un enfoque dirigido por modelos por medio del que se sintetizan las herramientas de pruebas de mutación a partir de una descripción de alto nivel. Esta descripción utiliza el lenguaje de dominio específico Wodel para definir y ejecutar las mutaciones de modelos. Wodel es independiente del dominio, es decir, permite la creación de operadores de mutación para cualquier lenguaje definido mediante un meta-modelo. Partiendo de la definición de los operadores de mutación, Wodel-Test genera un entorno de pruebas de mutación que transforma los programas bajo prueba en modelos, aplica los operadores de mutación, y evalúa el conjunto de pruebas contra los mutantes generados, proporcionando una rica colección de métricas de pruebas de mutación. En el trabajo, se proporciona una evaluación del enfoque basada en la creación de herramientas de pruebas de mutación para Java y el lenguaje de transformación de modelos ATL.
Van Young, Eric. - La otra rebelión. La lucha por la independencia de México,...
Wodel-Test: A Model-Based Framework for Language-Independent Mutation Testing (spanish)
1. WODEL-TEST:
A MODEL-BASED FRAMEWORK
FOR LANGUAGE-INDEPENDENT
MUTATION TESTING
P. Gómez-Abajo , E. Guerra, J. de Lara
Modelling&Software Engineering Research Group
http://miso.es
Universidad Autónoma de Madrid (Spain)
JISBD, Septiembre 2021
Mercedes G. Merayo
Design and Testing of Reliable Systems Research Group
http://antares.sip.ucm.es/testing
Universidad Complutense de Madrid (Spain)
2. MOTIVACIÓN
• Las herramientas de pruebas de mutación son
• específicas para un lenguaje
• se desarrollan manualmente
• tienen un alto coste de mantenimiento
2
Se propone el entorno Wodel-Test - extensión a Wodel
para la generación de herramientas
de pruebas de mutación
Se implementan dos herramientas de pruebas de mutación
Wodel-Test para Java y Wodel-Test para ATL
3. ¿QUÉ SON LAS PRUEBAS
DE MUTACIÓN?
• Enfoque de pruebas de
software para evaluar la
calidad de los conjuntos de
pruebas
• Introducción de cambios
sintácticos en un programa
mediante operadores de
mutación
• Las mutaciones introducidas
emulan fallos comunes de
programación
• Facilita mejorar la calidad de
los conjuntos de pruebas
3
6. HERRAMIENTA DE PRUEBAS DE
MUTACIÓN GENERADA
1. Explorador de proyectos
2. Ejemplo de programa mutante
3. Conjunto de pruebas
4. Resultados globales del
proceso de pruebas de
mutación
6
7. EVALUACIÓN
7
RQ1
¿Permite Wodel-Test crear herramientas de pruebas de
mutación con capacidades similares a las herramientas de
pruebas de mutación creadas manualmente?
• Comparativa de Wodel-Test para Java con herramientas existentes de
pruebas de mutación para Java
•
• Implementación de Wodel-Test para ATL con los operadores de mutación
introducidos en Troya et al.[1]
[1] Troya, J., Bergmayr, A., Burgueño, L. y Wimmer, M.: Towards systematic mutations for and with ATL model
transformations. En International conference on software testing, verification and validation workshops (ICSTW),
págs. 1–10, 2015
RQ2
¿Wodel-Test es efectivo para especificar herramientas de
pruebas de mutación?
8. EVALUACIÓN RQ1
8
Major Javalanche PITest LittleDarwin muJava Wodel-Test/Java
N. de operadores 30 (por
defecto)
19 40 28 47 77 (por defecto)
Extensibilidad de
ops.
Sí (DSL) No API No No Sí (DSL)
Artefacto mutado Bytecode Bytecode Bytecode AST Bytecode Modelo
Código del
mutante
No No Sí Sí Sí Sí
Detección
equivalentes
No Sí (invariantes
dinámicas)
No No No Sí (TCE)
Tipo de informe CSV HTML HTML HTML GUI Vistas interactivas
Número de
mutantes
Mutation score
Mutantes
muertos/vivos
Número Número Número Número Número, lista Número, lista
Cobertura de
operadores
Número Número Número Número, lista Número, lista
Mutantes por clase
Mutantes por
prueba
Pruebas por
mutante
✓ ✓ ✓ ✓
✓ ✓ ✓ ✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
✓
RQ1
Capacidades similares?
9. • Aplicación del proceso de pruebas de mutación sobre el proyecto functional-
matrix1:
• 1https://github.com/soursop/functional-matrix-operator
Herramienta Mutantes
(muertos/vivos)
Mutation
score (%)
Tiempo
ejecución
Tiempo por
mutante (s)
Major 1638 (331/864) 20,21 13 h 42 m 40s 30,14
PITest 918 (321/597) 34,97 1 h 11 m 20 s 4,66
LittleDarwin 439 (130/309) 29,61 3 h 30 m 39 s 28,79
muJava 2589 (557/2032) 21,51 5 h 30 m 10 s 7,65
Wodel-
Test/Java
4756 (985/3771) 20,71 3 h 24 m 23 s 2,58
9
EVALUACIÓN RQ1
RQ1
Capacidades similares?
10. • Aplicación del proceso de pruebas de mutación sobre el proyecto functional-
matrix1:
• 1https://github.com/soursop/functional-matrix-operator
Herramienta Mutantes
(muertos/vivos)
Mutation
score (%)
Tiempo
ejecución
Tiempo por
mutante (s)
Major 1638 (331/864) 20,21 13 h 42 m 40s 30,14
PITest 918 (321/597) 34,97 1 h 11 m 20 s 4,66
LittleDarwin 439 (130/309) 29,61 3 h 30 m 39 s 28,79
muJava 2589 (557/2032) 21,51 5 h 30 m 10 s 7,65
Wodel-
Test/Java
4756 (985/3771) 20,71 3 h 24 m 23 s 2,58
10
EVALUACIÓN RQ1
RQ1
Capacidades similares?
RQ1: Sí, Wodel-Test genera herramientas
de MT con capacidades similares
11. EVALUACIÓN RQ2
• Wodel-Test para ATL con los operadores de mutación
introducidos en el trabajo de Troya et al.
• El prototipo de Troya et al. es un generador de mutantes
• Wodel-Test para ATL proporciona la funcionalidad completa de
una herramienta de pruebas de mutación para este lenguaje
11
RQ2
Es efectivo?
12. EVALUACIÓN RQ2
• Operadores de mutación para ATL
Concepto Operador de
mutación
LOC en Wodel LOC en ATL
Regla Creación
Borrado
Cambio de nombre
1
1
1
-
-
-
Elemento de patrón de entrada Creación
Borrado
Cambio de tipo
Cambio de nombre
6
1
4
1
14
-
-
-
Filtro de regla Creación
Borrado
Cambio de condición
10
1
4
-
-
-
Elemento de patrón de salida Creación
Borrado
Cambio de tipo
Cambio de nombre
6
1
4
1
-
6
-
-
Binding Creación
Borrado
Cambio de valor
Cambio de propiedad
6
1
2
6
-
3
-
-
12
RQ2
Es efectivo?
13. EVALUACIÓN RQ2
• Operadores de mutación para ATL
Concepto Operador de
mutación
LOC en Wodel LOC en ATL
Regla Creación
Borrado
Cambio de nombre
1
1
1
-
-
-
Elemento de patrón de entrada Creación
Borrado
Cambio de tipo
Cambio de nombre
6
1
4
1
14
-
-
-
Filtro de regla Creación
Borrado
Cambio de condición
10
1
4
-
-
-
Elemento de patrón de salida Creación
Borrado
Cambio de tipo
Cambio de nombre
6
1
4
1
-
6
-
-
Binding Creación
Borrado
Cambio de valor
Cambio de propiedad
6
1
2
6
-
3
-
-
13
RQ2
Es efectivo?
RQ2: Sí, Wodel-Test es efectivo
14. CONCLUSIONES
14
• Wodel-Test proporciona una funcionalidad comparable a la de las
herramientas de pruebas de mutación existentes para Java
• Wodel-Test puede ser una mejor opción:
• Acceso al código fuente de los mutantes
• Razonar sobre qué mutantes reducen el mutation score y por qué
• Experimentar con nuevos operadores de mutación
• Las herramientas de pruebas de mutación existentes requieren dos
órdenes de magnitud más de código que la especificación de un entorno
similar utilizando Wodel-Test
• Trabajo futuro
• Abordar programas más grandes
• Optimizaciones del proceso de pruebas de mutación
• Estudio con usuarios para analizar la usabilidad
15. 15
Sitios web de Wodel & Wodel-Test:
http://gomezabajo.github.io/Wodel/
http://gomezabajo.github.io/Wodel/Wodel-Test/
16. 16
ARQUITECTURA DE WODEL-TEST
motor de
WODEL
equivalencia
sintáctica
WODEL-TEST
postProc
2
1
LanguageService
Provider
projectToModel()
modelToProject()
annotateMutation()
compile()
run()
3
equivalencia
semántica
ESPEC MT DEL
LENGUAJE
equivalencia
EMFCompare
«interfaz»
«requiere»
«utiliza»
4
Trivial
compiler
equivalence
«utiliza»
registro
de mutación
programas WODEL
(meta-modelo + ops. mutación)
«incluye»