Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que trata o artigo

Neste artigo daremos uma atenção especial aos bugs, sua identificação, correção e prevenção. Veremos na prática como solucionar alguns dos bugs mais comuns na vida do desenvolvedor Delphi, além de entender porque eles ocorrem. Mostraremos ainda como utilizar uma ferramenta de BugTracking e Profiling para aumentar a qualidade de seus projetos.


Para que serve

Desenvolver projetos com mais qualidade e estabilidade, dando dicas de como atuar de forma preventiva para evitar que erros comuns ocorram e controlando todo o ciclo de vida dos bugs, além de introduzir o leitor o uso de ferramentas de Profiling para melhora de performance e identificação de memory leaks.

Em que situação o tema é útil

Tanto durante o desenvolvimento, de forma a escrever o código de maneira preventiva à ocorrência de bugs, quanto na fase de manutenção, no auxílio da análise e correção do problema. Aplicável ao desenvolvimento de qualquer tipo de sistema.

Resumo do DevMan

Este artigo abordará um tema que, infelizmente, está presente na vida de todo desenvolvedor, os bugs. Aqui veremos como identificar, corrigir e prevenir alguns dos erros mais comuns do Delphi, além de mostrarmos como utilizar uma ferramenta de Bug Tracking para controlar as solicitações de mudanças e o registro dos bugs encontrados no sistema. Veremos também como utilizar uma ferramenta de Profiling para auxiliar na detecção de memory leaks e gargalos de performance. Veremos tecnologias e conceitos a respeito de: Delphi, BugZilla, BugTracking, Qualidade de software e Profiling.

Todo desenvolvedor, principalmente os que cuidam da manutenção de sistemas, lidam diariamente com diversos bugs, sendo que alguns deles são bem corriqueiros, como erros de conversão, violação de chaves, Access Violations, dentre outros. O que ocorre é que, em alguns casos, o problema parece nunca acabar. Você corrige um bug e na semana seguinte eis que surge de novo em outro lugar, um mês depois aquele que você corrigiu volta a ocorrer, enfim, parece que os bugs não acabam. Por falar nisso, é comum ouvirmos falar que não existem sistemas sem falhas, sem erros. De fato, hoje com minha experiência posso dizer que essa afirmação é verdadeira, apesar de desejar e muito um dia provar que a mesma é falsa. Mas o que ocorre em grande parte dos casos é que um determinado erro ocorre, o desenvolvedor corrige e libera para o cliente, mas não se atenta à origem do problema, perdendo assim uma oportunidade de aumentar a qualidade do sistema inserindo nele rotinas preventivas, para que erros ocorram com menos frequência.

Além de não tratar a causa do problema (possibilitando que o erro volte a ocorrer), normalmente não há um controle do ciclo de vida de um bug, ou seja, da fase de detecção, análise, desenvolvimento da solução e fechamento do mesmo. Com isso, perdem-se prazos e problemas pequenos se tornam grandes dores de cabeça, além de não se formar uma base histórica de problemas e soluções que possa ser analisada para se buscar melhorias no processo e nos padrões.

Uma outra prática bastante negligenciada é a de testes automatizados. É claro que os mesmos demandam um tempo para que sejam efetuados de maneira eficiente, além de exigirem um certo investimento em ferramentas e treinamentos. Porém, mais óbvio ainda é o fato do aumento de qualidade que tal prática traz para os projetos de software.

Aqui veremos como solucionar alguns dos principais bugs que ocorrem no desenvolvimento de aplicações Delphi. A API de exceções do Delphi é gigantesca, é simplesmente impossível examinarmos todas, o foco não será abordar todas as possibilidades que um erro pode ocorrer, mas sim demonstrar as principais ou pelo menos as mais comuns, assim como a adoção de medidas simples para prevenção e detecção dos mesmos. O mais importante aqui é que você perceba o quão importante é você analisar a origem do problema e possíveis formas de preveni-lo. O que quero é que, após ler este artigo, você se faça as seguintes perguntas sempre que se deparar com um erro e for solucioná-lo:

• Porque aconteceu este erro?

• Como ele poderia ter sido evitado?

• Como posso corrigi-lo?

• Que medidas preventivas posso tomar para evitar que o erro volte a ocorrer?

Nossos exemplos serão bem simples, apenas para fins didáticos. Começaremos então vendo algumas das exceções mais comuns ocorridas em sistemas Delphi. A seguir, estudaremos um mecanismo de Bug Tracking e finalmente uma ferramenta para Profiling.

Could not convert variant of type (…) into type (…)

Descrição do erro: Ocorre quando o Delphi tenta atribuir uma variável do tipo variant a outra de outro tipo que não suporta o valor atual da primeira.

Quando ocorre: Este erro é bem comum quando trabalhamos com o componente DBLookupComboBox, pois sua propriedade KeyValue (que retorna o valor do campo definido em KeyField) é do tipo Variant. Dessa forma, se tentamos usar o KeyValue para, por exemplo, exibi-lo em uma mensagem ou concatenar com uma String, recebemos uma exceção.

Na Figura 1 temos um formulário com um DBLookupComboBox ligado a um DataSource que por sua vez está ligado a um ClientDataSet. A Listagem 1 mostra o código do OnClick do botão.

Figura 1. Formulário de exemplo

Listagem 1. Acessando o KeyValue


  procedure TFrmPrincipal.BtnClienteSelecionadoClick(Sender: TObject);
  begin
    //Exibe o valor do campo chave
    ShowMessage(dblClientes.KeyValue);
  end;  ... 

Quer ler esse conteúdo completo? Tenha acesso completo