Upload
colombain-delarue
View
110
Download
2
Embed Size (px)
Citation preview
GEF 243BProgrammation informatique
appliquée
Tests
Revue
• Quelle est la différence entre une abstraction, le masquage d’information et l’ encapsulation?
• Quelles sont les deux composantes d’un module?
Synopsis
• Tests – Le concept• Tests boîte blanche• Tests boîte noir
Tests – Le concept
• Plusieurs études ont été conduites et indiquent qu’entre 30 et 85 erreurs sont introduites pour chaque 1000 lignes de code produites.
• Même pour le logiciel qui est testé de façon intensive, tel que le logiciel à sécurité critique, 0.5 à 3 erreurs seront encore présentent dans 1000 lignes de code – Myers 1986 IEEE computer
• “Les bons tests sont aussi difficiles à produire que les bons designs.” – Hans Van Vliet
Tests – Le concept
• Pour que les tests soient efficaces, le testeur doit avoir une approche et attitude qui sont propices à exposer les erreurs
• La loi de Dijkstra pour les tests: “Les tests peuvent être utilisés pour montrer la présence des bogues, mais jamais leurs absences.” conférence de l’OTAN 1969
Tests – Le concept
• Ce que Dijkstra veut dire est que les tests doivent se concentrer sur la détection des erreurs et non sur la démonstration que le programme ne contient plus d’erreurs.
• Si vous voulez prouver que votre programme est correct, vous pouvez, et allez sûrement manquer des erreurs.
• Si vous retenez seulement une chose de ce cours ce doit être que vous devez croire que votre code contient des erreurs avant de le tester
Tests – Le concept
• Vos efforts pour les tests devraient toujours être axés pour essayer de faire planter votre codeEssayez des valeurs hors de la plage que vous avez
spécifiésEssayez des quantités d’information qui sont nuls, en
trop, et des quantités moyennes.Essayez des valeurs erronés (entrez une chaîne de char
au lieu d’un nombre)…
• Les tests doivent donc tester les bornes pour lesquelles le programme a été écrit.
Tests – Le concept
• Votre programme doit être dessiné pour être testableLes modules et les fonctions doivent être petites
et cohésivesSi vous écrivez des fonctions qui sont
complexes, vos tests vont être complexesVous devez toujours penser à vos tests quand
vous faites le design de vos programmes, car tôt ou tard vous allez avoir à tester ce que vous avez produit
Tests – Le concept
• Il y a des parties de votre code qui ne sont pas testables facilementLes tests de défaillances, le traitement des erreurs et
certaines conditions anormales:• Vous ne risqueriez pas une déflagration nucléaire pour tester le
logiciel de sécurité.• Vous devez parfois simuler, ou utiliser d’autres méthodes pour
vérifier votre codeLes fuites de mémoire ne peuvent pas être testées, vous
devez inspecter votre code et vérifier que les blocs de mémoires sont libérés quand vous n’en avez plus de besoin.
• Ceci est un des tests les plus difficile.
Tests – Le concept
• Quand vous allez décider quels tests vous allez exécuter, considérez le spectre des situations et comportements:
• Chaque comportement doit être spécifié en terme de l’état courrant, des entrées, des sorties et de l’état résultant
Suppositions Exceptions Cas normales
comportements contrôlés
situations normales
comportements non contrôlés
situations anormales
Tests – Le concept• Les suppositions sont des situations qui sont anormales et
des comportements qui sont non-contrôlés; donc elles sont non-testées.
• Cependant les suppositions doivent être documentées• Les documents de requis et de design doivent contenir et
tracer toutes les suppositions• C’est une bonne pratique d’identifier toutes les
suppositions dans l’entête de chaque module et fonctions pour identifier les limitations du logiciel
• Ayez une suppositions seulement si vous ne pouvez pas observer, identifier ou contrôler le comportement
Tests – Le concept
• Les exceptions sont des situations qui sont anormales et que nous ne voulons pas qui se produisent
• Mais contrairement aux suppositions, nous pouvons détecter et contrôler le comportement des exceptions
• Donc les exceptions sont des comportements contrôlés
• Les trois étapes pour traiter les exceptions sont:Détecter,Traiter, etRapporter.
Tests – Le concept
• La détection d’une exception entraîne la capacité de reconnaître les états qui ne sont pas correctsReconnaître quand il ne reste plus de mémoire quand
on utilise malloc Vérifier le dénominateur avant chaque opération de
divisionVérification pour savoir si une fonction retourne un
code d’erreurVérification pour savoir si un pointeur est non NULL,
…
• Donc une exception est observable
Tests – Le concept• Les situations normales doivent toujours être détectables et
prédictibles à partir d’un état connu et un ensemble d’entrées, donc ces situations sont des comportements contrôlés
• La plus part des requis sont toujours énoncés de façon positive: Le logiciel doit …
• Les requis doivent aussi inclure tout comportement qui est contre indiqué Le logiciel ne doit pas …
Tests – Le concept
• Les deux types de comportement, positif et contra doivent être le sujet de tests
• Quand vous écrivez un plan de test, vous devriez toujours considérer les comportements normaux et anormaux
• Les suppositions devraient toujours être révisées et justifiées pour s’assurer que la situation est vraiment non détectable et non contrôlable
Tests boîte blanche
void main(void)
{
CATALOGUE *pNew = NULL;
…
pNew = (CATALOGUE *)malloc(sizeof(CATALOGUE));
if (pNew == NULL) exit(0);
strcpy(pNew->product, "Millennium Falcon");
pNew->price = 101.50;
pNew->pNextProduct = NULL;
pProductsList->pNextProduct = pNew;
}
Tests boîte blanche
• Il y a deux types de tests: boîte blanche et boîte noir
• Les tests boîte blanche teste le code et l’état des variables dans une fonction ou un module
• Les tests boîte blanche vérifie donc la structure du code, les flots logiques et les détails d’implémentation
• Les tests boîte blanche sont donc appelé test structurels
Tests boîte blanche
• Dans les tests boîte blanche chaque condition et chaque mécanisme de flot doit être testéChaque condition doit être testé pour les cas normales:
• Valeurs moyennes (en dedans des bornes)
• Valeurs maximums et minimums pour être certain que les bornes sont respectées (nombre d’itérations, plus grand que, plus petit que,… )
Chaque condition doit aussi être testée pour les exceptions:
• Valeurs qui devraient générer des erreurs
• Access aux tableaux hors des bornes …
Tests boîte blanche
• Donc les tests boîte blanche traitent les contrôles de flots, les aspects du langages de l’ implémentation d’un algorithme
• Chaque algorithme doit être testé pour assurer que chaque ligne de code est couverte
• Chaque condition qui fait partie d’une structure de décision est testé au moins une fois pour chaque valeur VRAI et FAUX
Tests boîte noir
Tests boîte noir
• Les tests boîte noir sont des tests pour lesquels nous ne regardons pas le code comme tel
• Nous savons ce qu’une fonction donne comme sortie pour une entrée donnée et c’est tout ce qui nous concerne pour ces tests
• Nous nous ne préoccupons pas des détails internes de la fonction ou du module
• Nous testons les fonctions comme des mécanismes de transformations opaques
• Les tests boîte noir sont aussi connu comme des tests fonctionnels car ils tests les fonctions en entiers
Tests boîte noir
• Encore ici nous testons les situations normales et anormales
• Quand nous testons les modules et les fonctions, nous donnons des paramètres qui peuvent engendrer les deux types de situations
• Les outils de couverture devraient être utilisés durant les tests boîte noir pour mesurer l’efficacité des tests
Quiz Time
• Que veut dire Dijkstra avec sa loi pour les tests?• Quelles sont les trois type de cas dans les tests?• Quelles sont les différences entre les tests boîtes
blanche et noir?