Introducción Depuración Algorítmica Estrategias de la DA Sesión de depuración Balanceo de...
-
Upload
edelmira-moyano -
Category
Documents
-
view
107 -
download
1
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