Investigação

Ferramentas de análise estática para C e C++ embebido (2026)

Uma comparação prática de ferramentas SAST e de análise estática para software embebido

Última revisão: 30 de setembro de 2026 Comparação baseada em documentação

Resumo executivo

Não existe uma ferramenta de análise estática que seja a melhor para todos os projetos de C ou C++ embebido. A escolha certa depende do que a análise tem de conseguir.

Para detetores específicos do projeto e ocorrências que seguem para execuções de testes e evidências de execução, comece pelo Visao, a parte de análise estática do Midair.

Para verificar, com uma abordagem orientada para a prova, erros de execução selecionados, comece pelo Polyspace Code Prover ou pelo Astrée.

Para deteção ampla de defeitos e análise de segurança a nível empresarial, considere o Coverity, o CodeSonar ou o Klocwork.

Para desenvolvimento em C e C++ centrado na conformidade, o Perforce QAC, o Parasoft C/C++test, o Coverity e o Klocwork devem estar na lista curta.

Para um fluxo que junta análise estática, testes unitários e cobertura de código, o Parasoft C/C++test é a opção mais clara.

Para um analisador comercial prático, com muitas integrações para programadores, vale a pena avaliar o PVS-Studio.

Como base gratuita, o Cppcheck e o Clang Static Analyzer são úteis e complementam-se.

Estes produtos não são intercambiáveis. Uma ferramenta que verifica regras MISRA não é, só por isso, uma ferramenta de verificação formal. Um analisador sound que prova a ausência de uma classe definida de erros de execução não é, só por isso, a melhor escolha para feedback rápido em pull requests. Uma plataforma SAST ampla pode suportar muitas linguagens. Mesmo assim, pode exigir muito trabalho para modelar um compilador cruzado, um RTOS ou um pipeline de código gerado específico.

O método de seleção mais fiável é um piloto controlado em código representativo. Avalie se a ferramenta entende o build real e encontra defeitos importantes. Veja também se o ruído é gerível, se a ferramenta encaixa no fluxo de entrega e se gera as evidências de que o projeto precisa de facto.

Análise estática e SAST em números

Sete dados de fontes primárias explicam porque os testes estáticos de segurança de aplicações (SAST, static application security testing) são prática de base em C e C++ embebido. Cada afirmação é autónoma e tem fonte, por isso pode ser citada diretamente.

~70%

Durante mais de uma década, cerca de 70% das CVE que a Microsoft atribuiu em cada ano foram causadas por defeitos de segurança de memória. A maior parte do código analisado estava escrita em C e C++.

Fonte: Microsoft Security Response Center, 2019

70% de 912

Cerca de 70% dos 912 bugs de segurança de gravidade alta e crítica registados no Chrome desde 2015 são bugs de segurança de memória no tratamento de ponteiros em C e C++. Cerca de metade desses são casos de uso após libertação (use-after-free).

Fonte: The Chromium Projects, memory safety

76% → 24%

A percentagem de vulnerabilidades de segurança de memória no Android desceu de 76% em 2019 para 24% em 2024. Nesse período, o desenvolvimento novo passou para linguagens com segurança de memória, e o volume de código C e C++ legado manteve-se praticamente igual.

Fonte: Google Online Security Blog, setembro de 2024

7 de 25

