O Que É Análise Estática?
A análise estática examina seu código-fonte sem executá-lo, sinalizando bugs, padrões arriscados e problemas de estilo antes que qualquer coisa rode.
Os testes rodam seu código e observam o comportamento. A análise estática lê seu código e raciocina sobre ele - detectando problemas como variáveis não usadas, dereferências de null ou padrões inseguros sem precisar executar uma única linha.
Análise estática vs dinâmica
A análise estática trabalha sobre o texto do código ou sua forma compilada, antes da execução. A análise dinâmica observa o programa enquanto ele roda (testes, profilers, fuzzers). Elas detectam classes diferentes de problemas e se complementam.
O que ela detecta
- Bugs prováveis: dereferências de null, código inalcançável, erros de tipo.
- Problemas de segurança: esta é a base do SAST.
- Estilo e manutenibilidade: complexidade, código morto, convenções.
Um pequeno exemplo
Um analisador estático sinaliza if (x = 5) como um provável erro de digitação para ==, e uma função que retorna em alguns branches mas não em outros, antes de qualquer teste rodar. Esses são bugs que uma suíte de testes que passa pode nunca disparar.
No pipeline
A análise estática roda cedo e rápido, frequentemente junto com o linting, e serve de gate para o build antes que testes caros rodem. Feedback rápido aqui detecta categorias inteiras de bugs sem nunca iniciar o app.
Gerenciando falsos positivos
As ferramentas estáticas tendem a sinalizar; alguns achados não são bugs reais. Ajuste o conjunto de regras, suprima padrões sabidamente seguros com um motivo documentado e rastreie novos achados no diff para que o backlog não afogue o sinal.
Principais conclusões
- A análise estática inspeciona o código sem executá-lo.
- Ela complementa a análise dinâmica, detectando classes diferentes de problemas.
- Ela roda cedo e rápido como um gate barato antes dos testes.