Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de...

28
Balanceando Árboles de Ejecución David Insa Cabrera

Transcript of Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de...

Page 1: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

BalanceandoÁrboles de Ejecución

David Insa Cabrera

Page 2: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

IntroducciónDepuración Algorítmica

Balanceo de árboles de ejecuciónAE balanceadosTres técnicas para balancear AE

DemostraciónDDJ

Conclusiones y trabajo futuro

Contenido

Page 3: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

¿Qué es un Árbol de Ejecución?

Depuración algorítmica [Shapiro 82] Paradigma Lógico

DOS FASES:• Generar el árbol de ejecución• Recorrer el árbol de ejecución haciendo preguntas hasta encontrar el error

Si se detecta el efecto de un errorentonces la DA encontrará el error

main = 4

listSum [] = 1

1+3 = 4

2+1 = 3

listSum [1,2] = 4

listSum [2] = 3

Depuración Algorítmica

Ejemplo:

main = listSum [1,2]

listSum [] = 1listSum (x:xs) = x + (listSum xs)

Page 4: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Recorriendo el árbol de ejecución

• REGLA DE ORO: Cuando un nodo incorrecto no tiene hijos incorrectos, entonces este nodo es erróneo.

Ejemplo:

main = listSum [1,2]

listSum [] = 1listSum (x:xs) = x + (listSum xs)

main = 4

listSum [] = 1

1+3 = 4

2+1 = 3

listSum [1,2] = 4

listSum [2] = 3

Depuración Algorítmica

Page 5: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Recorriendo el árbol de ejecución

• REGLA DE ORO: Cuando un nodo incorrecto no tiene hijos incorrectos, entonces este nodo es erróneo.

Ejemplo:

main = listSum [1,2]

listSum [] = 0listSum (x:xs) = x + (listSum xs) + 1

main = 5

listSum [] = 0

1+3+1 = 5

2+0+1 = 3

listSum [1,2] = 5

listSum [2] = 3

Depuración Algorítmica

Page 6: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

IntroducciónDepuración Algorítmica

Balanceo de árboles de ejecuciónAE balanceadosTres técnicas para balancear AE

DemostraciónDDJ

Conclusiones y trabajo futuro

• Estrategias de la DA• Sesión de depuración

Contenido

Page 7: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Estrategias

Top Down Left to RightTop Down Heaviest FirstTop Down More Rules First

Divide & Query ShapiroDivide & Query HirunkittiDivide by Rules & Query

Single Stepping

Hat Delta More WrongsHat Delta Less RightsHat Delta Best Division

Top Down

Hat Delta

Divide & Query

Single Stepping

Estrategias de la Depuración Algorítmica

Page 8: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Sesión de depuración

main = sqrTest [1,2]

sqrTest x = test (squares (listSum x))

test (x,y,z) = (x==y) && (y==z)

listSum [] = 0listSum (x:xs) = x + (listSum xs)

squares x = ((square1 x),(square2 x),(square3 x))

square1 x = square x square x = x*x square2 x = listSum (list x x) list x y | y==0 = [] | otherwise = x:list x (y-1)

square3 x = listSum (partialSums x)

partialSums x = [(sum1 x),(sum2 x)]

sum1 x = div (x * (incr x)) 2sum2 x = div (x + (decr x)) 2

incr x = x + 1decr x = x - 1

Sesión de depuración

Page 9: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Sesión de depuración con la búsqueda Top-Down Left to Right.

main = False

sqrTest [1,2] = False

test (9,9,8) = False squares 3 = (9,9,8) listSum [1,2] = 3

squares1 3 = 9 squares2 3 = 9 squares3 3 = 8listSum [2] = 2

listSum [] = 0square 3 = 9 listSum [3,3,3] = 9

listSum [3,3] = 6

listSum [3] = 3

listSum [] = 0

list 3 3 = [3,3,3]

list 3 2 = [3,3]

list 3 1 = [3]

list 3 0 = []

listSum [6,2] = 8

listSum [2] = 2

listSum [] = 0

partialSums 3 = [6,2]

sum1 3 = 6 sum2 3 = 2

incr 3 = 4 decr 3 = 2

Empezando la sesión de depuración…

1) main = False? NO

2) sqrTest [1,2] = False? NO

3) test [9,9,8] = False? SI

4) squares 3 = [9,9,8]? NO

5) square1 3 = 9? SI

6) square2 3 = 9? SI

7) square3 3 = 8? NO

8) listSum [6,2] = 8? SI

