RT doctoral thesis T1 Prueba de Mutación Evolutiva en Entornos Orientados a Objetos T2 Evolutionary Mutation Testing in Object-Oriented Environments A1 Delgado Pérez, Pedro A2 Ingeniería Informática K1 Prueba de mutaciones K1 Verificación y validación K1 Prueba de software K1 Orientación a objetos K1 Algoritmos evolutivos AB La prueba de mutaciones es reconocida como un potente método para evaluar la fortalezade un conjunto de casos de prueba en la detección de posibles fallos en el código. Noobstante, la aplicación de esta técnica es costosa, lo cual ha supuesto normalmente unobstáculo para una mayor acogida de la misma por parte de la industria. Varias técnicashan mostrado ser capaces de reducir ampliamente su coste sin mucha pérdida de efectividad,pero también es cierto que estas técnicas solo han sido evaluadas en determinadoscontextos, especialmente en el ámbito de los operadores de mutación tradicionales paraprogramas procedurales. Por ejemplo, la Prueba de Mutación Evolutiva ha sido aplicadaúnicamente a composiciones WS-BPEL, a pesar de que se obtuvo un resultado positivoal seleccionar un subconjunto de mutantes a través de un algoritmo evolutivo a fin demejorar el conjunto de casos de prueba. Como resultado, se desconoce a día de hoy silos mismos beneficios pueden extrapolarse a otros niveles y dominios.En particular, en esta tesis nos preguntamos hasta qué punto la Prueba de MutaciónEvolutiva es también útil para reducir el número de mutantes en sistemas orientados aobjetos. Más específicamente, nos enfocamos en el lenguaje de programación C++, yaque la prueba de mutaciones casi no se ha desarrollado respecto a este popular lenguaje ajuzgar por la falta de artículos de investigación en este campo que se dirigen este lenguaje.Dado que C++ ha sido apenas abordado en cuanto a investigación y en cuanto a lapráctica, en esta tesis nos ocupamos de todas las fases de la prueba de mutaciones: desdela definición e implementación de operadores de mutación en un sistema de mutaciones,hasta la evaluación de esos operadores y la aplicación de la Prueba de Mutación Evolutivaentre otras técnicas de reducción del coste.En esta tesis definimos e implementamos un conjunto de operadores de mutación declase para C++ en MuCPP, herramienta de mutaciones que nos permite llevar a caboexperimentos con programas reales gracias a las características incorporadas a la misma.Estos operadores de mutación son automatizados siguiendo un conjunto de reglas paraque produzcan los mutantes que se esperan de los mismos. En términos generales, losoperadores de clase generan bastantes menos mutantes que los operadores tradicionales,un porcentaje mayor de mutantes equivalentes y se aplican con diversa frecuencia dependiendode las características del programa analizado. El desarrollo de reglas de mejoraen la implementación de los operadores permite reducir incluso más el número demutantes, evitando generar mutantes que no son interesantes para el propósito de laprueba de mutaciones. Otro descubrimiento interesante es que el conjunto de mutantesde clase y el de mutantes tradicionales se complementan, ayudando a diseñar un conjuntode casos de prueba más efectivo.También desarrollamos GiGAn, un nuevo sistema para conectar MuCPP y un algoritmogenético para aplicar la Prueba de Mutación Evolutiva a sistemas orientados a objetos enC++. El algoritmo genético permite reducir el número de mutantes que sería generadopor MuCPP ya que guía la búsqueda a la selección de aquellos mutantes que puedeninducir a la generación de nuevos casos de prueba (mutantes fuertes). El rendimiento deesta técnica se muestra mejor que el de un algoritmo aleatorio, tanto cuando se buscandiferentes porcentajes de mutantes fuertes como cuando se simula el refinamiento delconjunto de casos de prueba mediante los mutantes seleccionados por ambas técnicas.La estabilidad de la Prueba de Mutación Evolutiva en los diferentes programas analizadosy los buenos resultados en aquellos programas de los que se deriva un mayor número demutantes son observaciones adicionales.Finalmente, realizamos experimentos para evaluar de forma individual a estos operadoresde mutación desde una doble perspectiva: cómo de útiles son para la evaluación (TSE)y para la mejora (TSR) de un conjunto de casos de prueba. Para ello clasificamosa los operadores usando dos métricas distintas: el grado de redundancia (TSE) y lacalidad para guiar a la generación de casos de prueba de alta calidad (TSR). Siguiendoestas clasificaciones, ponemos en práctica un estudio selectivo teniendo en cuenta quelos operadores menos valiosos están en las últimas posiciones. Este enfoque selectivorevela que los operadores no son necesariamente igual de útiles para TSE y TSR, y queestas clasificaciones son apropiadas para llevar a cabo una estrategia selectiva cuandolo comparamos con la aplicación de otras clasificaciones de operadores o la selecciónaleatoria de mutantes. Sin embargo, favorecer la generación de mutantes individuales apartir de los operadores mejor valorados es mucha mejor opción que descartar operadoresal completo debido a que cada uno de estos operadores se centra en una característicaconcreta del paradigma de orientación a objetos. En conjunto, todas estas evaluacionesen torno a estos operadores de clase sugieren que la naturaleza de los mismos puedelimitar los beneficios de aplicar cualquier técnica de reducción del coste. YR 2017 FD 2017-04-21 LK http://hdl.handle.net/10498/21226 UL http://hdl.handle.net/10498/21226 LA eng NO Este trabajo fue financiado por la beca de investigación PU-EPIF-FPI-PPI-BC 2012-037 de la Universidad de Cádiz, por el proyecto DArDOS (TIN2015-65845-C3-3-R) delPrograma Estatal de Investigación, Desarrollo e Innovación Orientada a los Retos dela Sociedad del Ministerio de Economía y Competitividad, y por la Red de ExcelenciaSEBASENET (TIN2015-71841-REDT) del Programa Estatal de Fomento de la InvestigaciónCientífica y Técnica de Excelencia del Ministerio de Economía y Competitividad. DS Repositorio Institucional de la Universidad de Cádiz RD 10-nov-2026