FindBugs

Estava eu observando o relatório de aceitação ou rejeição de um patch para o projeto Hadoop quando vi um dos itens, que diz:

” findbugs -1.  The patch appears to introduce 1 new Findbugs warnings. ”

Opa, eles testam se há um possível bug sendo adicionado.

Então fui atrás desta ferramenta e encontrei o FindBugs.

O FindBugs é uma ferramenta que faz o análise estática do bytecode  e possui um conjunto de regras ou padrões que descrevem possíveis bugs. A execução e bem simples, executa-se ele e é retornado uma lista de possíveis bugs. O mais legal que é possível coloca-lo para ser executado junto com o ant, por exemplo em daylies build, ou ele tem um plugin para o eclipse.

Na figura abaixo, eu executo o findbug numa classe do biojava que faz o alinhamento dinâmico. Na parte inferior, pode-se ver a lista de possíveis bugs encontradas (os caros de parametrizar parametros ele diz que é bug porque o fonte é do java 1.4, mas o projeto está configurado para java 1.5).

Findbugs no eclipse

Nesta figura, esta destacado um bug comum de comparação de pontos flutuantes. Outra coisa legal é que podes ter mais informações sobre o bug, para este tipo de bug, a descrição do possível bug é mostrado na figura abaixo:

captura_da_tela.png

Algumas vezes ele da falsos positivos ou seja, possíveis bugs, que  você sabe que esta ali, mas por algum motivo, por exemplo otimização, você fez desta maneira. Mas para estes casos, é possível colocar no filtro do FindBugs para ignorar este possível bug na classe.

Recomendo o FindBugs, além dele pegar bugs que você “nem tinha reparado”, ele é muito rápido de usar e se integra muito bem ao eclipse.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s