Hierarchical Delta Debugging (HDD) es una técnica de depuración automatizada que extiende el algoritmo Delta Debugging para considerar las entradas de programa como estructuras de datos jerárquicas. HDD genera un árbol sintáctico abstracto de la entrada y aplica de forma recursiva el algoritmo Delta Debugging para minimizar los fallos y encontrar la configuración mínima de entrada que los induce. El documento describe el algoritmo HDD, provee un ejemplo y discute trabajos relacionados y futuras mejoras.
4. 1. MOTIVACIÓN
Hierarchical Delta Debugging (HDD) esta
basado principalmente en el algoritmo Delta
Debugging (DD) que en rasgos generales es
una técnica aplicable para minimizar todos
los fallos inducidos por entradas para una
depuración efectiva.
HDD es simple pero efectivo, más rápido
que Delta Debugging y incrementa la calidad.
En resumen, HDD es una herramienta útil
para automatizar el proceso de depuración
de programas que tienen como entrada
estructuras.
4
6. 2. INTRODUCCIÓN
Los programadores han de demostrar de alguna
forma que partes del programa inducen a que
este falle.
Esta fase de búsqueda se denomina “proceso de
depuración” el cual es lento y arduo.
Se presenta Delta Debugging y Hierarchical
Delta Debugging.
6
7. 2. INTRODUCCIÓN
Delta Debugging es una técnica que logra
automatizar el proceso de depuración mediante la
minimización (ignora las estructuras de entradas).
Consiste en los siguientes algoritmos:
1. Simplification 2. Isolation
La entrada es simplificada para Este algoritmo intenta encontrar el
realizar un análisis con pequeños conjunto de datos el cual alguno de
conjuntos de datos. Este algoritmo es sus elementos produce el fallo. Trabaja
recursivo, hasta que no se puede en ambas direcciones desde el caso
reducir más los datos en conjuntos. mas grande a el que menos
(subconjuntos). Produce salidas las
cuales son poco intuitivas para el
programador.
7
8. 2. INTRODUCCIÓN
Hierarchical Delta Debugging, a diferencia
de Delta Debugging, considera las entradas
como estructuras de datos, ya que pueden ser
explotadas (por su semántica) para generar
conjuntos y simplificar los casos de entrada.
Diferentes escenarios dónde HDD es
aplicable:
◦ Programming Languages
◦ HTML/XML
◦ Video Codecs (compressor/decompresser)
◦ UI Interactions
8
10. 3. ALGORITHM HDD
Antes que nada, se genera a partir del código de
un programa, (con la extensión ELSA de HDD)
un árbol AST (árbol de sintaxis abstracta).
10
11. El algoritmo empieza en el nivel más alto (0), primero etiqueta
los nodos del primer nivel y los guarda en una lista “nodes”.
Ya etiquetados, se pasa la lista de nodos al algoritmo DDMIN
para que obtenga la configuración mínima.
Se eliminan los nodos que son irrelevantes para el análisis
Y se incrementa el nivel, para seguir bajando por el árbol y
realizar un bucle hasta que no queden nodos por analizar.
HIERARCHICAL DELTA DEBUGGING
ALGORITHM 11
12. 3. ALGORITHM HDD
El resultado del árbol AST después de aplicar el
algoritmo HDD.
12
15. 4. EJEMPLO CON HDD
Antes de procesar el código, previamente se ha realizado un árbol AST con la
extensión ELSA.
HDD con el algoritmo DDMIN detecta que la función que interesa
analizar es la “mult” ya que contiene el bucle “for” que posiblemente
produzca un bloqueo en el GCC.
Lo primero que hace es eliminar lo que no es necesario, (función PRUNE)
es decir el “return”.
Luego se elimina también la inicialización, condición y incremento del bucle
“for”.
Una vez se llega a este punto, no se puede producir una configuración
mínima de estas expresiones ya que son parte de la deducción al fallo. El
algoritmo HDD termina.
15
17. 5. TRABAJOS RELACIONADOS
El trabajo más relevante de Zeller es “Delta Debugging”,
que se trata de la idea de reducir el número de casos de
prueba a partir de un algoritmo (como ya se ha comentado
anteriormente).
El trabajo de Sterling and Olsson's también esta
relacionado con Delta Debugging, “Program Chipping”
que se trata de un simple árbol, en el cual se aplican técnicas
para producir casos de prueba. También “Program Slicing”
se utiliza para separar partes del programa que son
necesarias para su ejecución.
Estas técnicas facilitan la depuración, pero no la eliminación
de partes irrelevantes de un programa. Destacar que Delta
Debugging y Program Slicing pueden ser utilizadas de manera
conjunta.
17
18. 5. TRABAJOS RELACIONADOS
“PSE” (R. Manevich, M. Sridharan, and S. Adams) es
una técnica de análisis para el diagnóstico de
fallos de programa, la cual se puede considerar
como una técnica de Program Slicing (sin embargo,
esta es mas precisa, ya que tiene en cuenta los
errores condicionales).
“Bug Isolation” (Whalley's) se puede resumir
en la simplificación de los posibles fallos de
entrada de un programa intentando conseguir una
buena optimización. No se centra en la
minimización de la entrada si no se centra en la
búsqueda que produce el fallo.
18
19. 5. TRABAJOS RELACIONADOS
Muchas de las herramientas cuando producen un
error muestra una traza de dónde se encuentra
este. Sin embargo, entender el error y localizarlo
puede ser complicado. Para intentar apoyar a la
localización del error, se han desarrollado varias
técnicas:
◦ Ball sugiere intentar encontrar transiciones en la
traza de error dónde no aparezca una traza correcta.
◦ Groce and Visser sugieren un enfoque distinto para
el mismo problema. Dado un error en la traza, se
realiza el cálculo de otras trazas de error para realizar
una comparación.
19
21. 6. FUTUROS TRABAJOS
Se va a describir las distintas limitaciones con la actual
implementación y las posibles direcciones para mejorar el algoritmo.
La “Extension Elsa” esta limitada de muchas formas. Cuando
múltiples variables se declaran en la misma instrucción, Elsa las
divide en varias sentencias. El trabajo de mejora, esta enfocado a si
hay varias dependencias entre la información y los distintos niveles
de entrada. Si existe una excesiva dependencia ,la entrada de un
programa debería ser evaluada para decidir si usar HDD o no.
Otra limitación es, que el programador debe proporcionar
infraestructura para el procesamiento de árbol. Esta infraestructura
es la responsable para analizar la entrada. Esto puede no ser trivial
para algunos lenguajes de programación. Por eso, utilizar XML
simplifica la implementación.
21
22. 6. FUTUROS TRABAJOS
Las gramáticas libres de contextos utilizan recursión para tratar
con listas de datos. Si el árbol generado refleja la recursión, el árbol
no sería ideal para HDD, ya que aumentaría el numero de
iteraciones del algoritmo. Esto se podría solucionar poniendo
simples anotaciones en lo que sea irrelevante.
Otro problema que surge en el procesamiento del árbol, es la
validación sintáctica de la salida para configuraciones particulares,
que no pueden ser aseguradas cuando tienen un contexto libre de
gramática. Esto puede producir casos de prueba erróneos.
Para terminar, decir que la ejecución de DDMIN sobre todos los
nodos en el mismo nivel no es necesario. Si este es el caso, se
puede llamar DDMIN en sólo los hijos de los padres.
22
24. 7.CONCLUSIÓN
Se ha presentado Hierarchical Delta Debugger, un algoritmo
basado en Delta Debugger jerárquico que realiza una explotación
de las entradas de programa utilizando su estructura para optimizar
el algoritmo y minimizar los fallos.
Todas las pruebas realizadas, tienen como resultado que HDD
puede reducir de forma significativa el numero de casos de prueba.
Aquí hay algunas direcciones interesantes para el futuro trabajo:
1. Existe la intención de examinar las técnicas alternativas de
optimización para la simplificación mediante la explotación de los
nodos de forma independiente.
Un posible enfoque es la técnica antes mencionada para limitar DDMIN a los hijos de
un nodo primario en particular. Esto puede producir significativas aceleraciones en el
algoritmo.
2. También es interesante para proporcionar un contexto libre de
gramática, facilitar la aplicación de esta técnica.
24
26. 8.BIBLIOGRAFÍA
Yesterday, my program worked. Today, it does not. Why?. Andreas
Zeller:
http://www.clinicaltrialspotlight.com/tools/local/imageupload/conte
nt/FileName/size1/68810ba38aa3c7856f61f3a188da9757.pdf
M. Das, S. Lerner, and M. Seigle. ESP: path-sensitive program
verication in polynomial time. In Proceedings of the ACM
SIGPLAN 2002 Conference on Programming Language Design and
Implementation.
A. Groce and W.Visser. What went wrong: Explaining
Counterexample.
R. M. Karp. Reducibility among combinatorial problems. In
Complexity of Computer Computations.
B. Liblit, A. Aiken, A. X. Zheng, and M. I. Jordan. Bug isolation via
remote program sampling.
26
27. 8.BIBLIOGRAFÍA
H. Agrawal, R. A. DeMillo, and E. H. Spafford. Debugging with dynamic
slicing and backtracking. Software – Practice and Experience,
23(6):589.616, 1993.
H. Agrawal and J. R. Horgan. Dynamic program slicing. In Proceedings
of the ACM SIGPLAN '90 Conference on Programming Language Design and
Implementation.
T. Ball, M. Naik, and S. K. Rajamani. From symptom to cause:
Localizing errors in counterexample traces. In Proceedings of 30th
ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages.
J.-D. Choi and A. Zeller. Isolating failure-inducing thread schedules. In
ISSTA '02: Proceedings of the 2002 ACM SIGSOFT international symposium on
Software testing and analysis.
H. Cleve and A. Zeller. Locating causes of program failures. In
Proceedings of the 27th International Conference on Software Engineering.
27