web-dev-qa-db-fra.com

Comment fonctionnent les outils de couverture de code?

Comment les outils de couverture de code tels que NCOVER savent-ils quelles parties du code ont été exécutées et quelles parties n'étaient pas?

54
Hannoun Yassir

Voici un document technique sur Comment implémenter des outils de couverture de test pour les langages arbitraires .

Ma société construit une famille d'outils de couverture de test pour Java, C #, C++, PHP, COBOL, PLSQL, ... sur la base de ce principe.

16
Ira Baxter

Citer directement du ncover [~ # ~ # ~] [~ # ~] : NCOVER rapporte le pourcentage de branches dans le code qui ont été pris au cours de vos tests automatisés. Cela l'obtient en instrumentant le code source de chaque succursale et en écrivant les points "Hit" à un fichier. Ces points "Hit" sont ensuite comparés au total des points possibles qui auraient pu être "touchés".

8
Hans Olsson

Je sais que c'est la question, c'est de la question, mais si vous êtes toujours intéressé, vous pouvez voir un exemple de la manière dont une telle instrumentation est effectuée pour les applications .NET en examinant le projet Open Source OpenCover .

OpenCover insère des points d'instrumentation à des points importants dans le code.

  1. Pour la couverture de la ligne de code, il utilise les points de séquence prélevés à partir d'un [~ # ~] pdb [~ # ~ ~] fichier
  2. Pour la couverture de la branche IT Instruments Cond_Branchissez les instructions en instrumenté la cible (s) de saut et la prochaine instruction après l'instruction de la branche I.E. Aucun saut.
  3. Pour la méthode Instrumentation, il instruit la première instruction de toute méthode.

Toutes ces règles sont appliquées dans couvertureinstrumentalation.cpp Une fois que les points appropriés ont été localisés à l'aide de mono.cecil et sont passés au profileur à partir de l'hôte de la console.

Le code source à Partcover est également disponible (comme indiqué), mais cela est beaucoup plus difficile à suivre, mais il utilise également des points de séquence des PDB pour déterminer où il instruit le code.

3
Shaun Wilde

De - this source:

NCOVER utilise l'API de profileur .NET Framework pour surveiller l'exécution d'une application. Lorsqu'un procédé est chargé par le CLR, NCOVER récupère l'IL et le remplace avec un code IL instrumenté

Donc, en bref, il se comporte dans la compilation juste à temps.

Tous les outils ne fonctionnent pas de la même manière cependant. D'autres outils fonctionnent en modifiant le bytecode de votre application après la compilation du code.

3
Pete

Cela nécessite que vous exécutez vos tests une fois avec une analyse de couverture de code permet, puis compte simplement le nombre de blocs (c'est-à-dire des blocs de portée) couverts et compare le nombre total de blocs dans le (s) projet que vous testez.

Le raisonnement de base est que si chaque combinaison possible de blocs de code est couverte, tous les chemins de code sont couverts1. L'argument principal contre la mise en place de trop de poids dans les numéros de couverture du code est que des blocs "faciles" tels que getters et setters, qui ne donnent aucune valeur réelle (et ne pouvaient guère de mal aller ...) Compter autant que plus de blocs de code sujet aux erreurs .


1) Comme indiqué par IRA Baxter Dans un commentaire, le libellé précédent de cette phrase était incorrect. Veuillez lire les commentaires pour une discussion à ce sujet.

2
Tomas Aschan