Como adotar a análise estática de código
Veja nesse artigo como simplificar a detecção e a correção de bugs para obter um código-fonte de qualidade através da análise estática de código.
Hoje, entende-se que quanto mais cedo um problema é encontrado no software, mais barata é a sua correção (um problema encontrado em desenvolvimento será muito mais barato de corrigir do que se o mesmo for encontrado em produção). Da mesma forma, código-fonte bem escrito reduz drasticamente o tempo (e o custo) de manutenção, e o uso de boas práticas de orientação a objetos permite que o código seja flexível e suporte mudanças de forma mais tranquila, segura e natural.
Todos estes conceitos relacionados à qualidade são importantes para a vida das aplicações, mas a realidade de prazos cada vez mais curtos acaba fazendo com que, muitas vezes, a preocupação com a qualidade seja deixada de lado, de forma que detalhes importantes são ignorados, levando a aplicações mal construídas. O resultado é sempre o mesmo: alto custo de evoluções, demora em manutenções, alta taxa de bugs e insatisfação dos clientes.
Devido a isso, a qualidade ganha cada vez mais relevância, já existindo atualmente diversas práticas que podem ser utilizadas de forma a agregá-la ao desenvolvimento de software. E quando tais práticas são usadas corretamente não resultam necessariamente em impactos em prazo. Um bom exemplo é o par refatoração/testes automatizados, e paralela a este, existe a análise estática de código – tema deste artigo. A análise estática incorporada à IDE, assim como a prática de testes unitários, tornaram-se práticas tão naturais (pela sua praticidade e simplicidade) que passam a não ser mais dissociadas da própria escrita de código-fonte. Contudo, isto vale quando os conceitos estão bem entendidos, pois de outra forma, tais práticas podem surtir o efeito contrário, onerando a tarefa de desenvolvimento.
Além de explicitar o conceito de análise estática de código e apresentar ferramentas (de uso integrado às IDEs, para atuar de forma localizada nos arquivos, e de uso externo, mais geral, para cobrir todo o código-fonte do projeto de uma vez), este artigo irá demonstrar um método para aplicação da análise estática por meio de um estudo de caso hipotético, onde o código é verificado durante a construção e posteriormente validado por uma ferramenta específica (SonarQube), através de regras.
Análise estática de código
A análise estática de código é uma das práticas que verifica a qualidade do código-fonte. Esta verificação é realizada antes mesmo que haja execução do software (um conceito oposto ao dos testes unitários, que validam o software com base no resultado de sua execução – vide BOX 1).
BOX 1. Verificação x Validação (ou caixa branca x caixa preta)
Uma verificação considera “fazer certo alguma coisa”, ou seja, garantir que os passos para atingir um dado objetivo foram realizados corretamente; já a validação trata de “fazer a coisa certa”, ou seja, garantir que o objetivo seja atingido, independente da forma como os passos foram realizados. Verificação é eficiência; validação é eficácia. Também se entende que os testes de caixa branca (que consideram o código escrito) são aspectos de verificação, e os testes de caixa preta (que testam o output do software com base num dado input) são aspectos de validação. Considera-se, portanto, que a análise estática de código está relacionada à verificação, pois analisa como o código-fonte foi construído internamente.
A verificação é realizada com base num conjunto de regras pré-estabelecidas. O objetivo da análise é evidenciar problemas, para que possam ser corrigidos com o máximo de foco, resultando em maior eficiência no processo de melhoria de qualidade.
Além disso, assumir que a análise estática de código realiza verificação sem que o código-fonte seja executado não significa dizer que apenas arquivos texto (com extensão .java, .jsp, .js) são verificados. Cada ferramenta, dependendo de sua implementação, pode realizar a verificação em código-fonte ou bytecode. Embora algumas ferramentas sejam capazes de realizar a verificação estática em arquivos JSP e JavaScript, por exemplo, a análise aqui proposta foca-se especificamente em código-fonte Java (bem como EM bytecodes).
A análise estática pode ter sua verificação agrupada em três aspectos principais, a saber:
- Verificação por estilo: Considera elementos como identação, espaços e tabs, convenção de nomes, número de parâmetros, alinhamento na vertical, formato e presença de comentários, dentre outros. São todos os aspectos que contribuem para tornar o código mais padronizado, organizado e legível. A ferramenta mais utilizada para verificação por estilo é o Checkstyle;
- Verificação por boas práticas: Aplica uma gama de regras para verificar se práticas corretas estão sendo realizadas, como evitar duplicação de código, garantir o correto uso de encoding, implementação do método clone(), tamanho de métodos e classes, tamanho de parâmetros, uso do padrão Singleton, criação desnecessária de variáveis locais e muitas outras. O conjunto de regras é extenso e visa garantir que o código apresente as melhores práticas possíveis. A ferramenta de verificação mais utilizada para aplicar boas práticas é o PMD;
- Verificação por bugs: Trata de encontrar erros no sistema. Isto é importante para antecipar a identificação de problemas no software (até antes mesmo de sua execução pelo cliente). A ferramenta mais utilizada para identificação de bugs é o Firebug.
A verificação das ferramentas PMD e Checkstyle é realizada sobre código-fonte não compilado (arquivo com extensão .java), mas a verificação com Firebug analisa bytecodes (arquivos compilados do Java, com extensão .class). Desta forma, para análises envolvendo Firebug, uma compilação prévia é necessária. Isso é tratado pelo seu respectivo plugin, de forma que se faz transparente ao desenvolvedor.
O que não é análise estática – testes e validação por contrato" [...] continue lendo...
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo