La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

1

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 Generación de AE balanceados Tres técnicas para balancear AE  Proyección  Colapso Compactación Cadenas Demostración DDJ Conclusiones y trabajo futuro

3 Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro

4 ¿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 error entonces la DA encontrará el error main = 4 listSum [] = 1 1+3 = 4 2+1 = 3 listSum [1,2] = 4 listSum [2] = 3 Ejemplo: main = listSum [1,2] listSum [] = 1 listSum (x:xs) = x + (listSum xs)

5 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 [] = 1 listSum (x:xs) = x + (listSum xs) main = 4 listSum [] = 1 1+3 = 4 2+1 = 3 listSum [1,2] = 4 listSum [2] = 3

6 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 [] = 0 listSum (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

7 Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro Estrategias de la DA Sesión de depuración

8 Estrategias Top Down Left to Right Top Down Heaviest First Top Down More Rules First Divide & Query Shapiro Divide & Query Hirunkitti Divide by Rules & Query Single Stepping Hat Delta More Wrongs Hat Delta Less Rights Hat Delta Best Division Top Down Hat Delta Divide & Query Single Stepping

9 Sesión de depuración main = sqrTest [1,2] sqrTest x = test (squares (listSum x)) test (x,y,z) = (x==y) && (y==z) listSum [] = 0 listSum (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)) 2 sum2 x = div (x + (decr x)) 2 incr x = x + 1 decr x = x - 1

10 Sesión de depuración con la búsqueda Top-Down Left to Right. main = False sqrTest [1,2] = False test (9,9,8) = Falsesquares 3 = (9,9,8)listSum [1,2] = 3 squares1 3 = 9squares2 3 = 9squares3 3 = 8 listSum [2] = 2 listSum [] = 0 square 3 = 9listSum [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 = 6sum2 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

11 Sesión de depuración con la búsqueda Top-Down Heaviest First. main = False sqrTest [1,2] = False test (9,9,8) = Falsesquares 3 = (9,9,8)listSum [1,2] = 3 squares1 3 = 9squares2 3 = 9squares3 3 = 8 listSum [2] = 2 listSum [] = 0 square 3 = 9listSum [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 = 6sum2 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

12 Sesión de depuración con la búsqueda Divide & Query Hirunkitti. main = False sqrTest [1,2] = False test (9,9,8) = Falsesquares 3 = (9,9,8)listSum [1,2] = 3 squares1 3 = 9squares2 3 = 9squares3 3 = 8 listSum [2] = 2 listSum [] = 0 square 3 = 9listSum [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 = 6sum2 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

13 Generación de AE balanceados Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro AE completamente balanceado

14 4 1 2 1 1 2 1 8 4 1 2 1 1 2 1 16 Se 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

15 1 1234 12 1 1 11 1 2 3 5 4 6 2 78 24 2 1 11 1 16

16 Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro  Proyección  Colapso Compactación Cadenas

17 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;} }

18 p.castling(tower,king) king.x=5 king.y=1 tower.x=8 tower.y=1 king.x=3 king.y=1 tower.x=11 tower.y=1 t.right() t.x=8 t.y=1 t.right() t.x=11 t.y=1 k.left() k.x=5 k.y=1 k.left() k.x=3 k.y=1 t.x=9 t.y=1 t.x=9 t.y=1 t.x=10 t.y=1 t.x=10 t.y=1 k.x=4 k.y=1 k.x=4 k.y=1

19 t.right() k.left() p.castling(tower,king) t.right() k.left() king.x=5 king.y=1 tower.x=8 tower.y=1 king.x=3 king.y=1 tower.x=11 tower.y=1 t.x=8 t.y=1 t.x=9 t.y=1 t.x=9 t.y=1 t.x=10 t.y=1 t.x=10 t.y=1 t.x=11 t.y=1 k.x=5 k.y=1 k.x=4 k.y=1 k.x=4 k.y=1 k.x=3 k.y=1 t.x=8 t.y=1 t.x=11 t.y=1 k.x=5 k.y=1 k.x=3 k.y=1

20 p.castling(tower,king) king.x=5 king.y=1 tower.x=8 tower.y=1 king.x=3 king.y=1 tower.x=11 tower.y=1 t.right() t.right() t.x=8 t.y=1 t.x=9 t.y=1 t.right() t.x=9 t.y=1 t.x=10 t.y=1 t.right() t.x=10 t.y=1 t.x=11 t.y=1 k.left() k.x=5 k.y=1 k.x=4 k.y=1 k.left() k.x=4 k.y=1 k.x=3 k.y=1 t.right() t.x=8 t.y=1 t.x=11 t.y=1 k.left() k.x=5 k.y=1 k.x=3 k.y=1

21 EstrategiaNB Left to Right8.021 Heaviest First7.875 D&Q Shapiro7.229 D&Q Hirunkitti6.792 B 6.957 6.804 5.978 5.717 Reducción (%) 86.73 % 86.40 % 82.69 % 84.18 %

22 Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro  Proyección  Colapso Compactación Cadenas

23

24

25 Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro

26 Introducción Depuración Algorítmica Balanceo de árboles de ejecución AE balanceados Tres técnicas para balancear AE Demostración DDJ Conclusiones y trabajo futuro

27 No colapsar o proyectar cadenas que realicen más de 5 cambios Preguntas complejas Posibilidad de volver al AE original

28 No colapsar o proyectar cadenas que realicen más de 5 cambios Preguntas complejas Evitar preguntas innecesarias Posibilidad de volver al AE original

29 BenchmarkET nodesCol./Proj.QuestionsQuestions Bal% argparser1920/6322.7815.7068.92 % cglib14630/24782.4149.7360.34 % kxml214452/27781.6150.9062.37 % javassist14995/14883.8461.0072.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) Experimentar con el tamaño de las cadenas Implementar balanceado según la estructura usada en otras estrategias

30 f() x=1X=4 g() x=1X=3 h() x=3X=4 g() x=4X=4 g() h() g() x=1X=4 g() x=1X=3 h() x=3 X=4 g() x=4X=4 f() x=1X=4 x = 1 f() x = 2 x = 1 g() x = 4 x = 4 g() x = 4 x = 3 h() x = 3 x = 4 h() x = 4


Descargar ppt "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."

Presentaciones similares


Anuncios Google