Uma das vantagens de utilizar uma linguagem interpretada como o PHP é não ter a necessidade de a cada alteração no código ter que rodar um compilador para gerar um executável para só então podermos rodar o software.

Me recordo quando programava em C que enquanto compilava o software dava pra ir tomar um café tranquilamente. Sem contar que o compilador tomava conta de quase todo o processamento da máquina na época, era muito improdutivo.

No PHP o loop de feedback entre o desenvolvimento e o tempo de resposta do resultado do software desenvolvido é muito rápido, o que gera um aumento significativo de produtividade em relação a uma linguagem compilada.

Por outro lado, você perde a consistência do código gerado com relação a erros de sintaxe, validações de tipos, erros de nomenclatura de variáveis, classes, métodos, e por ai vai. Todo aquele trabalho que o compilador faz para gerar um software minimamente executável não existe.

A consequência disso é que fica a cargo do desenvolvedor toda essa verificação e testes para garantir que o software não quebre em produção. Mas mesmo usando métodos como TDD, Integração Contínua, ou Testes de Integração, é quase impossível garantir uma cobertura de 100% do código. Ou seja, é certo que em algum momento você vai se deparar com algum erro que tenha passado desapercebido durante todo o processo de desenvolvimento.

O que é Análise Estática do Código?

Uma alternativa para evitarmos esse cenário seria adotar uma ferramenta de Análise Estática do Código. Essa ferramenta faz a verificação ou varredura do código em busca de potenciais erros sem rodar ou compilar o software. E no final da análise informa com exatidão a linha e o erro que contém, e assim podemos corrigi-los antes de subir o software para produção.

Existem várias ferramentas gratuitas que fazem essa tarefa automaticamente. Uma delas é o PHPStan que é a ferramenta que eu adotei nos meus projetos.

Eu gostei do PHPStan porque além de ter uma documentação muito clara e completa, ela é utilizada por muitos dos mais populares frameworks e projetos Open Source PHP como, Laravel, CakePHP, Symfony, etc.

Outra coisa bem legal que eu gostei do PHPStan foi o esquema de levels para analisar o código. Com ele você começa a analisar o código em busca dos erros mais óbvios e fáceis de interpretar e corrigir como, classes desconhecidas ou funções desconhecidas. E então vai subindo de nível até as verificações mais rigorosas como falta de documentação de métodos.

Seria muito desmotivador se a análise considerasse todas as verificações de uma vez, pois o volume de erros e de informação gerada pela análise seria insano. Com o esquema de níveis a cada nível superado você adquire mais conhecimento dos tipos de erro encontrados e mais motivação para avançar, como em um jogo!

Isso também permite que você se organize e planeje melhor quando e qual nível você considera avançar em determinado momento, até atingir o nível de qualidade do código que você considerar ideal para cada projeto.

Nesse vídeo eu mostro como instalar e como utilizar o PHPStan no seu software:

Benefícios da ferramenta de Análise Estática do Código.

Os benefícios de adotar uma ferramenta de Análise Estática do Código são bem parecidos com os identificados quando começamos a implementar Testes Unitários:

  • Identificamos erros muito rapidamente e antes do código ir para produção. O que torna muito mais “barato” a correção.
  • Agrega mais conhecimento da linguagem e de práticas ruins que a princípio a gente não notava, mas que a ferramenta acaba evidenciando pra gente.
  • Começamos a prestar mais atenção em como definimos variáveis, classes, métodos e como tratamos os retornos, principalmente com relação aos tipos de dados.
  • Desperta o interesse em documentar melhor o código através dos PHPDocs, que gera informação de typehints e auto-completes na IDE utilizada, facilitando muito a vida de todo o time de desenvolvimento.
  • Impacta também nos testes unitários pois acaba aliviando a pressão por criar testes para cada pedacinho do código, permitindo que focamos somente nos testes das regras de negócio e de comportamentos esperados.

Com a utilização da ferramenta notei um ganho significativo de produtividade, porque a detecção de erros tornou-se quase em tempo de projeto ou codificação. Você pode rodar depois de cada commit, ou antes de um pull request por exemplo. E você pode utilizar um servidor de Integração Contínua para automatizar o processo e ganhar ainda mais produtividade.

Espero que esse post ajude a melhorar sua produtividade e a qualidade do seu software. Valeu!