Quali strumenti di analisi statica C ++ open source sono disponibili? [chiuso]


301

Java ha alcuni ottimi strumenti di analisi statica open source come FindBugs , Checkstyle e PMD . Questi strumenti sono facili da usare, molto utili, funzionano su più sistemi operativi e sono gratuiti .

Sono disponibili prodotti di analisi statica C ++ commerciale. Sebbene avere tali prodotti sia eccezionale, il costo è semplicemente troppo per gli studenti ed è solitamente piuttosto difficile ottenere la versione di prova.

L'alternativa è trovare strumenti di analisi statica C ++ open source che verranno eseguiti su più piattaforme (Windows e Unix). Utilizzando uno strumento open source, potrebbe essere modificato per soddisfare determinate esigenze. Trovare gli strumenti non è stato facile.

Di seguito è riportato un breve elenco di strumenti di analisi statica C ++ che sono stati trovati o suggeriti da altri.

Quali sono alcuni altri strumenti portatili di analisi statica C ++ open source che chiunque conosce e può essere raccomandato?

Alcuni link correlati.


Commercial, DMS Software Reengineering Toolki, gestisce Java, C, C ++ e COBOL, fornisce analisi, costruzione di AST, risoluzione di nomi / tipi, analisi di controllo / flusso di dati, analisi e trasformazione personalizzate. Vedi semanticdesigns.com/Products/DMS/DMSToolkit.html .
Ira Baxter,

1
Per lo strumento commerciale c'è anche CppDepend ( cppdepend.com ), e forse la versione di prova potrebbe essere sufficiente per gli studenti.

Risposte:


21

Oink è uno strumento costruito sul front-end Elsa C ++. Mozilla's Pork è un fork di Elsa / Oink.

Vedi: http://danielwilkerson.com/oink/index.html


1
Ho compilato più di 1000 programmi nella mia vita, ma per amore di Dio non posso compilare questo pacchetto, non importa quale. Ho provato a usare Fedora, Ubuntu, WSL, Cygwin, MSYS2, Windows - ma no. Manca sempre qualcosa e la documentazione è semplicemente orribile. Non fraintendetemi, immagino che lo strumento sia eccezionale. Ma il sito Web e la documentazione sembrano non toccarli da 10-15 anni.
Apache il

73

CppCheck è open source e multipiattaforma.

Mac OSX:

brew install cppcheck

1
@gio Non ho visto alcun problema personalmente. Credo che CppCheck abbia la capacità di ignorare o escludere determinati percorsi o file, il che aiuta a restringere l'ambito.
Soo Wei Tan,

1
Su Windows:choco install cppcheck
KindDragon,

53

Per quanto riguarda il compilatore GNU, gcc ha già un'opzione integrata che abilita un avviso aggiuntivo a quelli di -Wall. L'opzione è -Weffc ++ e riguarda le violazioni di alcune linee guida di Scott Meyers pubblicate nei suoi libri " Efficace e più efficace C ++ ".

In particolare l'opzione rileva i seguenti elementi:

  • Definire un costruttore di copie e un operatore di assegnazione per le classi con memoria allocata dinamicamente.
  • Preferisce l'inizializzazione all'assegnazione nei costruttori.
  • Rendi i distruttori virtuali nelle classi base.
  • Chiedi a "operator =" di restituire un riferimento a * this.
  • Non tentare di restituire un riferimento quando è necessario restituire un oggetto.
  • Distinguere tra le forme prefisso e postfisso degli operatori di incremento e decremento.
  • Non sovraccaricare mai "&&", "||" o ",".

7
Oltre a -Wall e -Weffc ++ di gcc, -Wextra esegue alcune buone analisi statiche gratuite, ad esempio rami che non restituiscono un valore o controllando che un unsigned sia inferiore a zero. È notevole la frequenza con cui i programmatori professionisti ritengono che quest'ultima sia una buona idea ...
Flash Sheridan,

24
Yuck, -Weffc++mette in guardia su tonnellate di costrutti che stanno perfettamente bene in una grande base di codice. Secondo il suggerimento di -Wextra, però; non uscire di casa senza di essa!
Tom,

29

In fase di sviluppo per ora, ma Clang esegue l'analisi C ed è destinato a gestire il C ++ nel tempo. Fa parte del progetto LLVM .

Aggiornamento : mentre la landing page dice "L'analizzatore è un work-in-progress continuo", tuttavia è ora documentato come un analizzatore statico per C e C ++.

Domanda: Come posso eseguire GCC / Clang per l'analisi statica? (solo avvisi)

Opzione del compilatore: -fsyntax-only


1
LLVM è un progetto molto interessante che rispetto a gcc, genera binari ottimizzati in meno tempo; e il clang, quando completo, sarà il suo front-end ...
Nicola Bonelli,

Un altro editor ha aggiunto le informazioni sull'opzione -fsyntax-only. Basta notare che si tratta essenzialmente di una richiesta per eseguire l'analisi che il compilatore verrebbe eseguito senza effettivamente compilare ed emettere gli avvisi. Non ne sono sicuro, ma penso che sia diverso dall'analisi statica.
Don Wakefield,

17

