Qu'est-ce que la Couverture de Code et comment le mesurer? J'ai été demandé à cette question concernant nos automatisation du test de couverture de code. Il semble qu'à l'extérieur des outils automatisés, il est plus un art qu'une science. N'importe qui ont des exemples du monde réel de la façon dont ils utilisent la couverture de code?
Réponses
Trop de publicités?La Couverture de Code est une mesure du nombre de lignes/blocs/les arcs de votre code exécutés alors que les tests automatisés sont en cours d'exécution.
CC sont collectées à l'aide d'un outil spécialisé pour instrument les binaires pour ajouter le traçage des appels et d'exécuter un ensemble complet de tests automatisés à l'encontre de l'instrumentation produit. Un bon CC outils vous donnera non seulement le pourcentage de code qui est exécuté, mais vous permettra également d'explorer les données et de voir exactement quelles lignes de code ont été exécutés au cours de test particulier.
Notre équipe utilise Magellan - une maison de CC outils. Si vous êtes un .Net boutique, VS a intégré des outils de collecte de couverture de code. Vous pouvez également rouler des outils personnalisés, comme cet article décrit.
Si vous êtes un C++ boutique, Intel a quelques CC les outils qui fonctionne pour Windows et Linux, mais je ne l'ai pas utilisé. J'ai aussi entendu il ya la gcov outil pour gcc, mais je ne sais rien à ce sujet et ne peut pas vous donner un lien.
Quant à la façon dont nous les utilisons - la couverture de code est un de nos critères de sortie pour chaque étape. Nous avons fait trois numéros de CC - CC à partir de l'unité de test (à partir de la dev team), CC du scénario de test (de l'équipe de test) et combiné CC.
Btw, tandis que CC est un bon indicateur de la façon dont beaucoup de tests que vous faites, il n'est pas nécessairement un bon indicateur de la façon dont vous êtes le test de vos produits. Il y a d'autres mesures que vous devez utiliser avec CC pour assurer la qualité.
La couverture de Code fondamentalement tests que la quantité de code est couvert par les tests. Donc, si vous avez 90% de couverture de code que cela signifie qu'il ya 10 du code qui n'est pas couvert en vertu de test. Je sais que vous pensez peut-être que 90% du code est couvert, mais vous avez à regarder à partir d'un angle différent. Qu'est-ce que vous arrêtant pour obtenir 100% de couverture de code.
Un bon exemple fera ce:
if(customer.IsOldCustomer())
{
}
else
{
}
Maintenant, dans le code ci-dessus, il y a deux chemins/branches. Si vous êtes toujours en train de frapper le "OUI" de la branche alors vous ne couvrant pas le reste de la partie et il sera affiché dans les résultats de Couverture de Code. C'est bien parce que maintenant vous savez que ce n'est pas couverte et vous pouvez écrire un test pour couvrir le reste de la partie. Si il n'y avait pas de couverture de code, alors vous êtes simplement assis sur une bombe à retardement pour exploser.
NCover est un bon outil pour mesurer la couverture de code.
Rappelez-vous juste, d'avoir "100% de couverture de code" ne signifie pas que tout est testé complètement - même si cela signifie que chaque ligne de code est testé, ça ne veut pas dire qu'ils sont testés sous toutes les (commun) situation..
Je voudrais utiliser de couverture de code pour mettre en évidence des morceaux de code que je devrais écrire des tests pour. Par exemple, si n'importe quel code-outil de couverture montre myImportantFunction() n'est pas exécutée lors de l'exécution de mon appareil actuel-tests, ils devraient probablement être améliorée.
Fondamentalement, 100% de couverture de code ne signifie pas que votre code est parfait. L'utiliser comme un guide pour l'écriture plus complète (unité)des tests.
Rajouté quelques points à de nombreuses réponses ci-dessus.
La couverture de Code, de la manière dont votre test est de couvrir votre code source. c'est à dire dans quelle mesure le code source de l'ensemble des cas de Test.
Comme mentionné dans les réponses ci-dessus, il existe plusieurs critères, comme les chemins, les conditions, les fonctions, les instructions, etc. Mais d'autres critères à prendre en compte sont
- Couverture de Condition: Toute expression booléenne à être évalués pour le vrai et le faux.
- La décision de la couverture: Pas seulement expression booléenne à être évalués pour vrai et faux à la fois, mais pour couvrir tous les if-elseif-else corps.
- Boucle de Couverture: moyen, A chaque boucle d'été exécutée une fois, plus d'une fois et le temps zéro. Aussi, si nous avons hypothèse sur la limite maximum, puis, si possible, de tester la limite maximum de temps et, un de plus que la limite maximum de fois.
- D'entrée et de Sortie de la Couverture: Test de tous les possibles et de sa valeur de retour.
- Valeur de paramètre de la Couverture(PVC). Pour vérifier si toutes les valeurs possibles pour un paramètre sont testés. Par exemple, une chaîne de caractères peut être l'une de ces communément: a) la valeur null, b) vide, c) des espaces blancs (espace, tabulation, nouvelle ligne), d) chaîne valide, e) de chaîne non valide, f) d'un octet string, g) double-chaîne d'octets. L'échec de tester chaque valeur de paramètre peut laisser un bug. Tester une seule de ces pourrait entraîner de 100% de couverture de code que chaque ligne est couvert, mais comme l'une des sept options sont testés, moyen, seulement 14,2% de couverture de valeur de paramètre.
- L'héritage de Couverture: Dans le cas de l'orienté objet à la source, lors du retour d'un objet dérivé visé par la classe de base, la couverture d'évaluer, si frère objet est retourné, doivent être testés.
Remarque: l'analyse Statique de code va trouver si il y a aucun code inaccessible ou la pendaison de code, c'est à dire le code ne sont couverts par aucun autre appel de fonction. Et aussi d'autres statique de la couverture. Même si l'analyse de code statique rapports que 100% du code est couvert, il ne donne pas de rapports au sujet de votre jeu de test si possible la couverture de code est testé.
La couverture de Code a été bien expliqué dans les réponses ci-dessus. Ce n'est plus de la réponse à la deuxième partie de la question.
Nous avons utilisé 3 outils pour déterminer de couverture de code.
- JTest - un outil propriétaire construit sur JUnit. (Il génère des tests unitaires)
- Cobertura - un code open source, outil de couverture qui peut facilement être couplé avec JUnit tests pour générer des rapports.
-
Emma - l'autre - celui que nous avons utilisé dans un but légèrement différent que les tests unitaires. Il a été utilisé pour générer des rapports de couverture lorsque l'application web est accessible par les utilisateurs finaux. Ceci, couplé avec le web des outils de test (ex: Canoo) peut vous donner très utile des rapports de couverture qui vous dire combien de code est couvert pendant typique de la fin de l'utilisation de l'utilisateur.
Nous utilisons ces outils pour
- . L'examen que les développeurs ont écrit de bons tests unitaires
- . S'assurer que tout le code est traversé au cours de boîte noire test