Apresentação do trabalho de conclusão do curso de mestrado em Ciência da Computação feito no Instituto de Matemática e Estatística da USP, em Maio de 2010
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Depuração automática de programas baseada em modelos
1. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Depura¸˜o autom´tica de programas baseada em
ca a
modelos: uma abordagem hier´rquica para aux´
a ılio
ao aprendizado de programa¸˜o
ca
Wellington R. Pinheiro
Orientadora: Profa . Dra . Leliane Nunes de Barros
Departamento de Ciˆncia da Computa¸ao
e c˜
Instituto de Matem´tica e Estat´
a ıstica - Universidade S˜o Paulo
a
{wrp}@ime.usp.br
07 de Maio de 2010
IME, 07 de maio de 2010 Slide: 1
2. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conceitos Gerais
Sistema Tutor Inteligente para Programa¸˜o
ca
Sistema Tutor Inteligente [Wenger, 1987] (ITS - Intelligent Tutoring
System): ferramenta de aprendizado eletrˆnico que usa t´cnicas de
o e
Inteligˆncia Artificial.
e
Um ITS para programa¸˜o deve ser capaz de:
ca
propor problemas de programa¸˜o que promovam o aprendizado
ca
de um determinado aluno;
detectar os poss´
ıveis erros de programa¸˜o do aluno
ca
(diagn´stico do programa do aluno);
o
comunicar as falhas ao aluno com a expectativa que ele aprenda
durante esse processo;
construir o modelo do aluno (representa¸˜o de seu
ca
conhecimento) com base no resultado do diagn´stico de
o
problemas.
IME, 07 de maio de 2010 Slide: 2
3. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conceitos Gerais
Sistema Tutor Inteligente para Programa¸˜o
ca
Sistema Tutor Inteligente [Wenger, 1987] (ITS - Intelligent Tutoring
System): ferramenta de aprendizado eletrˆnico que usa t´cnicas de
o e
Inteligˆncia Artificial.
e
Um ITS para programa¸˜o deve ser capaz de:
ca
propor problemas de programa¸˜o que promovam o aprendizado
ca
de um determinado aluno;
detectar os poss´
ıveis erros de programa¸˜o do aluno
ca
(diagn´stico do programa do aluno);
o
comunicar as falhas ao aluno com a expectativa que ele aprenda
durante esse processo;
construir o modelo do aluno (representa¸˜o de seu
ca
conhecimento) com base no resultado do diagn´stico de
o
problemas.
IME, 07 de maio de 2010 Slide: 2
4. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conceitos Gerais
Sistema Tutor Inteligente para Programa¸˜o: exemplos
ca
PROUST [Johnson and Soloway, 1984]
PROUST ´ o principal sistema encontrado na literatura capaz
e
de detectar erros de l´gica de programa¸˜o.
o ca
ProPAT: Tutor de Padr˜es Elementares [Delgado, 2005].
o
Utiliza diagn´stico baseado em modelo para fazer depura¸˜o de
o ca
programas (MBSD).
Funciona para um subconjunto de instru¸˜es da linguagem C.
co
Utiliza um plugin Eclipse como ambiente de programa¸˜o e
ca
interface de comunica¸˜o com o estudante.
ca
Permite que o aluno programe usando padr˜es elementares de
o
programa¸˜o.
ca
IME, 07 de maio de 2010 Slide: 3
5. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conceitos Gerais
Diagn´stico do Programa do Aluno
o
PROUST [Johnson and Soloway, 1984] ProPAT [Delgado, 2005]
Caracter´
ısticas
tenta construir o modelo do utiliza diagn´stico baseado em
o
estudante reconhecendo planos de modelo para detectar falhas no
programa¸ao e metas (inten¸oes) no
c˜ c˜ programa do aluno;
programa do aluno; n˜o requer uma biblioteca de planos
a
os planos de programa¸ao e as
c˜ e metas previamente definidos para
metas para um determinado a solu¸ao.
c˜
conjunto de problemas s˜o
a
armazenados em uma biblioteca.
Limita¸oes
c˜
os planos da biblioteca podem n˜oa as falhas s˜o comunicadas ao aluno
a
cobrir todas as poss´
ıveis solu¸oes
c˜ em termos de linhas do programa, o
para um determinado problema; que fornece pouca ou nenhuma
se nenhum plano for encontrado informa¸ao para que o aluno
c˜
n˜o ´ poss´ detectar as falhas no
a e ıvel identifique os erros no programa.
programa do aluno.
IME, 07 de maio de 2010 Slide: 4
6. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conceitos Gerais
Diagn´stico Baseado em Modelo
o
´
E uma t´cnica de Inteligˆncia
e e
Artificial usada para
encontrar componentes
falhos em sistemas f´ısicos.
Raciocina sobre modelos que
descrevem o comportamento
correto dos sistemas.
Envolve trˆs
e
subtarefas [Benjamins, 1993]:
detec¸˜o de sintomas,
ca
gera¸˜o de hip´teses e
ca o
discrimina¸˜o de hip´teses.
ca o
IME, 07 de maio de 2010 Slide: 5
7. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conceitos Gerais
Depura¸˜o de Programas Baseada em Modelo
ca
Model Based Software
Debugging
(MBSD) [Mayer et al., 2002].
Ideia b´sica: fazer uma
a
simula¸˜o passo a passo do
ca
programa apontando as
instru¸˜es que justificam as
co
discrepˆncias observadas,
a
i.e., a diferen¸as entre as
c
sa´ıdas do programa e as
sa´ıdas esperadas (sintomas).
Pode ser usada por um ITS
para tentar entender as
diferen¸as entre as inten¸˜es
c co
do aluno e seu programa.
IME, 07 de maio de 2010 Slide: 6
8. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conceitos Gerais
Depura¸˜o de Programas Baseada em Modelo
ca
IME, 07 de maio de 2010 Slide: 7
9. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Motiva¸ao
c˜
Exemplo 1
Problema da ordem crescente: Dados dois n´meros inteiros, a e b, construir um
u
programa que imprima esses n´meros em ordem crescente. Os casos de teste que
u
dever˜o ser usados para testar o seu programa solu¸ao s˜o:
a c˜ a
CT1 Entradas: 3, 5 Sa´
ıdas: 3, 5
CT2 Entradas: 5, 3 Sa´
ıdas 3, 5
CT3 Entradas: 3, 3 Sa´
ıdas: 3, 3
1 public class OrdemCrescente {
2 public static void crescente(int a, int b) {
3 int maior;
4 int menor;
5
6 if (a < b) {
7 maior = a;
8 menor = b;
9 } else {
10 maior = b;
11 menor = a;
12 }
13
14 writeInt("o menor numero e’", menor);
15 writeInt("o maior numero e’", maior);
16 }
17 }
IME, 07 de maio de 2010 Slide: 8
10. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Motiva¸ao
c˜
Exemplo 1
Problema da ordem crescente: Dados dois n´meros inteiros, a e b, construir um
u
programa que imprima esses n´meros em ordem crescente. Os casos de teste que
u
dever˜o ser usados para testar o seu programa solu¸ao s˜o:
a c˜ a
CT1 Entradas: 3, 5 Sa´
ıdas: 3, 5
CT2 Entradas: 5, 3 Sa´
ıdas 3, 5
CT3 Entradas: 3, 3 Sa´
ıdas: 3, 3
1 public class OrdemCrescente {
2 public static void crescente(int a, int b) {
3 int maior;
4 int menor;
5
6 if (a < b) {
7 maior = a;
8 menor = b;
9 } else {
10 maior = b;
11 menor = a;
12 }
13
14 writeInt("o menor numero e’", menor);
15 writeInt("o maior numero e’", maior);
16 }
17 }
IME, 07 de maio de 2010 Slide: 8
11. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Motiva¸ao
c˜
Exemplo 1
Executando um depurador autom´tico de programas
a 6 if (a < b) {
baseado em modelos, para o programa do exemplo, 7 maior = a;
com o caso de teste CT1: 8 menor = b;
9 } else {
Entradas: 3, 5 Sa´
ıdas: 3, 5 10 maior = b;
11 menor = a;
s˜o obtidas as seguintes hip´teses de falha:
a o 12 }
13
14 writeInt(”o menor numero e’”, menor);
{6}, {7, 8}, {14, 15}, {8, 15}, {7, 14} 15 writeInt(”o maior numero e’”, maior);
Hip´tese
o Corre¸˜o
ca
{6} trocar o operador “>” pelo operador “<” na Linha 6
{7, 8} inverter os valores nas atribui¸oes das Linhas 7 e 8
c˜
{14, 15} inverter somente os nomes das vari´veis impressas nas Linhas 14 e
a
15
{8, 15} na Linha 8 mudar para menor = a e na Linha 15, imprimir o valor
de b
{7, 14} na Linha 7 mudar para maior = b e na Linha 14, imprimir o valor
de a
IME, 07 de maio de 2010 Slide: 9
12. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Motiva¸ao
c˜
Exemplo 1
Executando um depurador autom´tico de programas
a 6 if (a < b) {
baseado em modelos, para o programa do exemplo, 7 maior = a;
com o caso de teste CT1: 8 menor = b;
9 } else {
Entradas: 3, 5 Sa´
ıdas: 3, 5 10 maior = b;
11 menor = a;
s˜o obtidas as seguintes hip´teses de falha:
a o 12 }
13
14 writeInt(”o menor numero e’”, menor);
{6}, {7, 8}, {14, 15}, {8, 15}, {7, 14} 15 writeInt(”o maior numero e’”, maior);
Hip´tese
o Corre¸˜o
ca
trocar o operador “>” pelo operador “<” na Linha 6
{6}
{7, 8} inverter os valores nas atribui¸oes das Linhas 7 e 8
c˜
inverter somente os nomes das vari´veis impressas nas Linhas 14 e
a
{14, 15} 15
{8, 15} na Linha 8 mudar para menor = a e na Linha 15, imprimir o valor
de b
{7, 14} na Linha 7 mudar para maior = b e na Linha 14, imprimir o valor
de a
IME, 07 de maio de 2010 Slide: 9
13. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Motiva¸ao
c˜
Limita¸˜es do MBSD para o Aprendizado de Programa¸˜o
co ca
Mesmo para um programa pequeno, podem haver muitas
hip´teses de falha para serem comunicadas (e discriminadas) ao
o
aluno, podendo deix´-lo cansado e confuso.
a
Informar as linhas do programa possivelmente falhas pode n˜o a
ser suficiente para que um aluno iniciante consiga corrigir o seu
programa.
Um aprendiz de programa¸˜o n˜o tem conhecimento suficiente
ca a
para fazer predi¸˜es a respeito do comportamento do programa
co
e fornecer os valores esperados para as vari´veis do programa,
a
durante a discrimina¸˜o de hip´teses.
ca o
IME, 07 de maio de 2010 Slide: 10
14. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Objetivo
Depura¸˜o Hier´rquica de Programas (HPD)
ca a
O objetivo desse trabalho ´ estender a t´cnica MBSD com o uso do
e e
Diagn´stico Hier´rquico Baseado em Modelos (diagn´stico
o a o
hier´rquico), de maneira que:
a
Falhas no programa do aluno possam ser encontradas em
diferentes n´
ıveis de abstra¸˜o.
ca
Fun¸˜es, procedimentos e padr˜es elementares sejam vistos
co o
como componentes abstratos.
A comunica¸˜o com o aluno possa ser feita em termos desses
ca
componentes abstratos , i.e., atrav´s de uma linguagem de alto
e
n´
ıvel, e n˜o somente atrav´s de linhas do programa.
a e
O tutor comunique um conjunto menor de hip´teses de falha
o
menor a cada itera¸˜o.
ca
IME, 07 de maio de 2010 Slide: 11
15. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Objetivo
Depura¸˜o Hier´rquica de Programas (HPD)
ca a
Ap´s serem encontradas as hip´teses de falha em um
o o
determinado n´ de abstra¸˜o, o aluno pode:
ıvel ca
fazer a discrimina¸˜o de hip´teses no n´ de abstra¸˜o atual
ca o ıvel ca
(fornecendo novas observa¸oes a respeito do comportamento
c˜
esperado para o componente abstrato);
depurar o programa em um n´ mais detalhado, substituindo
ıvel
um componente abstrato pelos seus componentes internos
(refinamento);
modificar o programa para tentar corrigir as falhas.
IME, 07 de maio de 2010 Slide: 12
16. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Organiza¸˜o
ca
Fundamentos
Diagn´stico Baseado em Modelos
o
Diagn´stico Hier´rquico Baseado em Modelos
o a
IME, 07 de maio de 2010 Slide: 13
17. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
MBD
MBD: exemplo
A
3 X
M1
F
B
A1 12
2 Y
C
2
D
M2
3
G
A2 12
Z
E
M3
3
ok(C ) indica que o componente C est´ funcionando corretamente e;
a
¬ok(C ) indica que o componente C est´ falho.
a
Modelo comportamental Modelo estrutural Observa¸oes
c˜
adder(x)∧ok(x)→add(in1 (x),in2 (x),out1 (x))
in1 (M1 )=3
multiplier(x)∧ok(x)→mult(in1(x),in2 (x),out1 (x))
out1 (M1 )=in1 (A1 ) in2 (M1 )=2
multiplier(M1 )
out1 (M2 )=in2 (A1 ) in1 (M2 )=2
multiplier(M2 )
out1 (M2 )=in1 (A2 ) in2 (M2 )=3
multiplier(M3 )
out1 (M3 )=in2 (A2 ) in1 (M3 )=2
adder(A1 )
in2 (M3 )=3
adder(A2 )
IME, 07 de maio de 2010 Slide: 14
18. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
MBD
MBD: exemplo
A A
3 X 3 X
M1 M1
10
F F
B
A1 12 A1 10
B
2 Y 2 Y
C C
2
D
M2 2 M2
3 D
G
3 12
G
A2 12 A2 10
Z
E
M3 M3
E
3 3
{{M1 },{M2 },{A1 }} {{M1 },{M3 },{A1 },{A2 }}
Algoritmo de Reiter
{M1, M2, A1}
M3 M1 M2 A1
M1
M2
A1 @ {M1, M3, A1, A2} @
A2
M1 M3 A1 A2
X @ X @
F deveria ser G deveria ser
12 mas é 10 10 mas é 12
Hip´teses de falha:
o {{M1 },{A1 },{M2 ,M3 },{M2 ,A2 }}
IME, 07 de maio de 2010 Slide: 15
19. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
Diagn´stico Hier´rquico Baseado em Modelo
o a
Hierarchical Model Based Diagnosis (HMBD) [Mozetiˇ, 1991].
c
Usada para se obter melhor desempenho que a t´cnica de MBD
e
tradicional.
A descri¸˜o do sistema ´ feita em diferentes n´
ca e ıveis de
abstra¸˜o.
ca
Utiliza abstra¸oes para representar componentes ou o
c˜
comportamento do sistema (abstra¸oes estruturais e
c˜
comportamentais).
Utiliza a t´cnica de MBD tradicional para encontrar a solu¸˜o a
e ca
cada n´ de abstra¸˜o.
ıvel ca
IME, 07 de maio de 2010 Slide: 16
21. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
´
Arvore de Abstra¸˜es
co
Suposi¸˜o de subsistemas independentes.
ca
IME, 07 de maio de 2010 Slide: 18
22. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
Comportamento de um Componente Interno
Modelos de um componente abstrato
Um componente abstrato pode ser descrito pelos modelos:
estrutural interno, estrutural externo e comportamental.
Comportamento de um componente abstrato
Um componente abs- O comportamento de Assim, o comporta-
trato AC 1 e os compo- AC 1 ´ assumido como
e mento de C 1, C 2 e C 3
nentes internos C 1, C 2 correto devem ser assumidos
e C3 como corretos
Esse comportamento pode ser descrito formalmente pelo seguinte axioma:
ok(CA) → ok(C1 ) ∧ ok(C2 ) ∧ · · · ∧ ok(Cm ) (Axioma 1)
IME, 07 de maio de 2010 Slide: 19
23. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
Algoritmo HMBD
O algoritmo de Diagn´stico Hier´rquico [Mozetiˇ, 1991], ´
o a c e
composto dos seguintes passos:
1 Verificar quais observa¸˜es dever˜o ser usadas em cada um dos
co a
n´
ıveis de abstra¸˜o.
ca
2 Para cada n´ i , de l at´ 0, sendo l o n´ mais alto que n˜o
ıvel e ıvel a
esconde todas as conex˜es com observa¸˜es, encontrar o
o co
conjunto de hip´teses de falha utilizando algum algoritmo de
o
MBD. Para cada componente abstrato CA n˜o envolvido em
a
nenhuma hip´tese de falha no n´ i , usar o Axioma 1 para o
o ıvel
n´ i − 1.
ıvel
3 Devolver as hip´teses de falhas encontradas no n´ 0.
o ıvel
IME, 07 de maio de 2010 Slide: 20
24. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
25. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
26. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
27. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
28. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Organiza¸˜o
ca
Dr. Java Pro
Caracter´
ısticas
Componente abstrato de programa¸˜o
ca
Modelo hier´rquico de um programa
a
Algoritmo HPD
IME, 07 de maio de 2010 Slide: 22
29. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Caracter´
ısticas
Depura¸˜o Hier´rquica de Programas
ca a
O Hierarchical Program Debugging (HPD) tem as seguintes
caracter´
ısticas:
Extens˜o da t´cnica de MBSD que utiliza o diagn´stico
a e o
hier´rquico baseado em modelos para depurar programas.
a
Permite representar o programa do aluno em diversos n´ ıveis de
abstra¸˜o, sendo fun¸˜es, procedimentos e padr˜es elementares
ca co o
representados como componentes abstratos.
Possibilita discriminar hip´teses em v´rios n´
o a ıveis de abstra¸˜o,
ca
atrav´s das seguintes funcionalidades:
e
informar valores para vari´veis
a
refinar componente abstrato
IME, 07 de maio de 2010 Slide: 23
30. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Componente abstratro de programa¸ao
c˜
Constru¸˜o de um componente abstrato em programas
ca
a) Modelo com o componente representando
o padrão de Seleção Simples
Seleção Simples
a < m
componente
de seleção
b) Modelo base gerado para o
trecho de programa apresentado
condição a < m
Conditional
componente
de seleção
ação 1 ação 2 ação n
c) Padrão de Seleção Simples
aplicado usada em um programa
if (a < m) {
ação 1;
ação 2;
...
ação n;
}
IME, 07 de maio de 2010 Slide: 24
31. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Modelo hier´rquico de um programa
a
Exemplo 1
Problema da ordem crescente: Dados dois n´meros inteiros, a e b, construir um
u
programa que imprima esses n´meros em ordem crescente. Os casos de teste que
u
dever˜o ser usados para testar o seu programa solu¸ao s˜o:
a c˜ a
CT1 Entradas: 3, 5 Sa´
ıdas: 3, 5
CT2 Entradas: 5, 3 Sa´
ıdas 3, 5
CT3 Entradas: 3, 3 Sa´
ıdas: 3, 3
1 public class OrdemCrescente {
2 public static void crescente(int a, int b) {
3 int maior;
4 int menor;
5
6 if (a < b) {
7 maior = a;
8 menor = b;
9 } else {
10 maior = b;
11 menor = a;
12 }
13
14 writeInt("o menor numero e’", menor);
15 writeInt("o maior numero e’", maior);
16 }
17 }
IME, 07 de maio de 2010 Slide: 25
32. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Modelo hier´rquico de um programa
a
Modelos do Exemplo 1
a) Modelo abstrato
a menor1 writeInt("menor", menor)
in1 Seleção out1 in1 Assignment (C6) out
Alternativa
b maior1 writeInt("maior", maior)
(CA1)
in2 out2 in1 Assignment (C7) out
b) Modelo base
a in1
a < b
Conditional - C1
b
Expr (C0) C1-Then
in2
a’ maior = a maior2
result
in1 Assign (C2) out
aux0 condResult
b’ menor = b menor3
menor1 writeInt("menor", menor)
in1 Assign (C3) out
in1 out1 in1 Assign (C6) out
maior1 writeInt("maior", maior)
in2
C1-Else Assign (C7)
out2 in1 out
a’’ maior = b maior4
in1 Assign (C4) out
b’’ menor = a menor5
in1 Assign (C5) out
IME, 07 de maio de 2010 Slide: 26
33. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Modelo hier´rquico de um programa
a
Modelos do Exemplo 1
Modelo estrutural interno
composit(C , E , Cond) →
in1 (C ) = in1 (E ) ∧ in2 (C ) = in2 (E )∧
in1 (C ) = in1 (Cond) ∧ in2 (C ) = in2 (Cond)∧
result(E ) = aux0 ∧ condResult(C ) = aux0∧
condResult(Cond) = aux0∧
out1 (C ) = out1 (Cond) ∧ out2 (C ) = out2 (Cond)
composit(CA1, C 0, C 1)
Modelo comportamental
cond(C ) ∧ ok(C ) → ∃E , Cond [
composit(C , E , Cond)∧
ok(E ) ∧ ok(Cond) ]
cond(CA1)
Modelo estrutural externo
in1 (CA1) = a
in2 (CA1) = b
out1 (CA1) = menor 1
out2 (CA1) = maior 1
IME, 07 de maio de 2010 Slide: 27
34. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Algoritmo HPD
Depura¸˜o Hier´rquica de Programas (HPD)
ca a
O algoritmo proposto utiliza uma abordagem inspirada no trabalho
de Mozetiˇ (1991), com as seguintes extens˜es:
c o
A discrimina¸˜o de hip´teses pode acontecer durante o pro-
ca o
cesso de diagn´stico hier´rquico.
o a
A falha pode ser encontrada e solucionada em qualquer n´ ıvel
de abstra¸˜o.
ca
N˜o ´ necess´rio refinar todos os componentes abstratos de um
a e a
n´ i para um n´ i − 1, que sejam considerados hip´teses
ıvel ıvel o
de falha.
Uma vez que um componente abstrato tem seu comporta-
mento definido como funcionando corretamente, ele n˜o pre-
a
cisar´ ser refinado at´ o final do processo de diagn´stico.
a e o
IME, 07 de maio de 2010 Slide: 28
35. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Algoritmo HPD
Tela principal do Dr. Java Pro
.
Vamos selecionar o Caso de Teste 1 para fazer a depura¸ao.
c˜
IME, 07 de maio de 2010 Slide: 29
36. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Algoritmo HPD
Hip´teses de falha no Dr. Java Pro
o
Nesse ponto, o aluno deve escolher um caminho de depura¸ao para seguir.
c˜
IME, 07 de maio de 2010 Slide: 30
37. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Algoritmo HPD
Alguns poss´
ıveis caminhos de depura¸˜o
ca
{SeleçãoAlternativa} {15,14}
Informar valores para Informar valores
{SeleçãoAlternativa} para {15,14}
menor = 3 menor = 3
maior = 5 maior = 5
{SeleçãoAlternativa}
Refinamento do
componente abstrato
de SeleçãoAlternativa
{6}, {7,8}
Informar Informar
valores valores
para {6} para {7,8}
a<b = a<b = menor=3
Falso Verdadeiro maior=5
{6} {7,8}
Vamos continuar a depura¸ao escolhendo a hip´tese de falha SelecaoAlternativa e
c˜ o
informar valores para as vari´veis.
a
IME, 07 de maio de 2010 Slide: 31
38. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Algoritmo HPD
Informando valores para uma hip´tese de falha
o
Ap´s informar os valores para as vari´veis, o depurador devolve a hip´tese de falha:
o a o
{SelecaoAlternativa}.
Vamos refinar o componente abstrato SelecaoAlternativa.
IME, 07 de maio de 2010 Slide: 32
39. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Algoritmo HPD
Refinando um componente abstrato
Ap´s o refinamento do componente abstrato SelecaoAlternativa, o depurador devolve as
o
seguintes hip´teses de falha:
o
{6},{7,8}
Vamos continuar o processo de depura¸ao informando valores para as vari´veis
c˜ a
relacionadas a hip´tese {6}.
` o
IME, 07 de maio de 2010 Slide: 33
40. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Algoritmo HPD
Informando valores para uma condi¸˜o l´gica
ca o
Ap´s informar o valor esperado condi¸ao na Linha 6, o depurador devolve somente a
o c˜
hip´tese de falha: {6}.
o
Nesse momento, o aluno deveria ser capaz de reconhecer que a falha est´ no operador
a
l´gico da express˜o na Linha 6 e realizar a corre¸ao adequada.
o a c˜
IME, 07 de maio de 2010 Slide: 34
41. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Avalia¸˜o do uso da ferramenta
ca
A avalia¸˜o foi feita com um grupo de alunos em duas aulas
ca
pr´ticas.
a
Os problemas de programa¸˜o foram classificados como:
ca
Resolva e Modifique.
A intera¸˜o dos alunos com a ferramenta Dr. Java Pro foram
ca
armazenadas em logs, a partir dos quais foram feitas nossas
an´lises.
a
IME, 07 de maio de 2010 Slide: 35
42. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Problema P1: C´lculo do n´mero par
a u
Nome: C´lculo do n´mero par
a u
Enunciado: Dado um n´mero inteiro n, calcule n/2 se n for par ou (n-3)/2,
u
caso contr´rio
a
Tipo: Resolva
Identificador Entradas Sa´ ıdas
CT1 10 5
Casos de teste: CT2 1 -1
CT3 0 0
CT4 23 10
Classe: CalculoPar
Justificativa: Esse problema tem como objetivo introduzir ao aluno a ferramenta
Dr. Java Pro e os conceitos de depura¸ao autom´tica. Nesse
c˜ a
primeiro contato, devem ser apresentados: o conceito de casos de
teste e sua aplica¸ao; os conceitos de hip´teses de falha; a tarefa
c˜ o
de discrimina¸ao de hip´teses que envolve informar valores para
c˜ o
vari´veis e refinamento de componentes abstratos.
a
IME, 07 de maio de 2010 Slide: 36
43. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Programas escritos pelos alunos para solucionar o
Problema P1
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 0) if (n % 2 == 0) if (n % 2 != 0)
resultado = n/2; resultado = n/2; resultado = n/2;
else else else
resultado = (n-3)/2; resultado = (n-2)/2; resultado = n/2;
return resultado return resultado return resultado
} } }
P1a P1b P1c
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 1) if (n % 2 == 0) if (n % 2 == 0)
resultado = (n-3)/2; resultado = n/2; resultado = n/2;
else else else
resultado = n/2; resultado = n/2; resultado = (n-3)/2;
return resultado return resultado return resultado
} } }
P1d P1e P1f
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 0) if (n % 2 == 1) if (n % 2 != 1)
resultado = (n-3)/2; resultado = (n-3)/2; resultado = n/2;
else else else
resultado = n/2; resultado = n/2; resultado = (n-3)/2;
return resultado return resultado return resultado
} } }
P1g P1h P1i
IME, 07 de maio de 2010 Slide: 37
44. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Sequˆncia de modifica¸˜es nos programas utilizados pelos
e co
alunos durante a solu¸˜o do Problema P1.
ca
Versão 1 Versão 2 Versão 3
8
P1a P1a P1a
1 5
P1b P1b P1b
6
P1c 1 P1c P1c
2
2
P1d 6 P1d P1d
1
1
P1e 1 P1e P1e
1 4
9
P1f P1f P1f
1
P1g 1 P1g P1g
P1h P1h P1h
P1i P1i P1I
IME, 07 de maio de 2010 Slide: 38
45. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Sequˆncia de programas: P1a →5 P1c →4 P1g
e
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 0) if (n % 2 == 0) if (n % 2 != 0)
resultado = n/2; resultado = n/2; resultado = n/2;
else else else
resultado = (n-3)/2; resultado = (n-2)/2; resultado = n/2;
return resultado return resultado return resultado
} } }
P1a P1b P1c
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 1) if (n % 2 == 0) if (n % 2 == 0)
resultado = (n-3)/2; resultado = n/2; resultado = n/2;
else else else
resultado = n/2; resultado = n/2; resultado = (n-3)/2;
return resultado return resultado return resultado
} } }
P1d P1e P1f
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 0) if (n % 2 == 1) if (n % 2 != 1)
resultado = (n-3)/2; resultado = (n-3)/2; resultado = n/2;
else else else
resultado = n/2; resultado = n/2; resultado = (n-3)/2;
return resultado return resultado return resultado
} } }
P1g P1h P1i
IME, 07 de maio de 2010 Slide: 39
46. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Sequˆncia de programas: P1c →6 P1g
e
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 0) if (n % 2 == 0) if (n % 2 != 0)
resultado = n/2; resultado = n/2; resultado = n/2;
else else else
resultado = (n-3)/2; resultado = (n-2)/2; resultado = n/2;
return resultado return resultado return resultado
} } }
P1a P1b P1c
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 1) if (n % 2 == 0) if (n % 2 == 0)
resultado = (n-3)/2; resultado = n/2; resultado = n/2;
else else else
resultado = n/2; resultado = n/2; resultado = (n-3)/2;
return resultado return resultado return resultado
} } }
P1d P1e P1f
public int calcula(int n) { public int calcula(int n) { public int calcula(int n) {
int resultado = 0; int resultado = 0; int resultado = 0;
if (n % 2 != 0) if (n % 2 == 1) if (n % 2 != 1)
resultado = (n-3)/2; resultado = (n-3)/2; resultado = n/2;
else else else
resultado = n/2; resultado = n/2; resultado = (n-3)/2;
return resultado return resultado return resultado
} } }
P1g P1h P1i
IME, 07 de maio de 2010 Slide: 40
47. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Problema P2: C´lculo da Mediana
a
Nome: C´lculo da mediana
a
Enunciado: Dados 3 n´meros inteiros, determinar um inteiro n, tal que ni ≤
u
n ≤ nj , sendo ni e nj os outros inteiros dados (lidos). Encontre e
corrija os erros no programa fornecido.
Tipo: Modifique
Identificador Entradas Sa´
ıdas
CT1 1, 2, 3 2
CT2 1, 3, 2 2
CT3 2, 1, 3 2
CT4 2, 3, 1 2
CT5 3, 1, 2 2
Casos de teste: CT6 3, 2, 1 2
CT7 9, -100, 10 9
CT8 12, 12, 5 12
CT9 12, 5, 12 12
CT10 5, 12, 12 12
CT11 12, 12, 12 12
CT12 0, -1, 1 0
Classe: Mediana
Justificativa: Esse problema tem como objetivo fixar os conceitos de padr˜es de
o
sele¸ao. O problema tamb´m ´ um bom exerc´
c˜ e e ıcio para utilizar a
funcionalidade de refinamento de componentes abstratos do Dr.
Java Pro, visto que cada sele¸ao aninhada ´ representada por um
c˜ e
componente abstrato.
IME, 07 de maio de 2010 Slide: 41
48. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Esqueleto do programa para o Problema da Mediana
1 public class Mediana {
2 /** ...
14 public int encontraMediana(int a, int b, int c) {
15 int resultado;
16 if (a < b) {
17 if (b < c) {
18 if (a < c)
19 resultado = c;
20 else
21 resultado = a;
22 } else {
23 resultado = b;
24 }
25 } else {
26 if (c > b)
27 resultado = b;
28 else if (c > a)
29 resultado = a;
30 else
31 resultado = c;
32 }
33 return resultado;
34 }
IME, 07 de maio de 2010 Slide: 42
49. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Sequˆncia de modifica¸˜es nos programas utilizados pelos
e co
alunos durante a solu¸˜o do Problema P2.
ca
P2a Modifica¸ao da condi¸ao: troca do operador da linha 16 de “<” para
c˜ c˜
“>”.
P2b Modifica¸ao da condi¸ao: troca do operador da linha 17 de “<” para
c˜ c˜
“>”.
P2c Invers˜o dos blocos: Linhas 19 e 23.
a
P2d [Programa correto]. Modifica¸ao da condi¸ao: troca do operador “<”
c˜ c˜
da Linha 17 para “>” e troca do operador “>” da linha 26 para “<”.
Versão 1 Versão 2 Versão 3
P2a P2a
1
3 P2b 1 P2b
7
Programa Mediana 2
3
P2c P2c
2
1
P2d P2d
IME, 07 de maio de 2010 Slide: 43
50. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Sequˆncia de programas: Mediana →3 P2b →3 P2d
e
16 if (a < b) { 16 if (a < b) { 16 if (a < b) {
17 if (b < c) { 17 if (b > c) { 17 if (b > c) {
18 if (a < c) 18 if (a < c) 18 if (a < c)
19 resultado = c; 19 resultado = c; 19 resultado = c;
20 else 20 else 20 else
21 resultado = a; 21 resultado = a; 21 resultado = a;
22 } else { 22 } else { 22 } else {
23 resultado = b; 23 resultado = b; 23 resultado = b;
24 } 24 } 24 }
25 } else { 25 } else { 25 } else {
26 if (c > b) 26 if (c > b) 26 if (c < b)
27 resultado = b; 27 resultado = b; 27 resultado = b;
28 else if (c > a) 28 else if (c > a) 28 else if (c > a)
29 resultado = a; 29 resultado = a; 29 resultado = a;
30 else 30 else 30 else
31 resultado = c; 31 resultado = c; 31 resultado = c;
32 } 32 } 32 }
33 return resultado; 33 return resultado; 33 return resultado;
Programa Mediana P2b P2d
IME, 07 de maio de 2010 Slide: 44
51. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Sequˆncia de programas: Mediana →2 P2c →2 P2d
e
16 if (a < b) { 16 if (a < b) { 16 if (a < b) {
17 if (b < c) { 17 if (b < c) { 17 if (b > c) {
18 if (a < c) 18 if (a < c) 18 if (a < c)
19 resultado = c; 19 resultado = b; 19 resultado = c;
20 else 20 else 20 else
21 resultado = a; 21 resultado = a; 21 resultado = a;
22 } else { 22 } else { 22 } else {
23 resultado = b; 23 resultado = c; 23 resultado = b;
24 } 24 } 24 }
25 } else { 25 } else { 25 } else {
26 if (c > b) 26 if (c > b) 26 if (c < b)
27 resultado = b; 27 resultado = b; 27 resultado = b;
28 else if (c > a) 28 else if (c > a) 28 else if (c > a)
29 resultado = a; 29 resultado = a; 29 resultado = a;
30 else 30 else 30 else
31 resultado = c; 31 resultado = c; 31 resultado = c;
32 } 32 } 32 }
33 return resultado; 33 return resultado; 33 return resultado;
Programa Mediana P2c P2d
IME, 07 de maio de 2010 Slide: 45
52. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Resultados das an´lises experimentais
a
As an´lises sugerem que o uso da ferramenta Dr. Java Pro auxiliou os
a
alunos na detec¸˜o e corre¸˜o dos problemas de programa¸˜o
ca ca ca
propostos, dadas as seguintes evidˆncias:
e
1 tradicionalmente, apenas 30% dos alunos dessa disciplina
conseguem acertar integralmente uma quest˜o equivalente ao
a
Problema P2 em prova escrita;
2 56% dos alunos acertaram os problemas P2 e 90% acertaram o
Problema P1.
Problema P1: dos 30 alunos avaliados, 18 seguiram a orienta¸˜o do
ca
depurador, obtendo sucesso na corre¸˜o de seus programas, ou seja,
ca
60% dos alunos seguiram um racioc´ l´gico na depura¸˜o de seus
ınio o ca
programas, ao inv´s de fazer modifica¸oes aleat´rias.
e c˜ o
IME, 07 de maio de 2010 Slide: 46
53. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Avalia¸ao do Dr. Java Pro
c˜
Resultados das an´lises experimentais
a
Problema P2: dos 16 alunos avaliados, 7 seguiram a orienta¸˜o do
ca
depurador, obtendo sucesso na corre¸˜o de seus programas, ou seja,
ca
44% dos alunos seguiram um racioc´ l´gico na depura¸˜o de seus
ınio o ca
programas.
Com base na avalia¸˜o feita pelos alunos sobre a ferramenta, a
ca
maioria acredita que a ferramenta ´ ´til para o aprendizado e que ela
eu
deveria ser usada mais frequentemente em disciplinas de Introdu¸˜o `
ca a
Programa¸˜o.
ca
IME, 07 de maio de 2010 Slide: 47
54. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conclus˜es e trabalhos futuros
o
Conclus˜es
o
Foi proposta uma extens˜o da t´cnica de diagn´stico hier´rquico para
a e o a
encontrar falhas em programas representados em diferentes n´
ıveis de
abstra¸˜o, considerando componentes abstratos, tais como: fun¸oes,
ca c˜
procedimentos e padr˜es elementares.
o
O diagn´stico hier´rquico fornece uma forma de comunicar aos alunos
o a
as falhas de um programa em termos de componentes abstratos, isto
´, em uma linguagem de alto n´
e ıvel.
A avalia¸˜o preliminar da ferramenta com um grupo de alunos de
ca
uma disciplina de Introdu¸˜o ` Programa¸˜o mostrou que um n´mero
ca a ca u
razo´vel de alunos foi capaz de compreender as hip´teses de falha
a o
geradas pelo depurador autom´tico e usar essas informa¸oes para
a c˜
corrigir seus programas.
IME, 07 de maio de 2010 Slide: 48
55. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conclus˜es e trabalhos futuros
o
Trabalhos futuros
Trabalhos futuros referentes `:
a
Implementa¸˜o
ca
Recurs˜o, uso de m´ltiplas classes, vetores e matrizes e uso de
a u
objetos.
T´cnicas de MBD
e
Modelo de falhas, explora¸˜o de falhas estruturais, modelagem
ca
de vari´veis do sistema e uso de modelos com probabilidades.
a
Avalia¸˜o pedag´gica mais detalhada.
ca o
IME, 07 de maio de 2010 Slide: 49
56. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conclus˜es e trabalhos futuros
o
Bibliografia
Benjamins, R. (1993).
Problem Solving Methods for Diagnosis.
PhD thesis, University of Amsterdam.
Bergin, J. (1999).
Patterns for selection.
http://csis.pace.edu/ bergin/patterns/Patternsv4.html.
de Kleer, J. and Williams, B. C. (1987).
Diagnosing multiple faults.
Artif. Intell., 32(1):97–130.
Delgado, K. V. (2005).
Diagn´stico baseado em modelos num sistema tutor inteligente para programa¸ao
o c˜
com padr˜es pedag´gicos.
o o
Disserta¸ao de mestrado, Instituto de Matem´tica e Estat´
c˜ a ıstica.
Johnson, W. L. and Soloway, E. (1984).
Proust: Knowledge-based program understanding.
In ICSE ’84: Proc. of the 7th international conference on Software engineering,
pages 369–380, Piscataway, NJ, USA. IEEE Press.
IME, 07 de maio de 2010 Slide: 50
57. Introdu¸ao
c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental
c˜ Conclus˜es
o
Conclus˜es e trabalhos futuros
o
Bibliografia
Mayer, W., Stumptner, M., Wieland, D., and Wotawa, F. (2002).
Observations and results gained from the jade project.
In Proc. of the 13th International Workshop on Principles of Diagnosis,
Semmering, Austria.
Mozetiˇ, I. (1991).
c
Hierarchical model-based diagnosis.
Int. J. Man-Mach. Stud., 35(3):329–362.
Reiter, R. (1987).
A theory of diagnosis from first principles.
Artif. Intell., 32(1):57–95.
Wenger, E. (1987).
Artificial intelligence and tutoring systems: Computational and cognitive
approaches to the communication of knowledge.
Morgan Kaufmann Press.
IME, 07 de maio de 2010 Slide: 51