Qualcun altro ha menzionato -Weffc ++, ma questo è in realtà uno degli unici avvisi GCC che non attivo per impostazione predefinita. Tuttavia, la serie di avvertenze che attivo è lo strumento di analisi statica più importante nel mio kit. È possibile visualizzare l' elenco completo degli avvisi consigliati .

In sintesi:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-ottimizzazione -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-dichiarazioni -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror -Wno-unused

Nota che alcuni di questi richiedono una nuova versione di gcc, quindi potresti doverli eliminare dalla tua lista se sei bloccato su 4.5 o qualcosa del genere.



7

Se per Open Source intendevi davvero "libero", allora l' analisi pre - compilata di Microsoft è buona. Naturalmente solo per Windows. È completamente integrato in Visual Studio e nel compilatore. per esempio:

cl /analyze Sample.cpp

In quale versione ed edizione è disponibile?
twk,

Sembra essere integrato nel compilatore, che è gratuito. L'integrazione è probabilmente solo Team Edition.
JBR Wilkinson,


4

Splint sembra riempire il conto per C.

Se non è stato specificato open source direi Gimpel Software s' PCLint è probabilmente uno dei migliori strumenti disponibili per la verifica statica del codice in C ++. Ma, ovviamente, non è open source.

Mac OSX:

brew install splint

2
Ma costoso per un singolo sviluppatore :) Mi piace di più gratuitamente
Robert Gould,

6
splint è per C, non C ++. Non so se hanno intenzione di espandere la copertura o meno. Lo spero!
Harold Bamford,

Sì, vale la pena provare pclint, la sua controparte in unix si chiama flexe-lint, la versione 9.0 deve essere più veloce della versione 8.x, la versione 9.0 supporta anche l'intestazione precompilata per accelerare l'analisi. Ci vuole tempo per domare PC-Lint, ha falsi positivi che potrebbero causare problemi se non si può ignorarlo selettivamente.
zhaorufei,

3

PREFast di Microsoft è disponibile anche nel Kit driver di Windows. La versione 7.0 è scaricabile qui .

I documenti Microsoft affermano che dovrebbe essere eseguito solo con il codice del driver, ma questo (vecchio) post sul blog stabilisce i passaggi per eseguirlo. Forse può essere integrato in un normale processo di compilazione?


PREFast rallenterà molto il processo di compilazione, per qualsiasi progetto reale, il tuo server di compilazione potrebbe non permetterselo.
Zhaorufei,

@zhaorufei: la maggior parte delle analisi statiche non sono "veloci"; per definizione hanno un lavoro di analisi del codice piuttosto complesso. Se non ti piace il costo di costruzione tutto il tempo, rendilo opzionale.
Ira Baxter,

2

Abbiamo lavorato su un plug-in Eclipse CDT chiamato metriculator. È ancora in fase di sviluppo, ma sono già state implementate alcune metriche principali (ad esempio LSLOC, McCabe, EfferentCoupling).

Vedi http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation per maggiori dettagli come dimostrazione video e documentazione.

L'ultima build notturna è disponibile per l'installazione tramite il sito di aggiornamento all'indirizzo: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

Ulteriori descrizione

Il metricolatore analizza staticamente il codice sorgente C ++ e genera metriche del software. Le metriche sono implementate come controllori Codan. I risultati dell'analisi possono essere esplorati in una vista separata. Ogni metrica ha proprietà configurabili (ad es. Una soglia per "righe massime di codice per funzione"). Il superamento di questa soglia segnalerà un problema e creerà un marcatore nell'editor del codice sorgente.

con metriculator puoi:

  • analizzare file / cartelle / progetti C ++
  • definire le soglie metriche e abilitare / disabilitare la metrica utilizzando la pagina delle preferenze Codan
  • hanno marcatori di problemi negli editor del codice sorgente
  • esplorare i risultati metrici
  • esporta i risultati delle metriche come tag cloud (disponibile come funzionalità opzionale tramite il sito di aggiornamento)

Attualmente il metriculator viene fornito con le seguenti metriche:

  • McCabe (complessità ciclomatica)
  • EfferentCoppia per Tipo
  • Linee logiche di codice sorgente
  • Numero di membri per tipo
  • Numero di parametri per funzione

1

Dovresti provare oo-browser che ha una straordinaria integrazione con xemacs


1

Si possono anche codificare estensioni di GCC in MELT (un linguaggio specifico del dominio progettato per estendere GCC) o plugin GCC in C (molto più difficile) per fare alcune analisi personalizzate.


2
Ho letto uno dei PDF su MELT e l'estensione di gcc con melt, la mia sensazione è che sia ancora troppo complesso / difficile aggiungere i propri plugin a gcc. Modo non pratico per l'utente comune.
zhaorufei,

1
L'estensione di GCC è complessa, indipendentemente dal modo in cui lo fai (tramite plug-in C, MELT o persino Python). Questo perché GCC è complesso. E personalizzare qualsiasi strumento di analisi statica C ++ è difficile perché le specifiche del linguaggio C ++ sono molto complesse e dovrai gestire la maggior parte di quella complessità (qualsiasi programma C ++ non banale utilizza molte funzionalità C ++, forse attraverso la libreria standard C ++) .
Basile Starynkevitch

0

Doxygen esegue alcune analisi del flusso di controllo e genera grafici. Questi potrebbero non essere quello che stai cercando, ma li ho trovati utili da guardare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.