introducción depuración algorítmica estrategias de la da sesión de depuración balanceo de...

Post on 11-Apr-2015

107 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related