Operadores de Mutacion a Nivel de Clase para el Lenguaje C++

Transcripción

Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 el
programa 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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 al
programar.
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 para
detectar fallos.
Un caso de prueba que distinga el programa de su mutante es
considerado efectivo.
La detección se produce si las salidas de los programas difieren.
Ejemplo
Programa
Original: a * b
Mutante: a - b
Mutante: a / b
Caso prueba (a=2 y b=1)
2*1=2
2-1=1
2/1=2
Resultado
Mutante muerto
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 para
detectar fallos.
Un caso de prueba que distinga el programa de su mutante es
considerado efectivo.
La detección se produce si las salidas de los programas difieren.
Ejemplo
Programa
Original: a * b
Mutante: a - b
Mutante: a / b
Caso prueba (a=2 y b=1)
2*1=2
2-1=1
2/1=2
Resultado
Mutante muerto
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 (lenguajes
C 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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 (lenguajes
C 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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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ón
má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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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ón
má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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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:
Mutante:
class A {
int a;
}
class B{
int a;
}
class C: public A, B{
... ...
b = A::a + 1;
}
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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:
a.metodo1();
Mutante:
a.metodo2();
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 mutantes
que permanecen vivos tras la ejecución.
Consideraciones
Operadores que crean mutantes equivalentes → no cambian el
significado del programa.
Operadores que producen mutantes erróneos → producen un fallo de
compilación.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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 mutantes
que permanecen vivos tras la ejecución.
Consideraciones
Operadores que crean mutantes equivalentes → no cambian el
significado del programa.
Operadores que producen mutantes erróneos → producen un fallo de
compilación.
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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: MBC
Probabilidad 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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
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
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
PROLE 2013
17 / 18
Introducción
Nuestro estudio
Conjunto operadores
Análisis
Conclusiones
Gracias por su atención
Pedro Delgado Pérez
[email protected]
P. Delgado Pérez, I. Medina Bulo, J. J. Domínguez Jiménez y A. García Domínguez
Operadores de Mutacion a Nivel de Clase para el Lenguaje C++
UCASE (Universidad de Cádiz)
PROLE 2013
18 / 18

Documentos relacionados