|
Metodologias
de depuração em 10 passos
O momento em que um programador se depara com uma mensagem de erro complexa
é, com certeza, frustrante. Se você tem uma mensagem de erro,
então você está com meio caminho andado, podendo seguir
estes 10 passos. Se não tem, se a aplicação simplesmente
não faz o que você deseja, nesse caso precisará se utilizar
de uma técnica de depuração conhecida como Chinês.
O Chinês é a análise, linha a linha, da aplicação
para verificar se ela realmente está realizando a tarefa desejada.
Você pode encontrar mais informações sobre ele em nosso
treinamento on-line de lógica de programação
Vejamos então os 10 passos para depuração da aplicação
:
1o Você tem certeza que entendeu a mensagem ?
Nenhuma linguagem é carrasca (ou quase nenhuma) a ponto de simplesmente
dizer "Deu erro bobão !" . Todas procuram explicar
que tipo de erro ocorreu. Porém existe uma distância entre
o núcleo da linguagem e o código produzido por você
que faz com que algumas mensagens sejam difíceis de compreender.
O 1o passo então é : Você entendeu a mensagem ?
Saber inglês, nesse ponto, é requisito básico, portanto
se tem dificuldade com a lingua inglesa compre um dicionário
ou se adapte ao uso de sites de tradução on-line.
Vejamos o exemplo de algumas mensagens e suas respectivas soluções
:
Item not found in the collection :
As linguagens que se utilizam de objetos trabalham com um tipo de
objeto chamado "Coleção". É um objeto
que contém outros objetos ou outras informações.
Exemplos de coleções :
- Form do objeto request
- Querystring do objeto Request
- Fields do objeto RecordSet
- Parameters do objeto Command
Form e Querystring são coleções fáceis
de manipular : Se você utilizar um nome de variável que
não existe nelas elas não dão erro, apenas retornam
vazio. Fields e Parameters não. Se tentar acessar um campo
ou um parâmetro de um command e este não existir verá
a mensagem de erro acima, informando que o item que você está
tentando acessar não existe na referida coleção.
As mensagens de erro, como vê, supõem que você
conheça a estrutura da linguagem com a qual esteja trabalhando,
para assim poder identificar o que é uma coleção,
qual coleção está utilizando, qual item está
tentando acessar e, enfim, achar o erro.
No value suplied for one or more required parameters
Mas uma vez o programador precisa conhecer a estrutura da linguagem/ambiente
no qual está trabalhando para poder entender essa mensagem.
O ADO, de uso comum no ASP e no VB, permite que sejam inseridos parâmetros
dentro de uma instrução SQL e tais parâmetros
sejam substituidos pelos valores informados através da coleção
Parameters do Command.
Então quando o ADO não reconhece um nome que deveria
ser um nome de campo na sua instrução SQL ele de imediato
pensa que aquilo é um parâmetro e que você irá
informar o valor depois. Quando você dá um Execute sem
informar o valor, ele gera esta mensagem, dizendo que você não
informou os valores dos parâmetros de sua instrução
SQL. Ou seja : Você digitou algum nome de campo errado (ou algo
parecido) em sua instrução SQL.
Resultado : Muitas vezes identificando-se o significado da mensagem
descobre-se que o erro foi causado por algum erro de digitação
no código e encontra-se o erro facilmente.
Concluindo este item, vemos que um programador que não tenha
conhecimento da estrutura da linguagem na qual está trabalhando
terá mais dificuldade para depurar código do que um programador
que conheça a linguagem a fundo. Por isso um treinamento adequado
sempre prepara melhor um desenvolvedor do que informações
adquiridas de forma autodidata.
2o - O erro é da sua aplicação
ou do ambiente ?
Permission Denied, por exemplo, é um erro típico de ambiente
e não da sua aplicação. Nesse caso cabe a você
checar questões de ambiente tal como permissões NTFS,
permissões na conta do usuário, permissões de rede,
etc,etc.
Resultado : Se o erro for de ambiente, não há
necessidade de continuar este processo.
3o - Você sabe onde ocorreu o erro ?
Antes de continuar na depuração o programador precisa
saber exatamente em que linha o erro ocorreu.
Em uma linguagem como Visual Basic não há desculpas para
o programador não saber isso : Com recursos como depuração
passo-a-passo, utilização de break points, break points
condicionais, entre muitos outros, é facílimo descobrir
a linha exata em que o erro ocorreu.
Porém em linguagens de script, tal como ASP ou JavaScript, descobrir
a linha em que um erro ocorreu é mais complicado. Pela mensagem
de erro e pelo que foi executado até o momento que o erro ocorreu
o programador pode chegar perto. A partir dai é necessário
recorrer a um velho recurso de depuração : Inserir no
código várias exibições de mensagens "Passou
aqui", identificando-as numericamente, claro. Assim sendo, ao executar
novamente o script que deu erro o programador se aproximará cada
vez mais da linha que deu erro, até identificar exatamente a
linha com problema.
Resultado : Vendo a linha em que o erro ocorreu ele pode ser
solucionado (as vezes trata-se de pequenos erros de digitação)
ou pelo menos se descobrirá a natureza do erro, ou seja, exatamente
do que se trata.
4o - Funcionava antes ? Já funcionou alguma
vez ?
Se a resposta a qualquer uma dessas perguntas for sim, o caminho da
depuração muda. Avalie as seguintes questões :
Você mudou alguma coisa
Se mudou, então foi sua mudança que causou o erro.
Desfaça a mudança e teste novamente. Funcionando, você
já sabe exatamente o que está causando erro, facilitando
assim a depuração.
Você não mudou nada
O erro pode estar sendo causado, neste caso, por um conjunto de dados
nunca antes testado em sua aplicação. Por exemplo, será
que não é a 1a vez que um usuário digita um nome
tão grande que ultrapassa o limite do tamanho do campo e gera
um erro ?
Nesse caso a sequencia de solução do problema muda.
Veja :
- Testar dados comuns, com os quais a aplicação funcionava
antes
- Alterar, campo a campo, os dados comuns para os novos dados e
testar a cada alteração
- Quando ocorrer o erro, você saberá qual campo está
com problemas.
Sabendo a informação problematica, o erro pode ser de
lógica ou de ambiente. Se você faz algum processamento
lógico sobre a informação (trata homens e mulheres
de forma diferenciada no código, por exemplo) então
analise seu algorítimo. Faça um chinês para descobrir
o que está acontecendo em seu algorítimo.
Mas se nenhum processamento lógico é feito com a informação,
então pode ser um problema de ambiente : O tipo do campo está
correto ? O tamanho do campo é adequado ?
5o - Você sabe o valor de suas variáveis
?
Se nunca funcionou, continuamos com a depuração checando
o valor das variáveis no código.
É muito comum que o erro seja causado por um valor errado em
uma variável no momento em que a linha que deu erro é
executada. Assim sendo, tendo descoberto a linha errada deve-se verificar
o valor das variáveis no momento da execução da
linha.
Novamente, com linguagens de alto nível como Vb, é moleza
: janela Immediate, Locals, ou simplesmente usando o mouse - pode-se
até escolher qual o mais fácil. Mas com linguagens de
script novamente será necessário recorrer a instruções
da linguagem para exibir os valores das variáveis na tela/página
antes que a linha que contém o erro seja executada.
Neste tópico existe uma questão especialmente importante
: Quando estamos trabalhando com uma linguagem que está gerando
código de outra, tal como a geração de instruções
SQL pelo VB ou ASP, os erros de concatenação de strings
são muito comuns. Nestes casos é especialmente importante
que a instrução gerada seja exibida como um todo antes
de ser executada. Se você estava gerando a instrução
na própria linha da execução, onde ocorreu o erro,
mude : Crie uma variável gere a instrução dentro
da variável e antes da execução exiba o valor da
variável. Se o valor exibido não for uma instrução
válida na outra linguagem (ex.: uma instrução SQL
válida) ou se não for a instrução que você
quer, tá explicado o erro.
Resultado : Descobrindo que o valor de uma de suas variáveis
está errado, então você descobrirá que a
linha com erro não é a linha em que o erro ocorreu, mas
a linha que atribuiu o valor errado na variável. Descobrindo
que linha é essa, você poderá descobrir porque o
valor errado foi atribuido e achar o erro. Aqui muitas vezes é
necessário a realização de um chinês.
6o - Volte ao passo 2 se necessário
São poucos os erros que sobrevivem até o 6o passo. Neste
6o passo é hora de verificar se o erro está realmente
no código.
Por exemplo, se você está recebendo a mensagem "No
values given for one or more required parameters" mas toda a instrução
SQL está escrita certa, será que não são
os nomes dos campos no banco que estão errados ?
Avalie todo o ambiente em volta da aplicação para verificar
se o erro não poderia estar fora do códiogo.
7o Formule uma dúvida
Se você não solucionou o problema até agora, pelo
menos já isolou o problema de uma forma tal a poder formular
uma dúvida. Tente formulá-la de forma menos específica
possível, fazendo uma pergunta em relação a linguagem,
ao invés de em relação ao seu programa especificamente.
Desta forma encontrará mais facilmente a solução.
8o Leia o Help
Se não sabe inglês, entre em um curso. Se não tem
o Help, instale. Mas leia o Help. O MSDN da Microsoft é muito,
mas muito completo mesmo. Se não bastasse isso o Books on line
do SQL Server tem tudo que você possa querer saber sobre o SQL
Server. Portanto é improvavel que você saia de uma leitura
do help sem encontrar o que deseja.
Observe que a formulação da dúvida no item 7 ajudará
você com o item 8, 9 e 10.
9o Pesquise na Internet
Vá ao site da Microsoft. O volume de informação
é muito grande. Na própria página principal você
encontra no menu um recurso de Search que permite você procurar
por informações técnicas. Marque apenas as opções
relativas a desenvolvimento.
Procure utilizar palavras difíceis ligadas ao seu problema.
Quanto mais ligadas especificamente ao seu problema forem as palavras,
mais facilmente achará a resposta.
Procure também em ferramentas de busca, como o AltaVista, e
em sites sobre programação, como o nosso.
10o - Peça ajuda
Se nenhum dos passos anteriores funcionou, chegou enfim a hora de pedir
ajuda. Porém nesse momento cabe seguir diversas regras de etiqueta.
Não é qualquer pedido de ajuda que deve ser postado em
fóruns ou listas de discussão. Veja alguns itens que você
não deve perguntar nestes locais :
- Problemas de lógica de programação
Faça e refaça seu chinês, mas não poste
isso em um fórum. Ninguém terá tempo disponível
para analisar seu código para você.
- Perguntas específicas de ambiente
"Na máquina X a minha aplicação não
instala, alguém sabe porque?" . Ninguém tem disponibilidade
para ir a seu escritório ver por que a sua aplicação
não instala na máquina X.
- Perguntas básicas
"O que faz o MSGBOX ?". Leia o Help. Achará a resposta
para essa pergunta lá.
- Perguntas muito abertas
"Como faço para acessar um banco de dados em rede?".
A resposta desta pergunta renderia um livro. Por isso é muito
provável que você não receba resposta alguma ou,
se receber, será uma resposta incompleta que poderá
leva-lo a erros. Portanto, não faça esse tipo de pergunta
em um fórum. Compre um livro sobre o assunto e leia.
- Perguntas muito abertas
Inclui este item 2 vezes porque existe outro tipo de pergunta aberta
que incomoda nos fóruns : "Como faço uma aplicação
de controle de estoque ?" ou "Como faço uma tela
de login?" . Ninguém responderá este tipo de pergunta.
Você está, quase, pedindo para que façam para
você. Comece a fazer e, havendo dúvidas técnicas,
siga o passo-a-passo desse artigo para soluciona-las. Se não
sabe por onde começar, compre um livro ou entre em um curso.
Você deve estar perguntando : "O que sobra então
?". A resposta é simples : perguntas verdadeiramente técnicas.
Veja o Exemplo de algumas :
"Quais as propriedades de um item quando utilizo um for/each
em uma coleção FORM no ASP ?"
"Qual o tipo de dados do VB equivalente ao INT do SQL ?"
"Como faço para colocar um form no systray ?"
Mas e se você estiver com uma dessas dúvidas que não
devem ser colocadas em fórum, como resolver ?
Esses casos, que são problemas específicos da lógica
de sua aplicação, não serão resolvidos em
um fórum. Eventualmente você pode achar uma alma bondosa
que analise seu código e corrija sua lógica, mas você
não pode querer que alguém trabalhe de graça para
você. Portanto, contrate uma consultoria para resolver o problema
do seu código. Dependendo do que seja pode sair barato, 20 ou
30 reais para corrigir sua lógica e fazer um trecho de código
para você, explicando a você como foi feito.
Dennes Torres
MCSD,MCSE,MCDBA
|