Devrait-il y avoir un rapport de couverture de code distinct pour les tests unitaires et d'intégration, ou un rapport de couverture de code pour les deux?
L'idée derrière cela est que la couverture du code nous permet de nous assurer que notre code a été couvert par des tests autant que possible (autant qu'une machine peut maintenant de toute façon).
Il est plus pratique d'avoir un rapport séparé pour savoir ce qui n'a pas été couvert par les tests unitaires et ce qui n'a pas été couvert par les tests d'intégration. Mais de cette façon, nous ne pouvons pas voir le pourcentage de couverture totale.
Réponses:
Surtout, vous devez avoir et analyser une couverture combinée (totale). Si vous y pensez, c'est le moyen le plus naturel de hiérarchiser correctement vos risques et de concentrer vos efforts de développement de tests.
Couverture combinée vous montre ce que le code ne sont pas couverts par des tests à tous , à savoir est la plus risquée et la nécessité d'étudier en premier. Des rapports de couverture séparés ne seront pas utiles ici, car ils ne vous permettent pas de savoir si le code est testé d'une autre manière ou pas testé du tout.
Une analyse de couverture distincte peut également être utile, mais elle serait préférable de procéder après l' analyse combinée et impliquerait de préférence également les résultats de l'analyse de la couverture combinée.
Le but de l'analyse de couverture distincte diffère de l'analyse combinée. Une analyse de couverture séparée permet d'améliorer la conception de votre suite de tests, par opposition à l'analyse de couverture combinée qui est destinée à décider des tests à développer quoi qu'il arrive.
"Oh, cet écart n'est pas couvert simplement parce que nous avons oublié d'ajouter ce test unitaire simple (intégration) dans notre suite unitaire (intégration), ajoutons-le" - une couverture et une analyse séparées sont plus utiles ici, car combinées, on pourrait masquer les lacunes que vous voudriez couvrir dans une suite particulière.
Du point de vue ci-dessus, il est néanmoins souhaitable de disposer également des résultats d'une analyse de couverture combinée afin d'analyser les cas les plus délicats. Pensez-y, avec ces résultats, vos décisions de développement de test pourraient être plus efficaces grâce à des informations sur les suites de tests «partenaires».
«Il y a une lacune ici, mais développer un test unitaire (d'intégration) pour le couvrir serait vraiment lourd, quelles sont nos options? Vérifions la couverture combinée ... t extrêmement important. "
la source
Vous ne mentionnez pas votre outil de test. Beaucoup ont des fonctions de «combinaison» qui vous permettent d'agréger les résultats de plusieurs exécutions ou suites. Si vous souhaitez une mesure de couverture agrégée, explorez la fonction de combinaison dans votre outil de couverture.
Maintenant, pouvons-nous parler de l'éléphant dans la pièce?
Il n'y a pas de cuillère. Et il n'y a pas de "pourcentage de couverture totale". Du moins, pas simple.
Le pourcentage de couverture est une mesure facilement compréhensible présentée pour aider à comprendre la portée, la profondeur et la gamme des suites de tests. Mais comme tout benchmark simple, il est très facile de devenir un objectif fixé sur cette valeur comme une sorte de talisman magique de «tests complets».
Disons que vous avez atteint la gloire de la «couverture de test à 100%». Yay! Mais qu'est ce que ça veut dire? 100% des lignes de code sont testées, non? Alors qu'en est-il de cette ligne?
«Couvrir» cette ligne signifie quelque chose - mais pas beaucoup, car il existe une variété de conditions qui sont
True
ouFalse
avec une certaine probabilité, mais il est peu probable que vous ayez testé toutes les combinaisons de ces conditions. Même si cette ligne est couverte une douzaine de fois, si l'une des conditions est relativement rare, vous n'êtes pas près de tester tous les résultats réels qui pourraient se produire dans la pratique. Pour rendre cela plus clair, un exemple plus synthétique:Combien de fois auriez-vous à couvrir cette ligne pour la tester vraiment de manière exhaustive? Combien de fois devriez-vous le couvrir pour le tester en combinaison avec toutes les autres variables du programme (avec leurs propres probabilités, peut-être aussi rares)?
Je ne dis pas que les mesures de couverture sont inutiles. Ils sont vraiment super . Ils se concentrent sur l'un des problèmes clés: dans quelle mesure mon système logiciel est-il testé? Ils aident à passer de «nous avons des tests» à «nous avons testé de manière approfondie».
Mais pendant que vous travaillez sur des «scores combinés», la réalité est que votre score sera généralement pour la «couverture de déclaration» plutôt que la «condition», le «prédicat» ou la «trajectoire» . Donc, quel que soit le nombre que vos scores globaux vous donnent, il est peu probable que cela vous donne une image réelle de la quantité d'états potentiels et de combinaisons d'états de votre programme qui sont testés. Pendant que vous travaillez à augmenter votre pourcentage de couverture, pensez également à mesurer votre couverture de prédicat. Cela vous donnera une vue plus réaliste - et presque invariablement, plus sobre - de l'étendue des tests.
la source