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?
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
«Couvrir» cette ligne signifie quelque chose - mais pas beaucoup, car il existe une variété de conditions qui sont True
ou False
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:
engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003
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.