Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Depuracao automatica de programas baseada emmodelos: uma abordagem hierarquica para auxılio
ao aprendizado de programacao
Wellington R. Pinheiro
Orientadora: Profa. Dra. Leliane Nunes de BarrosDepartamento de Ciencia da Computacao
Instituto de Matematica e Estatıstica - Universidade Sao Paulo
{wrp}@ime.usp.br
07 de Maio de 2010
IME, 07 de maio de 2010 Slide: 1
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conceitos Gerais
Sistema Tutor Inteligente para Programacao
Sistema Tutor Inteligente [Wenger, 1987] (ITS - Intelligent Tutoring
System): ferramenta de aprendizado eletronico que usa tecnicas deInteligencia Artificial.
Um ITS para programacao deve ser capaz de:
propor problemas de programacao que promovam o aprendizadode um determinado aluno;
detectar os possıveis erros de programacao do aluno(diagnostico do programa do aluno);
comunicar as falhas ao aluno com a expectativa que ele aprendadurante esse processo;
construir o modelo do aluno (representacao de seuconhecimento) com base no resultado do diagnostico deproblemas.
IME, 07 de maio de 2010 Slide: 2
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conceitos Gerais
Sistema Tutor Inteligente para Programacao
Sistema Tutor Inteligente [Wenger, 1987] (ITS - Intelligent Tutoring
System): ferramenta de aprendizado eletronico que usa tecnicas deInteligencia Artificial.
Um ITS para programacao deve ser capaz de:
propor problemas de programacao que promovam o aprendizadode um determinado aluno;
detectar os possıveis erros de programacao do aluno(diagnostico do programa do aluno);
comunicar as falhas ao aluno com a expectativa que ele aprendadurante esse processo;
construir o modelo do aluno (representacao de seuconhecimento) com base no resultado do diagnostico deproblemas.
IME, 07 de maio de 2010 Slide: 2
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conceitos Gerais
Sistema Tutor Inteligente para Programacao: exemplos
PROUST [Johnson and Soloway, 1984]
PROUST e o principal sistema encontrado na literatura capazde detectar erros de logica de programacao.
ProPAT: Tutor de Padroes Elementares [Delgado, 2005].
Utiliza diagnostico baseado em modelo para fazer depuracao deprogramas (MBSD).
Funciona para um subconjunto de instrucoes da linguagem C.
Utiliza um plugin Eclipse como ambiente de programacao einterface de comunicacao com o estudante.
Permite que o aluno programe usando padroes elementares deprogramacao.
IME, 07 de maio de 2010 Slide: 3
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conceitos Gerais
Diagnostico do Programa do AlunoPROUST [Johnson and Soloway, 1984] ProPAT [Delgado, 2005]
Caracterısticas
tenta construir o modelo doestudante reconhecendo planos deprogramacao e metas (intencoes) noprograma do aluno;
os planos de programacao e asmetas para um determinadoconjunto de problemas saoarmazenados em uma biblioteca.
utiliza diagnostico baseado emmodelo para detectar falhas noprograma do aluno;
nao requer uma biblioteca de planose metas previamente definidos paraa solucao.
Limitacoes
os planos da biblioteca podem naocobrir todas as possıveis solucoespara um determinado problema;
se nenhum plano for encontradonao e possıvel detectar as falhas noprograma do aluno.
as falhas sao comunicadas ao alunoem termos de linhas do programa, oque fornece pouca ou nenhumainformacao para que o alunoidentifique os erros no programa.
IME, 07 de maio de 2010 Slide: 4
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conceitos Gerais
Diagnostico Baseado em Modelo
E uma tecnica de InteligenciaArtificial usada paraencontrar componentesfalhos em sistemas fısicos.
Raciocina sobre modelos quedescrevem o comportamentocorreto dos sistemas.
Envolve tressubtarefas [Benjamins, 1993]:deteccao de sintomas,geracao de hipoteses ediscriminacao de hipoteses.
IME, 07 de maio de 2010 Slide: 5
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conceitos Gerais
Depuracao de Programas Baseada em Modelo
Model Based SoftwareDebugging(MBSD) [Mayer et al., 2002].
Ideia basica: fazer umasimulacao passo a passo doprograma apontando asinstrucoes que justificam asdiscrepancias observadas,i.e., a diferencas entre assaıdas do programa e assaıdas esperadas (sintomas).
Pode ser usada por um ITSpara tentar entender asdiferencas entre as intencoesdo aluno e seu programa.
IME, 07 de maio de 2010 Slide: 6
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conceitos Gerais
Depuracao de Programas Baseada em Modelo
IME, 07 de maio de 2010 Slide: 7
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Motivacao
Exemplo 1
Problema da ordem crescente: Dados dois numeros inteiros, a e b, construir umprograma que imprima esses numeros em ordem crescente. Os casos de teste quedeverao ser usados para testar o seu programa solucao sao:
CT1 Entradas: 3, 5 Saıdas: 3, 5CT2 Entradas: 5, 3 Saıdas 3, 5CT3 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;56 if (a < b) {7 maior = a;8 menor = b;9 } else {10 maior = b;11 menor = a;12 }1314 writeInt("o menor numero e’", menor);15 writeInt("o maior numero e’", maior);16 }17 }
IME, 07 de maio de 2010 Slide: 8
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Motivacao
Exemplo 1
Problema da ordem crescente: Dados dois numeros inteiros, a e b, construir umprograma que imprima esses numeros em ordem crescente. Os casos de teste quedeverao ser usados para testar o seu programa solucao sao:
CT1 Entradas: 3, 5 Saıdas: 3, 5CT2 Entradas: 5, 3 Saıdas 3, 5CT3 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;56 if (a < b) {7 maior = a;8 menor = b;9 } else {10 maior = b;11 menor = a;12 }1314 writeInt("o menor numero e’", menor);15 writeInt("o maior numero e’", maior);16 }17 }
IME, 07 de maio de 2010 Slide: 8
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Motivacao
Exemplo 1Executando um depurador automatico de programasbaseado em modelos, para o programa do exemplo,com o caso de teste CT1:
Entradas: 3, 5 Saıdas: 3, 5
sao obtidas as seguintes hipoteses de falha:
{6}, {7, 8}, {14, 15}, {8, 15}, {7, 14}
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);
Hipotese Correcao
{6} trocar o operador “>” pelo operador “<” na Linha 6{7, 8} inverter os valores nas atribuicoes das Linhas 7 e 8{14, 15} inverter somente os nomes das variaveis impressas nas Linhas 14 e
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
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Motivacao
Exemplo 1Executando um depurador automatico de programasbaseado em modelos, para o programa do exemplo,com o caso de teste CT1:
Entradas: 3, 5 Saıdas: 3, 5
sao obtidas as seguintes hipoteses de falha:
{6}, {7, 8}, {14, 15}, {8, 15}, {7, 14}
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);
Hipotese Correcao
{6}trocar o operador “>” pelo operador “<” na Linha 6
{7, 8} inverter os valores nas atribuicoes das Linhas 7 e 8
{14, 15}inverter somente os nomes das variaveis impressas nas Linhas 14 e15
{8, 15} na Linha 8 mudar para menor = a e na Linha 15, imprimir o valorde b
{7, 14} na Linha 7 mudar para maior = b e na Linha 14, imprimir o valorde a
IME, 07 de maio de 2010 Slide: 9
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Motivacao
Limitacoes do MBSD para o Aprendizado de Programacao
Mesmo para um programa pequeno, podem haver muitashipoteses de falha para serem comunicadas (e discriminadas) aoaluno, podendo deixa-lo cansado e confuso.
Informar as linhas do programa possivelmente falhas pode naoser suficiente para que um aluno iniciante consiga corrigir o seuprograma.
Um aprendiz de programacao nao tem conhecimento suficientepara fazer predicoes a respeito do comportamento do programae fornecer os valores esperados para as variaveis do programa,durante a discriminacao de hipoteses.
IME, 07 de maio de 2010 Slide: 10
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Objetivo
Depuracao Hierarquica de Programas (HPD)
O objetivo desse trabalho e estender a tecnica MBSD com o uso doDiagnostico Hierarquico Baseado em Modelos (diagnostico
hierarquico), de maneira que:
Falhas no programa do aluno possam ser encontradas emdiferentes nıveis de abstracao.
Funcoes, procedimentos e padroes elementares sejam vistoscomo componentes abstratos.
A comunicacao com o aluno possa ser feita em termos dessescomponentes abstratos , i.e., atraves de uma linguagem de altonıvel, e nao somente atraves de linhas do programa.
O tutor comunique um conjunto menor de hipoteses de falhamenor a cada iteracao.
IME, 07 de maio de 2010 Slide: 11
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Objetivo
Depuracao Hierarquica de Programas (HPD)
Apos serem encontradas as hipoteses de falha em umdeterminado nıvel de abstracao, o aluno pode:
fazer a discriminacao de hipoteses no nıvel de abstracao atual(fornecendo novas observacoes a respeito do comportamentoesperado para o componente abstrato);depurar o programa em um nıvel mais detalhado, substituindoum componente abstrato pelos seus componentes internos(refinamento);modificar o programa para tentar corrigir as falhas.
IME, 07 de maio de 2010 Slide: 12
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Organizacao
Fundamentos
Diagnostico Baseado em Modelos
Diagnostico Hierarquico Baseado em Modelos
IME, 07 de maio de 2010 Slide: 13
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
MBD
MBD: exemplo
M1
M2
M3
A1
A2
2
12
12
3
3
3
2
A
B
C
D
E
F
G
X
Y
Z
ok(C) indica que o componente C esta funcionando corretamente e;
¬ok(C) indica que o componente C esta falho.
Modelo comportamental Modelo estrutural Observacoes
adder(x)∧ok(x)→add(in1(x),in2(x),out1(x))
multiplier(x)∧ok(x)→mult(in1(x),in2(x),out1(x))
multiplier(M1)
multiplier(M2)
multiplier(M3)
adder(A1)
adder(A2)
out1(M1)=in1(A1)
out1(M2)=in2(A1)
out1(M2)=in1(A2)
out1(M3)=in2(A2)
in1(M1)=3
in2(M1)=2
in1(M2)=2
in2(M2)=3
in1(M3)=2
in2(M3)=3
IME, 07 de maio de 2010 Slide: 14
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
MBD
MBD: exemplo
M1
M2
M3
A1
A2
2
12
12
3
3
3
2
A
B
C
D
E
F
G
X
Y
Z
10M1
M2
M3
A1
A2
2
10
3
3
3
2
A
B
C
D
E
F
G
X
Y� 12
10
{{M1},{M2},{A1}} {{M1},{M3},{A1},{A2}}
M3
M2M1
A2
G deveria ser10 mas é 12
F deveria ser12 mas é 10
{M1, M2, A1}
M1 M2 A1
{M1, M3, A1, A2}
@X
M1
X @
Algoritmo de Reiter
@ @A1
M3 A1 A2
Hipoteses de falha: {{M1},{A1},{M2,M3},{M2,A2}}
IME, 07 de maio de 2010 Slide: 15
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
Diagnostico Hierarquico Baseado em Modelo
Hierarchical Model Based Diagnosis (HMBD) [Mozetic, 1991].
Usada para se obter melhor desempenho que a tecnica de MBDtradicional.
A descricao do sistema e feita em diferentes nıveis deabstracao.
Utiliza abstracoes para representar componentes ou ocomportamento do sistema (abstracoes estruturais ecomportamentais).
Utiliza a tecnica de MBD tradicional para encontrar a solucao acada nıvel de abstracao.
IME, 07 de maio de 2010 Slide: 16
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
HMBD: exemplo
Modelos do nıvel 1Modelo estrutural interno Modelo comportamental Modelo estrutural externo
nand−composition(NandComp,And,Inv)→
in1(NandComp)=in1(And)∧
in2(NandComp)=in2(And)∧
out1(And)=in1(Inv)∧
out1(NandComp)=out1 (Inv))
nand−composition(NA1 ,A1,I1)
nand(C )∧ok(C )→
∃A,I [ nand−composition(C ,A,I )∧
and−ok(A)∧inv−ok(I ) ]
and−ok(C )≡out1(C )=1↔
in1(C )=1∧in2(C )=1
nand(NA1)
out1(NA1)=in1(A2)
IME, 07 de maio de 2010 Slide: 17
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
Arvore de Abstracoes
Suposicao de subsistemas independentes.
IME, 07 de maio de 2010 Slide: 18
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
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-trato AC1 e os compo-nentes internos C1, C2e C3
O comportamento deAC1 e assumido comocorreto
Assim, o comporta-mento de C1, C2 e C3devem ser assumidoscomo 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
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
Algoritmo HMBD
O algoritmo de Diagnostico Hierarquico [Mozetic, 1991], ecomposto dos seguintes passos:
1 Verificar quais observacoes deverao ser usadas em cada um dosnıveis de abstracao.
2 Para cada nıvel i , de l ate 0, sendo l o nıvel mais alto que naoesconde todas as conexoes com observacoes, encontrar oconjunto de hipoteses de falha utilizando algum algoritmo deMBD. Para cada componente abstrato CA nao envolvido emnenhuma hipotese de falha no nıvel i , usar o Axioma 1 para onıvel i − 1.
3 Devolver as hipoteses de falhas encontradas no nıvel 0.
IME, 07 de maio de 2010 Slide: 20
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
HMBD
Algoritmo HMBD
IME, 07 de maio de 2010 Slide: 21
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Organizacao
Dr. Java Pro
Caracterısticas
Componente abstrato de programacao
Modelo hierarquico de um programa
Algoritmo HPD
IME, 07 de maio de 2010 Slide: 22
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Caracterısticas
Depuracao Hierarquica de Programas
O Hierarchical Program Debugging (HPD) tem as seguintescaracterısticas:
Extensao da tecnica de MBSD que utiliza o diagnosticohierarquico baseado em modelos para depurar programas.
Permite representar o programa do aluno em diversos nıveis deabstracao, sendo funcoes, procedimentos e padroes elementaresrepresentados como componentes abstratos.
Possibilita discriminar hipoteses em varios nıveis de abstracao,atraves das seguintes funcionalidades:
informar valores para variaveisrefinar componente abstrato
IME, 07 de maio de 2010 Slide: 23
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Componente abstratro de programacao
Construcao de um componente abstrato em programas
Seleção Simples
componentede seleção
a < m
a < m
ação 1 ação 2 ação n
condição
componentede seleção
Conditional
i f (a < m) { ação 1; ação 2; ... ação n;}
c) Padrão de Seleção Simplesapl icado usada em um programa
b) Modelo base gerado para otrecho de programa apresentado
a) Modelo com o componente representando o padrão de Seleção Simples
IME, 07 de maio de 2010 Slide: 24
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Modelo hierarquico de um programa
Exemplo 1
Problema da ordem crescente: Dados dois numeros inteiros, a e b, construir umprograma que imprima esses numeros em ordem crescente. Os casos de teste quedeverao ser usados para testar o seu programa solucao sao:
CT1 Entradas: 3, 5 Saıdas: 3, 5CT2 Entradas: 5, 3 Saıdas 3, 5CT3 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;56 if (a < b) {7 maior = a;8 menor = b;9 } else {10 maior = b;11 menor = a;12 }1314 writeInt("o menor numero e’", menor);15 writeInt("o maior numero e’", maior);16 }17 }
IME, 07 de maio de 2010 Slide: 25
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Modelo hierarquico de um programa
Modelos do Exemplo 1
Seleção A l te rna t i va
(CA1)
a
b
menor1
Ass ignment (C7)
Ass ignment (C6)
writeInt("menor", menor)
writeInt("maior", maior)maior1
Expr (C0)
a < b
aux0
Condi t ional - C1
menor1
Assign (C7)
condResultAssign (C2)
maior = a
Assign (C3)
menor = b
C1-Then
Assign (C4)
maior = b
Assign (C5)
menor = a
C1-Else
Assign (C6)
writeInt("menor", menor)
writeInt("maior", maior)
a
b
a’
b’
a’’
b’’
maior1
b) Mode lo base
a) Mode lo abs t ra to
in1
in2
in1
in2
in1
in1
in1
in1
in1
in1
result
out
out
out
out
out
out
maior2
menor3
menor5
maior4
in1
in2
out1
out2
out1
out2
in1
in1 out
out
IME, 07 de maio de 2010 Slide: 26
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Modelo hierarquico de um programa
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, C0,C1)
Modelo comportamental
cond(C) ∧ ok(C) → ∃E , Cond [composit(C , E , Cond)∧ok(E) ∧ ok(Cond) ]
cond(CA1)
Modelo estrutural externo
in1(CA1) = ain2(CA1) = bout1(CA1) = menor1out2(CA1) = maior1
IME, 07 de maio de 2010 Slide: 27
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Algoritmo HPD
Depuracao Hierarquica de Programas (HPD)
O algoritmo proposto utiliza uma abordagem inspirada no trabalhode Mozetic (1991), com as seguintes extensoes:
A discriminacao de hipoteses pode acontecer durante o pro-cesso de diagnostico hierarquico.
A falha pode ser encontrada e solucionada em qualquer nıvelde abstracao.
Nao e necessario refinar todos os componentes abstratos de umnıvel i para um nıvel i − 1, que sejam considerados hipotesesde falha.
Uma vez que um componente abstrato tem seu comporta-mento definido como funcionando corretamente, ele nao pre-cisara ser refinado ate o final do processo de diagnostico.
IME, 07 de maio de 2010 Slide: 28
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Algoritmo HPD
Tela principal do Dr. Java Pro.
Vamos selecionar o Caso de Teste 1 para fazer a depuracao.
IME, 07 de maio de 2010 Slide: 29
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Algoritmo HPD
Hipoteses de falha no Dr. Java Pro
Nesse ponto, o aluno deve escolher um caminho de depuracao para seguir.
IME, 07 de maio de 2010 Slide: 30
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Algoritmo HPD
Alguns possıveis caminhos de depuracao
{SeleçãoAlternat iva} {15,14}
{SeleçãoAlternat iva}
{6 } , {7 ,8 }
{ 6 } { 7 ,8 }
meno r=3ma io r=5
Informar valores para{SeleçãoAl ternat iva}
Informar valores pa ra {15 ,14 }
Refinamento docomponente abstratode SeleçãoAlternativa
menor = 3maior = 5
a < b =Falso
a < b =Verdadeiro
Informarvalorespa ra {7 ,8 }
Informar valoresp a r a { 6 }
menor = 3maior = 5
Vamos continuar a depuracao escolhendo a hipotese de falha SelecaoAlternativa einformar valores para as variaveis.
IME, 07 de maio de 2010 Slide: 31
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Algoritmo HPD
Informando valores para uma hipotese de falha
Apos informar os valores para as variaveis, o depurador devolve a hipotese de falha:{SelecaoAlternativa}.
Vamos refinar o componente abstrato SelecaoAlternativa.
IME, 07 de maio de 2010 Slide: 32
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Algoritmo HPD
Refinando um componente abstrato
Apos o refinamento do componente abstrato SelecaoAlternativa, o depurador devolve asseguintes hipoteses de falha:
{6},{7,8}
Vamos continuar o processo de depuracao informando valores para as variaveisrelacionadas a hipotese {6}.
IME, 07 de maio de 2010 Slide: 33
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Algoritmo HPD
Informando valores para uma condicao logica
Apos informar o valor esperado condicao na Linha 6, o depurador devolve somente ahipotese de falha: {6}.
Nesse momento, o aluno deveria ser capaz de reconhecer que a falha esta no operadorlogico da expressao na Linha 6 e realizar a correcao adequada.
IME, 07 de maio de 2010 Slide: 34
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Avaliacao do uso da ferramenta
A avaliacao foi feita com um grupo de alunos em duas aulaspraticas.
Os problemas de programacao foram classificados como:Resolva e Modifique.
A interacao dos alunos com a ferramenta Dr. Java Pro foramarmazenadas em logs, a partir dos quais foram feitas nossasanalises.
IME, 07 de maio de 2010 Slide: 35
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Problema P1: Calculo do numero par
Nome: Calculo do numero parEnunciado: Dado um numero inteiro n, calcule n/2 se n for par ou (n-3)/2,
caso contrarioTipo: Resolva
Casos de teste:
Identificador Entradas Saıdas
CT1 10 5CT2 1 -1CT3 0 0CT4 23 10
Classe: CalculoParJustificativa: Esse problema tem como objetivo introduzir ao aluno a ferramenta
Dr. Java Pro e os conceitos de depuracao automatica. Nesseprimeiro contato, devem ser apresentados: o conceito de casos deteste e sua aplicacao; os conceitos de hipoteses de falha; a tarefade discriminacao de hipoteses que envolve informar valores paravariaveis e refinamento de componentes abstratos.
IME, 07 de maio de 2010 Slide: 36
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Programas escritos pelos alunos para solucionar oProblema P1
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = (n-2)/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = n/2;
else
resultado = n/2;
return resultado
}P1a P1b P1c
public int calcula(int n) {int resultado = 0;
if (n % 2 != 1)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}P1d P1e P1f
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 1)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 != 1)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}P1g P1h P1i
IME, 07 de maio de 2010 Slide: 37
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Sequencia de modificacoes nos programas utilizados pelosalunos durante a solucao do Problema P1.
P1d
P1g
P1i
P1a
P1b
P1c
P1e
P1f
P1h
P1d
P1g
P1i
P1a
P1b
P1c
P1e
P1f
P1h
P1d
P1g
P1I
P1a
P1b
P1c
P1e
P1f
P1h
5
2
1
6
1
1
1 4
1
8
1
6
2
1
Versão 1 Versão 2 Versão 3
9
1
IME, 07 de maio de 2010 Slide: 38
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Sequencia de programas: P1a →5 P1c →
4 P1g
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = (n-2)/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = n/2;
else
resultado = n/2;
return resultado
}P1a P1b P1c
public int calcula(int n) {int resultado = 0;
if (n % 2 != 1)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}P1d P1e P1f
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 1)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 != 1)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}P1g P1h P1i
IME, 07 de maio de 2010 Slide: 39
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Sequencia de programas: P1c →6 P1g
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = (n-2)/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = n/2;
else
resultado = n/2;
return resultado
}P1a P1b P1c
public int calcula(int n) {int resultado = 0;
if (n % 2 != 1)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 0)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}P1d P1e P1f
public int calcula(int n) {int resultado = 0;
if (n % 2 != 0)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 == 1)
resultado = (n-3)/2;
else
resultado = n/2;
return resultado
}
public int calcula(int n) {int resultado = 0;
if (n % 2 != 1)
resultado = n/2;
else
resultado = (n-3)/2;
return resultado
}P1g P1h P1i
IME, 07 de maio de 2010 Slide: 40
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Problema P2: Calculo da Mediana
Nome: Calculo da medianaEnunciado: Dados 3 numeros inteiros, determinar um inteiro n, tal que ni ≤
n ≤ nj , sendo ni e nj os outros inteiros dados (lidos). Encontre ecorrija os erros no programa fornecido.
Tipo: Modifique
Casos de teste:
Identificador Entradas Saıdas
CT1 1, 2, 3 2CT2 1, 3, 2 2CT3 2, 1, 3 2CT4 2, 3, 1 2CT5 3, 1, 2 2CT6 3, 2, 1 2CT7 9, -100, 10 9CT8 12, 12, 5 12CT9 12, 5, 12 12CT10 5, 12, 12 12CT11 12, 12, 12 12CT12 0, -1, 1 0
Classe: MedianaJustificativa: Esse problema tem como objetivo fixar os conceitos de padroes de
selecao. O problema tambem e um bom exercıcio para utilizar afuncionalidade de refinamento de componentes abstratos do Dr.Java Pro, visto que cada selecao aninhada e representada por umcomponente abstrato.
IME, 07 de maio de 2010 Slide: 41
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
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
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Sequencia de modificacoes nos programas utilizados pelosalunos durante a solucao do Problema P2.
P2a Modificacao da condicao: troca do operador da linha 16 de “<” para“>”.
P2b Modificacao da condicao: troca do operador da linha 17 de “<” para“>”.
P2c Inversao dos blocos: Linhas 19 e 23.P2d [Programa correto]. Modificacao da condicao: troca do operador “<”
da Linha 17 para “>” e troca do operador “>” da linha 26 para “<”.
Versão 1 Versão 2 Versão 3
7Programa Mediana
1
13
2
13
2
P2a
P2b
P2d
P2c
P2a
P2b
P2d
P2c
IME, 07 de maio de 2010 Slide: 43
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Sequencia de programas: Mediana →3 P2b →
3 P2d
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;
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;
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;
Programa Mediana P2b P2d
IME, 07 de maio de 2010 Slide: 44
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Sequencia de programas: Mediana →2 P2c →
2 P2d
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;
16 if (a < b) {17 if (b < c) {18 if (a < c)
19 resultado = b;
20 else
21 resultado = a;
22 } else {23 resultado = c;
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;
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;
Programa Mediana P2c P2d
IME, 07 de maio de 2010 Slide: 45
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Resultados das analises experimentais
As analises sugerem que o uso da ferramenta Dr. Java Pro auxiliou osalunos na deteccao e correcao dos problemas de programacaopropostos, dadas as seguintes evidencias:
1 tradicionalmente, apenas 30% dos alunos dessa disciplinaconseguem acertar integralmente uma questao equivalente aoProblema P2 em prova escrita;
2 56% dos alunos acertaram os problemas P2 e 90% acertaram oProblema P1.
Problema P1: dos 30 alunos avaliados, 18 seguiram a orientacao dodepurador, obtendo sucesso na correcao de seus programas, ou seja,60% dos alunos seguiram um raciocınio logico na depuracao de seus
programas, ao inves de fazer modificacoes aleatorias.
IME, 07 de maio de 2010 Slide: 46
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Avaliacao do Dr. Java Pro
Resultados das analises experimentais
Problema P2: dos 16 alunos avaliados, 7 seguiram a orientacao dodepurador, obtendo sucesso na correcao de seus programas, ou seja,44% dos alunos seguiram um raciocınio logico na depuracao de seus
programas.
Com base na avaliacao feita pelos alunos sobre a ferramenta, amaioria acredita que a ferramenta e util para o aprendizado e que eladeveria ser usada mais frequentemente em disciplinas de Introducao aProgramacao.
IME, 07 de maio de 2010 Slide: 47
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conclusoes e trabalhos futuros
Conclusoes
Foi proposta uma extensao da tecnica de diagnostico hierarquico paraencontrar falhas em programas representados em diferentes nıveis deabstracao, considerando componentes abstratos, tais como: funcoes,procedimentos e padroes elementares.
O diagnostico hierarquico fornece uma forma de comunicar aos alunosas falhas de um programa em termos de componentes abstratos, istoe, em uma linguagem de alto nıvel.
A avaliacao preliminar da ferramenta com um grupo de alunos deuma disciplina de Introducao a Programacao mostrou que um numerorazoavel de alunos foi capaz de compreender as hipoteses de falhageradas pelo depurador automatico e usar essas informacoes paracorrigir seus programas.
IME, 07 de maio de 2010 Slide: 48
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conclusoes e trabalhos futuros
Trabalhos futuros
Trabalhos futuros referentes a:
Implementacao
Recursao, uso de multiplas classes, vetores e matrizes e uso deobjetos.
Tecnicas de MBD
Modelo de falhas, exploracao de falhas estruturais, modelagemde variaveis do sistema e uso de modelos com probabilidades.
Avaliacao pedagogica mais detalhada.
IME, 07 de maio de 2010 Slide: 49
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conclusoes e trabalhos futuros
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).Diagnostico baseado em modelos num sistema tutor inteligente para programacaocom padroes pedagogicos.Dissertacao de mestrado, Instituto de Matematica e Estatı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
Introducao Fundamentos Dr. Java Pro Avaliacao Experimental Conclusoes
Conclusoes e trabalhos futuros
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.
Mozetic, I. (1991).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 cognitiveapproaches to the communication of knowledge.Morgan Kaufmann Press.
IME, 07 de maio de 2010 Slide: 51