Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Operadores de Mutacion a Nivel de Clasepara el Lenguaje C++
Pedro Delgado Pérez, Inmaculada Medina BuloJuan José Domínguez Jiménez y Antonio García Domínguez
PROLE 2013 en IV Congreso Español de Informática
Septiembre-2013
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 1 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Índice
1 Introducción
2 Nuestro estudio
3 Conjunto operadores
4 Análisis
5 Conclusiones
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 2 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Prueba de mutaciones
¿Qué es?
Es una técnica de prueba de software basada en localización de errores.
Consiste en introducir de forma intencionada un fallo simple en elprograma original mediante la aplicación de operadores de mutación.
Al programa que resulta del cambio se le conoce como mutante.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 3 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Operadores de mutación
¿Qué son?
Reglas predefinidas para insertar errores sintácticos en el código.
Están basados en los errores más comunes que se cometen alprogramar.
El conjunto de operadores es específico de cada lenguaje.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 4 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Prueba de mutaciones
¿Para qué sirve?
Comprobar cómo de bueno es un conjunto de casos de prueba paradetectar fallos.
Un caso de prueba que distinga el programa de su mutante esconsiderado efectivo.
La detección se produce si las salidas de los programas difieren.
Ejemplo
Programa Caso prueba (a=2 y b=1) ResultadoOriginal: a * b 2 * 1 = 2Mutante: a - b 2 - 1 = 1 Mutante muertoMutante: a / b 2 / 1 = 2 Mutante vivo
Inclusión de nuevos casos de prueba
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 5 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Prueba de mutaciones
¿Para qué sirve?
Comprobar cómo de bueno es un conjunto de casos de prueba paradetectar fallos.
Un caso de prueba que distinga el programa de su mutante esconsiderado efectivo.
La detección se produce si las salidas de los programas difieren.
Ejemplo
Programa Caso prueba (a=2 y b=1) ResultadoOriginal: a * b 2 * 1 = 2Mutante: a - b 2 - 1 = 1 Mutante muertoMutante: a / b 2 / 1 = 2 Mutante vivo
Inclusión de nuevos casos de prueba
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 5 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Proceso
Pasos en la prueba de mutaciones
1 Análisis del programa: operadores de mutación.2 Generación de mutantes.3 Ejecución contra casos de prueba.
Primer paso
Obtención del conjunto de operadores de mutación para el lenguaje C++.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 6 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Proceso
Pasos en la prueba de mutaciones
1 Análisis del programa: operadores de mutación.2 Generación de mutantes.3 Ejecución contra casos de prueba.
Primer paso
Obtención del conjunto de operadores de mutación para el lenguaje C++.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 6 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Evolución prueba de mutaciones
Antecedentes
Desarrollo de la prueba de mutaciones en paralelo con el de lenguajes.
Tradicionalmente centrada en la programación estructurada (lenguajesC o Fortran).
Operadores de mutación tradicionales.
Estado actual
Diversificación gran variedad de lenguajes de todo tipo.
Aparición y aumento del paradigma de orientación a objetos (OO).
Necesidad de nuevos operadores.
Mayoría de trabajos centrados en Java, también en C#.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 7 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Evolución prueba de mutaciones
Antecedentes
Desarrollo de la prueba de mutaciones en paralelo con el de lenguajes.
Tradicionalmente centrada en la programación estructurada (lenguajesC o Fortran).
Operadores de mutación tradicionales.
Estado actual
Diversificación gran variedad de lenguajes de todo tipo.
Aparición y aumento del paradigma de orientación a objetos (OO).
Necesidad de nuevos operadores.
Mayoría de trabajos centrados en Java, también en C#.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 7 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Lenguaje elegido
Diversos lenguajes
MuJava para Java
Mothra para FORTRAN
Proteum para C
SQLMutation para SQL
Motivación
Lenguaje multiparadigma.
Uno de los lenguajes de programaciónmás importantes.
Desarrollo de la técnica en torno a C++prácticamente inexistente.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 8 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Lenguaje elegido
Diversos lenguajes
MuJava para Java
Mothra para FORTRAN
Proteum para C
SQLMutation para SQL
Motivación
Lenguaje multiparadigma.
Uno de los lenguajes de programaciónmás importantes.
Desarrollo de la técnica en torno a C++prácticamente inexistente.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 8 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Conjunto de operadores
Niveles
Operadores para función/método (operadores tradicionales)
Operadores de clase (relativos a la orientación a objetos)
Operadores de interacción entre métodos (integración)
Operadores a nivel de sistema
Operadores de objetos de uso común (a nivel de lenguaje)
Definición del conjunto
Estudio en profundidad del lenguaje.
Análisis de operadores de lenguajes similares.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 9 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Conjunto de operadores
Niveles
Operadores para función/método (operadores tradicionales)
Operadores de clase (relativos a la orientación a objetos)
Operadores de interacción entre métodos (integración)
Operadores a nivel de sistema
Operadores de objetos de uso común (a nivel de lenguaje)
Definición del conjunto
Estudio en profundidad del lenguaje.
Análisis de operadores de lenguajes similares.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 9 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Operadores a nivel de clase
Se han definido 37 operadores.
Se han clasificado en 7 categorías distintas.
Notación: tres letras mayúsculas, la primera representa la categoría.
Categorías de operadores
1 Control de acceso o ocultación de información (A)2 Herencia (I)3 Polimorfismo y enlace dinámico (P)4 Sobrecarga de métodos (O)5 Excepciones (E)6 Cambio de miembro y objeto (M)7 Miscelánea (C)
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 10 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Operadores a nivel de clase
Se han definido 37 operadores.
Se han clasificado en 7 categorías distintas.
Notación: tres letras mayúsculas, la primera representa la categoría.
Categorías de operadores
1 Control de acceso o ocultación de información (A)2 Herencia (I)3 Polimorfismo y enlace dinámico (P)4 Sobrecarga de métodos (O)5 Excepciones (E)6 Cambio de miembro y objeto (M)7 Miscelánea (C)
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 10 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Ejemplo Herencia
IMR o Cambio de clase en herencia múltiple
Objetivo: Comprobar que la herencia se realiza desde la clase correcta.
Ejemplo: class A {int a;
}class B{
int a;}class C: public A, B{
... ...b = A::a + 1;
}
Mutante: class C: public A, B{... ...b = B::a + 1;
}
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 11 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Ejemplo Cambio de miembro y objeto
MCO o Llamada a un miembro de una clase desde otro objeto
Objetivo: Detectar el uso de un objeto de una clase en lugar del correcto.
Ejemplo:A a1, a2;a1.metodo();
Mutante:A a1, a2;a2.metodo();
MNC o Cambio de nombre de método
Objetivo: Detectar la llamada a un método compatible incorrecto.
Ejemplo: Mutante:a.metodo1(); a.metodo2();
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 12 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Ejemplo Miscelánea
CDC o Creación del constructor por defecto
Objetivo: Comprobar si el constructor por defecto definido es correcto.
Ejemplo: class A{public:
A() : ... ... {... ...}... ...
};
Mutante: class A{public:
// A() : ... ... {... ...}... ...
};
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 13 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Pruebas
Confección
Utilización de tres programas de LLVM test-suite: garage, family y simul.
Insercción de errores en el código de forma manual (primer orden).
Caso de prueba: escenario de empleo de clases.
Comienzo con escenarios básicos, se añaden nuevos para mutantesque permanecen vivos tras la ejecución.
Consideraciones
Operadores que crean mutantes equivalentes → no cambian elsignificado del programa.
Operadores que producen mutantes erróneos → producen un fallo decompilación.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 14 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Pruebas
Confección
Utilización de tres programas de LLVM test-suite: garage, family y simul.
Insercción de errores en el código de forma manual (primer orden).
Caso de prueba: escenario de empleo de clases.
Comienzo con escenarios básicos, se añaden nuevos para mutantesque permanecen vivos tras la ejecución.
Consideraciones
Operadores que crean mutantes equivalentes → no cambian elsignificado del programa.
Operadores que producen mutantes erróneos → producen un fallo decompilación.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 14 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Análisis de resultados
Resultados
Alto número de mutantes (238).
Algunos operadores suelen crear muchos mutantes. Ej: MBCProbabilidad de uso de categorías de operadores:
Más: Herencia y control de acceso.Menos: Sobrecarga y excepciones.
Porcentaje alto de mutantes equivalentes (más del 50%)
Operadores que crean mutantes inválidos: control de acceso.
Conjunto mínimo de casos de prueba
Family : un nuevo escenario para matar mutantes de CCA, MBC y MNC.
Simul : un nuevo escenario para mutante de PVI y otro para los de OAN.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 15 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Conclusiones
Conclusiones
Primer paso en nuestra línea de investigación.
Importante aportación al campo de la prueba de mutaciones.
Necesidad de pruebas más amplias.
Complejidad del lenguaje.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 16 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Trabajo futuro
Trabajo futuro
Implementación de los operadores de mutación → Automatización.
Refinamiento del conjunto.
Obtener operadores a otros niveles de mutación.
Objetivo final: Aplicación de la prueba de mutación evolutiva a C++.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 17 / 18
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones
Gracias por su atención
Pedro Delgado Pé[email protected]
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez UCASE (Universidad de Cádiz)
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ PROLE 2013 18 / 18