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