ISTQB ne distincte pas entre ceux-ci (il lit "une" couverture de la décision/décision ") mais certaines sources disent que c'est différent. J'aurais deux questions. L'essentiel est à peu près la différence. Et l'autre - Est-ce que tout ce concept appartient au test de l'unité? Ou test de la boîte blanche? Merci
De l'ISTQB:
la couverture des succursales est étroitement liée à la couverture décisionnelle et à une couverture à 100%, ils donnent exactement les mêmes résultats. La couverture de la décision mesure la couverture des branches conditionnelles; La couverture de la succursale mesure la couverture des branches conditionnelles et inconditionnelles. Le programme utilise une couverture décisive, car c'est la source des branches. Certains outils de mesure de la couverture peuvent parler de la couverture de la succursale lorsqu'elles signifient réellement la couverture de la décision. (c) Livre de fondation ISTQB.
La branche est une voie d'exécution optionnelle, alors qu'une décision est le résultat d'une combinaison de conditions (c'est-à-dire une expression booléenne).
Ainsi, il peut y avoir une décision sans branche. Par exemple:
int fun(int a, int b){
return (a > 5) && (b < 15);
}
Dans la fonction ci-dessus, "(A> 5)" est une condition "(B <15)" est une autre condition. "(A> 5) && (B <15)" est une décision. Et il n'y a pas de branche.
Ainsi, dans cet exemple, la couverture de décision sera atteinte avec seulement 2 tests, et la couverture de la branche sur le code source atteint 100% avec un seul test.
La couverture de la branche au niveau de l'assemblage nécessiterait les mêmes tests, mais la question devient délicate si vous écrivez la fonction comme celle-ci:
int fun(int a, int b){
return (a > 5) & (b < 15);
}
Il reste encore une décision booléenne (calculée avec des opérations arithmétiques) et l'Assemblée n'aurait pas de branches.
Manuel de la NASA sur la mesure MCDC clarifie ce type de différence. http://ntrs.nasa.gov/archive/nasa/cassi.ntrs.nasa.gov/20040086014_2004090420.pdf
Voici le problème en un mot:
if ((test1() || test2()) {
invoke_some_latent_bug_only_if_test1_is_false;
}
else {
do_something_benign;
}
Supposons que vous ayez deux cas de test:
test1()
Évalue à true
, ettest1()
et test2()
évaluent à false
.Certains outils de couverture de code produiront une couverture de 100% car ces deux cas de test entraînent l'exécution de chaque relevé. Le problème est que chaque chemin n'a pas été testé. Ce code nécessite trois cas de test, un de plus pour le cas où test1()
Évalue à false
mais test2()
Évalue à true
.
Dans cet exemple hypothétique, ce troisième cas d'essai critique exposerait ce bug latent. Si vous ne fournissez pas ce troisième cas et utilisez un outil de couverture basé uniquement sur les exécutions de relevé, vous obtiendrez un faux sentiment que les tests sont terminés.
Si vous pensez à votre programme en tant que gros graphique dirigé avec un nœud de départ allant à un ou plusieurs nœuds d'extrémité. Chaque instruction de votre programme est un nœud sur le graphique, les succursales ou les décisions sont des bords entre les nœuds.
La couverture complète de la déclaration est lorsque vous visitez chaque noeud dans le graphique au moins une fois, la couverture de la branche/décision complète est lorsque vous traversez chaque avantage dans le graphique au moins une fois (et je pense qu'ils sont la même chose).
Aucun de ceux-ci n'est nécessairement identique à la couverture complète du chemin, lorsque vous traversez chaque chemin du nœud de départ à chaque nœud de fin.
Comme pour toute terminologie, rien ne garantit que tout le monde signifie exactement la même chose au même terme. Wikipedia semble prendre une couverture de branche pour signifier couverture de décision modifiée mais il y a beaucoup de Autresources , comme vous le souhaitez. , qui disent qu'ils sont les mêmes. Ce que nous pouvons dire plus à l'autorité, c'est que la couverture de la déclaration n'est pas la même que la couverture de la succursale et ne sont pas identiques à la couverture du chemin.
Si vous devez utiliser ces termes, votre meilleur pari est de définir ce que vous signifie par eux avant de les utiliser.
Pour le point 2. Les métriques de couverture peuvent être utilisées sur toute forme de test, il est certainement assez courant de l'utiliser sur des tests d'unités et sur des tests automatisés du système/d'intégration