Clique aqui para ler esse artigo em PDF.
Na Medida Certa
Métricas de Qualidade com JavaNCSS e JDepend
Descubra se seu código segue a arquitetura proposta e identifique possíveis problemas automaticamente
“Não é possível melhorar o que não se controla, e não é possível controlar o que não se mede”. Essa é uma das máximas da qualidade de software e a principal idéia por trás da coleta de métricas. As métricas (um termo mais técnico para "medidas") são uma forma de medir a qualidade e ajudam a obter informações como a taxa de crescimento do sistema, o local do código de maior complexidade e problemas que prejudicam a manutenção (ex.: alto acoplamento).
A qualidade do código de uma aplicação tende naturalmente a diminuir com o passar do tempo. No começo do projeto geralmente existe uma arquitetura a ser seguida e boas práticas de programação estabelecidas. Mas à medida que o projeto evolui, vêm as mudanças nos requisitos, a urgência dos prazos – e as famosas “gambiarras”.
A boa notícia é que coletar métricas pode ser tão fácil quanto clicar num botão. Essa coleta pode ser automatizada através de ferramentas como JavaNCSS e JDepend, que podem ser integradas por meio de um script do Ant, permitindo até que a obtenção de métricas faça parte do build principal da aplicação.
JavaNCSS
O JavaNCSS é uma ferramenta livre que pode ser usada para levantar métricas de tamanho, de complexidade e de nível de documentação do código, que dão uma idéia do custo de manutenção da aplicação (veja o quadro "Métricas do JavaNCSS"). A ferramenta pode ser executada de forma integrada a um script do Ant. O resultado gerado é um site HTML bem organizado, apresentando as métricas com quebras por pacotes, classes e métodos, além de um resumo geral para o projeto.
Como exemplo, vamos colher métricas do framework de persistência relacional Hibernate 2.1. A coleta de métricas do JavaNCSS é feita sobre o código fonte da aplicação. O script para obtenção de métricas tanto do JavaNCSS quanto do JDepend (que apresentaremos adiante) pode ser visto na Listagem 1.
Para executar o JavaNCSS de forma integrada ao Ant, deve ser usada a tarefa javancss. Como esta não é uma tarefa padrão do Ant é necessário defini-la no script (veja a marcação ? na Listagem 1). O próximo passo é usar a tarefa javancss para colher as métricas sobre o código fonte (marcação ). Esta tarefa pode receber os seguintes parâmetros:
§ srcdir – diretório onde estão os arquivos-fonte
§ generateReport – determina se o resultado das métricas deve ser escrito num arquivo
§ outputfile – caminho e nome do arquivo de saída, com o resultado das métricas
§ format – formato do arquivo de saída, como XML ou texto simples
Sendo o formato de saída especificado como XML, precisamos usar a tarefa style para fazer uma transformação em HTML, usando XSL (veja a marcação ?). A Figura 1 mostra uma parte do site resultante, contendo o resumo das métricas para o código completo do Hibernate.
JDepend
O JDepend permite coletar métricas que validam o uso adequado de alguns princípios básicos da orientação a objetos. Para executar essa ferramenta de forma automática com o Ant, é usada a tarefa jdepend (marcação ). Como essa tarefa já faz parte da distribuição do Ant, não é necessário declará-la usando taskdef.
Estes são os parâmetros da tarefa jdepend:
§ classespath – especifica o conjunto de diretórios onde está localizado o código compilado (note que, ao contrário do JavaNCSS, que analisa o código fonte, o JDepend colhe as métricas a partir do bytecode)
§ outputfile – nome do arquivo de saída, com o resultado das métricas
§ format – formato do arquivo de saída (também pode ser XML ou texto)
...