Baixe o app para aproveitar ainda mais
Prévia do material em texto
Método de depuração de erros - Teste de Mesa Os métodos de depuração de erros foram criados para: Simular execução de um procedimento Detectar erros de lógica Existem dois tipos conhecidos de métodos de depuração de erros: Teste de mesa Método chinês Utilizaremos o Teste de Mesa como nosso método de depuração padrão. Sua estrutura consiste em: Entrada de dados Variáveis Condicionais (implícitos e explícitos) Saída de Dados Como podemos identificar cada um deles? Entrada de dados - Consiste em verificar se existe um comando de leitura Variáveis - Consiste em relacionar todas as variáveis definidas Condicionais - Consiste em relacionar todas as condições existentes no procedimento Saída de dados - Consiste em verificar se existe um comando de escrita � Vejamos então o seguinte código: Início Defina nome, sit caracter Defina n1, n2, m real Defina i inteiro Para i de 1 até 5 passo 1 faça Leia nome, n1, n2, m m ( (n1 + n2) / 2 Se m < 5 Então sit ( “reprovado” Senão sit ( “aprovado” Fim-se Escreva nome, n1, n2, m, sit Fim-para Fim Primeiro montaremos a estrutura do meu teste de mesa. Seguindo os questionamentos feitos anteriormente, teremos a seguinte posição: Entrada nome n1 n2 m sit i I≤5 m<5 Saída Temos entrada de dados, pois existe um comando de leitura no algoritmo. As variáveis definidas no algoritmo são nome, n1, n2, m, sit, i. Os condicionais são: i≤5 (implícito no comando de repetição incondicional) m<5 (explícito no comando condicional) Temos saída de dados, pois existe um comando de escrita no algoritmo. O segundo passo é definir qual é a massa de dados que utilizaremos. Temos 5 alunos e a cada um deles terei informação sobre o nome e duas notas de cada um deles. Assim, poderemos ter o seguinte conjunto de dados abaixo como exemplo: “Andrea Maria”, 9, 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Cardoso”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 � Então os dados aparecerão como informação da Entrada de dados. Veja o esquema abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9, 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 Agora vamos simular a execução do algoritmo. Após a definição das variáveis, o primeiro comando a ser executado é o comando de repetição incondicional. Quando ele é executado a primeira ação realizada é a atribuição do primeiro valor do comando à variável do loop. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9, 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 1 A segunda ação realizada é verificar se a variável do loop satisfaz a condição. Note que a variável é comparada com o segundo valor do conjunto. Note ainda que se o terceiro valor fosse negativo, a comparação a ser realizada seria ≥ (maior ou igual). Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9, 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 1 .V. Como a condição é satisfeita, os comandos internos ao loop serão executados. O primeiro comando existente dentro do loop é o comando de leitura. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9 , 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 “Andrea Maria” 9 9.8 1 .V. Note que os valores lidos foram cortados como uma indicação de que foram utilizados. Sendo assim, quando uma nova leitura ocorrer, os valores a serem utilizados serão os valores que aparecem na sequência. O próximo comando a ser executado dentro do loop é o comando de atribuição, ou seja o valor calculado na expressão à direita do sinal de atribuição (() será armazenado na variável indicada à esquerda do sinal de atribuição. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9 , 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 “Andrea Maria” 9 9.8 9.6 1 .V. Após a execução do comando de atribuição, será executado o comando condicional. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9 , 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 “Andrea Maria” 9 9.8 9.6 1 .V. .F. Como o retorno da condição é FALSO, serão executados os comandos após a palavra-reservada SENÃO. Neste caso a atribuição do texto APROVADO à variável sit. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9 , 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 “Andrea Maria” 9 9.8 9.6 “aprovado” 1 .V. .F. � Como este é o único comando existente neste bloco, o próximo comando a ser executado é o comando de escrita. Note que este comando está fora do comando condicional. E é isto mesmo que deveria acontecer, pois este comando não implica na repetição do comando. Para isto existe um comando específico que é o comando de REPETIÇÃO condicional. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9 , 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 “Andrea Maria” 9 9.8 9.6 “aprovado” 1 .V. .F. Andrea Maria 9 9.8 9.6 aprovado Note que os valores na saída de dados diferem da entrada de dados em algumas características: Valores alfanuméricos não aparecem com aspas. Valores são separados por espaço e não por vírgula Após a execução do comando de escrita, temos o fim do comando de repetição incondicional. Como ele é um comando de repetição, você deve retornar à linha onde iniciou o próprio comando. Ao retornar ao mesmo, o terceiro valor é somado ao valor da variável do loop e novamente realizado todo o procedimento do loop. Vamos supor a execução até o ponto onde o valor da variável do loop assuma o valor 5. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9 , 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 “Andrea Maria” “Emerson Lima” “Carlos Barros” “Helio Santos” “Iolanda Neves” 9 7 4.5 7.8 3 9.8 4.5 5.5 4.9 2.8 9.6 5.25 5 6.25 2.9 “aprovado” “aprovado” “aprovado” “aprovado” “reprovado” 1 2 3 4 5 .V. .V. .V. .V. .V. .F. .F. .F. .F. .V. Andrea Maria 9 9.8 9.6 aprovado Emerson Lima 7 4.5 5.25 reprovado Carlos Barros 4.5 5.5 5 aprovado Helio Santos 7.8 4.9 6.25 aprovado Iolanda Neves 3 2.8 2.9 reprovado Note que os valores foram cortados, pois no caso das variáveis e dos condicionais quando um novo valor é calculado, este é colocado no lugar do valor anterior. Por esta razão o valor anterior é cortado dando lugar ao novo valor resultante. Vamos supor então a execução até o ponto onde o valor da variável do loop assuma o valor 5. Veja abaixo: Entrada nome n1 n2 m sit i I≤5 m<5 Saída “Andrea Maria”, 9 , 9.8 “Emerson Lima”, 7.4, 5 “Carlos Barros”, 4.5, 5.5 “Helio Santos”, 7.8, 4.9 “Iolanda Neves”, 3, 2.7 “Andrea Maria” “Emerson Lima” “Carlos Barros” “Helio Santos” “Iolanda Neves” 9 7 4.5 7.8 3 9.84.5 5.5 4.9 2.8 9.6 5.25 5 6.25 2.9 “aprovado” “aprovado” “aprovado” “aprovado” “reprovado” 1 2 3 4 5 6 .V. .V. .V. .V. .V. .F. .F. .F. .F. .F. .V. Andrea Maria 9 9.8 9.6 aprovado Emerson Lima 7 4.5 5.25 reprovado Carlos Barros 4.5 5.5 5 aprovado Helio Santos 7.8 4.9 6.25 aprovado Iolanda Neves 3 2.8 2.9 reprovado Quando o loop é executado novamente, o valor da variável passa a 6 e o condicional agora não é satisfeito. Assim, você deve proceder a execução do próximo comando após o Fim-para. O comando que vem após o Fim-para é o comando Fim. O algoritmo então se encerra. Se houvesse outros comandos após o Fim-para, estes seriam executados até que o comando Fim seja encontrado. Note que: Na entrada de dados, todos os valores foram cortados. Isto significa que todos os valores foram usados. Nas colunas referentes as variáveis e condicionais, todos os valores de cada coluna foram cortados exceto o último. Este é o valor que está armazenado na memória. Na saída de dados, nenhum dos valores é cortado, pois todos os valores são visíveis ao final da escrita das mesmas. Método Chinês Este método é similar ao teste de mesa, a diferença é que não colocamos os condicionais. É dirigido para um grupo de desenvolvedores que tem um nível avançado de experiência e que precisa apenas saber os valores existentes, visto que os condicionais são executados dinamicamente e o que se necessita na verdade são os valores finais da execução do procedimento.
Compartilhar