Pergunta

me pediram recentemente sobre alternativas para Coverity Prevenir para um código base que inclui ambos C / C ++ e Java. Obviamente, no lado do Java, as ferramentas gratuitas disponíveis incluem Findbugs (análise de código compilado) e PMD (análise estática de código). Eles são muito poderosos, especialmente quando você começar a investigar a integração com IDEs (que, mais uma vez, são gratuitas).

No entanto, as coisas são arriscadas quando você começar a mover-se em reino do C / C ++ com os vários compiladores, arquiteturas, etc.

propus uma variedade de ferramentas para o lado do Java, incluindo tanto Findbugs e PMD. O que eu estou procurando é a melhor opção para o lado de C / C ++, quando pensou em usar os seguintes resultados:

  1. Preço: livre é melhor, mas pode ser batido por melhor valor. No entanto, modelos de precificação que taxa por linha de código são horríveis.
  2. set Feature: como é que esta ferramenta faz minha vida melhor? De que forma o faz detectar meus erros antes de eu vê-los em, antes de enviar o código, etc.?
  3. Usabilidade: Eu posso usar a ferramenta na minha mesa? Posso partilhar os relatórios e / ou descobertas? Posso integrar a ferramenta com Fogbugz (que usamos no meu grupo)? Posso integrar a ferramenta em CruiseControl (ou equivalente)? ??

A ferramenta final seria algo que é tão útil e utilizável como uma combinação de Findbugs e PMD com conjunto de recursos idênticos, tudo para zero dólares por assento.

Foi útil?

Solução

Os dois que vêm à mente são Splint para C e cppcheck para C ++.

Se você quer olhar para mais opções, esta função dessas ferramentas é "análise estática de código". Isso pode ajudá-lo a encontrar mais ferramentas para C e / ou C ++. Além disso, você pode estar interessado na resposta à pergunta "O que open source C ++ ferramentas de análise estática estão disponíveis? "

Outras dicas

C ++ é uma linguagem bastante complicado que o ferramental para isso (como refatoração ou ferramentas de análise estática) só não é tão boa como Java ou C #.

PC-lint de Gimpel Software é a coisa mais próxima de uma ferramenta padrão de verificação de bug para C ++ que eu saber de. É comercial com um modelo de preços razoáveis. Eu não sei o quão bem ele se integra com outras ferramentas.

O Clang projeto de código aberto deve, eventualmente, ser capaz de fazer muito mais do que você quer (e aparência < em> realmente legal), mas ele ainda está em desenvolvimento.

PC-Lint é o caminho a percorrer. Ao contrário da maioria das outras ferramentas, ele tem inter-função completa e rastreamento valor inter-módulo e apoios todas as arestas peludos de compilação template / parsing também. Eu comprei uma cópia pessoal para mim cerca de 9 anos atrás, só porque é tão barato. Acabei usando isso muito em projetos de código aberto. PC-Lint não licencia baseado em LOC, não faz telefone de casa, e não há nenhum servidor de licença. É muito mais no sistema de honra e muito no-nonsense. Ao longo dos 9 anos, eu encontrei alguns problemas nele (e aqueles têm sido poucos e distantes entre si), mas eles têm sido quase sempre fixo em poucas semanas.

Open-source sábio, não é SMatch, com base em técnicas de análise de meta-compilação da Coverity, que os usos do projeto vinho muito fortemente com grande efeito. cpg do PMD (copiar e colar detector) obras sub-ferramenta em C ++, e é muito rápido. Para complexidade ciclomática, há pmccabe que é facilmente instalável via apt-get (no Linux; no Windows, eu compilar o código fonte sob cygwin)

.

PC-Lint exige alguma configuração para fazê-lo funcionar bem, um dia ou dois, no máximo. As outras ferramentas não funcionam tão profundamente, então você pode apenas atingir o chão correndo com um comando como "find -name .c |. Xargs pmccabe | tipo -n | tail -n 20"

Eu usei Klocwork e Rational software Analyzer no passado, e ambos funcionam bem, embora ambos são comerciais / não-livre.

eu uso flawfinder.py que digitaliza para 160 funções perigosas em C / C ++. http://www.dwheeler.com/flawfinder/

Se você quer uma porta de rubi baseado em flawfinder então você pode usar vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer

Os dois arquivos de código fonte dessas ferramentas varreduras C / C ++ para vulnerabilidades conhecidas, incluindo estouros de buffer, condições de corrida, criptografia fraca, configs jaula ... e muito mais).

Rick

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top