Domanda

Di recente mi è stato chiesto quali fossero le alternative a Coverity Prevent per un codice base che include sia C / C ++ che Java. Ovviamente, dal lato Java, gli strumenti gratuiti disponibili includono Findbugs (analisi del codice compilato) e PMD (analisi del codice statico). Sono molto potenti, specialmente quando inizi a studiare l'integrazione con gli IDE (che, di nuovo, sono gratuiti).

Tuttavia, le cose sono rischiose quando inizi a spostarti nel regno C / C ++ con i vari compilatori, architetture, ecc.

Ho proposto una varietà di strumenti per il lato Java, inclusi Findbugs e PMD. Quello che sto cercando è l'opzione migliore per il lato C / C ++ quando si considera l'utilizzo delle seguenti metriche:

  1. Prezzo: gratis è meglio ma può essere battuto con un valore migliore. Tuttavia, i modelli di prezzo che fanno pagare per riga di codice sono terrificanti.
  2. Set di funzionalità: in che modo questo strumento migliora la mia vita? In che modo rileva i miei errori prima di archiviarli, prima di spedire il codice, ecc.?
  3. Usabilità: posso usare lo strumento sulla mia scrivania? Posso condividere i rapporti e / o i risultati? Posso integrare lo strumento con Fogbugz (che usiamo nel mio gruppo)? Posso integrare lo strumento in CruiseControl (o equivalente)? ??

Lo strumento migliore sarebbe qualcosa di utile e utilizzabile come una combinazione di Findbugs e PMD con identici set di funzionalità, il tutto a zero dollari per posto.

È stato utile?

Soluzione

I due che vengono in mente sono Splint per C e Cppcheck per C ++.

Se vuoi cercare più opzioni, questa funzione di questi strumenti è "quotic analysis code". Ciò potrebbe aiutarti a trovare più strumenti per C e / o C ++. Inoltre, potresti essere interessato alla risposta alla domanda " Quali strumenti di analisi statica C ++ open source sono disponibili? & Quot;

Altri suggerimenti

C ++ è un linguaggio abbastanza complicato che gli strumenti per esso (come refactoring o strumenti di analisi statica) non sono buoni come Java o C #.

Il PC-lint di Gimpel Software è la cosa più vicina a uno strumento standard di controllo dei bug per C ++ che io sapere di. È commerciale con un modello di prezzi ragionevole. Non so quanto bene si integri con altri strumenti.

Il progetto open source Clang dovrebbe alla fine essere in grado di fare molto di ciò che vuoi (e sembra < em> davvero interessante), ma è ancora in fase di sviluppo.

PC-Lint è la strada da percorrere. A differenza della maggior parte degli altri strumenti, ha il monitoraggio completo dei valori tra interfacce e tra moduli e supporta anche tutti i bordi pelosi della compilazione / analisi dei modelli. Ne ho comprato una copia personale circa 9 anni fa, solo perché costa così poco. Ho finito per usarlo molto nei progetti open source. PC-Lint non ha una licenza basata su LOC, non telefona a casa e non esiste un server licenze. È molto sul sistema d'onore e molto semplice. Nel corso dei 9 anni, ho riscontrato alcuni problemi (e quelli sono stati pochi e lontani tra loro), ma sono stati quasi sempre risolti in poche settimane.

Per quanto riguarda l'open-source, c'è SMatch, basato sulle tecniche di analisi della meta-compilation di Coverity, che il progetto del vino usa abbastanza pesantemente con grande efficacia. Lo strumento secondario cpd (copy paste detector) di PMD funziona su C ++ ed è veramente veloce. Per la complessità ciclomatica, c'è pmccabe che è facilmente installabile tramite apt-get (su Linux; su Windows, compilo il sorgente sotto cygwin).

PC-Lint richiede alcune configurazioni per farlo funzionare bene, un giorno o due al massimo. Gli altri strumenti non funzionano così profondamente, quindi puoi semplicemente colpire il terreno correndo con un comando come " find. -name .c | xargs pmccabe | ordina -n | tail -n 20 "

Ho usato Klocwork e Rational Software Analyzer in passato ed entrambi funzionano bene, sebbene entrambi siano commerciali / non liberi.

Uso flawfinder.py che esegue la scansione di 160 funzioni pericolose in C / C ++. http://www.dwheeler.com/flawfinder/

Se vuoi una porta ruby ??basata su flawfinder, puoi usare vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer

Entrambi questi strumenti analizzano i file di codice sorgente C / C ++ alla ricerca di vulnerabilità note tra cui buffer overflow, condizioni di competizione, crittografia debole, configurazioni jail chroot ... & amp; altro).

Rick

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