Ferramentas de análise estática de código para sistemas complexos
Escolha um analisador pelo que ele faz com o seu código, o seu build e o seu pipeline. Uma lista de funcionalidades não mostra isso.
Esta página transforma as suas prioridades em perguntas para qualquer fornecedor e mostra como o Visao, o analisador do Midair, lhes responde. A nossa pesquisa compara onze ferramentas em detalhe.
$visao --report-format sarif \ --baseline main.sarif --fail-on high \ compile_commands.json toolarm-none-eabi-gcc · os baremetal scan212 translation units new otp.cpp:20:20 error arithm/integer/overflow new otp.cpp:31:5 error cpp/string/no_null_terminator base38 known findings hidden by the baseline sarifvisao.sarif · 2 results exit1 2 findings at or above high
O que é uma ferramenta de análise estática de código.E onde as ferramentas diferem.
Uma ferramenta de análise estática de código lê o código-fonte sem o executar e indica os pontos onde o programa pode falhar ou violar uma regra.
As ferramentas diferem no método. Algumas procuram padrões no código. A maioria segue valores e caminhos entre funções e reporta prováveis defeitos para uma pessoa rever. Algumas são corretas por construção: com pressupostos explícitos, provam que uma classe de erros de execução não acontece.
Em C e C++ embebido, o build conta mais do que o número de verificações. Se a ferramenta não reproduz o seu compilador, as macros e o alvo, as ocorrências que reporta são sobre outro programa.
O que importa para si.Perguntas para qualquer fornecedor.
Escolha os seus critérios. Para cada um, vê as perguntas a fazer a todos os fornecedores e como o Visao responde hoje, incluindo onde fica aquém.
Os seus critérios
11 critérios
Escolha pelo menos um critério para ver as perguntas.
Poucos falsos positivos
Pergunte a qualquer fornecedor
- No nosso código, que parte das ocorrências os nossos engenheiros confirmaram?
- Podemos guardar as ocorrências atuais como linha de base e ver só as novas?
- Uma ocorrência suprimida continua suprimida quando o código à volta muda de sítio?
Como o Visao responde
O Visao pode guardar as ocorrências numa linha de base SARIF e depois reportar só as novas. Compara cada ocorrência pela regra, pelo ficheiro, pela mensagem e pela linha de código, nunca pelo número da linha. Não publicamos uma taxa de falsos positivos: meça-a no seu próprio código.
MISRA C
Pergunte a qualquer fornecedor
- Que edição da MISRA a ferramenta verifica, e que regras verifica automaticamente?
- O relatório indica as regras que a ferramenta não verifica?
- Como se registam e aprovam os desvios?
Como o Visao responde
O Visao tem um perfil MISRA C:2012 que verifica parte das regras. O resumo de conformidade indica as regras que não verifica. Ainda não há perfis MISRA C++, AUTOSAR C++ nem CERT.
Bloqueio no CI
Pergunte a qualquer fornecedor
- A ferramenta sai com um código diferente de zero acima de uma severidade que escolhemos?
- Um pull request pode falhar só pelas ocorrências que introduz?
- Que sistemas de CI têm um modelo pronto?
Como o Visao responde
O Visao corre como um único comando no pipeline. A opção --fail-on define a severidade que faz falhar o job, e --baseline limita o bloqueio às ocorrências novas. Há modelos para GitHub Actions, GitLab CI e Jenkins.
SARIF e formatos de relatório
Pergunte a qualquer fornecedor
- A ferramenta escreve SARIF 2.1.0?
- Cada ocorrência indica a sua regra e liga a uma descrição?
- Conseguimos seguir uma ocorrência de commit em commit?
Como o Visao responde
O Visao escreve texto, SARIF 2.1.0, JSON e o formato GitLab SAST. Cada ocorrência indica a regra e liga à página da regra. Uma impressão digital estável no SARIF permite ao GitHub Code Scanning seguir um alerta entre commits.
Compiladores cruzados e bare metal
Pergunte a qualquer fornecedor
- Que parte das nossas unidades de tradução a ferramenta analisa com a configuração certa?
- Lê o alvo, as macros e os caminhos de include do nosso compilador?
- O nosso compilador é suportado, ou só o GCC e o Clang?
Como o Visao responde
O Visao lê o compile_commands.json e consulta o gcc, o clang e o clang-cl para obter o alvo, as macros e os caminhos de include. Um compilador cruzado como o arm-none-eabi-gcc regista-se pelo caminho, e há um sistema operativo alvo bare-metal. Confirme builds IAR, TASKING ou Green Hills num piloto.
Regras do projeto
Pergunte a qualquer fornecedor
- Podemos descrever as nossas próprias APIs e as regras para as usar?
- Quanto tempo demora a acrescentar uma regra útil?
Como o Visao responde
O Visao lê contratos de funções escritos em ACSL e corre detetores do projeto ao lado das regras incluídas. Um contrato também pode marcar uma função como proibida por uma norma de codificação.
Profundidade da análise
Pergunte a qualquer fornecedor
- Uma ocorrência mostra o caminho e os valores que levam até ela?
- A ferramenta é correta por construção para alguma classe de erros, ou reporta prováveis defeitos?
Como o Visao responde
O Visao combina interpretação abstrata sobre intervalos, octógonos, ponteiros e estados de recursos com os solvers Z3 e CVC5. Reporta ocorrências para revisão. Não afirma provar que uma classe de erros está ausente.
SBOM e dependências
Pergunte a qualquer fornecedor
- Em que formatos a ferramenta escreve o SBOM?
- Compara os componentes com vulnerabilidades conhecidas e verifica as licenças?
- Consegue comparar os SBOM de duas versões?
Como o Visao responde
O Visao escreve o SBOM em CycloneDX 1.5 ou SPDX 2.3 a partir dos manifestos do projeto. Compara os pacotes com os avisos OSV, aplica uma política de licenças e compara dois SBOM com --sbom-diff.
O código fica nas suas instalações
Pergunte a qualquer fornecedor
- O analisador envia alguma coisa pela rede: telemetria, verificação de licença, código?
- Funciona numa máquina sem rede?
- Onde ficam guardadas as ocorrências?
Como o Visao responde
O Visao não tem cliente de rede. Não envia telemetria nem verifica a licença pela rede, por isso funciona numa máquina sem rede. O Midair, onde se reveem as ocorrências, também corre nos seus próprios servidores com o plano Business.
Preço
Pergunte a qualquer fornecedor
- O que inclui o preço: linguagens, normas, servidor, uso em CI?
- O preço é por utilizador, por linha de código ou por projeto?
- Quantas horas de engenharia vai custar a triagem?
Como o Visao responde
O Visao faz parte do Midair, e os planos do Midair são públicos, mensais e em euros. O Community é gratuito numa instância partilhada, o Pro custa 90 € e o Business 990 €. O Enterprise tem orçamento por cliente.
Evidências para um projeto de segurança funcional
Pergunte a qualquer fornecedor
- Há um kit de qualificação da ferramenta para a nossa norma e esta versão?
- Que relatórios o nosso avaliador aceita?
Como o Visao responde
O Visao não tem kit de qualificação para a ISO 26262 nem para a DO-178C. No Midair, cada ocorrência fica junto das execuções de teste e das evidências de execução que a verificam.
Como fazer um piloto justo.Cinco passos, as mesmas regras para todas as ferramentas.
As promessas dos fornecedores não mostram como uma ferramenta se comporta no seu código. Um piloto curto mostra. Passe todas as candidatas pelos mesmos cinco passos.
01Escolher código representativo
- Fazer
- Use um componente com headers do alvo, variantes de build, código gerado e um defeito cuja causa já conhece. Um projeto de demonstração pequeno premeia a instalação rápida e mostra pouco.
- Registar
- A parte das unidades de tradução que cada ferramenta analisou com a configuração certa.
- Com o Visao
- Dê ao Visao o
compile_commands.jsondo build real e o caminho do seu compilador cruzado.
02Escrever o objetivo
- Fazer
- Decida o que o piloto testa: encontrar defeitos, regras MISRA, resposta nos pull requests ou regras próprias. Cada objetivo precisa dos seus critérios de aprovação, escritos antes da primeira execução.
- Registar
- Os objetivos e os critérios de aprovação, iguais para todas as ferramentas.
- Com o Visao
- Escolha já as saídas: SARIF para o CI e o perfil MISRA C:2012, se precisar dele.
03Medir o sinal
- Fazer
- Reveja à mão uma amostra de ocorrências e marque cada uma como confirmada, irrelevante ou incerta. Mais avisos também podem significar mais ruído.
- Registar
- Ocorrências confirmadas, ocorrências úteis a dividir pelas revistas e tempo de triagem por ocorrência.
- Com o Visao
- O relatório SARIF indica a regra, o ficheiro e a linha de cada ocorrência, o que facilita partilhar a amostra.
04Testar o fluxo completo
- Fazer
- Faça uma análise completa e depois uma sobre uma pequena alteração. Ligue o sistema de CI e experimente as linhas de base, as supressões e o bloqueio.
- Registar
- O tempo entre uma alteração e a resposta, e se as ocorrências que não mudaram se mantêm estáveis entre commits.
- Com o Visao
- Escreva uma linha de base no ramo principal e depois corra um pull request com
--baselinee--fail-on.
05Verificar as evidências
- Fazer
- Num projeto regulado, peça os documentos exatos que vêm com a licença: cobertura de regras para a sua edição, registos de desvios, material de qualificação.
- Registar
- Que documentos existem para a versão da ferramenta que compraria.
- Com o Visao
- O Visao tem um resumo de conformidade MISRA C:2012 e não tem kit de qualificação. Registe isso na sua avaliação.
A nossa comparação de onze ferramentas.Da página de pesquisa.
A pesquisa baseia-se na documentação: compara o que cada fornecedor publica, sem pontuações. Divide as ferramentas em seis grupos.
- Análise estática ligada a testes e evidências de execução
- Visao, como parte do Midair
- Plataformas empresariais de defeitos e segurança
- Coverity, Klocwork, CodeSonar
- Suites de conformidade e verificação
- Perforce QAC, Parasoft C/C++test
- Analisadores orientados para a prova
- Polyspace Code Prover, Astrée
- Análise comercial orientada para quem programa
- PVS-Studio
- Bases de código aberto
- Cppcheck, Clang Static Analyzer
A Interpretica desenvolve o Visao. A pesquisa aplica ao Visao os mesmos critérios e diz onde a sua cobertura de normas é mais estreita.
Perguntas.Respostas curtas.
O que é uma ferramenta de análise estática de código?
Uma ferramenta de análise estática de código lê o código-fonte sem o executar e indica os pontos onde o programa pode falhar ou violar uma regra. Exemplos: overflow de inteiros, um índice para lá do fim de um array e um recurso que nunca é libertado.
A análise estática é o mesmo que SAST?
Quase. SAST (static application security testing) é o nome que a segurança lhe dá e procura fraquezas exploráveis. Em sistemas embebidos, a análise estática cobre também normas de codificação como a MISRA C e provas sobre erros de execução.
Que ferramentas de análise estática suportam MISRA C?
A nossa pesquisa indica que Coverity, Polyspace Bug Finder, Klocwork, CodeSonar, Parasoft C/C++test, Perforce QAC, PVS-Studio e Cppcheck Premium publicam capacidades MISRA. O Visao tem um perfil MISRA C:2012 que verifica parte das regras e indica as restantes. A cobertura muda com a edição e a licença, por isso peça a lista de regras.
Um projeto deve usar mais de um analisador?
Muitas vezes, sim. Os analisadores usam modelos diferentes e encontram defeitos diferentes. Uma ferramenta rápida pode correr em cada alteração e uma mais pesada no ramo principal. Planeie a sobreposição, ou as ocorrências duplicadas vão custar tempo de triagem.
Como comparar falsos positivos de forma justa?
Use o mesmo código, build, regras e configuração para todas as ferramentas. Reveja à mão uma amostra de ocorrências e marque cada uma como confirmada, irrelevante ou incerta. Um número de falsos positivos dado pelo fornecedor não substitui isto.
O Visao funciona sem o Midair?
Sim. Em CI, o Visao é um único comando que escreve SARIF, JSON ou um relatório GitLab SAST. Dentro do Midair, as ocorrências ficam junto das execuções de teste e das evidências de execução que as verificam.
Experimente no seu próprio código.Um componente, um build, um pipeline.
Compare os planos na página de preços. Os preços são mensais, em euros.
Entrar na lista de espera