9) partialSums 3 = [6,2]? NO

10) sum1 3 = 6? SI

11) sum2 3 = 2? NO

12) decr 3 = 2? SI

Error encontrado en la regla:

sum2 x = div (x + (decr x)) 2

Sesión de depuración

Page 10: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Sesión de depuración con la búsqueda Top-Down Heaviest First.

main = False

sqrTest [1,2] = False

test (9,9,8) = False squares 3 = (9,9,8) listSum [1,2] = 3

squares1 3 = 9 squares2 3 = 9 squares3 3 = 8listSum [2] = 2

listSum [] = 0square 3 = 9 listSum [3,3,3] = 9

listSum [3,3] = 6

listSum [3] = 3

listSum [] = 0

list 3 3 = [3,3,3]

list 3 2 = [3,3]

list 3 1 = [3]

list 3 0 = []

listSum [6,2] = 8

listSum [2] = 2

listSum [] = 0

partialSums 3 = [6,2]

sum1 3 = 6 sum2 3 = 2

incr 3 = 4 decr 3 = 2

Empezando la sesión de depuración…

1) main = False? NO

2) sqrTest [1,2] = False? NO

3) squares 3 = [9,9,8]? NO

4) square2 3 = 9? SI

5) square3 3 = 8? NO

6) partialSums 3 = [6,2]? NO

7) sum1 3 = 6? SI

8) sum2 3 = 2? NO

9) decr 3 = 2? SI

Error encontrado en la regla:

sum2 x = div (x + (decr x)) 2

Sesión de depuración

Page 11: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Sesión de depuración con la búsqueda Divide & Query Hirunkitti.

main = False

sqrTest [1,2] = False

test (9,9,8) = False squares 3 = (9,9,8) listSum [1,2] = 3

squares1 3 = 9 squares2 3 = 9 squares3 3 = 8listSum [2] = 2

listSum [] = 0square 3 = 9 listSum [3,3,3] = 9

listSum [3,3] = 6

listSum [3] = 3

listSum [] = 0

list 3 3 = [3,3,3]

list 3 2 = [3,3]

list 3 1 = [3]

list 3 0 = []

listSum [6,2] = 8

listSum [2] = 2

listSum [] = 0

partialSums 3 = [6,2]

sum1 3 = 6 sum2 3 = 2

incr 3 = 4 decr 3 = 2

Empezando la sesión de depuración…

1) square2 3 = 9? SI

2) square3 3 = 8? NO

3) partialSums 3 = [6,2]? NO

4) sum1 3 = 6? SI

5) sum2 3 = 2? NO

6) decr 3 = 2? SI

Error encontrado en la regla:

sum2 x = div (x + (decr x)) 2

Sesión de depuración

Page 12: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

• Generación de AE balanceados

IntroducciónDepuración Algorítmica

Balanceo de árboles de ejecuciónAE balanceadosTres técnicas para balancear AE

DemostraciónDDJ

Conclusiones y trabajo futuro

• AE completamente balanceado

Contenido

Page 13: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

4

12

1

12

1

8 4

12

1

12

1

16

AE completamente balanceadoSe dice que un árbol de ejecución está balanceado cuando: si se detecta un nodo incorrecto en el árbol de ejecución, entonces se puede encontrar un nodo que pode la mitad del árbol de ejecución que queda por depurar

Page 14: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

1

1234

12

1

1

1 1

1

2

3

5

4

6

2

78 24

2

1

1 1

1

16

Generación de AE balanceados

Page 15: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

IntroducciónDepuración Algorítmica

Balanceo de árboles de ejecuciónAE balanceadosTres técnicas para balancear AE

DemostraciónDDJ

Conclusiones y trabajo futuro

Proyección Colapso

• Compactación

• Cadenas

Contenido

Page 16: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

public class Chess{

public static void main(String[] args){

Chess p = new Chess();Position tower = new Position();Position king = new Position();king.locate(5, 1);tower.locate(8, 1);p.castling(tower, king);

}void castling(Position t, Position k){

if (t.x != 8) {for(int i=1; i<=2; i++) {t.left();}for(int i=1; i<=2; i++) {k.right();}

}else {

for(int i=1; i<=3; i++) {t.right();}for(int i=1; i<=2; i++) {k.left();}

}}}

class Position{

int x, y;void locate (int a, int b) {x=a; y=b;}void up() {y=y+1;}void down() {y=y-1;}

void right() {x=x+1;}void left() {x=x-1;}}

Programa de ejemplo

