Optimization Techniques for Automated Software Test Data Generation

Esta tesis propone una variedad de contribuciones al campo de pruebas evolutivas. Hemos abarcados un amplio rango de aspectos relativos a las pruebas de programas: codigo fuente procedimental y orientado a objetos, paradigmas estructural y funcional, problemas mono-objetivo y multi-objetivo, casos de prueba aislados y secuencias de pruebas, y trabajos teoricos y experimentales. En relacion a los analisis llevados a cabo, hemos puesto enfasis en el analisis estadistico de los resultados para evaluar la significancia practica de los resultados. En resumen, las principales contribuciones de la tesis son: Definicion de una nueva medida de distancia para el operador instanceof en programas orientados a objetos: En este trabajo nos hemos centrado en un aspecto relacionado con el software orientado a objetos, la herencia, para proponer algunos enfoques que pueden ayudar a guiar la busqueda de datos de prueba en el contexto de las pruebas evolutivas. En particular, hemos propuesto una medida de distancia para computar la distancia de ramas en presencia del operador instanceof en programas Java. Tambien hemos propuesto dos operadores de mutacion que modifican las soluciones candidatas basadas en la medida de distancia definida. Definicion de una nueva medida de complejidad llamada "Branch Coverage Expectation": En este trabajo nos enfrentamos a la complejidad de pruebas desde un punto de vista original: un programa es mas complejo si es mas dificil de probar de forma automatica. Consecuentemente, definimos la "Branch Coverage Expectation" para proporcionar conocimiento sobre la dificultad de probar programas. La fundacion de esta medida se basa en el modelo de Markov del programa. El modelo de Markov proporciona fundamentos teoricos. El analisis de esta medida indica que esta mas correlacionada con la cobertura de rama que las otras medidas de codigo estaticas. Esto significa que esto es un buen modo de estimar la dificultad de probar un programa. Prediccion teorica del numero de casos de prueba necesarios para cubrir un porcentaje concreto de un programa: Nuestro modelo de Markov del programa puede ser usado para proporcionar una estimacion del numero de casos de prueba necesarios para cubrir un porcentaje concreto del programa. Hemos comparado nuestra prediccion teorica con la media de las ejecuciones reales de un generador de datos de prueba. Este modelo puede ayudar a predecir la evolucion de la fase de pruebas, la cual consecuentemente puede ahorrar tiempo y coste del proyecto completo. Esta prediccion teorica podria ser tambien muy util para determinar el porcentaje del programa cubierto dados un numero de casos de prueba. Propuesta de enfoques para resolver el problema de generacion de datos de prueba multi-objetivo: En ese capitulo estudiamos el problema de la generacion multi-objetivo con el fin de analizar el rendimiento de un enfoque directo multi-objetivo frente a la aplicacion de un algoritmo mono-objetivo seguido de una seleccion de casos de prueba. Hemos evaluado cuatro algoritmos multi-objetivo (MOCell, NSGA-II, SPEA2, y PAES) y dos algoritmos mono-objetivo (GA y ES), y dos algoritmos aleatorios. En terminos de convergencia hacia el frente de Pareto optimo, GA y MOCell han sido los mejores resolutores en nuestra comparacion. Queremos destacar que el enfoque mono-objetivo, donde se ataca cada rama por separado, es mas efectivo cuando el programa tiene un grado de anidamiento alto. Comparativa de diferentes estrategias de priorizacion en lineas de productos y arboles de clasificacion: En el contexto de pruebas funcionales hemos tratado el tema de la priorizacion de casos de prueba con dos representaciones diferentes, modelos de caracteristicas que representan lineas de productos software y arboles de clasificacion. Hemos comparado cinco enfoques relativos al metodo de clasificacion con arboles y dos relativos a lineas de productos, cuatro de ellos propuestos por nosotros. Los resultados nos indican que las propuestas para ambas representaciones basadas en un algoritmo genetico son mejores que el resto en la mayoria de escenarios experimentales, es la mejor opcion cuando tenemos restricciones de tiempo o coste. Definicion de la extension del metodo de clasificacion con arbol para la generacion de secuencias de pruebas: Hemos definido formalmente esta extension para la generacion de secuencias de pruebas que puede ser util para la industria y para la comunidad investigadora. Sus beneficios son claros ya que indudablemente el coste de situar el artefacto bajo pruebas en el siguiente estado no es necesario, a la vez que reducimos significativamente el tamano de la secuencia utilizando tecnicas metaheuristicas. Particularmente nuestra propuesta basada en colonias de hormigas es el mejor algoritmo de la comparativa, siendo el unico algoritmo que alcanza la cobertura maxima para todos los modelos y tipos de cobertura. Exploracion del efecto de diferentes estrategias de seeding en el calculo de frentes de Pareto optimos en lineas de productos: Estudiamos el comportamiento de algoritmos clasicos multi-objetivo evolutivos aplicados a las pruebas por pares de lineas de productos. El grupo de algoritmos fue seleccionado para cubrir una amplia y diversa gama de tecnicas. Nuestra evaluacion indica claramente que las estrategias de seeding ayudan al proceso de busqueda de forma determinante. Cuanta mas informacion se disponga para crear esta poblacion inicial, mejores seran los resultados obtenidos. Ademas, gracias al uso de tecnicas multi-objetivo podemos proporcionar un conjunto de pruebas adecuado mayor o menor, en resumen, que mejor se adapte a sus restricciones economicas o tecnologicas. Propuesta de tecnica exacta para la computacion del frente de Pareto optimo en lineas de productos software: Hemos propuesto un enfoque exacto para este calculo en el caso multi-objetivo con cobertura paiwise. Definimos un programa lineal 0-1 y un algoritmo basado en resolutores SAT para obtener el frente de Pareto verdadero. La evaluacion de los resultados nos indica que, a pesar de ser un fantastico metodo para el calculo de soluciones optimas, tiene el inconveniente de la escalabilidad, ya que para modelos grandes el tiempo de ejecucion sube considerablemente. Tras realizar un estudio de correlaciones, confirmamos nuestras sospechas, existe una alta correlacion entre el tiempo de ejecucion y el numero de productos denotado por el modelo de caracteristicas del programa.