operadores de mutacion a nivel de clase para el lenguaje...

25
Introducción Nuestro estudio Conjunto operadores Análisis Conclusiones Operadores de Mutacion a Nivel de Clase para el Lenguaje C++ Pedro Delgado Pérez, Inmaculada Medina Bulo Juan 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

Upload: others

Post on 12-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 2: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 3: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 4: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 5: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 6: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 7: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 8: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 9: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 10: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 11: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 12: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 13: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 14: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 15: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 16: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 17: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 18: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 19: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 20: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 21: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 22: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 23: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 24: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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

Page 25: Operadores de Mutacion a Nivel de Clase para el Lenguaje C++babel.ls.fi.upm.es/prole2013/OperadoresMutacionNivelClaseC++.pdf · Juan José Domínguez Jiménez y Antonio García Domínguez

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