7 ferramentas para analise de codigo estatica em 2025
Analise estatica de codigo encontra erros e vulnerabilidades antes da execucao. Veja 7 ferramentas, com criterios objetivos para escolher a ideal ao seu contexto.
Analise estatica de codigo, ou SAST (Static Application Security Testing), verifica o codigo-fonte sem executa-lo, identificando erros, vulnerabilidades e ma pratica logo no desenvolvimento. Em vez de esperar o teste em runtime, a verificacao acontece enquanto o codigo ainda esta sendo escrito. Isso reduz custo de correcao, porque um bug achado na fase de implementacao custa menos que um descoberto em producao.
Abaixo, sete ferramentas para analise de codigo estatica, ordenadas por relevancia pratica para times de desenvolvimento. Cada item traz um criterio objetivo para ajudar na decisao.
1. SonarQube
O SonarQube e uma das ferramentas mais adotadas para inspecao continua da qualidade do codigo. Ele analisa mais de 30 linguagens e cobre desde bugs ate vulnerabilidades e code smells, com um portal onde o time acompanha a divida tecnica. A ferramenta integra ao pipeline CI/CD e bloqueia o merge quando a qualidade cai abaixo do limite definido pelo proprio time.
Criterio: o SonarQube e a escolha quando se quer uma visao centralizada da saude do codigo em multiplos projetos. A versao Community e gratuita, mas limitada a algumas linguagens; linguagens como C/C++ e Objective-C exigem a edicao paga.
2. ESLint
O ESLint e o padrao de fato para analise estatica em JavaScript e TypeScript. Ele funciona com regras configuraveis que detectam erros de sintaxe, uso de variaveis nao declaradas e padroes que podem causar comportamento inesperado. Diferente de um linter simples, o ESLint permite criar regras proprias, o que o torna util para padronizar o estilo do time.
Criterio: para projetos front-end ou Node.js, o ESLint entrega resultado imediato com baixo custo de configuracao. Um ponto de atencao: ele nao substitui uma ferramenta de seguranca, pois seu foco e qualidade de codigo e nao vulnerabilidades complexas.
3. CodeQL
O CodeQL, da GitHub, trata o codigo como dados e permite consultar vulnerabilidades e erros com uma linguagem de consulta propria. Ele e capaz de encontrar problemas que ferramentas tradicionais perdem, como fluxos de dados inseguros entre funcoes. A integracao nativa com o GitHub Actions facilita a automacao em repositorios hospedados na plataforma.
Criterio: o CodeQL e a opcao quando o repositorio ja vive no GitHub e o time precisa de analise profunda de seguranca. Para quem usa outra plataforma, o esforco de integracao aumenta.
4. Semgrep
O Semgrep e uma ferramenta de analise estatica que combina velocidade e flexibilidade. Ele funciona com regras escritas em uma sintaxe parecida com o proprio codigo, o que reduz a curva de aprendizado. O Semgrep Community Edition e gratuito e cobre linguagens populares como Python, Java e Go.
Criterio: o Semgrep atende bem quando o time quer criar regras especificas para o proprio dominio, sem depender de um catalogo fechado. A versao paga adiciona regras de seguranca mantidas pela equipe do Semgrep, mas a gratuita ja resolve muitos casos de uso.
5. SpotBugs
O SpotBugs e um dos sucessores do FindBugs, focado em Java. Ele procura padroes de erro como dereferencia de nulos, condicoes logicas invertidas e uso incorreto de APIs. A integracao com Maven e Gradle permite que a analise rode junto ao build, sem etapa manual.
Criterio: para projetos Java legados, o SpotBugs e uma alternativa leve que nao exige servidor central. A limitacao aparece na cobertura: ele nao analisa outras linguagens, entao times poliglotas precisam de outra ferramenta para o restante do codigo.
6. Pylint
O Pylint e o analisador estatico mais usado em Python, verificando erros, convencao de estilo e complexidade ciclomatica. Ele pontua o codigo de 0 a 10 e aponta onde o programa pode quebrar antes da execucao. A ferramenta e viavel tanto em linha de comando quanto integrada a editores como VS Code.
Criterio: o Pylint e util para manter padroes em projetos Python, especialmente quando ha varios desenvolvedores. O ponto negativo: a quantidade de mensagens pode soar ruidosa no inicio, exigindo configuracao para ignorar falso-positivos.
7. Bandit
O Bandit e uma ferramenta de seguranca para Python, feita para encontrar problemas comuns de exposicao, como uso inseguro de funcoes de criptografia ou execucao de comandos do sistema. Ele roda como um comando simples e gera relatorios em texto ou HTML. O foco e seguranca, nao estilo de codigo.
Criterio: o Bandit e a escolha quando o time quer um check de seguranca rapido em uma base Python sem montar uma estrutura complexa. Para cobertura ampla de qualidade, ele precisa ser combinado com o Pylint.
Como escolher a ferramenta certa
Nao existe uma ferramenta universal. Para um projeto JavaScript, comece com ESLint. Para um repositorio Java no GitHub, o CodeQL entrega mais profundidade. Ja um time Python que quer seguranca e qualidade pode combinar Bandit e Pylint. O criterio final nao e a quantidade de regras, mas o encaixe no fluxo atual: ferramenta que exige mudanca radical no processo tende a ser abandonada em poucas semanas.
FAQ
O que e analise estatica de codigo?
Analise estatica de codigo e uma verificacao do codigo-fonte sem executa-lo, buscando erros, vulnerabilidades e ma pratica. Ela ocorre durante o desenvolvimento, diferente da analise dinamica que testa o programa em execucao.
Qual a diferenca entre analise estatica e dinamica?
A analise estatica examina o codigo em si, sem rodar o programa. A dinamica executa o codigo com entradas controladas para observar comportamento. Ferramentas de SAST usam a abordagem estatica, enquanto testes de penetracao costumam usar a dinamica.
Analise estatica substitui o code review?
Nao. A analise estatica automatiza a busca por problemas conhecidos, mas nao entende contexto de negocio nem decisoes de arquitetura. O code review humano continua necessario para avaliar logica e design.
Ferramentas de analise estatica funcionam para qualquer linguagem?
Nao. Cada ferramenta tem cobertura propria. SonarQube cobre muitas linguagens, mas outras, como ESLint e Pylint, sao especificas. Verifique a lista de linguagens suportadas antes de adotar.
Analise estatica encontra todos os bugs?
Nao. Ela encontra padroes conhecidos, mas nao garante ausencia de erros. Bugs de logica complexa ou dependentes de estado podem passar. Por isso, combine com testes unitarios e revisao manual.
Qual ferramenta usar em um projeto pequeno?
Para projetos pequenos, ferramentas locais como ESLint ou Pylint entregam valor sem infraestrutura adicional. Elas rodam no editor ou no pre-commit, sem custo e com configuracao simples.