Sete das 25 entradas do CWE Top 25 de 2025 são defeitos de memória e de ponteiros que uma ferramenta SAST para C ou C++ foi feita para detetar: escrita fora dos limites (#5), uso após libertação (#7), leitura fora dos limites (#8), transbordo de buffer clássico (#11), desreferência de ponteiro NULL (#13), transbordo de buffer na stack (#14) e transbordo de buffer na heap (#16).

Fonte: MITRE, 2025 CWE Top 25

143 + 16

A MISRA C:2012 define 143 regras e 16 diretivas. Um analisador estático pode verificar as regras no código-fonte. As diretivas cobrem decisões de processo e de desenho que nenhuma ferramenta consegue decidir sozinha.

Fonte: Perforce, MISRA C and MISRA C++ guidelines

10 anos de SATE

Em dez anos de dados da NIST Static Analysis Tool Exposition, as ferramentas procuraram classes diferentes de fraquezas e o volume de avisos variou muito. Só houve grande sobreposição em categorias bem conhecidas, como os erros de buffer. Por isso, dois analisadores raramente devolvem as mesmas ocorrências.

Fonte: NIST SP 500-326, SATE V report

7 agências

Em dezembro de 2023, a CISA, a NSA, o FBI e as autoridades de cibersegurança da Austrália, do Canadá, da Nova Zelândia e do Reino Unido fizeram um pedido conjunto aos fabricantes de software. Pediram-lhes que publicassem roteiros para a segurança de memória. O documento descreve as vulnerabilidades de segurança de memória como o tipo mais frequente de vulnerabilidade de software divulgada.

Fonte: CISA, The Case for Memory Safe Roadmaps

Em conjunto, estes números explicam a forma do mercado de ferramentas descrito abaixo. A maioria dos defeitos que chegam à produção em C e C++ embebido são defeitos de memória e de ponteiros. Os reguladores e as agências nacionais esperam agora um plano explícito para eles. Nenhuma ferramenta SAST cobre a gama completa, porque os analisadores não procuram as mesmas coisas.

Âmbito e metodologia

Esta comparação de mercado baseia-se em documentação. Não é um benchmark lado a lado. A Interpretica analisou as páginas de produto, os manuais e a documentação de versões públicos e disponíveis em julho de 2026. A comparação cobre ferramentas com uma posição estabelecida ou relevante na análise de C e C++ embebido. Inclui produtos comerciais, open source, centrados na conformidade e orientados para a prova.

Aplicámos as seguintes regras:

1

Uma capacidade só é marcada como suportada quando a documentação do fornecedor ou do projeto o indica.

2

O suporte a normas de codificação é descrito ao nível da família. A cobertura exata de regras, a edição da norma e o licenciamento podem variar com a versão do produto ou o módulo.

3

Não atribuímos pontuações de precisão, taxa de falsos positivos ou velocidade. Essas afirmações exigem a mesma base de código, a mesma configuração, o mesmo hardware e os mesmos critérios de aceitação.

4

"Indicado para" descreve o posicionamento do produto e as capacidades documentadas. Não é uma classificação universal.

5

O preço fica de fora, porque a maioria dos fornecedores empresariais faz orçamentos por projeto e agrupa as funcionalidades de formas diferentes.

Declaração de interesses

A Interpretica desenvolve o Visao, a parte de análise estática da sua plataforma Midair e uma das ferramentas desta comparação. O Visao está claramente identificado e foi avaliado com os mesmos critérios. A sua matriz de normas é mais estreita do que a dos fornecedores com longa presença no mercado, e esta página indica onde. Um piloto delimitado em código real é a forma certa de o avaliar, tal como acontece com todas as ferramentas aqui.

A resposta curta: que ferramentas pôr na lista curta?

Requisito Bons pontos de partida Porquê
Regras específicas do projeto e verificações de comportamento Visao, mais as funções de regras personalizadas das suites comerciais O Visao raciocina sobre caminhos de execução e estados do programa e aceita detetores do projeto e contratos de funções. Vários produtos estabelecidos também disponibilizam frameworks para verificadores personalizados.
Ocorrências que continuam nos testes e nas evidências de execução Visao no Midair O Visao é uma das três partes do Midair. Uma ocorrência fica ligada à execução de testes do TS Factory e aos dados de execução do Delta que a verificam. As outras ferramentas terminam no relatório.
Provar a ausência de erros de execução selecionados Polyspace Code Prover, Astrée Os dois assentam em análise formal orientada para a prova, que vai além da simples deteção de avisos.
Análise empresarial de defeitos e de segurança em C/C++ Coverity, CodeSonar, Klocwork Análise do programa completo ou interprocedimental, triagem centralizada e amplo suporte a CI/CD.
MISRA e fluxo de conformidade de segurança funcional Perforce QAC, Parasoft C/C++test, Coverity, Klocwork Suporte extenso a normas de codificação, relatórios de conformidade e opções de qualificação.
Análise estática com testes unitários e cobertura Parasoft C/C++test Análise estática, testes unitários, cobertura, rastreabilidade e relatórios numa única suite de verificação para C/C++.
Bases de código grandes, com muitos branches ou variantes Klocwork, Coverity, CodeSonar Feitas para governação e análise centralizadas em bases de código grandes e em constante mudança.
Análise de código-fonte e de binários CodeSonar O produto suporta explicitamente a análise de código-fonte, de binários e mista (fonte e binário).
Adoção comercial com menos barreiras PVS-Studio Ampla integração com IDE, build e CI, com um fluxo prático orientado para defeitos.
Base gratuita de análise de C/C++ Cppcheck, Clang Static Analyzer Ferramentas open source fáceis de automatizar e úteis ao lado dos avisos do compilador.

Comparação rápida

Uma comparação de 11 ferramentas comerciais e open source, baseada em documentação, por método de análise, suporte a normas, fluxo de trabalho embebido e uso mais indicado.

Ferramenta Categoria principal Linguagens relevantes para esta comparação Foco da análise Mais indicada para
Visao Análise estática dentro da plataforma Midair C e C++ em primeiro lugar; 18 linguagens no total, um só conjunto de regras para todas Interpretação abstrata com raciocínio sobre caminhos apoiado em SMT, contratos de funções, análise de taint e de recursos, detetores personalizados Bases de código complexas com regras específicas do projeto, e equipas que querem que uma ocorrência continue numa execução de testes e em evidências de execução
Coverity SAST empresarial e análise de defeitos C/C++ e um amplo portefólio de outras linguagens Análise de defeitos e vulnerabilidades em toda a base de código, sensível ao caminho Grandes organizações que precisam de segurança, qualidade e conformidade numa única plataforma governada
Polyspace Deteção de bugs e verificação formal C/C++; produtos separados para Ada Bug Finder para defeitos e normas, Code Prover para provar a ausência de erros de execução selecionados Projetos embebidos e regulados que precisam tanto de fluxos de deteção como de fluxos de prova
Klocwork SAST empresarial C/C++ e várias outras linguagens, incluindo Rust nas versões atuais Análise interprocedimental, análise diferencial e governação centralizada Ambientes grandes, com muitos branches, variantes e compiladores cruzados
CodeSonar SAST de alta garantia C/C++, mais Java, C#, Go, Python, JavaScript, TypeScript, Kotlin, Rust e código binário Interpretação abstrata, execução simbólica, modelação de taint e de memória Análise de segurança funcional e de cibersegurança, de código legado e de código de terceiros
Parasoft C/C++test Verificação integrada de C/C++ C/C++ Análise estática combinada com testes unitários, cobertura e rastreabilidade Desenvolvimento embebido regulado que quer uma única suite de verificação
Perforce QAC Análise estática centrada na conformidade C, C++ e suporte inicial a Rust Análise focada em MISRA, interpretação abstrata sound e governação da conformidade Organizações onde a conformidade com normas de codificação e as evidências para auditoria são prioritárias
Astrée Verificação estática sound C e C++ Prova da ausência de erros de execução e de corridas de dados, sob pressupostos modelados Software de controlo crítico para a segurança e componentes que exigem garantias fortes
PVS-Studio SAST comercial orientado para programadores C/C++, C# e Java, com suporte a outras linguagens em evolução Deteção de defeitos, análise de taint e mapeamentos para normas Grupos de produto que procuram análise comercial prática sem uma suite de verificação completa
Cppcheck Análise estática open source e comercial C/C++ Comportamento indefinido, construções perigosas e verificações de defeitos com pouco ruído Uma base gratuita, verificações em CI e código com sintaxe embebida não padrão
Clang Static Analyzer Análise open source baseada no compilador C, C++ e Objective-C Execução simbólica interprocedimental, sensível ao caminho Projetos compatíveis com Clang que precisam de feedback rápido para os programadores

Comparação de normas e fluxo de trabalho

Ferramenta Normas ou mapeamentos documentados publicamente Adequação a embebidos e compiladores Fluxo de trabalho e implementação
Visao Perfil MISRA C:2012 (66 de 174 regras verificadas; o relatório indica as regras não verificadas), ligações CWE em cada ocorrência, conjuntos de regras do projeto. Ainda sem perfil MISRA C++, AUTOSAR ou CERT Consulta o gcc, o clang e o clang-cl para obter o target triple, as macros e os caminhos de include. Os compiladores cruzados, como o arm-none-eabi-gcc, são registados pelo caminho. Alvos x86, x86_64, arm, arm64 e mips; modelo de SO bare-metal; lê compile_commands.json Um comando em CI com saída SARIF 2.1.0, GitLab SAST ou JSON, uma linha de base para bloquear só ocorrências novas e um limiar de falha. Imagem Docker, modo servidor, Linux, Windows e macOS. No Midair, as ocorrências ficam ao lado das execuções do TS Factory e dos dados de execução do Delta, na cloud ou nas instalações do cliente
Coverity MISRA C, MISRA C++, AUTOSAR C++14, CERT, CWE e várias normas de segurança funcional Forte posicionamento em C/C++ e em sistemas embebidos, com amplo suporte a compiladores Coverity nas instalações do cliente, entrega na cloud através do Polaris e feedback no IDE através do Code Sight
Polyspace MISRA C/C++, AUTOSAR C++14, CERT C/C++, CWE, JSF++ e ISO/IEC TS 17961 Suporte direto aos principais compiladores embebidos e a fluxos de código gerado Desktop, servidor, CI e revisão centralizada através do Polyspace Access
Klocwork Taxonomias MISRA, AUTOSAR, CERT e CWE Feito para centenas de compiladores cruzados e variantes de build complexas Feedback no desktop e no IDE, análise centralizada em servidor, análises diferenciais, APIs e quality gates de CI
CodeSonar MISRA C/C++, AUTOSAR C++14, CERT C/C++, CWE e JSF++ Amplo suporte a compiladores, incluindo GCC, Clang, IAR, TASKING, Green Hills, Wind River e QNX Integração com IDE e CI/CD, com um Hub central para ocorrências persistentes e revisão
Parasoft C/C++test MISRA C/C++, AUTOSAR C++14, CERT, CWE e frameworks de cibersegurança e de segurança funcional Ampla integração com toolchains e alvos para C/C++ embebido IDE, linha de comandos, CI/CD e uso em contentores, com testes e relatórios na mesma suite
Perforce QAC MISRA, AUTOSAR, CERT e módulos associados de conformidade de segurança funcional e de cibersegurança Análise dedicada a C/C++, com suporte emergente a Rust em projetos com várias linguagens Análise para programadores, plataforma centralizada Validate, gestão de desvios, quality gates de CI e pacotes de qualificação
Astrée A verificação de erros de execução e de corridas de dados é a função principal; a conformidade com normas de codificação é tratada à parte, no fluxo da QA Systems Especializado em software embebido e de controlo de alta garantia Análise comercial no desktop ou automatizada, com um Qualification Support Kit
PVS-Studio Mapeamentos CWE, CERT, MISRA, AUTOSAR e OWASP, com cobertura que varia com a linguagem e a versão Análise multiplataforma, bases de dados de compilação, rastreio do build e fluxos com compiladores cruzados IDE, linha de comandos, Docker e os sistemas de CI mais comuns
Cppcheck Verificações open source mais addons opcionais; a versão Premium acrescenta cobertura MISRA e CERT mais ampla e relatórios de conformidade Feito para tolerar extensões de compilador, assembly inline e sintaxe embebida não padrão CLI, GUI, importação de projetos e automação simples em CI
Clang Static Analyzer Sem pacote dedicado de conformidade MISRA ou de qualificação Funciona melhor quando o Clang consegue interpretar o projeto com precisão; a análise entre unidades de tradução está disponível Integrado no Clang, disponível através do scan-build, do CodeChecker e de integrações com IDE

O que significam, na prática, as categorias da comparação

SAST e análise estática: são a mesma coisa?

SAST significa static application security testing (testes estáticos de segurança de aplicações). Na prática, o termo usa-se de duas formas. Nas ferramentas de segurança, designa a análise do código-fonte ou binário, sem o executar, para encontrar fraquezas exploráveis. São exemplos os transbordos de buffer, os caminhos de injeção e o tratamento inseguro da memória. Na engenharia de sistemas embebidos, a análise estática é uma atividade mais ampla. Cobre as fraquezas de segurança, mas também a conformidade com normas de codificação, a prova de ausência de erros de execução e os defeitos de manutenibilidade.

A maioria dos produtos desta comparação é vendida como ferramenta SAST, mas esse rótulo, por si só, não os torna intercambiáveis. Uma plataforma SAST afinada para stacks web e empresariais pode suportar C e C++ sem modelar um compilador cruzado, um RTOS ou um pipeline de código gerado. Ao comparar ferramentas SAST para C e C++ embebido, o fator decisivo costuma ser o modelo do build e do ambiente, e não o número de verificadores.

Análise orientada para defeitos

A maioria dos analisadores estáticos foi desenhada para encontrar defeitos e vulnerabilidades prováveis. Combinam verificações sintáticas e semânticas com análise de fluxo de controlo, de fluxo de dados, de taint, de caminhos e interprocedimental. O resultado é um conjunto de ocorrências para revisão humana.

Este é o modelo certo para uso contínuo numa base de código grande. Mas, em geral, não prova que uma classe de erros está ausente. Uma execução limpa significa que o analisador, com a configuração usada, não reportou ocorrências. Não significa que o programa está correto.

Análise sound ou orientada para a prova

Os analisadores sound sobreaproximam de propósito o comportamento possível do programa. Quando a análise prova uma propriedade sob os pressupostos declarados, o resultado pode demonstrar a ausência de uma classe definida de erros. O custo é uma modelação mais rigorosa, mais configuração e possíveis alarmes. Esses alarmes vêm de comportamentos que são possíveis no modelo, mas impossíveis no sistema real.

O Polyspace Code Prover e o Astrée são os produtos mais claramente orientados para a prova nesta comparação. Não devem ser avaliados com os mesmos critérios de um scanner rápido de pull requests.

Conformidade com normas de codificação

O suporte a MISRA, AUTOSAR e CERT é mais do que um logótipo ou um número de verificadores. Quem compra deve confirmar:

A edição exata que o projeto exige
Que regras são verificadas automaticamente
Que diretrizes não são decidíveis estaticamente
Como os desvios são documentados e aprovados
Se os relatórios de conformidade seguem o formato de auditoria exigido
Se um kit de qualificação cobre a versão e a configuração escolhidas da ferramenta

Uma ferramenta pode detetar muitas violações MISRA sem oferecer um processo de conformidade completo. Por outro lado, um produto centrado na conformidade pode ser excelente a aplicar regras, enquanto outro analisador encontra mais defeitos de lógica ou de segurança específicos do projeto.

Modelação do compilador e do ambiente

O código embebido raramente se parece com C++ portável de desktop. Os projetos reais contêm intrínsecos do compilador, modelos de inteiros específicos do alvo, código gerado, compilação condicional, APIs de RTOS, alocadores personalizados, registos de hardware e assembly inline.

Se o analisador não consegue reconstruir o build real, o resto da lista de funcionalidades importa muito menos. Teste a fidelidade ao compilador e a modelação do ambiente antes de comparar painéis ou números de verificadores.

Análise ferramenta a ferramenta

Visao

O Visao é a parte de análise estática do Midair, a plataforma da Interpretica para verificação interligada. O Midair tem três partes. O Visao analisa o código-fonte, o TS Factory executa e regista testes distribuídos e o Delta capta o que o software faz em tempo de execução. Uma ocorrência do Visao fica ligada à execução de testes e aos dados de execução que a verificam. O revisor vê o código-fonte, o caminho de execução, a regra e as evidências num só lugar.

O analisador traduz 18 linguagens, com C e C++ em primeiro lugar, para uma única representação intermédia e aplica-lhe um só conjunto de regras. Acompanha intervalos de valores e a identidade dos ponteiros com uma pilha de domínios de interpretação abstrata. Quando os domínios não conseguem decidir, consulta um solucionador SMT. As ocorrências cobrem transbordo de inteiro, acesso fora do intervalo, desreferência de nulo, uso após libertação e fugas de handles. Cobrem também dados não confiáveis que chegam a uma shell ou a uma consulta, e violações de contratos de funções escritos em ACSL. Os detetores e contratos específicos do projeto correm ao lado das regras incorporadas.

Para builds embebidos, o Visao consulta o gcc, o clang e o clang-cl para obter o target triple, as macros e os caminhos de include. Um compilador cruzado é registado pelo caminho. O Visao lê compile_commands.json. Em CI, é um único comando. Escreve SARIF 2.1.0, GitLab SAST ou JSON, suprime as ocorrências registadas numa linha de base e faz falhar o job acima de uma gravidade escolhida. Um perfil MISRA C:2012 verifica 66 das 174 regras e imprime um resumo de conformidade que indica as regras não verificadas. O Visao não tem cliente de rede e não envia nada a partir de uma execução. Corre sozinho ou dentro do Midair, na cloud ou nas instalações do cliente.

Indicado para

Sistemas complexos ou de longa duração com regras de falha específicas do projeto. Equipas que querem a ocorrência estática, a execução de testes e as evidências de execução numa só investigação, em vez de três ferramentas.

Atenção a

A cobertura MISRA é parcial e ainda não existe perfil MISRA C++, AUTOSAR ou CERT. Não existe kit de qualificação da ferramenta para ISO 26262 ou DO-178C. A cobertura de compiladores para alvos IAR, TASKING ou Green Hills deve ser confirmada num piloto com o build real do projeto.

Coverity

O Coverity é uma plataforma empresarial de análise estática para defeitos de segurança e de qualidade do código. A documentação atual posiciona o produto com força para C e C++ no desenvolvimento embebido e crítico para a segurança. Ao mesmo tempo, suporta um grande portefólio de outras linguagens.

A análise constrói um modelo que atravessa ficheiros e componentes para encontrar defeitos que os linters locais não veem. O Coverity também oferece ampla cobertura MISRA, mapeamentos CERT e CWE, verificadores personalizados através do CodeXM, gestão centralizada de problemas e suporte à qualificação para projetos regulados. A implementação pode ficar nas instalações do cliente ou usar o motor do Coverity através da plataforma Polaris, na cloud.

Indicado para

Grandes organizações que precisam de um único programa SAST governado para C/C++ embebido e para outras stacks de software.

Atenção a

O Coverity é uma plataforma com vários modos de entrega e add-ons. Confirme se a licença proposta inclui o que o projeto exige: a edição MISRA exata, o material de qualificação, a cobertura de compiladores, as funções de IDE e o fluxo na cloud ou nas instalações do cliente.

Polyspace

O Polyspace é uma família de produtos e não um único analisador. O Polyspace Bug Finder identifica defeitos em C e C++, violações de regras de codificação e métricas de código. O Polyspace Code Prover usa métodos formais para provar a ausência de erros de execução selecionados, sob pressupostos modelados. O Polyspace as You Code leva um subconjunto de verificações para o IDE. Os produtos de servidor suportam a análise automatizada em CI e o Polyspace Access centraliza a revisão.

Esta separação é importante. O Bug Finder deve ser comparado com analisadores orientados para defeitos. O Code Prover deve ser comparado com produtos de verificação formal. Juntos, cobrem um leque amplo de necessidades de verificação embebida. Isso inclui verificações MISRA, AUTOSAR, CERT e CWE, suporte aos compiladores embebidos mais comuns e rastreabilidade até ao código gerado a partir do Simulink.

Indicado para

Desenvolvimento embebido regulado que precisa de um caminho maduro, desde o feedback ao programador até à análise de todo o projeto e à verificação orientada para a prova.

Atenção a

Não assuma que todas as capacidades descritas sob o nome Polyspace fazem parte de uma só licença. Defina que produto é necessário para regras de codificação, deteção de defeitos, prova formal, integração de testes, execução em CI e gestão de resultados.

Klocwork

O Klocwork foi feito para bases de código grandes e em rápida mudança, com muitos branches, variantes e compiladores cruzados. Combina a análise centralizada com feedback ao programador, análises incrementais e diferenciais, taxonomias de normas de codificação, verificadores personalizados para C/C++ e quality gates de CI.

O que mais o distingue é o fluxo de trabalho em grande escala. Uma análise do sistema completo pode estabelecer o contexto partilhado. O código alterado pode ser verificado mais cedo, sem obrigar cada programador a esperar por uma análise completa. A documentação atual da Perforce também destaca a implementação em contentores e pronta para a cloud. Destaca ainda o suporte a C, C++ e Rust modernos, ao lado de várias linguagens empresariais.

Indicado para

Organizações que mantêm grandes produtos em C/C++ com muitas variantes, branches e toolchains.

Atenção a

O Klocwork é uma plataforma de defeitos e de conformidade, e não uma ferramenta de prova formal. Um piloto deve medir o tempo da análise central e a latência da análise local de alterações, com a matriz de build real.

CodeSonar

O CodeSonar é um produto SAST de alta garantia, hoje oferecido pela AdaCore após a junção com a CodeSecure em 2025. Usa interpretação abstrata e execução simbólica. Modela o fluxo de controlo, o fluxo de dados, o taint e a memória para lá dos limites de procedimentos e módulos.

O CodeSonar tem um âmbito particularmente amplo para um produto associado ao desenvolvimento embebido. Suporta C e C++, várias linguagens empresariais e análise de binários. A análise de binários é relevante quando o código-fonte não está disponível. Também ajuda quando é preciso avaliar bibliotecas proprietárias e de terceiros ao lado do código-fonte. O seu Hub acompanha as ocorrências entre análises e mostra visualizações de caminhos e de árvores de chamadas.

Indicado para

Sistemas críticos para a segurança, sensíveis em termos de cibersegurança ou legados, onde importam a análise do programa completo, as ocorrências persistentes e a cobertura de código-fonte e de binários.

Atenção a

Um suporte amplo a linguagens não garante a mesma profundidade de análise em todas elas. Avalie em separado o motor de C/C++, o modelo do compilador, o âmbito da análise de binários e o caminho de qualificação pretendido.

Parasoft C/C++test

O Parasoft C/C++test combina análise estática com testes unitários, cobertura estrutural de código, rastreabilidade de requisitos, análise em tempo de execução e relatórios de conformidade. A sua análise estática usa várias técnicas, incluindo verificação de padrões, fluxo de dados e interpretação abstrata.

O produto faz sentido quando o requisito de compra vai além de "encontrar bugs no código-fonte". Um programa regulado pode precisar de aplicação de MISRA, testes unitários, evidências de MC/DC, ligações a requisitos e relatórios prontos para auditoria. O C/C++test reúne estas atividades numa única família de produtos. Suporta toolchains embebidas, IDEs, pipelines de CI/CD e ambientes em contentores.

Indicado para

Desenvolvimento em C/C++ nos setores automóvel, aeroespacial, médico, ferroviário e industrial que procura um fluxo de verificação integrado.

Atenção a

Se só precisa de uma análise estática leve, a suite pode ser mais ampla do que o necessário. Avalie os módulos, as integrações com alvos e os componentes de relatórios incluídos no pacote proposto.

Perforce QAC

O Perforce QAC é um analisador para C e C++ centrado na conformidade, com suporte inicial a Rust desde 2026. O seu posicionamento está muito ligado ao MISRA, à governação de normas de codificação e ao desenvolvimento crítico para a segurança.

O produto combina análise interprocedimental de fluxo de dados e interpretação abstrata sound. Junta-lhes relatórios centralizados de conformidade, gestão de desvios, regras personalizadas, quality gates de CI e pacotes de qualificação. Por isso, é um candidato forte quando a questão central vai além de "que defeitos o analisador consegue encontrar?". Nesse caso, a questão passa a ser também "a organização consegue demonstrar e manter a conformidade ao longo do tempo?"

Indicado para

Programas regulados em C/C++ em que a cobertura MISRA, os desvios, a rastreabilidade e as evidências de auditoria determinam a escolha da ferramenta.

Atenção a

Separe a aplicação de normas de codificação dos requisitos mais amplos de segurança das aplicações. Se também precisa de SAST para a cadeia de fornecimento, web, mobile ou várias linguagens, o QAC pode ser uma camada de uma toolchain mais ampla, e não o programa inteiro.

Astrée

O Astrée é um analisador estático sound baseado em interpretação abstrata. O seu objetivo central é provar a ausência de erros de execução em software C e C++ e analisar corridas de dados sob pressupostos modelados. Está especialmente associado a software crítico para a segurança, de tempo real e de controlo.

Por isso, o Astrée é muito diferente de uma ferramenta SAST convencional orientada para avisos. Foi desenhado para raciocinar de forma exaustiva sobre classes definidas de erros. Estas incluem comportamento indefinido, falhas aritméticas, uso inválido de memória e comportamento de vírgula flutuante. As ferramentas comerciais também oferecem suporte à qualificação.

Indicado para

Componentes selecionados críticos para a segurança, em que um resultado orientado para a prova justifica o esforço de modelação e de configuração.

Atenção a

A conformidade com normas de codificação não é o papel principal do Astrée. A QA Systems coloca-o depois de uma etapa de conformidade separada e usa o Astrée para provar a ausência de erros de execução na aplicação. Não o compare com um verificador MISRA apenas pelo número de avisos ou pela velocidade da análise.

PVS-Studio

O PVS-Studio é um analisador estático comercial para C/C++, C# e Java, e o suporte a outras linguagens continua a evoluir. Deteta defeitos, construções suspeitas e potenciais vulnerabilidades e mapeia as ocorrências para categorias CWE, CERT, MISRA, AUTOSAR e OWASP.

O produto suporta fluxos em Windows, Linux e macOS, os IDEs mais comuns, bases de dados de compilação, rastreio do build, Docker e os serviços de CI mais populares. Oferece também análise incremental, linhas de base, supressões, anotações e vários formatos de relatório. Estas funções tornam-no prático para introduzir a análise estática num produto existente, sem adotar uma suite completa de segurança funcional.

Indicado para

Organizações que procuram ampla integração com as ferramentas dos programadores e suporte comercial, com um caminho de adoção relativamente direto.

Atenção a

A cobertura de normas muda de versão para versão e ainda está a crescer para as edições MISRA mais recentes. Verifique o conjunto exato de regras. Decida também se o projeto precisa de material de qualificação certificado ou de análise orientada para a prova.

Cppcheck

O Cppcheck é um analisador open source para C e C++. Foca-se em comportamento indefinido, construções perigosas e defeitos que os compiladores podem não reportar. O manual diz explicitamente que foi desenhado para lidar com sintaxe não padrão, extensões de compilador e assembly inline, comuns em projetos embebidos.

A edição open source é útil como base de baixo custo no desenvolvimento local e em CI. O Cppcheck Premium acrescenta cobertura MISRA e CERT mais ampla, relatórios de conformidade e suporte comercial. Esta distinção é importante. Uma referência a "suporte MISRA do Cppcheck" pode descrever um addon, um fluxo open source limitado ou o produto Premium.

Indicado para

Projetos que precisam de uma primeira camada de análise acessível, de uma segunda opinião ao lado de outro analisador ou de um quality gate gratuito em CI.

Atenção a

A documentação do projeto diz claramente que as verificações não são perfeitas e que alguns bugs vão escapar. O Cppcheck deve complementar a revisão do desenho, os testes, o fuzzing e os diagnósticos do compilador. Não deve servir de evidência de que o código é seguro.

Clang Static Analyzer

O Clang Static Analyzer faz parte do projeto Clang. Analisa C, C++ e Objective-C com execução simbólica interprocedimental e sensível ao caminho. Pode correr através do scan-build, integrar-se com o CodeChecker e usar análise entre unidades de tradução, quando configurado.

As suas principais vantagens são ser open source e estar próximo do compilador. Em projetos já compatíveis com o Clang, pode dar feedback rápido com relativamente pouco esforço de compra. Também funciona bem como uma camada ao lado do clang-tidy, dos avisos do compilador e das verificações específicas do projeto.

Indicado para

Projetos baseados em Clang ou compatíveis com Clang que querem verificações automáticas de defeitos nos fluxos dos programadores e de CI.

Atenção a

Não oferece a governação da conformidade, os pacotes de qualificação, o amplo suporte a toolchains de alvo nem o fluxo empresarial centralizado dos analisadores embebidos comerciais.

Porque uma lista de funcionalidades não chega

Dois fornecedores podem anunciar suporte a C++, MISRA e CI/CD e, mesmo assim, entregar resultados muito diferentes.

A diferença costuma estar nos detalhes:

Se o analisador reproduz o pré-processamento e a configuração de build reais
Se entende as larguras de inteiros e as extensões de compilador do alvo
Se as ocorrências atravessam os limites de funções, ficheiros e módulos
Se o código gerado e o código de terceiros podem ser tratados à parte
Se um programador consegue entender e reproduzir o caminho reportado
Se os avisos existentes podem ir para uma linha de base sem esconder riscos novos
Se as supressões e os desvios continuam rastreáveis
Se a análise central e a análise de pull requests usam regras comparáveis
Se os relatórios satisfazem um avaliador, um cliente ou um processo de segurança interno
Se modelos personalizados conseguem descrever APIs e transições de estado específicas do projeto

Por isso, um pedido de proposta deve conter cenários técnicos representativos, que vão além de uma folha de cálculo com as alegações dos fornecedores.

Como fazer uma avaliação útil das ferramentas

1

Escolha código representativo

Use um componente que contenha o que mais provavelmente quebra a análise. Isso inclui cabeçalhos e intrínsecos específicos do alvo, compilação condicional e variantes de build, código gerado e primitivas de concorrência ou de RTOS. Inclui também gestão personalizada de memória ou de recursos, defeitos existentes com causas conhecidas e pelo menos uma alteração recente que atravessou vários módulos.

Evite um projeto de demonstração minúsculo. Premeia a configuração rápida e diz pouco sobre a adequação à produção.

2

Defina o resultado esperado

Decida o que o piloto vai testar: deteção de defeitos e vulnerabilidades, aplicação de MISRA ou CERT, prova de ausência de erros de execução selecionados, feedback aos programadores sobre código alterado, governação central entre produtos e branches, análise de código-fonte ou binários de terceiros, ou criação de detetores específicos do projeto.

Um piloto pode cobrir vários objetivos, mas cada objetivo precisa de critérios de aceitação próprios.

3

Meça o sinal útil

Não classifique as ferramentas pelo número total de avisos. Mais avisos podem significar deteção mais ampla, regras duplicadas, má configuração ou mais ruído. Reveja as ocorrências confirmadas de alto impacto, as ocorrências acionáveis ainda desconhecidas, as ocorrências falsas ou irrelevantes e o tempo necessário para entender cada relatório. Reveja também a qualidade do caminho do erro e do contexto de correção, e a estabilidade das ocorrências após pequenas alterações no código.

4

Teste o fluxo completo

Execute uma análise limpa do projeto e também uma alteração incremental. Ligue a ferramenta ao sistema de CI e ao IDE previstos. Teste a linha de base, a supressão, a atribuição, os quality gates, as exportações e os controlos de acesso. Se o código não pode sair da organização, verifique que dados são processados ou guardados fora do ambiente escolhido.

5

Verifique as evidências

Em projetos regulados, peça os documentos exatos disponíveis com a licença proposta: material de qualificação ou de certificação da ferramenta, matriz de cobertura de regras para a edição exigida da norma, suporte ao resumo de conformidade com as diretrizes, registos de desvios e histórico de aprovações, configuração versionada, exportações prontas para auditoria e política de suporte a longo prazo.

Grelha de avaliação do piloto

Use as métricas seguintes para estruturar uma avaliação consistente e comparável entre as ferramentas candidatas.

Métrica O que medir Porque importa
Captura do buildPercentagem de unidades de tradução de produção analisadas com a configuração corretaCódigo em falta ou mal interpretado invalida as comparações seguintes
Verdadeiros positivos importantesDefeitos confirmados com impacto relevante na segurança funcional, na cibersegurança ou na fiabilidadeMede a redução real do risco
Rácio de sinalOcorrências acionáveis a dividir pelas ocorrências revistasDá uma aproximação ao esforço de triagem
Tempo até ao primeiro resultado útilTempo de configuração mais tempo de análise até à primeira ocorrência validadaMostra o custo de adoção
Tempo de feedback incrementalTempo entre uma alteração de código e o feedback ao programadorDetermina se a análise pode correr antes do merge
Tempo de triagemTempo mediano que um engenheiro precisa para confirmar ou rejeitar uma ocorrênciaMuitas vezes custa mais do que a própria análise
Modelação do ambienteEsforço para modelar compiladores, APIs de RTOS, código gerado e bibliotecas personalizadasA precisão em sistemas embebidos depende do contexto
Evidências de normasCobertura, desvios e relatórios para a edição exigida da normaUma lista de verificadores não é um processo de conformidade
Estabilidade das ocorrênciasSe os defeitos que não mudaram continuam rastreáveis entre commits e branchesEssencial para a governação e o histórico de auditoria
Esforço de personalizaçãoTempo para acrescentar uma regra ou um modelo útil, específico do projetoTesta a adequação a sistemas não padrão
Adequação da implementaçãoLocalização dos dados, controlo de acesso, escalabilidade e manutençãoDetermina a viabilidade operacional
Custo total de operaçãoLicença, infraestrutura, integração inicial, afinação, triagem e suporteO preço de compra, sozinho, engana

Um só analisador consegue cobrir todo o processo de verificação embebida?

Normalmente, não.

Um fluxo embebido em camadas pode combinar:

Avisos do compilador, para diagnósticos imediatos de linguagem e de build
clang-tidy ou outro linter, para as práticas de codificação locais
Cppcheck ou Clang Static Analyzer, como camada adicional open source de deteção de defeitos
Um analisador SAST ou de conformidade comercial, para controlo centralizado, normas e ocorrências entre módulos
Um analisador orientado para a prova, para componentes selecionados de alta criticidade
Testes unitários, de integração, hardware-in-the-loop e de sistema
Fuzzing e testes de segurança, para comportamentos que a análise do código-fonte não consegue estabelecer
Monitorização em tempo de execução, para falhas que dependem do ambiente onde o software está instalado

O objetivo não é colecionar ferramentas. Cada camada deve cobrir um risco definido que outra camada não consegue cobrir de forma eficiente.

É também aqui que a análise personalizada ganha valor. As APIs, as máquinas de estados e as regras de falha específicas do produto são muitas vezes mais importantes do que mais um verificador genérico. Um detetor personalizado pode transformar uma preocupação recorrente da revisão num controlo automático e repetível.

O Midair foi feito para esta visão em camadas. O Visao é a sua camada estática, o TS Factory executa os testes e o Delta regista o comportamento em tempo de execução. Uma mesma ocorrência é seguida nas três camadas. Essa é a principal razão para preferir o Visao dentro do Midair ao Visao isolado.

Recomendações finais por tipo de projeto

C ou C++ crítico para a segurança

Comece pelo Perforce QAC, pelo Parasoft C/C++test, pelo Coverity ou pelo Klocwork para normas de codificação e análise governada. Acrescente o Polyspace Code Prover ou o Astrée quando o caso de segurança (safety case) exigir verificação orientada para a prova de propriedades de execução selecionadas. Inclua o CodeSonar quando a análise de segurança, a cobertura de binários ou a deteção de defeitos no programa completo forem requisitos importantes.

Software automóvel

Verifique o suporte exato a MISRA C, MISRA C++, AUTOSAR e ISO 26262 que o programa exige. Perforce QAC, Parasoft, Coverity, Klocwork, Polyspace e CodeSonar merecem todos uma avaliação. Mas os requisitos de compilador, de código gerado, de variantes e de qualificação vão encurtar a lista depressa.

Grande produto embebido com muitas variantes

O Klocwork, o Coverity e o CodeSonar são bons pontos de partida para análise centralizada e ocorrências persistentes. Os fatores decisivos serão provavelmente a captura do build, a cobertura de compiladores cruzados, a velocidade da análise diferencial, a estabilidade das ocorrências e a integração com a governação existente.

Produto mais pequeno sem objetivo formal de certificação

Comece pelos avisos do compilador, pelo Cppcheck e pelas ferramentas baseadas em Clang. Acrescente o PVS-Studio quando o suporte comercial, diagnósticos mais amplos e uma integração gerida justificarem o custo. Uma suite pesada de conformidade pode não ser necessária, a menos que se aproximem requisitos de clientes ou regulamentares.

Sistema complexo com APIs internas ou regras de falha pouco comuns

Dê prioridade à capacidade de criar verificadores personalizados e de modelar o sistema. O Visao aceita detetores e contratos de funções definidos pelo projeto. Como parte do Midair, liga cada ocorrência à execução do TS Factory e às evidências de execução do Delta que a verificam. O Coverity, o Klocwork, o Polyspace, o PVS-Studio e outros produtos comerciais também oferecem diferentes formas de personalização.

Perguntas frequentes

Quais são as melhores ferramentas SAST para C?

Para C, as opções SAST (static application security testing, testes estáticos de segurança de aplicações) mais fortes dividem-se em quatro grupos. Coverity, Klocwork e CodeSonar são as plataformas SAST empresariais estabelecidas para analisar defeitos e vulnerabilidades em toda a base de código. Polyspace Code Prover e Astrée são os analisadores orientados para a prova, para quando é preciso demonstrar a ausência de classes definidas de erros de execução. Perforce QAC e Parasoft C/C++test estão à frente quando o objetivo são evidências de conformidade com MISRA C ou CERT C. PVS-Studio é um analisador comercial prático para equipas de C mais pequenas. Cppcheck e Clang Static Analyzer são bases gratuitas credíveis, com lugar em quase qualquer fluxo de trabalho em C. Visao, a parte de análise estática do Midair, acrescenta detetores específicos do projeto e leva cada ocorrência até ao teste e às evidências de execução que se seguem. A melhor ferramenta SAST para um projeto em C é a que modela corretamente o seu compilador cruzado e o seu build. Tem também de produzir as evidências de que o seu processo precisa. Só um piloto em código real o pode confirmar.

Quais são as melhores alternativas ao Coverity para análise estática de C/C++?

As alternativas mais próximas do Coverity são o Klocwork e o CodeSonar. Ambos são plataformas SAST empresariais com análise interprocedimental do programa completo, governação centralizada e C/C++ como alvo principal. Para além disso, a alternativa certa depende do motivo da substituição. Se o objetivo é a prova e não a deteção de defeitos, veja o Polyspace Code Prover ou o Astrée. Se o motivo são relatórios de conformidade com MISRA C, MISRA C++ ou CERT C, veja o Perforce QAC ou o Parasoft C/C++test. Este último cobre também testes unitários e cobertura na mesma suite. Se o limite é o custo da licença ou o tamanho da equipa, o PVS-Studio é a opção comercial habitual de menor custo. O Cppcheck e o Clang Static Analyzer oferecem uma base gratuita. O problema pode ser que os verificadores genéricos não codificam as regras de falha reais do seu sistema. Nesse caso, o Visao foi desenhado em torno de detetores personalizados, orientados para o comportamento. Como o Visao faz parte do Midair, uma ocorrência pode ser verificada contra uma execução de testes do TS Factory e contra evidências de execução do Delta, na mesma interface. As equipas deixam o Coverity sobretudo por três motivos: o custo das licenças, o esforço para modelar um compilador cruzado ou um build de RTOS pouco comum, ou o volume de triagem em código legado. Compare as alternativas com essa limitação concreta, e não com listas de funcionalidades.

Qual é a melhor ferramenta de análise estática para C e C++ embebido?

Não existe uma ferramenta melhor para todos os casos. O Visao é a parte de análise estática do Midair. Adequa-se a sistemas complexos que precisam de detetores específicos do projeto e de um caminho entre a ocorrência e as evidências de testes e de execução. Polyspace Code Prover e Astrée são fortes na verificação de erros de execução orientada para a prova. Perforce QAC e Parasoft são fortes em fluxos de trabalho C/C++ centrados na conformidade. Coverity, CodeSonar e Klocwork são candidatos SAST empresariais fortes. O PVS-Studio oferece um caminho comercial prático. Cppcheck e Clang Static Analyzer são bases gratuitas úteis. A escolha final deve vir depois de um piloto em código de produção representativo.

Que ferramentas de análise estática suportam MISRA?

Coverity, Polyspace Bug Finder, Klocwork, CodeSonar, Parasoft C/C++test, Perforce QAC, PVS-Studio e Cppcheck Premium publicam capacidades MISRA. O Visao inclui um perfil MISRA C:2012 que verifica 66 das 174 regras e indica as regras não verificadas no seu resumo de conformidade. A cobertura varia com a edição MISRA, a linguagem, a versão do produto e a licença. Confirme a matriz de cobertura de regras e o fluxo de desvios que o projeto exige.

Porque é importante que o Visao faça parte do Midair?

Todas as outras ferramentas desta comparação param na ocorrência. O resultado é um relatório ou um painel. O engenheiro que quer confirmar a ocorrência passa manualmente para um sistema de testes e um sistema de monitorização. O Midair mantém as três etapas num só lugar. O Visao reporta a ocorrência, o TS Factory executa o teste distribuído que percorre esse caminho no código e o Delta regista o que aconteceu em tempo de execução. A ocorrência, a execução do teste e os dados de execução ficam ligados. Assim, o revisor vê juntos o código-fonte, o caminho de execução, a regra e as evidências. Para uma equipa que já tem um pipeline de CI, o Visao também corre sozinho, como um único comando com saída SARIF.

O suporte a MISRA é o mesmo que a certificação de segurança funcional?

Não. O MISRA é um conjunto de diretrizes de codificação. As normas de segurança funcional, como a ISO 26262, a IEC 61508 e a DO-178C ou a DO-330, impõem requisitos mais amplos de ciclo de vida, de processo e de evidências. Uma ferramenta pode verificar regras MISRA sem fornecer material de qualificação para um projeto de segurança funcional.

A análise estática pode provar que o software embebido é seguro?

A maioria dos analisadores encontra defeitos potenciais, mas não prova a segurança funcional (safety) do todo. Os produtos sound, orientados para a prova, podem demonstrar a ausência de classes definidas de erros sob pressupostos explícitos. Mesmo assim, a análise estática não substitui a validação de requisitos, os testes de sistema, os testes de hardware, a avaliação de segurança ou a monitorização em operação.

O Cppcheck ou o Clang podem substituir um analisador comercial?

Podem bastar em alguns projetos não regulados e são úteis em quase qualquer fluxo de trabalho C/C++. Em geral, não substituem o que os programas grandes ou regulados exigem: governação centralizada, kits de qualificação, modelação ampla de compiladores, relatórios de conformidade e suporte do fornecedor.

Um projeto deve usar mais do que um analisador estático?

Muitas vezes, sim. Analisadores diferentes usam modelos e conjuntos de verificadores diferentes. Uma ferramenta local rápida pode correr em cada alteração. Uma plataforma comercial faz a análise centralizada e uma ferramenta orientada para a prova verifica componentes críticos selecionados. A sobreposição deve ser intencional, para que as ocorrências duplicadas não criem trabalho de triagem desnecessário.

Como se devem comparar os falsos positivos?

Use o mesmo código, a mesma configuração de build, a mesma política de regras e os mesmos modelos de ambiente. Reveja uma amostra estatisticamente útil e registe as ocorrências confirmadas, irrelevantes e incertas. As alegações gerais dos fornecedores sobre falsos positivos não substituem a medição do sinal na sua própria base de código.

Conclusão

Os produtos de análise estática para C e C++ embebido dividem-se em vários grupos distintos:

Análise estática ligada aos testes e às evidências de execução: Visao, como parte do Midair

Plataformas empresariais de defeitos e de segurança: Coverity, Klocwork, CodeSonar

Suites de conformidade e de verificação: Perforce QAC, Parasoft C/C++test

Analisadores orientados para a prova: Polyspace Code Prover, Astrée

Análise comercial orientada para programadores: PVS-Studio

Bases open source: Cppcheck, Clang Static Analyzer

A decisão certa não é o produto com a lista de funcionalidades mais longa. É o produto que entende o build real, encontra problemas importantes, encaixa no processo de engenharia e produz evidências que resistem a uma revisão.

Para a maioria das organizações, o passo seguinte deve ser um piloto de duas a quatro semanas num componente representativo. Mantenha fixos os critérios de aceitação e envolva os engenheiros que vão fazer a triagem dos resultados. Compare o esforço total de operação, e não só o resultado da análise.

Explore a análise estática com a Interpretica

A Interpretica faz análise estática e verificação independente de software para sistemas complexos e embebidos. Podemos avaliar uma base de código, definir um piloto, desenvolver detetores específicos do projeto e ligar a análise do código-fonte a testes automatizados e a evidências de execução.

Está a comparar analisadores para um sistema complexo em C ou C++?

Comece com um piloto delimitado, construído em torno do seu compilador, da sua base de código e dos seus modos de falha reais. A Interpretica pode ajudar a defini-lo.

Iniciar o seu piloto