Page 17: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

p.castling(tower,king)p.castling(tower,king)

king.x=5king.y=1tower.x=8tower.y=1

king.x=3king.y=1tower.x=11tower.y=1

t.right()t.right()t.x=8t.y=1 t.right()t.right() t.right()t.right()

t.x=11t.y=1 k.left()k.left()

k.x=5k.y=1 k.left()k.left()

k.x=3k.y=1

t.x=9t.y=1

t.x=9t.y=1

t.x=10t.y=1

t.x=10t.y=1

k.x=4k.y=1

k.x=4k.y=1

Cadenas

Page 18: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

t.right()t.right() t.right()t.right() t.right()t.right() k.left()k.left() k.left()k.left()

p.castling(tower,king)p.castling(tower,king)

t.right()t.right()t.right()

t.right()t.right()t.right()

k.left()k.left()k.left()k.left()

king.x=5king.y=1tower.x=8tower.y=1

king.x=3king.y=1tower.x=11tower.y=1

t.x=8t.y=1

t.x=9t.y=1

t.x=9t.y=1

t.x=10t.y=1

t.x=10t.y=1

t.x=11t.y=1

k.x=5k.y=1

k.x=4k.y=1

k.x=4k.y=1

k.x=3k.y=1

Proyección

t.x=8t.y=1

t.x=11t.y=1

k.x=5k.y=1

k.x=3k.y=1

Page 19: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

p.castling(tower,king)p.castling(tower,king)

king.x=5king.y=1tower.x=8tower.y=1

king.x=3king.y=1tower.x=11tower.y=1

t.right()t.right()t.x=8t.y=1

t.x=9t.y=1 t.right()t.right()

t.x=9t.y=1

t.x=10t.y=1 t.right()t.right()

t.x=10t.y=1

t.x=11t.y=1 k.left()k.left()

k.x=5k.y=1

k.x=4k.y=1 k.left()k.left()

k.x=4k.y=1

k.x=3k.y=1

t.right()t.right()t.right()

t.right()t.right()t.right()

t.x=8t.y=1

t.x=11t.y=1

k.left()k.left()k.left()k.left()

k.x=5k.y=1

k.x=3k.y=1

Colapso

Page 20: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

32 16

Proceso de balanceoEstrategia NB

Left to Right 8.021Heaviest First 7.875D&Q Shapiro 7.229D&Q Hirunkitti 6.792

B6.9576.8045.9785.717

Reducción (%)86.73 %86.40 %82.69 %84.18 %

Page 21: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

IntroducciónDepuración Algorítmica

Balanceo de árboles de ejecuciónAE balanceadosTres técnicas para balancear AE

DemostraciónDDJ

Conclusiones y trabajo futuro

Proyección Colapso

• Compactación

• Cadenas

Contenido

Page 22: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

33 13

Compactación

Page 23: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Bosque de ejecución

Page 24: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

IntroducciónDepuración Algorítmica

Balanceo de árboles de ejecuciónAE balanceadosTres técnicas para balancear AE

DemostraciónDDJ

Conclusiones y trabajo futuro

Contenido

Page 25: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

IntroducciónDepuración Algorítmica

Balanceo de árboles de ejecuciónAE balanceadosTres técnicas para balancear AE

DemostraciónDDJ

Conclusiones y trabajo futuro

Contenido

Page 26: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

No colapsar o proyectar cadenas que realicen más de 5 cambios

Preguntas complejas

Posibilidad de volver al AE original

Conclusiones

Page 27: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

No colapsar o proyectar cadenas que realicen más de 5 cambios

Preguntas complejas

Evitar preguntas innecesarias

Posibilidad de volver al AE original

Conclusiones

Page 28: Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de árboles de ejecución AE balanceados AE completamente balanceado.

Benchmark

ET nodes Col./Proj.Question

sQuestions

Bal%

argparser 192 0/63 22.78 15.70 68.92 %cglib 1463 0/247 82.41 49.73 60.34 %kxml2 1445 2/277 81.61 50.90 62.37 %javassist 1499 5/148 83.84 61.00 72.76 %

No colapsar o proyectar cadenas que realicen más de 5 cambios

Preguntas complejas

Evitar preguntas innecesarias

Posibilidad de volver al AE original

Compactar subárbol en un nodo

Dividir un nodo en sub-computaciones (inversa)

Conclusiones

Trabajo futuroExperimentar con el tamaño de las cadenas

Implementar balanceado según la estructura usada en otras estrategias