Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I
Técnicas de verificação de algoritmos Um tipo de teste de algoritmo, denominado Teste de Mesa (ou Teste Exaustivo) pode ser feito através de uma simulação da execução do mesmo. São dados valores para os dados de entrada e vaise preenchendo uma tabela na qual são colocadas todas as variáveis e constantes do algoritmo.
Teste de mesa Segue-se o fluxo de execução como se estivesse executando o algoritmo em um computador imaginário.
Teste de mesa A cada comando de atribuição ou cálculo de expressão o valor das variáveis deve ser atualizado. Ao final do teste pode-se ter as seguintes situações: o resultado esperado foi alcançado; ou foram detectados erros nos comandos; ou foram detectados erros no fluxo de execução - erro nas estruturas de controle.
Teste de mesa Procure fazer testes relevantes como, por exemplo, aqueles que verificam casos extremos e casos de exceções. Com o teste é possível identificar em que ponto o algoritmo está falhando e fazer a correção. Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo não gerar nada se o computador detectar erros graves na sequência de operações.
algoritmo CALCULA_MEDIA; const NUM_NOT = 4; { constante com o número de notas } var P1, P2, P3, P4, MEDIA: real; { variáveis com as notas e a média } início leia (P1); { leitura da nota da prova 1 } leia (P2); { leitura da nota da prova 2 } leia (P3); { leitura da nota da prova 3 } leia (P4); { leitura da nota da prova 4 } MEDIA (P1 + P2 + P3 + p4) / NUM_NOT; { cálculo da média } escreva (MEDIA); { mostrar a média } fim.
O teste de mesa desse algoritmo é dado da seguinte maneira considerando que serão fornecidos como entrada os valores 9.6, 5.7, 6.8 e 8.9 para as variáveis P1, P2, P3 e P4 respectivamente : Passo NUM_NOT MEDIA P1 P2 P3 P4 0 4 - - - - -
Passo 1: algoritmo CALCULA_MEDIA; const NUM_NOT = 4; { constante com o número de notas } var P1, P2, P3, P4, MEDIA: real; { variáveis com as notas e a média } início leia (P1); { leitura da nota da prova 1 } leia (P2); { leitura da nota da prova 2 } leia (P3); { leitura da nota da prova 3 } leia (P4); { leitura da nota da prova 4 } MEDIA (P1 + P2 + P3 + p4) / NUM_NOT; { cálculo da média } escreva (MEDIA); { mostrar a média } fim. Passo NUM_NOT MEDIA P1 P2 P3 P4 0 4 - - - - - 1-9.6 - - -
Passo 2: algoritmo CALCULA_MEDIA; const NUM_NOT = 4; { constante com o número de notas } var P1, P2, P3, P4, MEDIA: real; { variáveis com as notas e a média } início leia (P1); { leitura da nota da prova 1 } leia (P2); { leitura da nota da prova 2 } leia (P3); { leitura da nota da prova 3 } leia (P4); { leitura da nota da prova 4 } MEDIA (P1 + P2 + P3 + p4) / NUM_NOT; { cálculo da média } escreva (MEDIA); { mostrar a média } fim. Passo NUM_NOT MEDIA P1 P2 P3 P4 0 4 - - - - - 1-9.6 - - - 2-5.7 - -
Passo 3: algoritmo CALCULA_MEDIA; const NUM_NOT = 4; { constante com o número de notas } var P1, P2, P3, P4, MEDIA: real; { variáveis com as notas e a média } início leia (P1); { leitura da nota da prova 1 } leia (P2); { leitura da nota da prova 2 } leia (P3); { leitura da nota da prova 3 } leia (P4); { leitura da nota da prova 4 } MEDIA (P1 + P2 + P3 + p4) / NUM_NOT; { cálculo da média } escreva (MEDIA); { mostrar a média } fim. Passo NUM_NOT MEDIA P1 P2 P3 P4 0 4 - - - - - 1-9.6 - - - 2-5.7 - - 3-6.8 -
Passo 4: algoritmo CALCULA_MEDIA; const NUM_NOT = 4; { constante com o número de notas } var P1, P2, P3, P4, MEDIA: real; { variáveis com as notas e a média } início leia (P1); { leitura da nota da prova 1 } leia (P2); { leitura da nota da prova 2 } leia (P3); { leitura da nota da prova 3 } leia (P4); { leitura da nota da prova 4 } MEDIA (P1 + P2 + P3 + p4) / NUM_NOT; { cálculo da média } escreva (MEDIA); { mostrar a média } fim. Passo NUM_NOT MEDIA P1 P2 P3 P4 0 4 - - - - - 1-9.6 - - - 2-5.7 - - 3-6.8-4 - 8.9
Passo 5: algoritmo CALCULA_MEDIA; const NUM_NOT = 4; { constante com o número de notas } var P1, P2, P3, P4, MEDIA: real; { variáveis com as notas e a média } início leia (P1); { leitura da nota da prova 1 } leia (P2); { leitura da nota da prova 2 } leia (P3); { leitura da nota da prova 3 } leia (P4); { leitura da nota da prova 4 } MEDIA (P1 + P2 + P3 + p4) / NUM_NOT; { cálculo da média } escreva (MEDIA); { mostrar a média } fim. Passo NUM_NOT MEDIA P1 P2 P3 P4 0 4 - - - - - 1-9.6 - - - 2-5.7 - - 3-6.8-4 - 8.9 5 7.75
Inicialmente, os valores das variáveis são indefinidos, ou seja, não podemos afirmar quais os valores armazenados nestas variáveis. Por convenção, diz-se que os valores dessas variáveis são lixos. No passo 0 o valor da constante já é definido, porém os valores das variáveis são lixos. No passo 1 do algoritmo, a variável P1 é lida e as demais continuam com lixo.
No fim da execução do algoritmo podemos ver claramente os valores armazenados em cada variável. O valor da constante, devido a sua definição, não é alterado em momento algum. Passo NUM_NOT MEDIA P1 P2 P3 P4 0 4 - - - - - 1-9.6 - - - 2-5.7 - - 3-6.8-4 - 5 4 7.75 9.6 5.7 6.8 8.9
Referências BORLAND. Turbo Pascal, versão 7.0. [S.L.] : Borland International, Inc.,1992. DEITEL, P. J.; DEITEL, H.M.; Java: How to program, 9th ed, Ed. Prentice-Hall, 2011. ISBN: 978-0-13-257566-9. FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Algoritmos estruturados. 3ed, Ed. LTC, 1999. ISBN: 9788521611806. FARRER, H.; BECKER, C. G.; FARIA, E. C.; MATOS, H. F.; et al. Pascal estruturado. 3ed, Ed. LTC, 1999. ISBN: 9788521611745. GUIMARÃES, A. M.; LAGES, N. A. C.; Algoritmos e estruturas de dados. 1ed, Ed. LTC, 1994. ISBN: 9788521603788. GRIFFITHS,D., BARRY,P., Head First Programming A learner's guide to programming using the Python language, O Reilly, 2009, 406p. http://wwwusers.rdc.puc-rio.br/rmano/processo.html Velloso, F. C.; Informática: Conceitos Básicos. 7ed, Ed. Campus, 2004. ISBN: 9788535215366.