Question

Qu'est-ce que la couverture de code et comment vous la mesurez?

On m'a posé cette question concernant notre couverture de code de test d'automatisation. Il semble que, hormis les outils automatisés, il s’agisse davantage d’art que de science. Existe-t-il des exemples concrets d'utilisation de la couverture de code?

Était-ce utile?

La solution

La couverture de code est une mesure du nombre de lignes / blocs / arcs de votre code exécutés pendant l'exécution des tests automatisés.

La couverture de code est collectée à l'aide d'un outil spécialisé permettant d'instrumenter les fichiers binaires afin d'ajouter des appels de traçage et d'exécuter un ensemble complet de tests automatisés sur le produit instrumenté. Un bon outil vous donnera non seulement le pourcentage de code exécuté, mais vous permettra également d’explorer les données et de voir exactement quelles lignes de code ont été exécutées au cours d’un test particulier.

Notre équipe utilise Magellan , un ensemble d'outils interne de couverture de code. . Si vous êtes un magasin .NET, Visual Studio a intégré des outils permettant de collecter la couverture de code. Vous pouvez également utiliser certains outils personnalisés, tels que cet article décrit.

Si vous êtes un magasin C ++, Intel dispose de outils fonctionnant sous Windows et Linux, bien que je ne les aie pas utilisés. J'ai également entendu parler de l'outil gcov pour GCC, mais je n'y connais rien et je ne peux pas vous donner de lien.

En ce qui concerne notre utilisation - la couverture de code est l’un de nos critères de sortie pour chaque jalon. Nous disposons en réalité de trois mesures de couverture de code: la couverture des tests unitaires (de l’équipe de développement), les tests des scénarios (de l’équipe de tests) et la couverture combinée.

BTW, bien que la couverture de code soit un bon indicateur du nombre de tests que vous effectuez, mais pas nécessairement un bon indicateur du niveau de test de votre produit. Vous devez utiliser d'autres métriques que la couverture de code pour assurer la qualité.

Autres conseils

La couverture de code vérifie que la quantité de votre code est couverte par des tests. Donc, si vous avez une couverture de code de 90%, cela signifie que 10% du code n'est pas couvert par des tests. Je sais que vous pensez peut-être que 90% du code est couvert, mais vous devez regarder sous un angle différent. Qu'est-ce qui vous empêche d'obtenir une couverture de code à 100%?

Un bon exemple sera le suivant:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

Maintenant, dans le code ci-dessus, il y a deux chemins / branches. Si vous frappez toujours le " OUI " branche alors vous ne couvrez pas la partie else et cela sera affiché dans les résultats de couverture de code. C'est bien parce que maintenant vous savez que ce qui n'est pas couvert et que vous pouvez écrire un test pour couvrir la partie restante. S'il n'y avait pas de couverture de code, vous êtes simplement assis sur une bombe à retardement pour exploser.

NCover est un bon outil pour mesurer la couverture de code.

N'oubliez pas que vous avez "100% de couverture de code". ne signifie pas que tout est testé complètement - bien que cela signifie que chaque ligne de code est testée, cela ne signifie pas qu'elles sont testées dans toutes les situations (courantes).

J'utiliserais une couverture de code pour mettre en évidence des morceaux de code pour lesquels je devrais probablement écrire des tests. Par exemple, si l'outil de couverture de code indique que myImportantFunction () n'est pas exécuté lors de l'exécution de mes tests unitaires actuels, ils devraient probablement être améliorés.

En gros, une couverture de code à 100% ne signifie pas que votre code est parfait. Utilisez-le comme guide pour rédiger des tests plus complets (à l’unité).

Complétez quelques points à la plupart des réponses précédentes:

La couverture de code signifie que votre ensemble de tests couvre bien votre code source. c'est-à-dire dans quelle mesure le code source est-il couvert par l'ensemble des tests élémentaires?

Comme mentionné dans les réponses ci-dessus, il existe différents critères de couverture, tels que chemins, conditions, fonctions, déclarations, etc. Mais les critères supplémentaires à couvrir sont

