04/06/2012

Tratamento de Erros no VB6

Um dos pontos mais importantes da manutenção de um software é descobrir onde se encontram os bugs encontrados durante o teste ou utilização do software.

Como dizia Edsger Dijkstra, criador do algorítimo do caminho mínino (que leva o seu próprio sobrenome): "Testes de programas podem ser uma maneira muito eficaz para demonstrar a presença de erros, mas é irremediavelmente insuficiente para mostrar a sua ausência."

Ou seja, por mais que você teste, programas são feitos por humanos, que estão suscetíveis a erros, por diversos fatores: falta de atenção, desvio de atenção por terceiros, acúmulo de funções, cansaço, entre outros.

Pois bem, para que seja possível agir rapidamente, é importante criar uma DLL de Tratamento de Erros, que servirá para todos os seus projetos, contendo um Form e uma Class, que será referenciada a cada projeto e, em cada Function ou Sub você deverá passar informações do erro ocorrido, são elas:

No ínício de cada função, após a declaração das variáveis locais, você deve informar:

On Error GoTo cmdConfirmar_Click_Error

E no rodapé da mesma:

cmdConfirmar_Click_Error:

varErro.AconteceuErro = True
varErro.CodErroVB = Err.Number
varErro.DescricaoErro = Err.Description
varErro.Source = Err.Source
varErro.Modulo = "frmSelecao"
varErro.Procedimento = "cmdConfirmar_Click"
varErro.Projeto = "MyProject"
Set varErro.FormParent = Nothing
    
Call TrataErro.MyBox(varErro)
Call TrataErro.GeraLogErros(varErro)

Mas, que diabos seriam varErro e TrataErro que eu não consigo encontrar no VB6?

O varErro é um Public Type do tipo typErro, muito útil para passar diversas informações de forma organizada e o TrataErro é a classe de Tratamento de Erros. Sendo que as rotinas MyBox(varErro) exibe a mensagem de erro de forma personalizada e GeraLogErrors(varErro) grava essa informação em um arquivo de log de erro.

Public Type typErro
    AconteceuErro   As Boolean
    CodErroVB       As Long
    CodErroSistema  As CodErro
    DescricaoErro   As String
    Source          As String
    Projeto         As String
    Modulo          As String
    Procedimento    As String
    Mensagem        As String
    FormParent      As Object
End Type


Gerando Log de Erros
É importante criar uma rotina que irá gravar as informações do erro em um arquivo de log, veja o exemplo abaixo:

   Open Path & "\LogErros\LogDeErros.txt" For Append As #fp
        Print #fp, "Data        : " & Format(Date, "dd/mm/yyyy")
        Print #fp, "Hora        : " & Format(Now, "hh:mm")
        Print #fp, "Origem      : " & varErro.Source
        Print #fp, "Erro Nº     : " & varErro.CodErroVB
        Print #fp, "Descrição   : " & varErro.DescricaoErro
        Print #fp, "Projeto     : " & varErro.Projeto
        Print #fp, "Procedimento: " & varErro.Procedimento
        Print #fp, "Módulo      : " & varErro.Modulo
        Print #fp, "================================================"
   Close #fp

Você poderá colocar uma mensagem padrão para o seu usuário, associar algum  Componente de envio de e-mails e receber as mensagens de erro por e-mail, tudo para facilitar a manutenção dos sistemas desenvolvidos.

O importante também é colocar algum campo para o usuário descrever o que ele estava fazendo quando o erro aconteceu e realizar uma orientação para que eles descrevam exatamente o ocorrido. Afinal, erros não só acontecem por falha humana, às vezes, uma falha computacional, como falta de memória, pode ser uma das causas: Run-time Error número 7: Out of memory. E aí? Como resolver isso? Tenha um bom projeto de testes e implemente essa DLL de Tratamento de Erros em seus projetos.

Dúvidas e comentários são sempre bem-vindos. Obrigado mais uma vez e um abraço a todos!

Um comentário:

Anônimo disse...

Muito bom. Esse realmente salvou a minha vida. Vlw.