Domanda

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

Sono disponibili prodotti di analisi statica C ++ commerciale. Sebbene avere tali prodotti sia eccezionale, il costo è decisamente 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). Usando uno strumento open source, potrebbe essere modificato per soddisfare determinate esigenze. Trovare gli strumenti non è stato un compito 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 di analisi statica C ++ open source portatili che chiunque conosce e può essere raccomandato?

Alcuni link correlati.

È stato utile?

Soluzione

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

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

Altri suggerimenti

CppCheck è open source e multipiattaforma.

Mac OSX:

brew install cppcheck

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

In particolare l'opzione rileva i seguenti elementi:

  • Definisce un costruttore di copie e un operatore di assegnazione per le classi con memoria allocata dinamicamente.
  • Preferisce l'inizializzazione all'assegnazione nei costruttori.
  • Rendi virtuali i distruttori nelle classi base.
  • Hanno " operator = " restituisce un riferimento a * this.
  • Don & # 8217; t prova a restituire un riferimento quando devi restituire un oggetto.
  • Distingue tra le forme prefisso e postfisso degli operatori di incremento e decremento.
  • Non sovraccaricare mai " & amp; & amp; & amp; & amp; " || " ;, o ", " ;.

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

Aggiorna : mentre la pagina di destinazione indica " L'analizzatore è un work-in-progress continuo " ;, tuttavia è ora documentato come analizzatore statico per C e C ++.

Domanda: Come posso eseguire GCC / Clang per analisi statiche? (solo avvisi)

Opzione del compilatore: -fsyntax-only

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. Puoi visualizzare elenco completo degli avvisi consigliati .

In sintesi:

  

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimisation -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-dichiarations -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.

John Carmack menziona anche PVS-Studio in questo interessante post di blog su " Analisi del codice statico " .

Se per Open Source, intendevi davvero "gratuito", allora Microsoft l'analisi preliminare è buona. Naturalmente solo per Windows. È completamente integrato in Visual Studio & amp; il compilatore. per esempio:.

cl /analyze Sample.cpp

Il lavoro di analisi statica di Mozilla merita probabilmente una visita.

Splint sembra riempire il conto per C.

Se non specificassi l'open source direi Software Gimpel 's PCLint è probabilmente uno dei migliori strumenti disponibili per il controllo del codice statico in C ++. Ma, ovviamente, non è open source.

Mac OSX:

brew install splint

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

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

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/

Ulteriore descrizione

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

con metriculator puoi:

  • analizza file / cartelle / progetti C ++
  • definisce le soglie metriche e abilita / disabilita la metrica utilizzando la pagina delle preferenze di Codans
  • hanno marcatori di problemi negli editor di codice sorgente
  • esplora i risultati della metrica
  • esporta i risultati della metrica come tag cloud (disponibile come funzionalità opzionale tramite il sito di aggiornamento)

Attualmente il metriculator viene fornito con le seguenti metriche:

  • McCabe (complessità ciclica)
  • EfferentCoupling per Tipo
  • Righe logiche di codice sorgente
  • Numero di membri per tipo
  • Numero di parametri per funzione

Dovresti provare oo-browser, ha una fantastica integrazione con xemacs

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

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top