Título: Gestión de defectos basada en tipos de defectos

Marco de Trabajo: Doctorado

Área de desarrollo: Ingeniería de Software

Autor: Diego Vallespir

Contacto: dvallesp@fing.edu.uy

Día: MIERCOLES

Hora: 15:00

Palabras Claves: Ingeniería de Software, Verificación, Verificación Unitaria

Resumen:
Tesis de Doctorado y Proyectos de Grado
Autores: Diego Vallespir, Stephanie De León, Cecilia Apa y Rosana Robaina

El control estadístico de procesos es altamente usado en distintas disciplinas de desarrollo de productos. En el desarrollo de software se han tenido distintos avances en este sentido, pero aún queda mucho por hacer. Para poder aplicar un enfoque de gestión estadística de la calidad en el desarrollo de software, se necesita, entre otras cosas, conocer la efectividad y el costo de las técnicas de verificación y cómo esta efectividad varía según el tipo de defecto.
En la Ingeniería de Software Empírica (ISE) se identifican tres estrategias de trabajo distintas: encuestas, casos de estudio y experimentos formales [1, 2]. Entendemos que lo más apropiado para conocer la efectividad de las técnicas de verificación, dentro de la ISE, es realizar experimentos formales.
En la literatura se encuentran varios experimentos formales en este tema. Ninguno de los experimentos analizados es concluyente respecto a la efectividad y al costo de las técnicas de verificación. Además, algunos de los trabajos encontrados son contradictorios entre sí, y muchos no son comparables ya que usan taxonomías de defectos diferentes.
Entendemos que es necesario contar con más y mejores experimentos en el tema. Además, estos deben poder mostrar de qué forma se complementan las técnicas para lograr un rendimiento (efectividad/costo) óptimo. Por otro lado, entendemos que las taxonomías para clasificar defectos, usadas normalmente en los experimentos mencionados, no son las más apropiadas para conocer si las técnicas se comportan de forma diferente respecto a los tipos de defectos. Para esto proponemos el uso de la taxonomía de Beizer [3] (por ser extremadamente detallada) y la clasificación de IBM [4] (porque al ser muy usada permite realizar comparaciones entre experimentos).
La primer etapa es el diseño y ejecución de un experimento formal que lleva a conocer mejor la efectividad, costo y por ende rendimiento, de distintas técnicas en un contexto específico.
La ejecución de dicho experimento se restringe a la verificación unitaria de código desarrollado con el lenguaje de programación Java, con las técnicas: inspecciones de código, pruebas basadas en clases de equivalencia, pruebas basadas en máquinas de estado, cubrimiento de trayectorias linealmente independientes y cubrimiento de condición múltiple. Los verificadores son estudiantes de cuarto y quinto año de la Carrera Ingeniería en Computación de la Facultad de Ingeniería.
La segunda etapa busca, mediante la generación de mutantes, corroborar lo obtenido en la primera etapa. La tercera etapa, que en detalle es un misterio, intentará demostrar mediante teoremas algunos resultados de los experimentos.
Presentaremos el marco general de la investigación, un breve resumen del estado del arte y detalles de la primera etapa.

[1] Pfleeger, S.L.: “Experimental design and analysis in software engineering: the language of case studies and formal experiments” SIGSOFT Software Engineering Notes 19(4):16–20, 2004.
[2] Wohlin, C., Runeson, P., Host, M., Ohlsson, M.C., Regnell, B. y Wesslen, A.: “Experimentation in Software Engineering: An Introduction” Kluwer Academic Publishers, 2000.
[3] Beizer, B.: “Software Testing Techniques”, Second Edition, Van Nostrand Reinhold, 1990.
[4] http://www.research.ibm.com/softeng/ODC/ODC.HTM. última visita: 9 de julio de 2008.