Test Logiciel 1 Le Prof… Le Cours… Les Outils…
Transcription
Test Logiciel 1 Le Prof… Le Cours… Les Outils…
Le Prof… Test Logiciel 1 Le Cours… EMN – GIPAD/GSI 2010-2011 Arnaud Gotlieb Les Outils… INRIA / CELTIQUE 2009 EMN - Test Logiciel 1 2009 http://www.irisa.fr/lande/gotlieb/ Code-based Testing OO Testing, Model-based Testing Constraint-based Testing CUnit, JUnit LTG, Simulink Euclide, Pex EMN - Test Logiciel 2 Aujourd’hui… a Introduction au Test Logiciel INTRODUCTION AU TEST LOGICIEL a Test unitaire avec Cunit a Critères de couverture a Techniques de génération de cas de test 2009 EMN - Test Logiciel 3 2009 EMN - Test Logiciel 4 9/9/1945 1980 t es t= Épo q Ép oq ue ue Ép oq ue t 1960 2009 pré ven tion tru c des t es t= es t= e toi r his pré 1945 tion mi se au po int historique et problèmatique du test 1990 EMN - Test Logiciel 5 2009 1960-80 : Test = mise au point « Testing is the process of executing a program with the intent of finding errors » erreur Æ faute Æ défaillance En fait, 3 activités distinctes : * détection de défaillances (rôle du test) * localisation de fautes (rôle de la mise au point) * correction des erreurs (rôle de la mise au point) 2009 EMN - Test Logiciel 6 1980-90 : Test = destruction Qu’avons-nous compris depuis ? Chaîne causale : EMN - Test Logiciel 7 [G. Myers The Art of Software Testing 1979] Conséquence immédiate : le testeur ne doit pas être le programmeur Position dogmatique progressivement abandonnée ! 2009 EMN - Test Logiciel 8 Visual 1998 1990-.. : Test = prévention « Se convaincre, par des techniques d’analyse ou d’exécution, qu’un programme répond à ses spécifications » - Analyse Æ Contrôle : vérifier des propriétés avant exécution - Exécution Æ Test : évaluer un résultat après exécution 2009 EMN - Test Logiciel 9 2009 EMN - Test Logiciel 10 Terminology (IEEE Standard Glossary of SE, BCS’s standard for Softw. Testing) a Validation: « The process of evaluating software at the end of software development to ensure compliance with intented usage » a Verification: « The process of determining whether the products of a given phase of the software development process fulfill the requirements established during the previous phase » a Testing: « Evaluating software by observing its execution » 2009 EMN - Test Logiciel 11 2009 EMN - Test Logiciel 12 Test de programme : notre définition Correction de programme : limite fondamentale - Tester = exécuter un programme P pour mettre en évidence la présence de fautes, par rapport à sa spécification F - Recherche de contre-exemples : ∃X tq P(X) ≠ F(X) ? 2009 EMN - Test Logiciel 13 Exécuter Outputs Verdict : pass☑ or fail☒ EMN - Test Logiciel EMN - Test Logiciel 14 En théorie : - par prédiction du résultat attendu - à l’aide d’une formule issue de la spécification - à l’aide d’un autre programme En pratique : - prédictions approximatives (à cause des calculs flottants,…) - formules inconnues (car programme = formule) - oracle contenant des fautes Vérifier 2009 2009 Problème de l’oracle : Comment vérifier les sorties calculées ? Programme P Oracle «Program Testing can be used to prove the presence of bugs, but never their absence » [Dijkstra 74] PS : développeur expérimenté Æ 1 faute / 10 lignes de code 163 fautes / 1000 instructions [B. Beizer Software Testing Techniques 1990] Processus de test Inputs Impossible de démontrer la correction d’un programme dans le cas général Å indécidabilité du problème de l’arrêt d’une machine de Turing 15 2009 EMN - Test Logiciel 16 A. Test fonctionnel Problème de la sélection des DT A base d’un modèle du programme issu des spécifications : A. Test fonctionnel : basé sur les spécifications Sorties Données de test - Informelles (test partitionnel, test aux limites, ...) B. Test structurel : basé sur l’analyse du programme Données de test - Semi-formelles (cas d’utilisation, diagrammes de séquence, UML/OCL, graphes causes/effets…) Sorties - Formelles (spéc. algébriques, machines B, systèmes de transitions IOLTS, …) 2009 EMN - Test Logiciel 17 2009 A base d’un modèle du code source du programme - modèle = représentation interne de la structure - Utilisation importante de la Théorie des Graphes, notamment des techniques de couverture Spécifications : renvoie le produit de i par j (i = 0, j = 0) --> 0 (i = 10, j = 100) -->1000 … --> OK EMN - Test Logiciel 18 Le test structurel est indispensable (1) B. Test structurel 2009 EMN - Test Logiciel 19 2009 prod(int i,int j ) { int k ; if( i==2 ) k := i << 1 ; else (faire i fois l ’addition de j) return k ; } EMN - Test Logiciel 20 Le test structurel est indispensable ! (2) Spécifications : renvoie le produit de i par j (i = 0, j = 0) --> 0 (i = 10, j = 100) -->1000 … Faute non détectée par du test fonctionnel patch -> k := j << 1 2009 prod(int i,int j ) { int k ; if( i==2 ) k := i << 1 ; else (faire i fois l ’addition de j) return k ; } EMN - Test Logiciel Software testing in the software developpement process Usage & acceptance testing Requirements Architecture & system System testing (performence, load, robustness, security testing) Functional specifications Unit & Integration testing Coding design 21 Test natif / test croisé 2009 EMN - Test Logiciel 22 Exemple de montage en test croisé : plateforme Java Card Test natif : machine de test = machine de développement Java Card Card reader USB port .cmd Card Commands processor APDUs Open Plateform loader Test croisé : machine de test ≠ machine de développement .java javac .class converter .cap verifier Personal Computer 2009 EMN - Test Logiciel 23 2009 EMN - Test Logiciel 24 Bibliographie : quelques livres Tests de non-regréssion Jeu de Test 3 Jeu de Test 2 Jeu de Test 1 … 3ème version 2nde version Tests de non-régression 1ère version 2009 EMN - Test Logiciel 25 2009 Bibliographie : quelques revues EMN - Test Logiciel 26 Et quelques sites intéressants... Software Testing Online Resources www.mtsu.edu/~storm/ Software Testing Stuff www.testdriven.com/ Model-based Software Testing www.geocities.com/model_based_testing/ Opensource ST www.opensourcetesting.org/unit_java.php Tao Xie’s homepage www.cs.washington.edu/homes/taoxie 2009 EMN - Test Logiciel 27 2009 EMN - Test Logiciel 28 Units of language a Functions in C TEST UNITAIRE AVEC CUNIT a Task in ADA a Methods or classes in C++ and Java a Predicates in Prolog a… 2009 EMN - Test Logiciel 29 2009 Unit testing frameworks EMN - Test Logiciel 30 Unit testing: atomic operation a Select test input variable values - JUnit, Parasoft’s Jtest for Java - CUnit, CTC++, IBM Rational Test Real Time for C - Parasoft’s C++Test, Cantata++… for C++ … a Define expected output values (a.k.a. oracle) http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks a Code a test script and register it in a database a Run the test ! 2009 EMN - Test Logiciel 31 2009 EMN - Test Logiciel 32 Cunit (http://cunit.sourceforge.net/) -- 1 Cunit (http://cunit.sourceforge.net/) -- 2 a Lightweight system for writing, managing and running unit test for C programs a Automated Output to XML file, Non-interactive a Basic Flexible programming interface, Non-interactive a Console Console interface (ANSI C), Interactive a Curses Graphical interface (Unix only), Interactive a Built as a static library which is linked with the user’s test script aprovides a rich set of assertions for testing common data types. 2009 EMN - Test Logiciel 33 2009 EMN - Test Logiciel 34 Typical test script: test_gcd.c Example #include "Basic.h" typedef unsigned short ush; ush gcd(ush u, ush v) { while( u > 0 ) { if ( v > u ) { u = u + v; v = u - v; u = u * v; } u = u - v; } return v; } a void test_gcd(void) { CU_ASSERT(4 == gcd(24, 28)); CU_ASSERT(4 == gcd(28, 24)); } main() { CU_pSuite pSuite = NULL; Select a test input: (28, 24) a Define expected output: 4 if (CUE_SUCCESS != CU_initialize_registry()) return CU_get_error(); a Define another test input : (24,28) a Expect output: 4 pSuite = CU_add_suite("Suite_1", 0, 0); if (!pSuite) { CU_cleanup_registry(); return CU_get_error(); } if ((!CU_add_test(pSuite, "test of fprintf()", test_gcd)) { CU_cleanup_registry(); return CU_get_error(); } a Script and run the test ! CU_basic_run_tests(); CU_cleanup_registry(); return CU_get_error(); } 2009 EMN - Test Logiciel 35 2009 EMN - Test Logiciel 36 Let’s play, now ! Makefile CUnitHeaders=/c/CUnit-2.1-0/include/CUnit CUnitLibs=/c/CUnit-2.1-0/lib a Download and install Cunit (README) requires Jam, MinGW on windows http://cunit.sourceforge.net test_gcd: gcd.o test_gcd.o $(CC) $^ -L$(CUnitLibs) -lcunit -o $@ a Code gcd.c, test_gcd.c and Makefile gcd.o: gcd.c $(CC) -c -D static= gcd.c a Run and explain… test_gcd.o: test_gcd.c $(CC) -c -I$(CUnitHeaders) test_gcd.c clean: 2009 EMN - Test Logiciel $(RM) gcd.o test_gcd.o test_gcd.exe 37 2009 EMN - Test Logiciel 38 JUnit for Java CRITERES DE TEST http://www.irisa.fr/lande/gotlieb/resources/JUnit_Tutorial.mp4 2009 EMN - Test Logiciel 39 2009 EMN - Test Logiciel 40 Représentations internes Graphe de flot de contrôle (GFC) Abstractions de la structure d’un programme Graphe orienté et connexe (N,A,e,s) où - Graphe de Flot de Contrôle [GFC] N : ens. de sommets = bloc d’instructions exécutés en séquence E : relation de N x N = débranchement possible du flot de contrôle - Graphe Def/Use [GDU] [- Program Dependence Graph, ...] e : sommet “d’entrée” du programme s : sommet de sortie du programme 2009 EMN - Test Logiciel 41 Graphe de flot de contrôle (GFC) : exemple double P(short x, short y) { short w = abs(y) ; double z = 1.0 ; faux d y<0 a b c d vrai if ( y<0 ) z = 1.0 / z ; return(z) ; } 2009 Déf: Un ensemble C de chemins du GFC (N,A,e,s) satisfait tous_les_sommets ssi ∀n ∈ N, ∃Ci ∈ C tq n est un sommet de Ci vrai c 42 Motivation : couvrir toutes les instructions du programme au moins une fois w != 0 b EMN - Test Logiciel Critère : tous_les_sommets | toutes_les_instructions a while ( w != 0 ) { z =z*x; w=w-1; } 2009 faux Exemple : Ici un seul chemin suffit a-b-c-b-d-e-f [6/6 sommets] e f EMN - Test Logiciel 43 2009 EMN - Test Logiciel e f 44 Critère structurel : tous_les_arcs | toutes_les_décisions Motivation : couvrir toutes les prises de décision au moins une fois Déf : Un ensemble C de chemins du GFC (N,A,e,s) satisfait tous_les_arcs ssi ∀a ∈ A, ∃Ci ∈ C tq a est un arc de Ci a 2009 c d e f EMN - Test Logiciel 45 d e f EMN - Test Logiciel Principe: X sensibilise un unique chemin du GFC a b Déf: séquence de sommets du GFC, non nécessairement finie, empruntée lors de l’exécution de P avec X comme entrée c 46 e f c a P(short x,y) short w= abs(y) double z= 1.0 b w != 0 z= z * x w= w-1 d d tous_les_chemins plus fort que tous_les_arcs tous_les_arcs plus fort que toutes_les_sommets EMN - Test Logiciel c Chemin sensibilisé : exec(P,X) Déf : Un ensemble C de chemins du GFC (N,A,e,s) satisfait tous_les_chemins ssi C contient tous les chemins de e à s 2009 b Exemple : Ici 4 chemins complets sont nécessaires a-b-d-f a-b-d-e-f a-b-c-b-d-f a-b-c-b-d-e-f 2009 Critère structurel : tous_les_chemins Ici, impossible car ∞ chemins et chemins non-exécutables ! a Motivation : couvrir toutes les chemins d’exécution, sans itérer plus d’une fois dans les boucles b Exemple : Ici 2 chemins sont nécessaires a-b-c-b-d-e-f [6/7 arcs] a-b-d-f [3/7 arcs] Critère structurel : tous_les_chemins_simples Exemples : exec(P,(0,0)) = a-b-d-f exec(P,(3,2)) = a-b-(c-b)²-d-f z=1.0 / z return(z) 47 2009 EMN - Test Logiciel y<0 e f 48 Problème des chemins non exécutables Exercice Soit c un chemin du GFC de P, existence de X tq c=exec(P,X) ? a P(short x,y) short w= abs(y) double z= 1.0 Ici, a-b-d-e-f est non-exécutable ! b w != 0 Weyuker 79 Déterminer si un sommet, un arc, ou un chemin du GFC est exécutable est indécidable dans le cas général c 2009 EMN - Test Logiciel P(short x) a z= z * x w= w-1 d y=x x=0 v c d v e 49 x < 0 && y>= 0 f g 2009 y= -x x= -1 f e f x>0 f b y<0 z=1.0 / z Idée de la preuve: réduction au problème de l’arrêt d’une Machine de Turing return(z) Trouver tous les chemins non-exécutables de ce programme EMN - Test Logiciel 50 Condition / Décision dans un programme Measuring code coverage Condition (bool., expr. arith, ...) a 3 distinct techniques - Instrumenting source code + Easy to implement + Powerful as everything regarding executions can be recorded - Add untrusted code in trusted source code if( A && (B || C)) - Instrumenting binary code + Do not modify source code - Difficult to implement Décision - Use a debugger + Do not modify source code - Specific to each compiler 2009 EMN - Test Logiciel (bool., expr. logique dans une structure de contrôle, ...) 51 Notation : Dec est la valeur de vérité de la décision 2009 EMN - Test Logiciel 52 Critères de test liés aux décisions Modified Condition/Decision Criterion (1) Objectif : Démontrer l’action de chaque condition sur la valeur de vérité de la décision if( A && (B || C)) 1. Decision Criterion (DC) : A=1,B=1,C=0 – Dec=1 A=0,B=0,C=0 – Dec=0 if( A && (B || C)) Principe : pour chaque condition, trouvez 2 cas de test qui changent Dec lorsque toutes les autres conditions sont fixées 2. Condition Criterion (CC) : A=1,B=1,C=0 – Dec=1 A=0,B=0,C=1 – Dec=0 3. Modified Condition/Decision Criterion (MC/DC) Ex : pour A 4. Multiple Condition/Decision Criterion: 23=8 cas de test 2009 EMN - Test Logiciel 53 Modified Condition/Decision Criterion (2) 2009 A=0, B=1,C=1 A=1, B=1,C=1 -- Dec=0 -- Dec=1 EMN - Test Logiciel 54 Exercice : peut-on faire mieux ? if( A && (B || C)) if( A && (B || C)) pour A A=0, B=1,C=1 A=1, B=1,C=1 -- Dec=0 -- Dec=1 pour A A= , B= ,C= A= , B= ,C= -- Dec= -- Dec= pour B A=1, B=1,C=0 A=1, B=0,C=0 -- Dec=1 -- Dec=0 pour B A= , B= ,C= A= , B= ,C= -- Dec= -- Dec= pour C A=1, B=0,C=1 A=1, B=0,C=0 -- Dec=1 -- Dec=0 pour C A= , B= ,C= A= , B= ,C= -- Dec= -- Dec= Ici, 5 cas de test suffisent pour MC/DC ! 2009 EMN - Test Logiciel 55 2009 EMN - Test Logiciel 56 Modified Condition/Decision Criterion (3) Lien avec la couverture du code objet Propriété : Si n = #conditions alors couvrir MC/DC requiert au moins n+1 DT et au plus 2n DT Couvrir MC/DC ⇒ couvrir les décisions du code objet mais Couvrir MC/DC ⇐ couvrir les décisions du code objet n+1 ≤ #données de test ≤ 2*n Couvrir les chemins du code objet ⇒ couvrir MC/DC mais Conditions couplées : changer la valeur d’une condition modifie la valeur d’une autre Couvrir les chemins du code objet ⇐ couvrir MC/DC En l’absence de conditions couplées, le minimum (n+1) peut-être atteint 2009 EMN - Test Logiciel 57 2009 EMN - Test Logiciel 58 Représentations internes From the Galileo development standard Abstractions de la structure d’un programme - Graphe de flot de contrôle [GFC] Structural coverage DAL A DAL B DAL C DAL D DAL E Statement coverage (source code) N/A 100% 100% 90% N/A Statement coverage (object code) 100% N/A N/A N/A N/A Decision coverage (source code) N/A 100% N/A N/A N/A Modified Condition & Decision Coverage (Source code) 100% N/A N/A N/A N/A 2009 EMN - Test Logiciel - Graphe Def/Use [GDU] GFC + décoration des sommets/arcs avec infos définitions/utilisations sur les variables [- Program Dependence Graph, …] 59 2009 EMN - Test Logiciel 60 Graphe Def/Use (GDU) – [Rapps & Weyuker 85] A chaque sommet j est associé - def(j) : {v ∈ Var(P) | v est définie en j } - c-use(j) : {v ∈ Var(P) | v est utilisée en j dans un calcul et ∃k ≠ j tel que v ∈ def(k)} A chaque arc j-k issu d’une décision est associé - p-use(j,k) : {v ∈ Var(P) | v est utilisée dans le prédicat j et conditionne l’exécution de k} Hypothèses : Toute variable utilisée possède une définition et à chaque définition correspond au moins une utilisation 2009 EMN - Test Logiciel 61 Graphe Def/Use : exemple double P(int x, int y) { w = abs(y) ; z = 1.0 ; while ( w != 0 ) { z = z*x ; w = w-1 ; } if ( y<0 ) z = 1.0 / z ; return(z) ; } 2009 2 p-use(2,3) : w c-use(3) : x,z,w def(3) : z,w 3 p-use(2,4) : w 4 p-use(4,5) : y p-use(4,6) : y 5 6 c-use(5) : z def(5) : z c-use(6) : z EMN - Test Logiciel 62 dcu(x,1)= {3}, dpu(x,1)= ∅ dcu(y,1)= ∅, dpu(y,1)= {4-5,4-6} dcu(w,1)= {3}, dpu(w,1)= {2-3,2-4} dcu(z,1)= {3,5,6}, dpu(z,1)= ∅ p-use(2,3) : w i-n1-…-nm-j est un chemin sans déf. de x de i à j ssi ∀k ∈ {1,..,m}, x ∉ def(nk) Soient i un sommet d’un GDU (N,A,e,s) et x ∈ def(i) c-use(3) : x,z,w def(3) : z,w dcu(x,i): {j ∈ N | x ∈ c-use(j) et ∃un chemin sans déf. de x de i à j} dpu(x,i): {j-k ∈ A | x ∈ p-use(j,k) et ∃un chemin sans déf. de x de i à j} EMN - Test Logiciel c-use(1) : ∅ def(1) : x,y,w,z dcu(x,j) et dpu(x,j) : exemples Chemin sans définition (def-clear path) 2009 1 63 1 2 3 p-use(2,4) : w 4 dcu(z,3)= {3,5,6}, dpu(z,3)= ∅ dcu(w,3)= {3}, dpu(w,3)= {2-3,2-4} p-use(4,6) : y dcu(z,5) = {6}, dpu(z,5) = ∅ 2009 6 EMN - Test Logiciel c-use(1) : ∅ def(1) : x,y,w,z p-use(4,5) : y 5 c-use(5) : z def(5) : z c-use(6) : z 64 Critère structurel : toutes_les_définitions Déf : Un ensemble C de chemins du GDU (N,A,e,s) satisfait toutes_les_définitions ssi ∀n ∈ N et ∀x ∈ def(n), ∃Ci ∈ C tel que Ci inclut un chemin sans déf. de x de n à un élément de dcu(x,n) ou dpu(x,n) Couverture de toutes_les_définitions 1 Ici, un seul chemin suffit ! 1-2-3-2-4-5-6 2 p-use(2,3) : w c-use(3) : x,z,w def(3) : z,w 3 p-use(2,4) : w 4 EMN - Test Logiciel 65 Critère structurel : toutes_les_utilisations Déf : C satisfait toutes_les_utilisations ssi ∀n∈ N et ∀x∈ def(n), ∃Ci ∈ C tq Ci inclut un chemin sans déf. de x de n à tous les éléments de dcu(x,n) et dpu(x,n) 5 c-use(6) : z EMN - Test Logiciel 66 Chemin définition/utilisation p.r.à. x (du-path w.r.t. x) 1. x ∈ def(i) 2a. soit x ∈ c-use(k) alors p est un chemin sans déf. de x de i à k et p se trouve sur un chemin simple 2b. soit x ∈ p-use(j,k) alors p est un chemin sans déf. de x de i à j et p se trouve sur un chemin simple toutes_les_utilisations est plus fort que toutes_les_définitions EMN - Test Logiciel 2009 c-use(5) : z def(5) : z Déf: p = i-..-j-k est un chemin définition/utilisation par rapport à x ssi : Exemple : Ici, trois chemins sont nécessaires ! par exemple : 1-2-4-6, 1-2-3-2-4-6 et 1-2-(3-2)2-4-5-6 2009 p-use(4,5) : y p-use(4,6) : y 6 2009 c-use(1) : ∅ def(1) : x,y,w,z 67 2009 EMN - Test Logiciel 68 Chemin définition/utilisation : exemples du_path w.r.t. x : 1-2-3 du_paths w.r.t. y : 1 1-2-4-5, 1-2-4-6, 1-2-3-2-4-5, 1-2-3-2-4-6 du_paths w.r.t. z : c-use(1) : ∅ def(1) : x,y,w,z 2 p-use(2,3) : w c-use(3) : x,z,w def(3) : z,w 3 def(3) : z,w p-use(4,5) : y p-use(4,6) : y 5 du_paths w.r.t. w : 1-2-3,1-2-4,3-2-3,3-2-4 Déf: C satisfait tous_les_chemins_du 1 c-use(1) : ∅ def(1) : x,y,w,z ssi ∀n∈ N et ∀x∈ def(n), C inclut tous les chemins 2 p-use(2,3) : w définition/utilisation par rapport à x c-use(3) : x,z,w p-use(2,4) : w 3 p-use(2,4) : w 4 1-2-3,1-2-4-5,1-2-4-6, 3-2-3,3-2-4-5,3-2-4-6, 5-6 2009 Critère structurel : tous_les_chemins_du 6 c-use(5) : z def(5) : z c-use(6) : z EMN - Test Logiciel 69 Relation entre les critères (“est plus fort que”) 4 Les liens entre critères liés au GDU et au GFC Critères liés au GDU C1 subsume C2 (noté C1 ⇒ C2) ssi ∀GDU, ∀ensemble de chemins P qui satisfait C1, P satisfait aussi C2 tous_les_chemins_du toutes_les_utilisations Propriétés : - relation transitive ( C1 ⇒ C2 et C2 ⇒ C3 alors C1 ⇒ C3 ) - définit un ordre partiel entre les critères toutes_les_définitions Ex: tous_les_chemins_du subsume toutes_les_utilisations 2009 EMN - Test Logiciel p-use(4,5) : y p-use(4,6) : y Ici, 5 chemins ! 1-2-4-6, 1-2-4-5-6, 5 c-use(5) : z def(5) : z 21-2-(3-2) 4-6,1-2-3-2-4-5-6 6 c-use(6) : z 1-2-3-2-4-6 2009 EMN - Test Logiciel 70 71 2009 EMN - Test Logiciel Critères liés au GFC tous_les_chemins tous_les_arcs tous_les_sommets 72 [Rapps & Weyuker 1985] Et en plus… Freeware: - Gcov / gcc www.netadmintools.com/html/1gcov.man.html - Hansel (Oregon University) hansel.sourceforge.net - Quilt / Junit quilt.sourceforge.net tous_les_chemins tous_les_chemins_du toutes_les_utilisations toutes_les_c_use/ quelques_p_use toutes_les_p_use/ quelques_c_use toutes_les_définitions Quelques outils disponibles... toutes_les_p_use tous_les_arcs Outils commerciaux : - IPL Cantata++ / ADATest - IBM Rational Test Realtime www.iplbath.com/products www-306.ibm.com/software/awdtools/test/realtime - LDRA Testbed www.ldra.co.uk/pages/testbed.htm tous_les_sommets 2009 EMN - Test Logiciel 73 Synthesis a Nowadays, Software Testing 1. relies on solid theoretical foundations 2. is always tool-supported a Code-based testing / Model-based testing are complementary techniques a Measuring code coverage is desirable to assess the test quality 2009 EMN - Test Logiciel 75 2009 EMN - Test Logiciel 74