Test d'intégration

Dans le monde du développement informatique,

Objectif 
L'objectif de chaque phase de test est de détecter les erreurs qui n'ont pas pu être détectées lors de la précédente phase.

Pour cela, le test d’intégration a pour cible de détecter les erreurs non détectables par le test unitaire.

Le test d’intégration permet également de vérifier l'aspect fonctionnel, les performances et la fiabilité du logiciel.
L'intégration fait appel en général à un système de gestion de versions, et éventuellement à des programmes d'installation.
Cela permet d'établir une nouvelle version, fondée soit sur une version de maintenance, soit sur une version de développement.

L'organisation d'un test d’intégration 

Le but de l'organisation d'un test d’intégration est de définir la stratégie de l'activité de test d’intégration en termes d'ordre d’intégration, de test à réaliser, du matériel sur lequel seront lancés les tests, ainsi que les outils  et la procédure employée.

Il est recommandé d'employer la procédure suivante pour l'organisation d'un test d’intégration.
 Introduction et organisation
 présentation du document
 décrire l'organisation en termes de procédure à suivre et les outils et matériels disponibles pour l'équipe d’intégration
 Stratégie
 identifier le produit fini du test d’intégration
 identifier les spécifications du test d'intégration qui doivent être produites
 mettre en évidence l’intérêt de chaque test
 définir l'ordre dans lequel les tests doivent être effectués
 Contenu des spécifications du test d’intégration
 pour chaque spécification mentionnée dans la stratégie, définir l’assemblage inhérent aux tests et les attentes du design qui sont à vérifier
 identifier la configuration matérielle requise pour le test
 lister les outils et logiciels de test
 identifier les assemblages précédemment testés nécessaires au test.

Cette procédure est adaptée en fonction des besoins. Pour un système comprenant plusieurs sous-systèmes, la procédure  (contenu des spécifications des tests d'intégration) sera usuellement effectuée pour chacun des sous-systèmes, par exemple.

Méthode d’approche de l’intégration 

Il existe plusieurs méthodes pour les tests d’intégration dont voici les plus courants : , , Sandwich et Big-bang.

Pour une meilleure compréhension, ce schéma va être employé comme exemple pour chaque cas :

Top-down 

On teste les modules les plus hauts puis ceux en dessous.

On obtient donc les tests de :
 première étape 
 1
 seconde étape
 1, 2 et 3
 troisième étape 
 1, 2, 3, 4, 5 et 6
 quatrième étape
 1, 2, 3, 4, 5, 6, 7, 8 et 9

Les avantages 
 Localisation des erreurs plus facile
 Nécessite peu de driver (ou Mock)
 Possibilité d'obtenir un prototype rapidement
 Plusieurs ordres de test/ implémentation(s) possible(s)
 Les erreurs de conception majeures sont détectées en premier dans les modules au plus haut niveau

Les désavantages 
 Nécessite beaucoup de stubs (bouchon de test)
 Des modules de bas niveau potentiellement réutilisables risquent d'être mal testés
Il convient de noter qu'il est parfois possible de vérifier un programme informatique, c'est-à-dire prouver, de manière plus ou moins automatique, qu'il assure certaines propriétés.

Bottom-up 

On teste les modules du plus bas niveau puis ceux plus hauts qui les appellent. On obtient donc :
 première étape 
 7
 8
 9
 seconde étape 
 4
 5, 7 et 8
 6 et 9
 troisième étape 
 2, 4, 5, 7 et 8
 3, 6 et 9
 quatrième étape
 1, 2, 3, 4, 5, 6, 7, 8 et 9

Les avantages 

 Localisation facile des erreurs  
 Aucun besoin de stub
 Les modules réutilisables sont testés correctement
 Les tests peuvent se faire en parallèle avec le développement

Les désavantages 

 Nécessite des drivers 
 Les modules de haut niveau sont testés en dernier
 Aucun squelette de système n'est conceptualisé

Sandwich 

On combine ici les intégrations  et . Il faut distinguer trois niveaux :
 Niveau logique (haut) ;
 Niveau cible (milieu) ;
 Niveau opérationnel (bas).
On teste en même temps les modules de haut et bas niveau, puis on avance vers le centre, méthode réunissant les avantages des deux précédentes.

 première étape 
 1
 7 et 8
 9
 seconde étape 
 1, 2 et 3
 5, 7 et 8
 6 et 9
 4
 troisième étape
 1, 2, 3, 4, 5 et 6
 2, 4, 5, 7 et 8
 3, 6 et 9
 quatrième étape
 1, 2, 3, 4, 5, 6, 7, 8 et 9

Les avantages 

 Les niveaux haut et bas peuvent être testés en parallèle
 Diminuer les besoins en driver et en stub.

Les désavantages 

 Plus complexe à planifier
 Le niveau cible peut être difficile à définir

Big-bang 
Il s’agit d'une intégration non incrémentale. On intègre tous les modules d'un coup juste après les tests unitaires.

Les avantages 

 Convient aux petits systèmes
 Gain de temps

Les désavantages 

 Besoin de driver et de stub pour chaque module
 Ne permet pas le développement en parallèle
 Rend la localisation des erreurs difficile
 Les erreurs d'interface peuvent facilement passer inaperçues

Outils utilisés 

Pour les applications utilisant les nouvelles technologies et donc des ateliers de génie logiciel (Eclipse - Visual Studio - JBuilder - JDeveloper…), les tests d’intégration ont évolué vers de l’intégration continue.

L’intégration continue est la fusion des tests unitaires et des tests d’intégration, car le programmeur détient toute l’application sur son poste et peut donc faire de l’intégration tout au long de son développement.

Notes et références 

Integration