Question

J'ai une très grande base de code qui contient de nombreux tests unitaires (utilisant CppUnit). Je dois déterminer quel pourcentage du code est exercé par ces tests, et (idéalement) générer une sorte de rapport qui m'indique, par bibliothèque ou par fichier, la quantité de code qui a été utilisée.

Voici le kicker :cela doit fonctionner de manière totalement inattendue (éventuellement dans une version d'intégration continue) et doit être multiplateforme (enfin, WIN32 et * nix au moins).

Quelqu'un peut-il suggérer un outil ou un ensemble d'outils qui peuvent m'aider à le faire ?Je ne peux pas m'éloigner de CppUnit (et je ne le voudrais pas non plus - ça botte le cul), mais sinon, j'ai hâte d'entendre vos recommandations.

Acclamations,

Était-ce utile?

La solution

Quel outil dois-je utiliser ?

Ce l'article décrit une autre frustration des développeurs à la recherche d'outils de couverture de code C++.La solution finale de l'auteur était Couverture Bullseye.

Couverture Bullseye caractéristiques:

Quant à l'intégration dans votre intégration continue, cela dépend de la solution CI que vous utilisez, mais vous pouvez probablement intégrer les étapes de mesure d'instrumentation/couverture dans le fichier de création que vous utilisez pour les tests automatisés.


Tester Linux vs Windows ?

Tant que tous vos tests s'exécutent correctement dans les deux environnements, vous devriez pouvoir mesurer la couverture sur l'un ou l'autre.(Bien que Bullseye apparaisse pour prendre en charge les deux plates-formes).Mais pourquoi ne faites-vous pas de builds d’intégration continue dans les deux environnements ?Si vous livrez des clients dans les deux environnements, alors vous besoin tester dans les deux.

Pour cette raison, il semble que vous deviez peut-être configurer deux serveurs de build continus, un pour une build Linux et un pour une build Windows.Peut-être que cela peut être facilement réalisé avec certains logiciels de virtualisation comme VMware ou boîte virtuelle.Vous n'aurez peut-être pas besoin d'exécuter des métriques de couverture de code sur les deux systèmes d'exploitation, mais vous devez absolument exécuter vos tests unitaires sur les deux.

Autres conseils

Si vous pouvez utiliser GNU CCG en tant que votre complice, alors le gcov l'outil fonctionne bien.Il est très simple d'automatiser entièrement l'ensemble du processus.

Si vous utilisez la chaîne d'outils GCC, gcov vous obtiendra des statistiques sur les sources, les fonctionnalités et la couverture des branches.gcov fonctionne bien pour MinGW et Cygwin.Cela vous permettra d'obtenir des statistiques de couverture ainsi que d'émettre du code source instrumenté qui vous permettra de visualiser le code non exécuté.

Cependant, si vous voulez vraiment sortir du parc avec de jolis rapports, utilisez gcov en conjonction avec lcov est la voie à suivre.lcov vous fournira des rapports à barres étendus aux fichiers et répertoires, des statistiques de couverture fonctionnelle et une navigation dans les fichiers sources à code couleur pour afficher la couverture (le vert signifie exécuté, le rouge signifie non...).

lcov est simple sous Linux, mais peut nécessiter du piratage Perl sur Cygwin.J'ai personnellement eu quelques problèmes pour exécuter les scripts (lcov est implémenté en Perl) sous Windows.J'ai une version piratée qui fonctionne, mais soyez prévenu.

Une autre approche consiste à effectuer l'émission gcov sur Windows et à effectuer le post-traitement lcov sous Linux, où cela fonctionnera sûrement immédiatement.

Consultez notre Couverture des tests SD C++ outil.Il peut être obtenu pour GCC et pour MSVC6.

Il a une faible collecte de données de sonde, un bel affichage des données de couverture superposées sur votre code et une génération de rapports complète avec des cumuls sur la couverture à travers les niveaux méthode/classe/fichier/répertoire.

MODIFIER:Août 2015 :Prend désormais en charge GCC5 et divers dialectes MS via Visual Studio 2015.Pour utiliser ces outils sous Linux, vous avez besoin de Wine, mais là, les outils fournissent un script sh natif Linux et une interface utilisateur basée sur Linux/Java, de sorte que l'outil ressemble à un outil Linux natif.

Je suppose que j'aurais dû spécifier le compilateur - nous utilisons gcc pour Linux et MSVC 6 (oui, je sais, c'est vieux, mais cela fonctionne (surtout) pour nous) pour WIn32.

Pour ces raisons, gcov ne fonctionnera pas pour nos versions Win32, et Bullseye ne fonctionnera pas pour nos versions Linux.

Là encore, peut-être que je n'ai besoin que d'une couverture dans un seul système d'exploitation...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top