---
# System prepended metadata

title: Test Avancé

---

# Test Avancé
# Elaboration de données de test en boîte noire
Pour l'instant, on a vu uniquement une manière de créer des données de test : l'analyse partitionnelle (et aux limites).  
L'inconvénient principal est que c'est une analyse "artisanale", il n'y a pas de méthode parfaite et automatique, il faut tout refaire à la main.

> Actuellement il y a des recherches autour de l'IA pour aider à élaborer des données de test.

Autre solution : se baser sur le code pour couvrir toutes les décisions.

Méthodes abordées lors de ce cours : 
- Analyse partitionnelle
- Analyse aux limites
- Test combinatoire
- Table de decision
- Test aleatoire et test statistique
- Couverture du graphe fonctionnel
- Génération automatique de test. 

# Elaboration de données de test en boîte blanche
## Le test structurel dynamique
### Couverture du graphe de contrôle

> Produire des DT qui exécuteront un certain ensemble de comportements du programme. Ces comportements sont symbolisés par des chemins sur le graphe de flot de contrôle.
> Cf norme DO-178 Avionique

Graphe de flot de contrôle utile pour les critères de couverture du graphe et la mesure de complexité.

#### Différents critères de couverture
**1. Couvrir tous les noeuds.**   

$$taux\ de\ couverture\ TER1 = \frac{nb\ noeuds\ couverts}{nb\ noeuds\ total}$$

> Taux de couverture : critère insuffisant pour détecter un grand nombre de fautes.


**2. Couvrir tous les arcs / toutes les décisions**  

$$taux\ de\ couverture\ TER2 = \frac{nb\ arcs\ couverts}{nb\ arcs\ total}$$

Ce critère implique le critère précédent à 100%.
Ce critère ne couvre pas obligatoirement toutes les conditions (exemple des conditionnelles composées)

**3. Couvrir toutes les conditions multiples**  
Implique les critères précédents à 100%.  
Teste toutes les possibilités de la table de vérité des conditions.  
> Le nombre de tests augmente très vite : 

$$nbTests = 2^{nbConditions}$$
> Une condition est une variable bouléenne.  
Si on factorise/réduit les tests par pertinence, on peut passer à $$nbTests = nbConditions+1$$  
Ce n'est possible que quand les sous-conditions sont indépendantes (pas de variables en commun).

**4. Couvrir tous les chemins indépendants (=vectoriellement indépendants)**   
Se baser sur le nombre cyclomatique pour déterminer le nombre de tests à élaborer.  
> Vectoriellement indépendant : on ne peut pas exprimer les chemins en fonction des autres. 

$$taux\ de\ couverture\ T = \frac{nb\ chemins\ indépendants\ couverts}{nb\ chemins\ indépendants \ total}$$
$$NombreCylomatique = nbDecisions+1 = nbArcs - nbNoeuds + 2$$ 
Méthodologie : Rechercher le chemin le plus court couvrant le maximum de décisions, puis changer les décisions unitairement pour créer des chemins indépendants.

#### Conclusion sur le flot de contrôle
**Points forts :**  
Les approches basées sur les graphes de contrôle sont partiellement automatisables. 

**Points faibles :**  
- On ne détecte pas si une fonction n'est pas implémentée
- Les boucles engendrent des explosions de nombre de cas de test

# Analyse structurelle statique
## Analyse du flot de données
> Critères de converture basés sur le flot de données
Crtière de couverture : 
- Critère toutes les définitions : couvrir une utilisation de chaque définition
- Critère tous les utilisateurs : couvrir tous les chemins possibles
- Crtière tous les DU chemins : ajoute au criète tous les utilisateurs la couverture de tous les chemins possibles entre la définition et la référence, en se limitant aux chemins sans cycle. 

*Diagramme de hiérarchie des critères en diapo 236*
