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: 17 de outubro de 2026 Comparação baseada em documentação Por Maxim Menshikov

Desenvolvemos uma destas ferramentas

A Interpretica desenvolve o Visao, o analisador estático da plataforma Midair. O Visao aparece no fim de cada tabela e dos perfis, identificado como nosso. Aplicamos os mesmos critérios a todas as ferramentas. A sua cobertura de normas é menor do que a dos fornecedores estabelecidos, e indicamos essas limitações.

Nenhum analisador estático é a melhor escolha para todos os projetos de C ou C++ embebido. A escolha depende do objetivo: encontrar defeitos, provar a ausência de erros de execução ou demonstrar conformidade. O MISRA (Motor Industry Software Reliability Association) publica diretrizes de codificação usadas neste último caso.

Esta página compara 11 ferramentas a partir da documentação dos produtos. Comece pela lista curta abaixo se só precisa de candidatas. Leia os perfis e o guia do piloto antes de comprar.

Que ferramentas escolher para avaliar

O seu requisito principal

Provar a ausência de erros de execução selecionados

Comece por

Polyspace Code Prover, Astrée

Porquê

Ambos são analisadores sound, que abrangem todos os comportamentos possíveis segundo o modelo. Procuram provar que determinada classe de erros de execução não ocorre.

Análise empresarial de defeitos e de segurança em C/C++

Comece por

Coverity, CodeSonar, Klocwork

Porquê

Análise do programa completo ou interprocedimental, triagem centralizada e suporte a integração e entrega contínuas (CI/CD).

MISRA e fluxo de conformidade de segurança funcional

Comece por

Perforce QAC, Parasoft C/C++test, Coverity, Klocwork

Porquê

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

Comece por

Parasoft C/C++test

Porquê

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

Comece por

Klocwork, Coverity, CodeSonar

Porquê

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

Comece por

CodeSonar

Porquê

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

Comece por

PVS-Studio

Porquê

Ampla integração com IDE, build e CI, com um fluxo prático orientado para defeitos.

Base gratuita de análise de C/C++

Comece por

Cppcheck, Clang Static Analyzer

Porquê

Ferramentas open source fáceis de automatizar e úteis ao lado dos avisos do compilador.

Regras específicas do projeto e verificações de comportamento

Comece por

Visao (nosso) e as funções de regras personalizadas das suites comerciais

Porquê

O Visao aceita detetores do projeto e contratos de funções. O Coverity, o Klocwork e outros produtos também permitem criar verificadores personalizados.

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

