• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Depuração automática de programas baseada em modelos
 

Depuração automática de programas baseada em modelos

on

  • 273 views

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

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

Statistics

Views

Total Views
273
Views on SlideShare
273
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Depuração automática de programas baseada em modelos Depuração automática de programas baseada em modelos Presentation Transcript

    • 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 2010IME, 07 de maio de 2010 Slide: 1
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConceitos GeraisSistema 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConceitos GeraisSistema 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConceitos GeraisSistema 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConceitos GeraisDiagn´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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConceitos GeraisDiagn´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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConceitos GeraisDepura¸˜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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConceitos GeraisDepura¸˜o de Programas Baseada em Modelo ca IME, 07 de maio de 2010 Slide: 7
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oMotiva¸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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oMotiva¸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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oMotiva¸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 aIME, 07 de maio de 2010 Slide: 9
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oMotiva¸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 aIME, 07 de maio de 2010 Slide: 9
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oMotiva¸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 oIME, 07 de maio de 2010 Slide: 10
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oObjetivoDepura¸˜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. caIME, 07 de maio de 2010 Slide: 11
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oObjetivoDepura¸˜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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oOrganiza¸˜o ca Fundamentos Diagn´stico Baseado em Modelos o Diagn´stico Hier´rquico Baseado em Modelos o aIME, 07 de maio de 2010 Slide: 13
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oMBDMBD: 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oMBDMBD: 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDDiagn´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 caIME, 07 de maio de 2010 Slide: 16
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDHMBD: exemplo Modelos do n´ 1 ıvel Modelo estrutural interno Modelo comportamental Modelo estrutural externo nand−composition(NandComp,And,Inv )→ nand(C )∧ok(C )→ in1 (NandComp)=in1 (And)∧ ∃A,I [ nand−composition(C ,A,I )∧ in2 (NandComp)=in2 (And)∧ and−ok(A)∧inv−ok(I ) ] out1 (NA1 )=in1 (A2 ) out1 (And)=in1 (Inv)∧ and−ok(C )≡out1 (C )=1↔ out1 (NandComp)=out1 (Inv)) in1 (C )=1∧in2 (C )=1 nand−composition(NA1 ,A1 ,I1 ) nand(NA1 )IME, 07 de maio de 2010 Slide: 17
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBD´Arvore de Abstra¸˜es co Suposi¸˜o de subsistemas independentes. caIME, 07 de maio de 2010 Slide: 18
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDComportamento 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDAlgoritmo 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 ıvelIME, 07 de maio de 2010 Slide: 20
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDAlgoritmo HMBDIME, 07 de maio de 2010 Slide: 21
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDAlgoritmo HMBDIME, 07 de maio de 2010 Slide: 21
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDAlgoritmo HMBDIME, 07 de maio de 2010 Slide: 21
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oHMBDAlgoritmo HMBDIME, 07 de maio de 2010 Slide: 21
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oOrganiza¸˜o ca Dr. Java Pro Caracter´ ısticas Componente abstrato de programa¸˜o ca Modelo hier´rquico de um programa a Algoritmo HPDIME, 07 de maio de 2010 Slide: 22
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oCaracter´ ısticasDepura¸˜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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oComponente 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oModelo hier´rquico de um programa aExemplo 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oModelo hier´rquico de um programa aModelos 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) outIME, 07 de maio de 2010 Slide: 26
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oModelo hier´rquico de um programa aModelos 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 1IME, 07 de maio de 2010 Slide: 27
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAlgoritmo HPDDepura¸˜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 oIME, 07 de maio de 2010 Slide: 28
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAlgoritmo HPDTela 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAlgoritmo HPDHip´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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAlgoritmo HPDAlguns 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. aIME, 07 de maio de 2010 Slide: 31
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAlgoritmo HPDInformando 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAlgoritmo HPDRefinando 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}. ` oIME, 07 de maio de 2010 Slide: 33
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAlgoritmo HPDInformando 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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. aIME, 07 de maio de 2010 Slide: 35
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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. aIME, 07 de maio de 2010 Slide: 36
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸ao do Dr. Java Pro c˜Programas escritos pelos alunos para solucionar oProblema 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 P1iIME, 07 de maio de 2010 Slide: 37
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸ao do Dr. Java Pro c˜Sequˆncia de modifica¸˜es nos programas utilizados pelos e coalunos 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 P1IIME, 07 de maio de 2010 Slide: 38
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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 P1iIME, 07 de maio de 2010 Slide: 39
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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 P1iIME, 07 de maio de 2010 Slide: 40
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸ao do Dr. Java Pro c˜Sequˆncia de modifica¸˜es nos programas utilizados pelos e coalunos 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 P2dIME, 07 de maio de 2010 Slide: 43
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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 P2dIME, 07 de maio de 2010 Slide: 44
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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 P2dIME, 07 de maio de 2010 Slide: 45
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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˜ oIME, 07 de maio de 2010 Slide: 46
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oAvalia¸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. caIME, 07 de maio de 2010 Slide: 47
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConclus˜es e trabalhos futuros oConclus˜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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConclus˜es e trabalhos futuros oTrabalhos 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConclus˜es e trabalhos futuros oBibliografia 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
    • Introdu¸ao c˜ Fundamentos Dr. Java Pro Avalia¸ao Experimental c˜ Conclus˜es oConclus˜es e trabalhos futuros oBibliografia 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