Do que trata o artigo

O artigo demonstra a importância de tratar erros adequadamente, pois existem situações em que o as técnicas usadas podem atrapalhar em vez de ajudar. São exibidas ainda algumas situações comuns em que alguns pontos importantes passam despercebidos ao programador e também, algumas técnicas que podem ajudar a fazer um melhor tratamento de erro. Por fim, algumas situações menos comuns onde erros “irritantes” acontecem serão estudadas.

Para que serve

No conteúdo serão mostradas técnicas para melhorar o tratamento de erros, considerações sobre como o código é escrito e alguns tipos de erro que são difíceis de capturar. É possível que através do que for exposto você consiga estabelecer suas próprias políticas para tratamento de erro no seu código, ou, pelo menos, começar a escrever melhor suas rotinas e evitar problemas futuros.

Em que situação o tema é útil

O conhecimento de melhores técnicas para o tratamento de erros de programação economiza tempo do programador agilizando o processo de depuração e correção de falhas. Estabelecer uma linha que sirva de guia para capturar os erros fornecerá meios suficientes para que o problema seja sanado causando o menor impacto possível para o seu usuário. Ao trabalhar com aplicações que usam bancos de dados surgem problemas nem sempre muito fáceis de reconhecer, no artigo, alguns destes casos são colocados e explicadas maneiras para corrigir e evitar que aconteçam.

Resumo do DevMan

Num cenário ideal os programas simplesmente funcionam e não existem erros nem de programação, nem de arquitetura já que estes são resolvidos e previstos no projeto. Mas isto é difícil de ocorrer já que sempre algum aspecto foge do controle do programador. Para estes casos, o framework .NET disponibiliza ferramentas que ajudam a manter a aplicação em funcionamento. O bloco “try...catch...finally” é um exemplo de ferramenta para tratamento de erros. Só que como qualquer recurso das linguagens de programação está sujeito a um mau uso. Vamos procurar entender os principais objetivos desta ferramenta e entender como pode ser usada para potencializar a solução dos problemas e não ser parte destes. Uma vez capturado o erro o que se deve fazer para que ele dê informações relevantes?

Também vamos conhecer alguns erros que são no mínimo irritantes pois, são sutis, muitas vezes básicos mas, quando surgem, causam um bom estrago.

Em um artigo sobre os programadores da NASA de 1996 alegava-se que um dos softwares para controlar o ônibus espacial teve em suas onze últimas versões apenas 17 erros. Em outro artigo, este de 2003, alega-se que uma falha na aterrissagem da nave espacial Soyuz fora causada por falha de software.

Estes dois exemplos mostram a importância que o software adquiriu nas últimas décadas. Eles estão por toda parte quer você os veja ou não. Desde o seu caixa eletrônico no banco onde estão mais evidentes até quando você faz um pedido de pizza por telefone onde existe um software que gerencia suas ligações telefônicas na operadora, pode ser que o atendente esteja registrando o seu pedido em um programa.

Como toda atividade humana, erros que ocorrem com software trazem algum impacto que pode ser alto ou baixo dependendo da área em que o programa esteja atuando. Muito se tem pesquisado e horas intermináveis são gastas corrigindo problemas de software e procurando-se projetar os sistemas para que simplesmente não falhem, mas é muito difícil e em alguns casos impossível escrever código 100% à prova de falhas.

Quer seja por fatores humanos – alguém sempre descobre um jeito “não testado e não documentado” de utilizar o seu programa – ou por aspectos de falha de hardware, rede etc., os programas virão a falhar em algum momento. Cabe para aqueles que elaboram o software a tarefa de fazer um tratamento adequado dos erros para que estes não coloquem todos os dados a perder e causem eventuais prejuízos.

O Microsoft .NET Framework implementou um meio de capturar erros dos programas para que todo o código suscetível a eles rode dentro de um bloco protegido conhecido como “try...catch”. Este já estava presente também em outras linguagens orientadas a objeto, como C++ e Java. Tradicionalmente tudo o que se tem a fazer é implementar a estrutura da Listagem 1.

Listagem 1. Tratamento básico de exceção com try...catch


  try
  {
         // Escreva aqui o código sujeito a problemas.
  }
  catch(<exceção especializada 1>)
  {
         // Código para fazer algum tratamento do erro.
  }
  catch(<exceção especializada 2>)
  {
         // Código para fazer algum tratamento do erro.
  }
  catch(<exceção generalizada>)
  {
         // Código para fazer algum tratamento do erro.
  }
  finally
  {
  // Código para fazer algum tratamento final obrigatório, 
  // independentemente do bloco catch ativado.
  // O bloco finally é opcional.
  }

O bloco “try” envolve o código que poderá gerar algum erro. Aqui entra a experiência e conhecimento do programador para que inclua somente aquilo que precisa ser tratado porque este bloco implica em um gasto maior de processamento que pode vir a comprometer o desempenho do programa.

Simplificando: você não deve colocar dentro deste bloco aquilo que não vai causar problema. Por exemplo, se estiver declarando variáveis de memória isto pode ser feito fora do bloco:

  int contador = 0;
  decimal valor = 100.50M;
  string nome = "João da Silva";

Note também que os objetos/variáveis que forem declarados dentro do bloco “try” estão inacessíveis fora deste, inclusive nos blocos “catch” e “finally” ( ...

Quer ler esse conteúdo completo? Tenha acesso completo