Sete números de fontes primárias mostram a importância da segurança de memória em C e C++. Explicam também por que uma só ferramenta SAST (static application security testing, testes estáticos de segurança de aplicações) raramente chega.

  1. ~70%

    Durante mais de uma década, cerca de 70% das CVE atribuídas anualmente pela Microsoft foram defeitos de segurança de memória. A maior parte desse código era C e C++.

    Fonte: Microsoft Security Response Center, 2019

  2. 70% de 912

    Uma amostra reuniu 912 falhas de segurança do Chrome, de gravidade alta e crítica, desde 2015. Cerca de 70% eram falhas de segurança de memória em C e C++. Cerca de metade destas eram casos de uso após libertação.

    Fonte: The Chromium Projects, memory safety

  3. 76% → 24%

    As falhas de segurança de memória passaram de 76% das vulnerabilidades do Android em 2019 para 24% em 2024. O valor de 2024 é uma projeção para o ano completo. O código novo passou para linguagens com segurança de memória; o C e C++ existente manteve-se.

    Fonte: Google Online Security Blog, setembro de 2024

  4. 7 de 25

    Sete entradas do CWE Top 25 de 2025 são defeitos de memória e de ponteiros. As ferramentas SAST para C e C++ procuram estas sete classes. Incluem escrita fora dos limites (#5), uso após libertação (#7), leitura fora dos limites (#8) e desreferência de ponteiro NULL (#13). As outras três são transbordos de buffer: clássico (#11), na stack (#14) e na heap (#16).

    Fonte: MITRE, 2025 CWE Top 25

  5. 143 + 16

    A primeira edição de MISRA C:2012 tem 143 regras e 16 diretivas. As emendas 1 e 2 elevam esse total para 158 regras e 17 diretivas. As ferramentas verificam regras e algumas diretivas, total ou parcialmente. As restantes exigem revisão manual.

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

  6. 10 anos de SATE

    Em dez anos de dados da NIST Static Analysis Tool Exposition, as ferramentas procuraram fraquezas diferentes e os volumes de avisos variaram muito. A sobreposição foi grande sobretudo em classes conhecidas, como erros de buffer.

    Fonte: NIST SP 500-326, SATE V report

  7. 7 agências

    Em dezembro de 2023, a CISA, a NSA e o FBI pediram aos fabricantes planos para a segurança de memória. Assinaram também agências da Austrália, Canadá, Nova Zelândia e Reino Unido. Descreveram estas falhas como o tipo mais frequente de vulnerabilidade divulgada.

    Fonte: CISA, The Case for Memory Safe Roadmaps

Os dados da Microsoft, Chrome e Android mostram a importância da segurança de memória em grandes bases de código C e C++. As agências esperam agora um plano para esse problema. Os dados do NIST mostram que os analisadores procuram problemas diferentes. Nenhum destes números mede a eficácia de um analisador.

Âmbito e metodologia

Comparámos as ferramentas a partir da sua documentação. Não as testámos lado a lado. Lemos páginas públicas dos produtos, manuais e notas de versões de julho de 2026. Voltámos a consultá-los em outubro de 2026. Incluímos ferramentas comerciais, open source, de conformidade e de prova usadas em C e C++ embebido.

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. Essa comparação exige o mesmo código, configuração, hardware e 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.

Comparação rápida

Comparação de 11 ferramentas comerciais e open source a partir da documentação. Cobre métodos de análise, normas, fluxo de trabalho embebido e uso indicado.

FerramentaCategoria principalLinguagens relevantes para esta comparaçãoFoco da análiseMais indicada para
CoveritySAST empresarial e análise de defeitosC/C++ e um amplo portefólio de outras linguagensAnálise de defeitos e vulnerabilidades em toda a base de código, sensível ao caminhoGrandes organizações que precisam de segurança, qualidade e conformidade numa única plataforma governada
PolyspaceDeteção de bugs e verificação formalC/C++; produtos separados para AdaBug Finder para defeitos e normas, Code Prover para provar a ausência de erros de execução selecionadosProjetos embebidos e regulados que precisam tanto de fluxos de deteção como de fluxos de prova
KlocworkSAST empresarialC/C++ e várias outras linguagens, incluindo Rust nas versões atuaisAnálise interprocedimental, análise diferencial e governação centralizadaAmbientes grandes, com muitos branches, variantes e compiladores cruzados
CodeSonarSAST de alta garantiaC/C++, mais Java, C#, Go, Python, JavaScript, TypeScript, Kotlin, Rust e código binárioInterpretação abstrata, execução simbólica, modelação de taint e de memóriaAnálise de segurança funcional e de cibersegurança, de código legado e de código de terceiros
Parasoft C/C++testVerificação integrada de C/C++C/C++Análise estática combinada com testes unitários, cobertura e rastreabilidadeDesenvolvimento embebido regulado que quer uma única suite de verificação
Perforce QACAnálise estática centrada na conformidadeC, C++ e suporte inicial a RustAnálise focada em MISRA, interpretação abstrata sound e governação da conformidadeOrganizações onde a conformidade com normas de codificação e as evidências para auditoria são prioritárias
AstréeVerificação estática soundC e C++Prova da ausência de erros de execução e de corridas de dados, sob pressupostos modeladosSoftware de controlo crítico para a segurança e componentes que exigem garantias fortes
PVS-StudioSAST comercial orientado para programadoresC/C++, C# e Java, com suporte a outras linguagens em evoluçãoDeteção de defeitos, análise de taint e mapeamentos para normasGrupos de produto que procuram análise comercial prática sem uma suite de verificação completa
CppcheckAnálise estática open source e comercialC/C++Comportamento indefinido, construções perigosas e verificações de defeitos com pouco ruídoUma base gratuita, verificações em CI e código com sintaxe embebida não padrão
Clang Static AnalyzerAnálise open source baseada no compiladorC, C++ e Objective-CExecução simbólica interprocedimental, sensível ao caminhoProjetos compatíveis com Clang que precisam de feedback rápido para os programadores
Visao (nosso)Análise estática na plataforma MidairC e C++ primeiro; 19 linguagens com um conjunto de regras comumInterpretação abstrata com raciocínio sobre caminhos apoiado em SMT, contratos de funções, análise de taint e de recursos, detetores personalizadosBases de código complexas com regras específicas do projeto

Comparação de normas e fluxo de trabalho

FerramentaNormas ou mapeamentos documentados publicamenteAdequação a embebidos e compiladoresFluxo de trabalho e implementação
CoverityMISRA C, MISRA C++, AUTOSAR C++14, CERT, CWE e várias normas de segurança funcionalForte posicionamento em C/C++ e em sistemas embebidos, com amplo suporte a compiladoresCoverity nas instalações do cliente, entrega na cloud através do Polaris e feedback no IDE através do Code Sight
PolyspaceMISRA C/C++, AUTOSAR C++14, CERT C/C++, CWE, JSF++ e ISO/IEC TS 17961Suporte direto aos principais compiladores embebidos e a fluxos de código geradoDesktop, servidor, CI e revisão centralizada através do Polyspace Access
KlocworkTaxonomias MISRA, AUTOSAR, CERT e CWEFeito para centenas de compiladores cruzados e variantes de build complexasFeedback no desktop e no IDE, análise centralizada em servidor, análises diferenciais, APIs e quality gates de CI
CodeSonarMISRA 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 QNXIntegração com IDE e CI/CD, com um Hub central para ocorrências persistentes e revisão
Parasoft C/C++testMISRA C/C++, AUTOSAR C++14, CERT, CWE e frameworks de cibersegurança e de segurança funcionalAmpla integração com toolchains e alvos para C/C++ embebidoIDE, linha de comandos, CI/CD e uso em contentores, com testes e relatórios na mesma suite
Perforce QACMISRA, AUTOSAR, CERT e módulos associados de conformidade de segurança funcional e de cibersegurançaAnálise dedicada a C/C++, com suporte emergente a Rust em projetos com várias linguagensAnálise para programadores, plataforma centralizada Validate, gestão de desvios, quality gates de CI e pacotes de qualificação
AstréeA prova de ausência de erros de execução e de corridas de dados é a função principal. O RuleChecker incluído verifica regras MISRA, AUTOSAR C++14, CERT e CWEEspecializado em software embebido e de controlo de alta garantiaAnálise comercial no desktop ou automatizada, com um Qualification Support Kit
PVS-StudioMapeamentos CWE, CERT, MISRA, AUTOSAR e OWASP, com cobertura que varia com a linguagem e a versãoAnálise multiplataforma, bases de dados de compilação, rastreio do build e fluxos com compiladores cruzadosIDE, linha de comandos, Docker e os sistemas de CI mais comuns
CppcheckVerificações open source mais addons opcionais; a versão Premium acrescenta cobertura MISRA e CERT mais ampla e relatórios de conformidadeFeito para tolerar extensões de compilador, assembly inline e sintaxe embebida não padrãoCLI, GUI, importação de projetos e automação simples em CI
Clang Static AnalyzerSem pacote dedicado de conformidade MISRA ou de qualificaçãoFunciona melhor quando o Clang consegue interpretar o projeto com precisão; a análise entre unidades de tradução está disponívelIntegrado no Clang, disponível através do scan-build, do CodeChecker e de integrações com IDE
Visao (nosso)Perfil MISRA C:2012 com verificações para 67 das 174 regras e diretivas do catálogo incluído. O relatório identifica as que não verifica. IDs CWE nos relatórios SARIF, JSON e GitLab, quando o verificador tem essa associação. Ainda sem perfil MISRA C++, AUTOSAR ou CERTConsulta 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.jsonUm comando em CI com saída SARIF 2.1.0, GitLab SAST ou JSON. Linha de base para sinalizar apenas ocorrências novas e limiar de gravidade para reprovar o build. Imagem Docker, modo servidor, Linux, Windows e macOS. Corre isoladamente ou no Midair, na cloud ou em instalações próprias

O que significam as categorias

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

    SAST significa static application security testing. As equipas de segurança analisam código-fonte ou binários sem os executar, à procura de fraquezas exploráveis. Incluem transbordos de buffer, caminhos de injeção e uso inseguro de memória. Nos sistemas embebidos, a análise estática cobre também normas de codificação, prova de ausência de erros de execução e manutenção.

    A maioria destes produtos é vendida como ferramenta SAST. Uma plataforma para aplicações web pode interpretar C e C++ sem modelar bem um compilador cruzado ou um sistema operativo de tempo real (RTOS). Pode também falhar com código gerado. Em C e C++ embebido, o modelo do build e do ambiente costuma pesar mais do que o número de verificadores.

  2. 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 modelo serve para uso contínuo numa grande base de código. Não prova a ausência de uma classe de erros. Uma análise sem ocorrências significa que o analisador configurado não reportou problemas. Não significa que o programa esteja correto.

  3. 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.

  4. Conformidade com normas de codificação

    Para suporte a MISRA, AUTOSAR ou CERT, confirme:

    • 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 encontrar muitas violações MISRA e não oferecer um processo de conformidade. Uma ferramenta de conformidade pode aplicar bem as regras, enquanto outro analisador encontra mais defeitos lógicos ou de segurança.

  5. 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 do alvo, código gerado e compilação condicional. Incluem também APIs de RTOS, alocadores personalizados, registos de hardware e assembly inline.

    Se o analisador não reproduzir o build real, a lista de funcionalidades perde valor. Teste primeiro a modelação do compilador e do ambiente. Compare os painéis depois.

Análise ferramenta a ferramenta

11 ferramentas

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 destaca 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 oferece ampla cobertura MISRA, mapeamentos CERT e CWE e verificadores personalizados através do CodeXM. Inclui gestão centralizada de problemas e apoio à qualificação em 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 a edição MISRA, o material de qualificação e a cobertura de compiladores incluídos na licença. Verifique também as funções de IDE e a opção de cloud ou instalações próprias.

Fontes: Black Duck, documento técnico sobre ISO 26262, Documentação do Coverity no Polaris

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.

Avalie cada produto pelo seu objetivo. Compare o Bug Finder com analisadores de defeitos e o Code Prover com ferramentas de verificação formal. Em conjunto, cobrem verificações MISRA, AUTOSAR, CERT e CWE. Suportam compiladores embebidos comuns e ligam resultados aos modelos Simulink que geraram o código.

Indicado para
Desenvolvimento embebido regulado que precisa de feedback ao programador, 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.

Fontes: MathWorks, referência de regras do Polyspace

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 análise centralizada, feedback ao programador e análises incrementais e diferenciais. Inclui taxonomias de normas de codificação, verificadores personalizados para C/C++ e critérios de aprovação em 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.

Fontes: Perforce, Klocwork, Novidades do Klocwork

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 à cibersegurança ou legados. Adequado para análise do programa completo, ocorrências persistentes e cobertura de código-fonte e 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.

Fontes: AdaCore, CodeSonar

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.

Adequa-se a equipas que precisam de mais do que encontrar defeitos no código-fonte. Um projeto regulado pode exigir MISRA, testes unitários e evidências MC/DC. Pode também exigir ligações aos requisitos e relatórios de auditoria. O C/C++test reúne estas atividades numa família de produtos. Suporta toolchains embebidas, IDEs, pipelines 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.

Fontes: Parasoft C/C++test

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 dados e interpretação abstrata sound. Junta relatórios centralizados de conformidade, gestão de desvios, regras personalizadas, critérios de aprovação em CI e pacotes de qualificação. Avalie-o quando precisa de demonstrar e manter a conformidade ao longo dos anos.

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 precisa também de SAST para a cadeia de fornecimento, web, dispositivos móveis ou várias linguagens, integre o QAC numa toolchain mais ampla.

Fontes: Perforce QAC, Anúncio do suporte a Rust

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.

O Astrée analisa todas as execuções possíveis para classes definidas de erros. Abrange comportamento indefinido, falhas aritméticas, uso inválido de memória e comportamento de vírgula flutuante. A AbsInt oferece um kit de apoio à 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
O Astrée inclui o RuleChecker para regras MISRA, AUTOSAR e CERT. A prova de ausência de erros continua a ser a sua função principal. Compare-o com um verificador MISRA pelos objetivos, para além do número de avisos ou da velocidade.

Fontes: AbsInt, ficha técnica do Astrée

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 Windows, Linux e macOS, IDEs comuns, bases de dados de compilação e rastreio do build. Integra-se com Docker e serviços de CI 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.

Fontes: PVS-Studio

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 análise acessível ou de uma segunda opinião. Também serve para aplicar critérios de aprovação gratuitos 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.

Fontes: Manual do Cppcheck, Manual do Cppcheck Premium

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 compatíveis com o Clang, pode dar feedback rápido sem custos de licença. 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 inclui gestão de conformidade nem pacotes de qualificação. Os analisadores comerciais oferecem maior cobertura de toolchains de alvo e gestão empresarial centralizada.

Fontes: Documentação do Clang Static Analyzer

Visao (nosso)

O Visao é o analisador estático do Midair, a plataforma de verificação da Interpretica. O Midair também executa testes distribuídos (TS Factory) e compara dispositivos instalados com uma linha de base (Delta). O Visao funciona isoladamente, como um comando num pipeline de CI existente.

O analisador converte 19 linguagens, com prioridade a C e C++, numa representação intermédia comum. Aplica sobre ela um único conjunto de regras. Segue intervalos de valores e a identidade de ponteiros por interpretação abstrata. Quando os domínios não decidem, consulta um solver SMT (satisfiability modulo theories). Deteta transbordos de inteiros, acessos fora dos limites, desreferências nulas, uso após libertação e fugas de recursos. Deteta também dados não fiáveis que chegam a uma shell ou consulta. Verifica contratos de funções no estilo ACSL (ANSI/ISO C Specification Language). Os detetores específicos do projeto correm com as regras incluídas.

Em builds embebidos, o Visao consulta gcc, clang e clang-cl para obter o triplo do alvo, macros e caminhos de inclusão. Regista-se o compilador cruzado pelo seu caminho, e o Visao lê compile_commands.json. Em CI, escreve SARIF 2.1.0, GitLab SAST ou JSON. Uma linha de base oculta ocorrências conhecidas; um limiar de gravidade reprova o build. O perfil MISRA C:2012 inclui verificações para 67 das 174 regras e diretivas do seu catálogo. Muitas verificações cobrem apenas parte da regra. O relatório identifica as diretrizes não verificadas. O analisador local não tem cliente de rede e não envia dados da execução.

Indicado para
Sistemas complexos ou duradouros com regras de falha que os verificadores genéricos desconhecem. Também equipas que querem análise estática, testes e verificações de dispositivos numa plataforma.
Atenção a
A cobertura MISRA é parcial. Ainda não há perfil MISRA C++, AUTOSAR ou CERT, nem kit de qualificação para ISO 26262 ou DO-178C. Confirme o suporte a builds IAR, TASKING ou Green Hills num piloto com o código real.

Porque uma lista de funcionalidades não chega

Dois fornecedores podem anunciar suporte a C++, MISRA e CI/CD e entregar resultados muito diferentes. A diferença está em detalhes como estes:

  • 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

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 Inclua cenários técnicos reais no pedido de proposta. Uma folha de cálculo com alegações dos fornecedores não revela estas diferenças.

Como avaliar uma ferramenta

  1. 01

    Escolha código representativo

    Escolha um componente com os elementos que mais dificultam a análise. Inclua cabeçalhos e intrínsecos do alvo, variantes de build, código gerado, primitivas RTOS e gestão personalizada de memória. Acrescente defeitos conhecidos e uma alteração recente que atravessou vários módulos.

    Evite um pequeno projeto de demonstração. Favorece a configuração rápida e diz pouco sobre a adequação ao código de produção.

  2. 02

    Defina o resultado esperado

    Registe o que o piloto vai testar. Os objetivos podem incluir encontrar defeitos, aplicar MISRA ou CERT, provar a ausência de erros de execução e analisar código alterado. Inclua, se necessário, governação entre branches, código de terceiros e detetores personalizados.

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

  3. 03

    Meça o sinal útil

    Não ordene ferramentas pelo número de avisos. Mais avisos podem significar melhor deteção, regras duplicadas, má configuração ou ruído. Conte defeitos confirmados de alto impacto e ocorrências novas que exigem correção. Conte também as falsas ou irrelevantes. Meça o tempo para entender cada relatório. Confirme se as ocorrências permanecem estáveis após pequenas alterações no código.

  4. 04

    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. 05

    Verifique as evidências

    Em projetos regulados, pergunte que documentos inclui a licença proposta. Procure material de qualificação, uma matriz de cobertura para a edição da norma e um resumo de conformidade. Verifique também registos de desvios, configuração versionada, exportações para auditoria e política de suporte a longo prazo.

Grelha de avaliação do piloto

Avalie todas as candidatas com as mesmas métricas.

MétricaO que medirPorque 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 com várias camadas pode combinar:

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

Cada camada deve cobrir um risco que as restantes não cobrem com baixo custo. Acrescentar ferramentas sem objetivo só aumenta o trabalho de triagem.

A análise personalizada é útil neste caso. As suas APIs, máquinas de estados e regras de falha podem pesar mais do que outro verificador genérico. Um detetor personalizado transforma um comentário recorrente de revisão numa verificação automática.

O Midair reúne várias destas camadas numa plataforma. O Visao faz a análise estática, o TS Factory executa os testes e o Delta compara dispositivos instalados com uma linha de base.

Recomendações por tipo de projeto

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

    Comece pelo Perforce QAC, Parasoft C/C++test, Coverity ou Klocwork para normas de codificação e análise com gestão centralizada. Acrescente Polyspace Code Prover ou Astrée quando o argumento de segurança exigir provas de propriedades de execução selecionadas. Acrescente CodeSonar quando precisa sobretudo de análise de segurança, binários ou deteção de defeitos no programa completo.

  2. Software automóvel

    Confirme o suporte exato a MISRA C, MISRA C++, AUTOSAR e ISO 26262 de que o projeto precisa. Perforce QAC, Parasoft, Coverity, Klocwork, Polyspace e CodeSonar merecem uma avaliação. Os requisitos de compilador, código gerado, variantes e qualificação vão reduzir a lista.

  3. 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. Compare a captura do build, os compiladores cruzados suportados e a velocidade da análise diferencial. Verifique a estabilidade das ocorrências e a integração com a gestão existente.

  4. 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.

  5. Sistema complexo com APIs internas ou regras de falha pouco comuns

    Avalie primeiro os verificadores personalizados e a modelação. Coverity, Klocwork, Polyspace e PVS-Studio oferecem formas de personalização. O Visao (nosso) aceita detetores e contratos de funções definidos pelo projeto.

Perguntas frequentes

Quais são as melhores ferramentas SAST para C?

Depende do objetivo. Coverity, Klocwork e CodeSonar são plataformas SAST empresariais estabelecidas para defeitos e vulnerabilidades em toda a base de código. Polyspace Code Prover e Astrée procuram provar a ausência de erros de execução definidos. Perforce QAC e Parasoft C/C++test destacam-se para evidências de conformidade MISRA C ou CERT C. O PVS-Studio serve equipas comerciais mais pequenas; Cppcheck e Clang Static Analyzer são boas bases gratuitas. O Visao (nosso) acrescenta detetores específicos do projeto. A melhor ferramenta é a que modela corretamente o compilador cruzado e o build do projeto. Só um piloto em código real o demonstra.

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

As alternativas mais próximas são Klocwork e CodeSonar. Ambas são plataformas SAST empresariais com análise interprocedimental, gestão centralizada e forte suporte a C/C++. A escolha depende do motivo para substituir o Coverity. Para provas de ausência de erros, avalie Polyspace Code Prover ou Astrée. Para relatórios MISRA C, MISRA C++ ou CERT C, avalie Perforce QAC ou Parasoft C/C++test. Se o orçamento é o limite, avalie PVS-Studio ou as ferramentas gratuitas Cppcheck e Clang Static Analyzer. Se os verificadores genéricos desconhecem as regras de falha do seu sistema, o Visao (nosso) aceita detetores personalizados. Teste no piloto o motivo concreto da mudança: custo da licença, esforço de modelação do build ou volume de triagem.

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

Não existe uma ferramenta melhor em todos os casos. Polyspace Code Prover e Astrée destacam-se na prova de ausência de erros de execução. Perforce QAC e Parasoft destacam-se na conformidade. Coverity, CodeSonar e Klocwork são candidatos SAST empresariais fortes. O PVS-Studio é uma opção comercial prática; Cppcheck e Clang Static Analyzer são bases gratuitas úteis. O Visao (nosso) serve sistemas complexos que precisam de detetores específicos do projeto. Decida após 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, Astrée com RuleChecker, PVS-Studio e Cppcheck Premium anunciam suporte a MISRA. O Visao (nosso) inclui verificações para 67 das 174 regras e diretivas do seu catálogo MISRA C:2012. O relatório identifica as não verificadas. A cobertura varia com a edição MISRA, linguagem, versão do produto e licença. Peça a cada fornecedor a matriz de cobertura de regras e o processo de gestão de desvios.

O que acrescenta o Visao como parte do Midair?

O Midair reúne análise estática, testes e verificações de dispositivos numa plataforma. O Visao reporta ocorrências no código-fonte e o TS Factory executa testes distribuídos. O Delta compara dispositivos instalados com uma linha de base. O Visao também funciona sem o Midair. Num pipeline de CI existente, corre como um comando com saída SARIF.

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

Não. O MISRA define diretrizes de codificação. Normas como ISO 26262, IEC 61508 e DO-178C com DO-330 acrescentam requisitos de ciclo de vida, processo e 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 do sistema. As ferramentas sound provam a ausência de classes definidas de erros sob pressupostos explícitos. A análise estática continua a precisar de validação de requisitos, testes de sistema e hardware, avaliação de segurança e monitorização em operação.

O Cppcheck ou o Clang podem substituir um analisador comercial?

Em alguns projetos não regulados, sim. São úteis em quase qualquer fluxo C/C++. Geralmente faltam-lhes a gestão centralizada, kits de qualificação, modelação ampla de compiladores, relatórios de conformidade e suporte exigidos em programas grandes ou regulados.

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

Muitas vezes, sim. Analisadores diferentes usam modelos e verificadores diferentes. Uma ferramenta local rápida pode correr em cada alteração. Uma plataforma comercial pode fazer a análise centralizada, enquanto uma ferramenta de prova verifica os componentes mais críticos. Planeie a sobreposição para evitar trabalho de triagem com ocorrências duplicadas.

Como se devem comparar os falsos positivos?

Use o mesmo código, configuração de build, política de regras e modelos de ambiente em todas as ferramentas. Reveja uma amostra suficiente e classifique cada ocorrência como confirmada, irrelevante ou incerta. As alegações dos fornecedores sobre falsos positivos não substituem medições no seu código.

Por onde começar

Escolha a ferramenta que entende o build real, encontra os defeitos relevantes e produz evidências que os revisores aceitam. A lista de funcionalidades mais longa raramente decide.

Faça um piloto de duas a quatro semanas num componente representativo. Fixe os critérios de aceitação antes de começar. Os engenheiros que vão fazer a triagem devem rever os resultados. Compare o esforço total, para além do resultado da análise.

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