Domanda

Ho una base di codice molto ampia che contiene test unitari estesi (utilizzando CppUnit). Devo capire quale percentuale del codice viene esercitata da questi test, e (idealmente) generare una sorta di rapporto che mi indichi, per libreria o per file, quanto codice è stato utilizzato.

Ecco il kicker:questo deve funzionare in modo completamente automatico (eventualmente all'interno di una build di integrazione continua) e deve essere multipiattaforma (beh, almeno WIN32 e *nix).

Qualcuno può suggerire uno strumento o una serie di strumenti che possono aiutarmi a fare questo?Non posso allontanarmi da CppUnit (né vorrei farlo: fa il culo), ma per il resto sono ansioso di ascoltare eventuali consigli che potresti avere.

Saluti,

È stato utile?

Soluzione

Quale strumento dovrei usare?

Questo l'articolo descrive un'altra frustrazione degli sviluppatori alla ricerca di strumenti di copertura del codice C++.La soluzione finale dell'autore è stata Copertura del bersaglio.

Copertura del bersaglio caratteristiche:

Per quanto riguarda il collegamento all'integrazione continua, dipende dalla soluzione CI utilizzata, ma è probabile che sia possibile collegare i passaggi di misurazione della strumentazione/copertura al file make utilizzato per i test automatizzati.


Testare Linux contro Windows?

Finché tutti i test vengono eseguiti correttamente in entrambi gli ambienti, dovresti misurare la copertura sull'uno o sull'altro.(Anche se appare Bullseye per supportare entrambe le piattaforme).Ma perché non esegui build di integrazione continua in entrambi gli ambienti??Se effettui consegne ai clienti in entrambi gli ambienti, allora tu Bisogno essere testato in entrambi.

Per questo motivo, sembra che potresti dover configurare due server di creazione continua, uno per una build Linux e uno per una build Windows.Forse questo può essere facilmente realizzato con alcuni software di virtualizzazione come vmware O virtualbox.Potrebbe non essere necessario eseguire le metriche di copertura del codice su entrambi i sistemi operativi, ma dovresti sicuramente eseguire i test unitari su entrambi.

Altri suggerimenti

Se puoi usare GNU GCC come tuo compilatore, allora il gcov lo strumento funziona bene.È molto semplice automatizzare completamente l'intero processo.

Se stai utilizzando la toolchain GCC, gcov ti fornirà statistiche sulla fonte, sul funzionamento e sulla copertura delle filiali.gcov funziona bene per MinGW e Cygwin.Ciò ti consentirà di ottenere statistiche di copertura e di emettere codice sorgente strumentato che ti consente di visualizzare il codice non eseguito.

Tuttavia, se vuoi davvero dare il massimo con dei report carini, usa gcov insieme a lcov è la strada da percorrere.lcov ti fornirà report a barre mirati a file e directory, statistiche di copertura funzionale e navigazione dei file sorgente codificati a colori per mostrare la copertura (verde significa eseguito, rosso significa non...).

lcov è facile su Linux, ma potrebbe richiedere alcuni hacking Perl su Cygwin.Personalmente ho avuto alcuni problemi nell'eseguire gli script (lcov è implementato in perl) su Windows.Ho ottenuto una versione modificata per funzionare, ma attenzione.

Un altro approccio è eseguire l'emissione di gcov su Windows e eseguire la postelaborazione di lcov su Linux, dove funzionerà sicuramente immediatamente.

Dai un'occhiata al nostro Copertura del test SD C++ attrezzo.Può essere ottenuto per GCC e per MSVC6.

Ha una raccolta di dati sonda a basso costo, una bella visualizzazione dei dati di copertura sovrapposti al codice e una generazione completa di report con rollup sulla copertura attraverso i livelli di metodo/classe/file/directory.

MODIFICARE:Agosto 2015:Ora supporta GCC5 e vari dialetti MS tramite Visual Studio 2015.Per utilizzare questi strumenti sotto Linux, è necessario Wine, ma lì gli strumenti forniscono script sh nativi per Linux e un'interfaccia utente basata su Linux/Java, quindi lo strumento sembra uno strumento Linux nativo lì.

Immagino che avrei dovuto specificare il compilatore: stiamo usando gcc per Linux e MSVC 6 (sì, lo so, è vecchio, ma funziona (soprattutto) per noi) per WIn32.

Per questo motivo, gcov non funzionerà per le nostre build Win32 e Bullseye non funzionerà per le nostre build Linux.

Poi di nuovo forse ho bisogno della copertura solo in un sistema operativo...

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