Este artigo apresenta algumas definições teóricas e métricas para análise estática de código OO, além de uma análise de características das ferramentas voltadas para o tema que podem ser utilizadas em Java.
Em que situação o tema é útil:
Para o desenvolvedor, é importante gerar código de alta qualidade, seja em termos de eficácia com foco na performance, seja em termos de legibilidade de código. As ferramentas de análise estática de código são facilitadores para se alcançar ambos os objetivos.
Codificando com selo de qualidade:
Existe uma grande quantidade de ferramentas que auxiliam o desenvolvedor na utilização de boas práticas e identificação de possíveis bugs no código. Este artigo descreve as funcionalidades de algumas das ferramentas mais populares para análise estática de código na plataforma Java, além das principais métricas de software orientado a objetos utilizadas no mercado.
Um dos pilares da Engenharia de Software é a área de conhecimento denominada qualidade de software que, em linhas gerais, pode ser considerada como o estudo da conformidade aos requisitos propostos para um determinado sistema. Porém, especificamente dentro do campo de desenvolvimento de software, existem fatores que influenciam diretamente na obtenção ou não desta qualidade final de software que são ignorados até por desenvolvedores experientes ou simplesmente são deixados de lado por questões de prazo. Alguns destes fatores que podem ser relevantes para o aumento da qualidade aplicada no desenvolvimento de software são: revisão de código, testes de unidade, testes de carga quando aplicável, legibilidade do código, além da identificação de partes de código que não utilizam boas práticas de desenvolvimento (contribuindo assim para a diminuição da qualidade do projeto tanto em termos de manutenibilidade quanto de performance em execução). É exatamente neste ponto que entram as ferramentas de análise estática de código de um modo geral, e que são o foco central deste estudo.
Neste artigo serão abordadas as métricas de software orientado a objetos mais populares e uma descrição das seguintes ferramentas abertas: Metrics, FindBugs e PMD, que são voltadas ou possuem recursos para efetuar a análise estática em projetos na plataforma Java. A utilização destas ferramentas é muito difundida no mercado, principalmente em projetos de maior complexidade e de longa duração, que possuem fatores complicadores como alta rotatividade entre membros na equipe e constante alteração nos requisitos. A análise estática é um facilitador na identificação das medidas da qualidade do software. Ela pode ser considerada como uma referência na tomada de decisão em relação às questões técnicas que não estão sendo bem compreendidas pela equipe e na identificação de bad smells, que acarretam em baixa extensibilidade, dificuldade de manutenção, entre outros aspectos. Outro fator que contribui para a popularização das ferramentas de análise estática de código é o fato de ser muito comum ver estas ferramentas atuando de forma integrada, como no caso do projeto Sonar, que utiliza o CheckStyle, PMD e FindBugs para gerar um relatório agregado das respectivas ferramentas.
A análise estática de código pode ser considerada como a avaliação do projeto sem uma execução do programa gerado pelo mesmo, ao contrário da análise dinâmica, que engloba toda a gama de testes realizados durante a execução do programa. Notadamente, o foco das duas análises é diferente, sendo a análise dinâmica voltada para Runtime Errors e execuções dos algoritmos aplicados em forma de teste para avaliar dependências dinâmicas e gargalos em consumo de memória. A análise estática pode ser feita na forma de uma revisão manual do código, onde um desenvolvedor com experiência em métricas OO, se beneficiando de atalhos que praticamente todas as IDEs fornecem para facilitar a navegação pelo projeto, percorre o código para encontrar possíveis pontos de erro. Porém, com a popularização do recurso entre desenvolvedores, as ferramentas de análise estática de código se tornaram mais referenciadas na internet e receberam um melhor tratamento em termos de experiência do usuário, o que encurta o tempo gasto para realizar a tarefa e diminui a probabilidade de erros corriqueiros quando se tem tal tarefa sendo executada manualmente. De fato, cada ferramenta possui particularidades que a torna a melhor opção para um cenário específico. Portanto, este artigo oferece uma visão geral sobre as características mais relevantes das ferramentas mais populares, de modo que, se fizer necessário uma ferramenta de análise estática, ficará a cargo de o desenvolvedor escolher qual atende melhor às suas necessidades para a ocasião.
Algumas das ferramentas de análise estática de código Java que serão abordadas neste artigo já foram temas de excelentes publicações na Java Magazine. Como exemplos, podem ser citados o artigo “Qualidade Aplicada” da Edição 36, onde PMD e CheckStyle são utilizados na forma de plugins para a IDE Eclipse, e o artigo “Coleta e análise de métricas em software OO”, que foi publicado na Edição 55. Caso queira se aprofundar nas ferramentas supracitadas, uma consulta a estes artigos será muito proveitosa.
...