.
  1. Couverture de conditions: toutes les expressions booléennes à évaluer comme vraies et fausses.
  2. Couverture de décision: les expressions booléennes ne doivent pas uniquement être évaluées une fois pour toutes comme vraies ou fausses, mais pour couvrir tous les corps ultérieurs si-elseif-else.
  3. Couverture de boucle: signifie que toutes les boucles possibles ont été exécutées une fois, plusieurs fois et à zéro. De même, si nous avons une hypothèse sur la limite maximale, alors, si cela est réalisable, testez les durées limites maximales et un de plus que les limites limites maximales.
  4. Couverture d'entrée et de sortie: teste tous les appels possibles et leur valeur de retour.
  5. Paramètre Valeur Couverture (PVC). Pour vérifier si toutes les valeurs possibles d'un paramètre sont testées. Par exemple, une chaîne peut être n'importe laquelle de ces entités: a) null, b) vide, c) espace (espace, tabulations, nouvelle ligne), d) chaîne valide, e) chaîne non valide, f) chaîne à octet unique, g ) chaîne sur deux octets. L'échec de tester chaque valeur de paramètre possible peut laisser un bogue. Tester une seule de ces valeurs pourrait générer une couverture de code de 100% puisque chaque ligne est couverte, mais comme une seule des sept options est testée, cela signifie que la couverture de la valeur du paramètre ne représente que 14,2%.
  6. Couverture d'héritage: dans le cas d'une source orientée objet, lors du renvoi d'un objet dérivé référencé par la classe de base, la couverture à évaluer, si un objet frère est renvoyé, doit être testée.

Remarque: l’analyse de code statique permet de déterminer s’il existe un code inaccessible ou suspendu, c’est-à-dire un code non couvert par un autre appel de fonction. Et aussi d'autres couvertures statiques. Même si l'analyse de code statique indique que 100% du code est couvert, elle ne fournit aucun rapport sur votre ensemble de tests si toute la couverture de code possible est testée.

La couverture de code a été bien expliquée dans les réponses précédentes. C’est donc plutôt une réponse à la deuxième partie de la question.

Nous avons utilisé trois outils pour déterminer la couverture de code.

  1. JTest - un outil propriétaire construit sur JUnit. (Il génère également des tests unitaires.)
  2. Cobertura - un outil de couverture de code source ouvert pouvant être facilement associé à des tests JUnit pour générer des rapports.
  3. Emma - un autre - celui-ci que nous avons utilisé à des fins légèrement différentes de celles des tests unitaires. Il a été utilisé pour générer des rapports de couverture lorsque les utilisateurs finaux ont accès à l'application Web. Ceci, associé à des outils de test Web (exemple: Canoo) peut vous fournir des rapports de couverture très utiles vous indiquant la quantité de code recouverte lors de l’utilisation type de l’utilisateur final.

Nous utilisons ces outils pour

  • Vérifiez que les développeurs ont écrit de bons tests unitaires
  • Assurez-vous que tout le code est parcouru lors du test de la boîte noire

La couverture de code est simplement une mesure du code testé. Il existe une variété de critères de couverture qui peuvent être mesurés, mais ce sont généralement les divers chemins, conditions, fonctions et déclarations d'un programme qui constituent la couverture totale. La métrique de couverture de code correspond au pourcentage de tests exécutant chacun de ces critères de couverture.

En ce qui concerne le suivi de la couverture de tests unitaires sur mes projets, j'utilise des outils d'analyse de code statique pour assurer le suivi.

Pour Perl, il existe l'excellent module Devel :: Cover que j'utilise régulièrement sur mes modules.

Si la construction et l'installation sont gérées par Module :: Build, vous pouvez simplement exécuter ./ Build testcover pour obtenir un beau site HTML qui vous indique la couverture par sous-ligne, ligne et condition, avec nice. couleurs permettant de voir facilement quel chemin de code n'a pas été couvert.

Dans les réponses précédentes, la couverture de code a été bien expliquée. J'ajoute simplement quelques connaissances relatives aux outils si vous travaillez sur les plateformes iOS et OSX . Xcode offre la possibilité de tester et de surveiller la couverture de code.

Liens de référence:

https: // developer .apple.com / bibliothèque / archive / documentation / DeveloperTools / Conceptual / testing_with_xcode / chapters / 07-code_coverage.html

https://medium.com/zendesk-engineering/code -coverage-and-xcode-6b2fb8756a51

Ces deux liens sont utiles pour apprendre et explorer la couverture de code avec Xcode.

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