Applicabilité :: L'output est fonction d'une expression logique liant les variables d'input interprétées comme des propositions.
Modèle de faute :: Erreurs dans l'interprétation des conditions d'un algorithme, erreurs logiques (mauvais connecteurs logiques, inversions).
Spécification du contsructeur d'un triangle :
un objet Triangle représente un triangle défini parla longueur de ses trois côtés. Un tel objet est construit enpassant en paramètres au contructeur dans ordre croissant lestrois longueurs définissant le triangle ....
Implicitement, une expression logique définit un triangle correct (paramètres appelés a,b et c) :
c < a + ba > 0b > 0c > 0On a donc comme expression logique : C1 /\ C2 .. /\ C6
Si on veut tester tous les cas, on a au pire `2^n`variants différents.
Variant :: Une combinaison unique des variables (booléennes) d'entrée et des variables de sortie (ie. une ligne dans la table de vérité correspondant à l'expression)
modéle de test permettant d'appliquer une stratégie de sélection :
Cas particuliers :
true/falseModified Condition/Decision Coverage : critère de test classique, applicable pour expressions logiques
exemple : A \/ B
voir http://library-dspace.larc.nasa.gov/dspace/jsp/handle/2002/12640
Principe :: Identifier pour chaque variable en entrée les conditions nécessaires pour que, toutes les autres variables étant fixées (toutes choses égales par ailleurs), la modification de la valeur de cette variable se reflète dans le résultat prévu.
Exigence :: Pour savoir si un avion est au sol, on utilise l'indicateur WOW (Weight on Wheels). Cet indicateur est positionné si:
Cas de test ::
| Numero | 1 | 2 | 3 | 4 | 5 |
| Roue_G | T | F | T | T | T |
| Roue_D | T | T | F | F | T |
| Vit | 35 | 35 | 45 | 35 | 45 |
| AV | T | T | T | F | F |
Les cas de tests sont ils valides pour le critère MC/DC et l'expression : WOW = (Roue_G & Roue_D) | ((Vit < 40 ) & AV)
Représentation compacte d'une expression booléenne Construire un diagramme de décision binaire (BDD) représentant tous les états possibles d'un ensemble de variables logiquement liées (ou non). Un BDD est un graphe dirigé acyclique dont les noeuds sont des variables logiques et les arcs des valeurs logiques vrai ou faux. Les noeuds terminaux du graphe sont les valeurs true et false.
Propriétés des (Reduced,Ordered) BDD :
Attention :: Tous les BDD ne sont pas égaux, trouver le BDD minimal pour une expression arbitraire est un pb NP-complet (dépend du choix d'ordonnancement des variables)
http://en.wikipedia.org/wiki/Binarydecisiondiagram
Intérêt :: réduit le problème de la sélection de cas de tests à un parcours de graphes : choisir les valeurs de variables permettant de parcourir tous les chemins du BDD !
Représentation compacte d'un arbre de décision par partage des noeuds et ordonnancement des variables.
Construit lors de la compilation des expressions logiques: forme normal if-then-elseINF) correspond au dépliage des expressions conditionnelles. Problèmes si une variable apparaît plusieurs fois dans une expression.
Hypothèse : Pour toute expression logique e, le nombre de cas de tests pour les critères tous les chemins du BDD et MC/DC est équivalent.
Critères combinatoires = cas particulier de critères de flots de contrôle généraux. Lorsqu'on construit le flot de contrôle d'une méthode, les branchement représentents des conditions logiques, La couverture des arcs implique donc couverture des conditions logiques.
Modèle de fautes :: Les défauts dépendent de l'interaction d'au plus 2 (ou n) paramètres, pas de la combinaison de tous les paramètres du CUT.
Applicabilité :: Le comportement du CUT dépend de la combinaison d'un ensemble de paramètres à valeurs finis: drapeaux, énumérations, plages de valeurs ou partitions de domaines (cf. infra). La taille du domaine et le nombre de paramètres doivent être dans des proportions raisonnables. Le nombre réel de configuration à tester en combinant toutes les possibilités est trop important.
Référence :: http://www.pairwise.org/
Critère de test combinatoire basé sur l'hypothèse réaliste que les défauts sont causés par l'interaction d'au plus deux facteurs (paramètres). Permet de réduire l'explosion combinatoire pour la sélection des cas de tests lorsqu'un comportement dépend de plusieurs variables dont le domaine est fini. Appelé aussi méthodes des tableaux orthogonaux, généralisation du principe MC/DC.
Tableau orthogonal `(n,n)` de force `t` : une matrice telle que chacun des `n^t` t-uplets (sous matrices `(n,t)`) apparaisse le même nombre de fois.
Tableau couvrant de force `t`: tableau orthogonal mais tel chaque `n^t` t-uplet apparaisse au moins une fois.
Trouver un tableau orthogonal qui soit minimal est un problème NP-complet.
Utilisation de Carrés Latins superposés pour trouver des données de test répondant au critère:
Exemple avec 4 paramètres de taille 3:
a b c b c a c a b et 1 2 3 3 1 2 2 3 1
Les tests sont au nombre de 9, contre `3^4 = 81` si on teste toutes les combinaisons de valeurs possibles:
1 1 a 1 1 2 b 2 1 3 c 3 2 1 b 3 2 2 c 1 2 3 a 2 3 1 c 2 3 2 a 3 3 3 b 1
Exemple avec 4 paramètres de taille 4:
b c d a c d a b d b a c a c b d et 1 2 3 4 4 1 2 3 3 4 1 2 2 3 4 1
Cas particulier du n-wise testing: tous les n-uplets couverts par les différents cas de test.
Comment traiter les variables n'ayant pas le même nombre de valeurs possibles:
Complexe ! Utiliser un outil: jenny. Programme en C permettant de générer une suite de tests respectant le crière tous-les-k-uplets.
Chaque valeur de paramètre est un noeud d'un graphe G(V,E). Pour k paramètres, le graphe G est k-parti complet:
Les arcs représentent donc les couples de valeurs possibles. S'il y a des couples impossibles, les arcs sont supprimés.
Un cas de tests est donc un chemin dans le graphe tel que chaque partition est représentée une et une seule fois. Une suite de teste est adéquate pour le critère toutes-les-paires si tous les arcs du graphe sont couverts par au moins un chemin.
Partitionnement des domaines de valeurs, parfois aeppelé test aux limites. Critère pour le choix de valeurs pertinentes.
Modèle de fautes :: Les erreurs sont souvent dûes à une mauvaise interprétation d'opérateurs de comparaison ou de tests aux limites des domaines de valeurs. ex: < et inférieur ou égal, étoile de kleene ou étoile propre. Mauvaise détermination d'une condition limite, modification de comportement non prise en compte dans certains domaines.
Applicabilité :: Comportement dépend d'une partition de domaine d'une ou plusieurs variables d'entrée (ou d'état), applicable aussi pour des partitions d'états d'objets : comportement fonction de classes de valeurs, changement en fonction de domaine
Basé sur existence d'une frontière de domaine, domaine peut être ouvert (ne comprenant pas la frontière) ou fermé (comprenant la frontière)
point on :: point sur la frontière
point off :: point dans un domaine ouvert et en dehors d'un domaine fermé
1 x 1 : choisit un point ON et un point OFF par condition définissant une partition de domaine, le plus proche possible l'un de l'autre
N x 1 : choisir N point ON linéairement indépendants sur chaque frontière, N est le nombre de dimensions (variables), et 1 point OFF
Stratégies faibles vs. fortes:
Définition d'un triangle isocèle : Un triangle est isocèle si deux de ses côtés sont de mêmelongueur.
Défini trois domaine en trois dimensions borné par les frontières :
Attention :: Ne tient pas compte de l'ordre des paramètres ! Si a<b<c, il y a moins de cas à traiter (lesquels ?)
Chaudière alimentée par une vanne et chauffée par un gaz. soupape de sécurité en cas de surpression.
Input :
Output :
GSVConditions :
200</code> > G, sinon ~G 1</code> > V, sinon ~Vconstruction système d'équations représentant les contraintes des différents domaines.
Vérifications :
Représentation facile pour domaines numériques à une ou deux variables: représente sur une droite ou un plan les contraintes et les domaines, sélection des points visuelle.
Représentation complexe pour 3 variables et plus: vérification des critères nécessite outils mathématiques plus complexes, résolution de systèmes d'équations et inéquations (cf. simplex). Si la spécification est trop compliquée à tester, se poser des questions sur son intérêt : il y a de fortes chances qu'elle soit mal implantée. => divide quod impera
Problème: soit la classe Random suivante:
public class Random {
public int random() ...
}
Comment tester fonctionnellement cette classe ?
Solution:
random()