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

Post on 11-Apr-2015

107 views 1 download

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

BalanceandoÁrboles de Ejecución

David Insa Cabrera

IntroducciónDepuración Algorítmica

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

DemostraciónDDJ

Conclusiones y trabajo futuro

Contenido

¿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)

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

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

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

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

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

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

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

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

• 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

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

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

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

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

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

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

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

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 %

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

33 13

Compactación

Bosque de ejecución

IntroducciónDepuración Algorítmica

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

DemostraciónDDJ

Conclusiones y trabajo futuro

Contenido

IntroducciónDepuración Algorítmica

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

DemostraciónDDJ

Conclusiones y trabajo futuro

Contenido

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

Preguntas complejas

Posibilidad de volver al AE original

Conclusiones

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

Preguntas complejas

Evitar preguntas innecesarias

Posibilidad de volver al AE original

Conclusiones

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