Introdução

A Verificação de software se destina a mostrar que o projeto do software atende à sua especificação, enquanto que validação se destina a mostrar que o software realiza exatamente o que o usuário espera que ele faça.

O objetivo principal do processo de V&V é estabelecer confiança de que o sistema de software está adequado ao seu propósito. O nível de confiabilidade exigido depende de fatores como função do software, expectativas do usuário, ambiente e mercado.

Segundo Sommerville, existem duas abordagens complementares para a verificação e validação do sistema:


- Inspeções de software analisam e verificam representações de sistema como documentos de requisitos, diagramas de projeto e código fonte do programa. Revisões de código, análises automatizadas e verificação formal são técnicas de V&V estáticas.

  • Inspeções de software analisam e verificam representações de sistema como documentos de requisitos, diagramas de projeto e código fonte do programa. Revisões de código, análises automatizadas e verificação formal são técnicas de V&V estáticas.
  • Testes de software envolvem executar uma implementação do software com dados de teste para examinar as saídas e o comportamento operacional. O teste é uma técnica de V&V dinâmica.

Por outro lado, verificação formal consiste em validar ou invalidar a correção dos algoritmos subjacentes a um sistema com relação a uma certa propriedade ou especificação formal, utilizando métodos formais.

As técnicas de inspeção de software podem somente verificar a correspondência entre um programa e sua especificação, isto indica que elas não podem demonstrar que o software é útil operacionalmente, nem utilizá-las para verificar propriedades emergentes como desempenho e confiabilidade.

O FindBugs é uma ferramenta de código aberto utilizado pelos desenvolvedores de software para fazer uma auditoria ou inspeção no código de forma automatizada. Esta ferramenta examina as sua classes procurando por possíveis problemas no código durante a fase de desenvolvimento. O FindBugs analisa o código fonte ou mesmo o código objeto (bytecode para programas Java) do programa procurando por padrões conhecidos.

Instalação

Segue abaixo a instalação passo a passo do plugin FindBugs no seu ambiente de desenvolvimento Eclipse.

Primeiramente vá no menu Help e em seguida selecione a opção “Install New Software...”.

Primeiro passo na instalação do FindBugs

Figura 1: Primeiro passo na instalação do FindBugs

Na janela que foi aberta digite o endereço do site do FindBugs. Após isso aparecerá uma opção para marcar o FindBugs.

Inserindo o site para a instalação do FindBugs

Figura 2: Inserindo o site para a instalação do FindBugs

Marque a opção FindBugs e clique em Next. Após isso a instalação será iniciada. O usuário deve aguardar alguns minutos até a operação ser completada, como pode ser visto na tela abaixo:

Finalizando a instalação do FindBugs

Figura 3: Finalizando a instalação do FindBugs

Por fim dê um Next e marque a opção “I accept the terms of license agreement”. Clique em Finish para completar a instalação.

Utilização

Para utilizar o FindBugs é muito simples, basta ir no projeto, pacote ou classe em que deseja-se fazer a análise estática e clicar com o botão direito do mouse e ir no menu Find Bugs e na opção Find Bugs.

Executando o FindBugs

Figura 4: Executando o FindBugs

Após isso tem-se um relatório completo de todas as anomalias existentes no pacote ou classe selecionada. Na figura abaixo a view Bug Explorer apresenta a existência de algumas anomalias para o projeto selecionado.

Relatórios de bugs do FindBugs

Figura 5: Relatórios de bugs do FindBugs

O FindBugs é criterioso e apresenta um relatório bem interessante. Entre as informações interessantes que o Find Bugs pode informar tem-se:

  • Acesso a referências null
  • Uso inapropriado de APIs
  • Overflow em vetores
  • Divisão por zero
  • Campos estáticos não declarados como final
  • Uma classe que sobrescreve o método equals(Object) mas não sobrescreve o método hashCode()
  • Um campo estático e final que referencia um vetor mutável
  • Entre muitos outros.

Atualmente a ferramenta FindBugs provê suporte a mais de 250 padrões de erros sendo mais de uma centena deles classificados como erros de correção. Além disso, permite que programadores escrevam seus próprios padrões de erros.

Com o relatório exposto pelo FindBugs é possível que os desenvolvedor, arquitetos e líderes de projetos avaliem melhor o código, o projeto e inclusive a equipe sob uma outra perspectiva, além de fornecer um feedback de onde os desenvolvedores estão mais desatentos.

Relevância dos Defeitos

Um estudo interessante foi realizado por Araújo Filho, José de Souza e Valente que baseado em um estudo em cima da plataforma Eclipse concluíram que ao adotar ferramentas de análise estática, como o FindBugs, é fundamental que os desenvolvedores configurem e adaptem os tipos de defeitos reportados por tais ferramentas ao perfil do sistema que está sendo analisado. Dessa forma, o número de defeitos não-relevantes – ou falso positivos – reportados por tais ferramentas é substancialmente reduzido, chegando a ser inferior a 60% na maioria dos casos.

Outro artigo interessante foi proposto por Ayewah et al. que investigaram os defeitos reportados pela ferramenta FindBugs em três sistemas de grande porte como Sun JDK, Glassfish e Google Java Code base. Este trabalho avaliou a qualidade dos defeitos reportados pelo FindBugs além de discutir os motivos pelos quais ferramentas de análise estática reportam muitos defeitos triviais e falsos positivos. No entanto, vale ressaltar que foram encontrados neste estudo em cima do JDK um número de 10% de erros sérios e 46% possuíram algum impacto. Isso mostra como essa ferramenta também pode ser bem utilizada para encontrar defeitos que podem comprometer o sistema.

Conclusão

Neste artigo procurou-se demonstrar conceitos, funcionamento, instalação e tipos de resultados encontrados pela ferramenta de análise estática de código FindBugs. Essa importante ferramenta auxilia os desenvolvedores a encontrar erros escondidos ou por muitas vezes que passam despercebidos nos códigos feitos pelos programadores. O FindBugs apesar de encontrar diversos falsos positivos ainda encontra erros graves que podem comprometer um sistema, ajudando assim o desenvolvedor a manter a sua aplicação mais estável e confiável.

Bibliografia

  • João Eduardo de Araújo Filho, Sílvio José de Souza, Marco Túlio Valente. Os Defeitos Detectados pela Ferramenta de Análise Estática FindBugs são Relevantes?
  • Nathaniel Ayewah et al. Evaluating static analysis defect warnings on production software. In 7th Workshop on Program Analysis for Software Tools and Engineering (PASTE), pages 1–8, 2007.
  • I. Sommerville. Engenharia de Software. Pearson Addison-Wesley, São Paulo, 8 edition, 2007.