El Testeo de Software es la técnica más aplicada por la industria del software con el fin de garantizar la calidad final. Sin embargo, la complejidad de las nueva tecnológicas de desarrollo y nuevos dominios, como la Internet del futuro, presentan nuevos retos que requiere técnicas de testeo más innovadoras. Por dicho motivo, nuestra investigación se ha centrado en la aproximación denominada “Evolutionary Search Based Testing”
En el testeo evolutivo, el objetivo del test es transformado en una tarea de optimización que es posteriormente resuelta mediante una optimización estocaica y técnicas de búsqueda inteligentes, tales como algoritmos evolutivos. Dependiendo del objetivo de test perseguido, distintas funciones objetivo o fitness tienen que ser definidas para la evaluación de los datos de test. Si una funciónfitness apropiada puede ser definida para el objetivo del test, y se aplica computación evolutiva como técnica de búsqueda, entonces el proceso de test sigue el siguiente procedimiento:
- El conjunto inicial de datos de test es generado, normalmente de forma aleatoria. Después de la inicialización, cada individuo de la población representa un dato de test para el cual se ejecuta el SUT.
- Para cada dato de test, se monitoriza la ejecución y se determina el valor de fitness para el individuo correspondiente
- Los datos de testeo con valores de fitness altos tiene una probabilidad mayor de ser seleccionada que aquella con un valor bajo. Esta información es sometida a procesos de combinación y mutación con el fin de generar datos de test derivados. Un nuevo conjunto de datos de test es generado mediante la unión de estos datos derivados y los individuos raíz siguiendo el proceso de supervivencia que se haya establecido.
- A partir de aquí, el proceso se repite de nuevo comenzado con la selección hasta que el objetivo del test es completado o un condición de parada previamente establecida se cumple.
El objetivo de test a cumplir depende de el tipo de testeo que tiene que realizarse. Por ejemplo, en el caso del testeo estructural, el objetivo del test sería alcanzar un elevado porcentaje de cobertura del codigo fuentes del SUT. Para el testeo funcional, el objetivo del test sería encontrar un error en la implementación relacionado con una propiedad funcional seleccionada.
También hemos centrado nuestra investigación el área del testeo unitario automático para el lenguaje JAVA. En colaboración con la Universidad de Utrecht, hemos trabajado en T2, una herramienta ligera (menos de 0.5 MB) para el testeo unitario automático en JAVA. La herramienta y sus componentes principales pueden ser integrados como un librería JAVA, hecho que proporciona una gran flexibilidad tanto para usarla como para adaptar su comportamiento.
Aplicaciones
- Mejora de la calidad del software mediante el uso de técnicas innovadoras de testeo.
- Generación automática de casos de testeo unitarios.