đŸ•·ïž Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 152 (from laksa144)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

â„č Skipped - page is already crawled

📄
INDEXABLE
✅
CRAWLED
1 month ago
đŸ€–
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH1.6 months ago (distributed domain, exempt)
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://fr.wikipedia.org/wiki/Test_unitaire
Last Crawled2026-02-22 10:02:21 (1 month ago)
First Indexed2013-08-09 19:15:25 (12 years ago)
HTTP Status Code200
Meta TitleTest unitaire — WikipĂ©dia
Meta Descriptionnull
Meta Canonicalnull
Boilerpipe Text
Un article de WikipĂ©dia, l'encyclopĂ©die libre. En programmation informatique , le test unitaire (ou TU , voire UT pour Unit Testing en anglais) est une procĂ©dure permettant de vĂ©rifier le bon fonctionnement d'une partie prĂ©cise d'un logiciel ou d'une portion d'un programme (appelĂ©e « unité » ou « module »). Dans les applications non critiques, l'Ă©criture des tests unitaires a longtemps Ă©tĂ© considĂ©rĂ©e comme une tĂąche secondaire. Cependant, les mĂ©thodes extreme programming (XP) et test driven development (TDD) ont remis les tests unitaires, appelĂ©s « tests du programmeur », au centre de l'activitĂ© de programmation. Les tests unitaires, en tant que principe de tester sĂ©parĂ©ment des parties plus Ă©lĂ©mentaires d'un logiciel complexe, remonte aux dĂ©buts de l' ingĂ©nierie logicielle . En Juin 1956, H.D. Benington prĂ©sente en effet le projet SAGE au symposium sur les mĂ©thodes de programmation avancĂ©e organisĂ© par la marine amĂ©ricaine . L'approche utilisĂ©e prĂ©voyait Ă  l'issue de la phase de codage une Ă©tape de « tests de paramĂštres » pour valider la conformitĂ© des sous-programmes et composants Ă  leur spĂ©cifications, avant de procĂ©der Ă  un « test d'assemblage » de ces composants [ 1 ] , [ 2 ] . En 1964, une approche similaire est dĂ©crite pour les logiciels du programme Mercury  : les unitĂ©s individuelles dĂ©veloppĂ©es par diffĂ©rentes organisations Ă©taient soumises Ă  des "tests unitaires" avant d'ĂȘtre intĂ©grĂ©es entre elles. En 1969, les mĂ©thodologies de tests sont structurĂ©es encore davantage, avec des tests unitaires, des tests de composants, et des tests d'intĂ©gration , dans le but de valider des parties Ă©lĂ©mentaires du logiciel sĂ©parĂ©ment, puis de vĂ©rifier le bon fonctionnement des assemblages progressif en blocs plus larges [ 3 ] . Des normes publiques adoptĂ©es Ă  la fin des annĂ©es 60, telles que les standards militaires MIL-STD-483 [ 4 ] et MIL-STD-490 de l'armĂ©e amĂ©ricaine contribuent Ă  une large reconnaissance et adoption des tests unitaires au sein de gros projets. Les tests unitaires Ă©taient alors interactifs [ 2 ] , ou automatisĂ©s [ 5 ] , utilisant soit des tests programmĂ©s ou des outils de capture et rĂ©pĂ©tition automatisĂ©s. En 1994 Kent Beck dĂ©crit un environnement cadre de test pour le langage Smalltalk , qui deviendra SUnit [ 6 ] par la suite [ 7 ] , [ 8 ] . En 1997, Kent Beck rencontre Erich Gamma avec lequel il crĂ©e JUnit qui, par sa popularitĂ©, entraĂźnera la crĂ©ation de nombreux frameworks de tests unitaires, cet ensemble se nomme xUnit [ 9 ] . À la mĂȘme Ă©poque, ATTOL Unit test est dĂ©veloppĂ©, puis utilisĂ© par Sextant Avionique en 1998 [ 10 ] On Ă©crit un test pour confronter une rĂ©alisation Ă  sa spĂ©cification . Le test dĂ©finit un critĂšre d'arrĂȘt (Ă©tat ou sorties Ă  l'issue de l'exĂ©cution) et permet de statuer sur le succĂšs ou sur l'Ă©chec d'une vĂ©rification. GrĂące Ă  la spĂ©cification, on est en mesure de faire correspondre un Ă©tat d'entrĂ©e donnĂ© Ă  un rĂ©sultat ou Ă  une sortie. Le test permet de vĂ©rifier que la relation d'entrĂ©e / sortie donnĂ©e par la spĂ©cification est bel et bien rĂ©alisĂ©e. La mĂ©thode XP prĂ©conise d'Ă©crire les tests en mĂȘme temps, ou mĂȘme avant la fonction Ă  tester ( Test Driven Development ). Ceci permet de dĂ©finir prĂ©cisĂ©ment l'interface du module Ă  dĂ©velopper. Les tests sont exĂ©cutĂ©s durant tout le dĂ©veloppement, permettant de visualiser si le code fraĂźchement Ă©crit correspond au besoin. Lors d'une modification d'un programme, les tests unitaires signalent les Ă©ventuelles rĂ©gressions . En effet, certains tests peuvent Ă©chouer Ă  la suite d'une modification, il faut donc soit réécrire le test pour le faire correspondre aux nouvelles attentes, soit corriger l'erreur se situant dans le code. Les tests unitaires peuvent servir de complĂ©ment Ă  l'API , il est trĂšs utile de lire les tests pour comprendre comment s'utilise une mĂ©thode. De plus, il est possible que la documentation ne soit plus Ă  jour, mais les tests eux correspondent Ă  la rĂ©alitĂ© de l'application. On dĂ©finit gĂ©nĂ©ralement 4 phases dans l'exĂ©cution d'un test unitaire : Initialisation (fonction setUp ) : dĂ©finition d'un environnement de test complĂštement reproductible (une fixture ). Exercice  : le module Ă  tester est exĂ©cutĂ©. VĂ©rification (utilisation de fonctions assert ) : comparaison des rĂ©sultats obtenus avec un vecteur de rĂ©sultat dĂ©fini. Ces tests dĂ©finissent le rĂ©sultat du test : SUCCÈS ( SUCCESS ) ou ÉCHEC ( FAILURE ). On peut Ă©galement dĂ©finir d'autres rĂ©sultats comme ÉVITÉ ( SKIPPED ). DĂ©sactivation (fonction tearDown ) : dĂ©sinstallation des fixtures pour retrouver l'Ă©tat initial du systĂšme, dans le but de ne pas polluer les tests suivants. Tous les tests doivent ĂȘtre indĂ©pendants et reproductibles unitairement (quand exĂ©cutĂ©s seuls). Il s'agit pour le programmeur de tester un module , indĂ©pendamment du reste du programme, ceci afin de s'assurer qu'il rĂ©ponde aux spĂ©cifications fonctionnelles et qu'il fonctionne correctement en toutes circonstances. Cette vĂ©rification est considĂ©rĂ©e comme essentielle, en particulier dans les applications critiques. Elle s'accompagne couramment d'une vĂ©rification de la couverture de code (Ă©valuation de la couverture structurelle), qui consiste Ă  s'assurer que l'ensemble des tests conduit Ă  exĂ©cuter l'ensemble (ou une fraction dĂ©terminĂ©e) des instructions prĂ©sentes dans le code. L'ensemble des tests unitaires doit ĂȘtre rejouĂ© aprĂšs une modification du code afin de vĂ©rifier qu'il n'y a pas de rĂ©gressions (l'apparition de nouveaux dysfonctionnements). L'emploi d'une « stratĂ©gie de test » particuliĂšre peut limiter les tests Ă  rejouer, par exemple : une analyse d'impact des modifications, corrĂ©lĂ©e Ă  une preuve d'indĂ©pendance des modules, permet de cibler les cas de test unitaire Ă  rejouer. Un test doit correspondre aux spĂ©cifications de l'application, il faut donc Ă©crire les tests en premier puis les faire passer par la suite plutĂŽt que d'Ă©crire le code avant et de prendre le risque d'ĂȘtre influencĂ© par celui-ci lors de la rĂ©daction des tests [ 11 ] . Bob Martin [ 12 ] , grand dĂ©fenseur de la mĂ©thode TDD , propose un modĂšle simple pour l'Ă©criture des tests unitaires : Écrire une fonction de test qui doit obtenir un rĂ©sultat dĂ©fini dans les spĂ©cifications. Ce code appelant un code qui n'existe pas encore, celui-ci doit Ă©chouer. Ceci a pour but de dĂ©finir une fonction qui teste « quelque chose ». Écrire le code (le minimum de « quelque chose ») pour faire rĂ©ussir le test. Une fois le test en succĂšs, rajouter un autre test pour obtenir un rĂ©sultat lĂ©gĂšrement diffĂ©rent, en faisant varier les entrĂ©es par exemple. Ce nouveau test fera faillir le code principal. Modifier le code principal pour faire rĂ©ussir les tests. Recommencer, en Ă©liminant et refactorisant les Ă©ventuelles redondances dans le code des tests. On refactorise en mĂȘme temps le code principal que le code des tests. Un test unitaire doit tester une caractĂ©ristique et une seule. On ne dĂ©finit pas un «  scĂ©nario  » de test complexe dans un test unitaire. Il est dĂ©conseillĂ© de tester les dĂ©tails d'implĂ©mentation telles que les fonctions privĂ©es d'une classe, on se concentrera Ă  tester les fonctions publiques, c'est-Ă -dire les interfaces avec lesquelles les acteurs extĂ©rieurs interagissent. Ainsi, on dĂ©couple les tests de l'implĂ©mentation et on se concentre sur la vĂ©rification du comportement attendu tout en gardant une flexibilitĂ© sur la maniĂšre d'arriver au rĂ©sultat souhaitĂ©. Les mocks sont des objets permettant de simuler un objet rĂ©el de façon contrĂŽlĂ©e. Dans certains cas, l'utilisation de mock est primordiale, pour un gain de temps de couverture de code , et de fiabilitĂ© des tests [ 13 ] pour simuler une base de donnĂ©es , un service web , etc., les interactions entre l'application et ces outils prennent du temps, l'utilisation de mock pour simuler leurs fonctionnements peut ĂȘtre un gain de temps considĂ©rable ; certains cas d'erreurs sont trĂšs difficile Ă  reproduire, l'utilisation de mock permet ici de simuler une erreur pour pouvoir traiter ce cas et donc amĂ©liorer la couverture de code, par exemple le catch d'une exception ; sans l'utilisation de mock, le test peut retourner une erreur ne provenant pas du code qui est testĂ© (par exemple une base de donnĂ©es). Cependant, une utilisation abusive de mock peut avoir l'effet inverse, notamment allonger le temps d'exĂ©cution des tests, rendre les tests compliquĂ©s Ă  comprendre et Ă  maintenir. La plupart des frameworks de la famille xUnit permettent la gĂ©nĂ©ration des classes de test unitaire. Cependant ces frameworks ne fournissent que le squelette des classes. Les tests devront donc ĂȘtre Ă©crits par le dĂ©veloppeur. La gĂ©nĂ©ration de tests unitaires est un sujet important pour les chercheurs et plusieurs confĂ©rences s'intĂ©ressent Ă  cette problĂ©matique, telles que International Symposium on Software Testing and Analysis (ISSTA), International Conference on Software Engineering (ICSE) et Automated Software Engineering (ASE). Lors d'une modification dans le code d'un programme, il se peut que certains tests ne passent plus ; dans ce cas, le dĂ©veloppeur doit dĂ©terminer si cela vient du code en lui-mĂȘme ou du test : si cela vient du test, le dĂ©veloppeur doit modifier son test car la suppression de celui-ci entraĂźnerait une augmentation des chances de rĂ©gression du programme. Certains chercheurs ont dĂ©veloppĂ© des outils pour rĂ©soudre ce problĂšme. ReAssert [ 14 ] est un outil suggĂ©rant des rĂ©parations pour un test qui Ă©choue, il analyse les tests Ă  modifier et suggĂšre des changements au dĂ©veloppeur, si cette suggestion convient au dĂ©veloppeur, il peut effectuer le changement en cliquant sur un bouton. Les tests unitaires paramĂ©trables sont des tests unitaires qui prennent des paramĂštres. Ils peuvent ensuite utiliser des outils comme QuickCheck pour gĂ©nĂ©rer des paramĂštres. Ces tests sont supportĂ©s par JUnit , TestNG et NUnit. En s'appuyant sur des cas concrets d'entrĂ©e et sortie, la gĂ©nĂ©ration d'Oracle et sur la couverture de test pour minimiser les cas, des chercheurs ont rĂ©ussi Ă  gĂ©nĂ©rer des tests unitaires paramĂ©trables [ 15 ] . Les rĂ©sultats de cette mĂ©thode sont prometteurs. Il existe une multitude de cadriciels ( framework ) permettant de rĂ©aliser facilement des tests unitaires. Il en existe dans les principaux langages de programmation . Par exemple Test::More [ 16 ] pour le Perl . Le terme gĂ©nĂ©rique «  xUnit  » dĂ©signe un outil permettant de rĂ©aliser des tests unitaires dans un langage donnĂ© (dont l'initiale remplace « x » le plus souvent). AUnit [ 17 ] pour Ada  ; ASUnit [ 18 ] pour ActionScript  ; Cppunit [ 19 ] pour C++  ; CUnit [ 20 ] pour C  ; DUnit pour Delphi  ; FLEXunit pour Adobe Flex  ; Google Test [ 21 ] et Boost Test [ 22 ] pour C++  ; HUnit [ 23 ] pour Haskell  ; JSUnit [ 24 ] , QUnit [ 25 ] , Unit.js [ 26 ] et Jest [ 27 ] pour JavaScript  ; JUnit [ 28 ] et TestNG [ 29 ] pour Java  ; NUnit [ 30 ] pour .NET  ; Microsoft Unit Test [ 31 ] pour .NET  ; xUnit [ 32 ] pour .NET  ; NUnitASP [ 33 ] pour ASP.NET (support interrompu depuis le 31 janvier 2008 ) ; OUnit [ 34 ] pour OCaml  ; OCunit pour Objective C  ; PBUnit pour PowerBuilder  ; PHPUnit [ 35 ] , SimpleTest [ 36 ] et Atoum [ 37 ] pour PHP  ; plunit pour Prolog  ; utPLSQL [ 38 ] pour PL/SQL  ; Unittest et PyUnit pour Python  ; Tape pour JavaScript  ; Test::Unit pour Ruby  ; Test::More pour Perl  ; Typemock pour .NET, C++, C#. Avec Typemock vous pouvez travailler sur legacy code aussi. SUnit [ 39 ] pour Smalltalk  ; RPGUnit [ 40 ] pour RPG ; ScalaTest pour Scala SASUnit [ 41 ] pour SAS . Divers outils permettent l'automatisation des tests unitaires : Le module TBrun de la suite d'outils LDRA  ; Tessy (distribution : Hitex Development Tools /Allemagne). Ponicode, gĂ©nĂ©ration de tests unitaires en Javascript [ 42 ] . Cycle en V Test Extreme programming Test Driven Development ↑ (en) Benington, Herbert D., «  Production of large computer programs  », Proceedings of the Symposium on Advanced Programming Methods for Digital Computers, Washington, D.C., June 28-29, 1956 , Office of Naval Research, Department of the Navy,‎ 1956 , p.   15-28 ↑ a et b H. D. Benington , «  Production of large computer programs  », Proceedings of the 9th international conference on Software Engineering , IEEE Computer Society Press, iCSE '87,‎ 1 er mars 1987 , p.   299–310 ( ISBN   978-0-89791-216-7 , DOI   10.5555/41765.41799 , lire en ligne , consultĂ© le 3 avril 2024 ) ↑ Norman A. Zimmerman , «  System integration as a programming function  », Proceedings of the 1969 24th national conference , Association for Computing Machinery, aCM '69,‎ 26 aoĂ»t 1969 , p.   459–467 ( ISBN   978-1-4503-7493-4 , DOI   10.1145/800195.805951 , lire en ligne , consultĂ© le 3 avril 2024 ) ↑ (en) Gouvernement des Etats Unis d'AmĂ©rique, DĂ©partement de la DĂ©fence, MIL-STD-483 Military standard: configuration management practices for systems, equipment, munitions, and computer programs , 31 dĂ©cembre 1970 , Section 3.4.7.2. "The contractor shall then code and test software Units, and enter the source and object code, and associated listings of each successfully tested Unit into the Developmental Configuration" ↑ (en) Michael F. Tighe , «  The value of a proper software quality assurance methodology  », ACM SIGMETRICS Performance Evaluation Review , vol.  7, n os  3-4,‎ novembre 1978 , p.   165–172 ( ISSN   0163-5999 , DOI   10.1145/1007775.811118 , lire en ligne , consultĂ© le 3 avril 2024 ) ↑ Camp Smalltalk SUnit ↑ Simple Smalltalk Testing:With Patterns , in Smalltalk Report octobre 1994, Kent Beck ↑ (en) Ward Cunningham, «  Testing Framework  » , sur wiki.c2.com . ↑ Xunit, Martin Fowler ↑ GNU Based Compilation System for Space Embedded Applications, Blondin, J. P. & Martignano, M., DASIA 98 - Data Systems in Aerospace, Proceedings of the conference held 25-28 May, 1998 in Athens, Greece, Edited by B. Kaldeich-SchĂŒ.rmann. ESA SP-422. Paris: European Space Agency, 1998., p.137, "1998ESASP.422..137B", page 138 http://adsbit.harvard.edu//full/1998ESASP.422..137B/0000138.000.html ↑ Unit Testing Best Practices, Roy Osherove . ↑ Test First, bob Martin . ↑ Robert Martin, When to Mock . ↑ (en) Brett Daniel, Danny Dig, Tihomir Gvero, Vilas Jagannath, Johnston Jiaa, Damion Mitchell, Jurand Nogiec, Shin Hwei Tan et Darko Marinov, «  ReAssert: a tool for repairing broken unit tests  », ICSE ,‎ 2011 ( lire en ligne ) . ↑ (en) Gordon Fraser et Andreas Zeller, «  Generating Parameterized Unit Tests  », ISSTA ,‎ 2011 ( lire en ligne ) . ↑ Test::More sur CPAN , entre autres modules de tests . Voir aussi les articles de l'association des mongueurs de Perl dans Linux Magazine France disponibles sur http://articles.mongueurs.net/magazines ↑ AUnit ↑ AsUnit ↑ CppUnit et en version 2 ↑ CUnit ↑ GoogleTest ↑ Boost.Test ↑ HUnit ↑ JsUnit ↑ http://qunitjs.com Unit testing for Javascript made by the jQuery Foundation ↑ (en) Unit JS  : «  Unit testing framework for Javascript  ». ↑ (en) «  Jest · 🃏 Delightful JavaScript Testing  », sur jestjs.io (consultĂ© le 2 mars 2020 ) . ↑ Welcome to The New JUnit.org! | JUnit.org . ↑ (en) «  TestNG Documentation  », sur testng.org (consultĂ© le 21 mai 2024 ) . ↑ NUnit - Home ↑ (en-US) erickson-doug , «  Writing Unit Tests for the .NET Framework with the Microsoft Unit Test Framework for Managed Code - Visual Studio  », sur docs.microsoft.com (consultĂ© le 4 septembre 2018 ) . ↑ (en) «  Home > xUnit.net  », sur xunit.github.io (consultĂ© le 4 septembre 2018 ) . ↑ NUnitAsp - ASP.NET unit testing ↑ OUnit ↑ PHPUnit - Trac ↑ SimpleTest - Unit Testing for PHP ↑ Atoum ↑ utPLSQL ↑ Simple Smalltalk Testing: With Patterns ↑ http://rpgunit.sourceforge.net/ ↑ (en) «  SASUnit  », sur SourceForge (consultĂ© le 24 fĂ©vrier 2020 ) . ↑ (en) «  Ponicode - Quick and easy Javascript unit testing  », sur ponicode.com (consultĂ© le 23 juin 2020 ) . v  · m Gestion de la qualitĂ© logicielle Indicateurs de qualitĂ© ( ISO/CEI 9126 ) CapacitĂ© fonctionnelle (rĂ©ponse aux exigences ) FiabilitĂ© MaintenabilitĂ© Performance PortabilitĂ© UtilisabilitĂ© ComprĂ©hension et contrĂŽle du code source Automatisation de test Commentaires Documentation Inspection de produit Programmation en binĂŽme ou en groupe RĂšgles de codage Revue de code Tests Acceptation IntĂ©gration Performance RĂ©gression Unitaire Utilisateur Validation MĂ©triques CohĂ©sion Couplage Couverture de code Halstead IndĂ©pendance fonctionnelle Indice de maintenabilitĂ© Ligne de code Nombre cyclomatique Point de fonction Remaniements Maintenance Optimisation de code RĂ©usinage de code ( RĂšgle de trois ) Principes de programmation Encapsulation GRASP KISS Loi de DĂ©mĂ©ter Masquage de l'information Ne vous rĂ©pĂ©tez pas (DRY) Patron de conception SĂ©paration des prĂ©occupations YAGNI SOLID ResponsabilitĂ© unique Ouvert/fermĂ© Substitution de Liskov SĂ©grĂ©gation des interfaces Inversion des dĂ©pendances Mauvaises pratiques Antipatterns Attente active Grosse boule de boue Programmation spaghetti ( syndrome ) RĂ©inventer la roue Code smells Duplication de code God object Voir aussi : GĂ©nie logiciel , Software craftsmanship , DĂ©gradation logicielle Portail de l’informatique
Markdown
[Aller au contenu](https://fr.wikipedia.org/wiki/Test_unitaire#bodyContent) Menu principal Menu principal dĂ©placer vers la barre latĂ©rale masquer Navigation - [Page d’accueil](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal "Accueil gĂ©nĂ©ral [z]") - [Portails thĂ©matiques](https://fr.wikipedia.org/wiki/Portail:Accueil "Regroupements d'articles par thĂ©matiques") - [Article au hasard](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Page_au_hasard "Affiche un article au hasard [x]") - [Contact](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Contact "Qui contacter") Contribuer - [DĂ©buter sur WikipĂ©dia](https://fr.wikipedia.org/wiki/Aide:D%C3%A9buter "Guide pour apprendre Ă  contribuer Ă  WikipĂ©dia") - [Aide](https://fr.wikipedia.org/wiki/Aide:Accueil "AccĂšs Ă  l’aide") - [CommunautĂ©](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_de_la_communaut%C3%A9 "À propos du projet, ce que vous pouvez faire, oĂč trouver les informations") - [Pages spĂ©ciales](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Pages_sp%C3%A9ciales "Outils pour contribuer Ă  WikipĂ©dia [q]") - [Modifications rĂ©centes](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Modifications_r%C3%A9centes "Liste des modifications rĂ©centes sur le wiki [r]") [![](https://fr.wikipedia.org/static/images/icons/wikipedia.png) ![WikipĂ©dia](https://fr.wikipedia.org/static/images/mobile/copyright/wikipedia-wordmark-fr.svg) ![l'encyclopĂ©die libre](https://fr.wikipedia.org/static/images/mobile/copyright/wikipedia-tagline-fr.svg)](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal) [Rechercher](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Recherche "Rechercher sur WikipĂ©dia [f]") Apparence - [Faire un don](https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=fr.wikipedia.org&uselang=fr) - [CrĂ©er un compte](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Cr%C3%A9er_un_compte&returnto=Test+unitaire "Nous vous encourageons Ă  crĂ©er un compte utilisateur et vous connecter ; ce n’est cependant pas obligatoire.") - [Se connecter](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Connexion&returnto=Test+unitaire "Nous vous encourageons Ă  vous connecter ; ce n’est cependant pas obligatoire. [o]") Outils personnels - [Faire un don](https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=fr.wikipedia.org&uselang=fr) - [CrĂ©er un compte](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Cr%C3%A9er_un_compte&returnto=Test+unitaire "Nous vous encourageons Ă  crĂ©er un compte utilisateur et vous connecter ; ce n’est cependant pas obligatoire.") - [Se connecter](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Connexion&returnto=Test+unitaire "Nous vous encourageons Ă  vous connecter ; ce n’est cependant pas obligatoire. [o]") ## Sommaire dĂ©placer vers la barre latĂ©rale masquer - [DĂ©but](https://fr.wikipedia.org/wiki/Test_unitaire) - [1 Origine et histoire](https://fr.wikipedia.org/wiki/Test_unitaire#Origine_et_histoire) - [2 UtilitĂ©](https://fr.wikipedia.org/wiki/Test_unitaire#Utilit%C3%A9) Afficher / masquer la sous-section UtilitĂ© - [2\.1 Trouver les erreurs rapidement](https://fr.wikipedia.org/wiki/Test_unitaire#Trouver_les_erreurs_rapidement) - [2\.2 SĂ©curiser la maintenance](https://fr.wikipedia.org/wiki/Test_unitaire#S%C3%A9curiser_la_maintenance) - [2\.3 Documenter le code](https://fr.wikipedia.org/wiki/Test_unitaire#Documenter_le_code) - [3 Fonctionnement](https://fr.wikipedia.org/wiki/Test_unitaire#Fonctionnement) - [4 Utilisation](https://fr.wikipedia.org/wiki/Test_unitaire#Utilisation) Afficher / masquer la sous-section Utilisation - [4\.1 Commencer par les tests](https://fr.wikipedia.org/wiki/Test_unitaire#Commencer_par_les_tests) - [4\.2 Utiliser des mocks](https://fr.wikipedia.org/wiki/Test_unitaire#Utiliser_des_mocks) - [5 GĂ©nĂ©ration](https://fr.wikipedia.org/wiki/Test_unitaire#G%C3%A9n%C3%A9ration) Afficher / masquer la sous-section GĂ©nĂ©ration - [5\.1 Correction de test unitaire](https://fr.wikipedia.org/wiki/Test_unitaire#Correction_de_test_unitaire) - [5\.2 Test unitaire paramĂ©trable](https://fr.wikipedia.org/wiki/Test_unitaire#Test_unitaire_param%C3%A9trable) - [6 Environnements de dĂ©veloppement](https://fr.wikipedia.org/wiki/Test_unitaire#Environnements_de_d%C3%A9veloppement) Afficher / masquer la sous-section Environnements de dĂ©veloppement - [6\.1 Frameworks xUnit](https://fr.wikipedia.org/wiki/Test_unitaire#Frameworks_xUnit) - [7 Outils commerciaux](https://fr.wikipedia.org/wiki/Test_unitaire#Outils_commerciaux) - [8 Articles connexes](https://fr.wikipedia.org/wiki/Test_unitaire#Articles_connexes) - [9 Notes](https://fr.wikipedia.org/wiki/Test_unitaire#Notes) Basculer la table des matiĂšres # Test unitaire 29 langues - [Ű§Ù„ŰčŰ±ŰšÙŠŰ©](https://ar.wikipedia.org/wiki/%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1_%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A9 "ۧ۟ŰȘۚۧ۱ Ű§Ù„ÙˆŰ­ŰŻŰ©Â â€“Â arabe") - [БългарсĐșĐž](https://bg.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BD%D0%BE_%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B0%D0%BD%D0%B5 "ĐšĐŸĐŒĐżĐŸĐœĐ”ĐœŃ‚ĐœĐŸ тДстĐČĐ°ĐœĐ”Â â€“Â bulgare") - [CatalĂ ](https://ca.wikipedia.org/wiki/Proves_unit%C3%A0ries "Proves unitĂ ries – catalan") - [ČeĆĄtina](https://cs.wikipedia.org/wiki/Unit_testing "Unit testing – tchĂšque") - [Dansk](https://da.wikipedia.org/wiki/Unit_test "Unit test – danois") - [Deutsch](https://de.wikipedia.org/wiki/Modultest "Modultest – allemand") - [English](https://en.wikipedia.org/wiki/Unit_testing "Unit testing – anglais") - [Español](https://es.wikipedia.org/wiki/Prueba_unitaria "Prueba unitaria – espagnol") - [Eesti](https://et.wikipedia.org/wiki/%C3%9Chiktestimine "Ühiktestimine – estonien") - [ÙŰ§Ű±ŰłÛŒ](https://fa.wikipedia.org/wiki/%D8%A2%D8%B2%D9%85%D9%88%D9%86_%D9%88%D8%A7%D8%AD%D8%AF "ŰąŰČمون ÙˆŰ§Ű­ŰŻÂ â€“Â persan") - [Suomi](https://fi.wikipedia.org/wiki/Yksikk%C3%B6testaaminen "Yksikkötestaaminen – finnois") - [ŚąŚ‘ŚšŚ™ŚȘ](https://he.wikipedia.org/wiki/%D7%91%D7%93%D7%99%D7%A7%D7%95%D7%AA_%D7%99%D7%97%D7%99%D7%93%D7%94 "ڑړڙڧڕŚȘ Ś™Ś—Ś™Ś“Ś”Â â€“Â hĂ©breu") - [Magyar](https://hu.wikipedia.org/wiki/Egys%C3%A9gtesztel%C3%A9s "EgysĂ©gtesztelĂ©s – hongrois") - [Interlingua](https://ia.wikipedia.org/wiki/Proba_unitari "Proba unitari – interlingua") - [Bahasa Indonesia](https://id.wikipedia.org/wiki/Pengujian_unit "Pengujian unit – indonĂ©sien") - [Italiano](https://it.wikipedia.org/wiki/Unit_testing "Unit testing – italien") - [æ—„æœŹèȘž](https://ja.wikipedia.org/wiki/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88 "ć˜äœ“ăƒ†ă‚čト – japonais") - [한ꔭ얎](https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%9B_%ED%85%8C%EC%8A%A4%ED%8A%B8 "유닛 테슀튞 – corĂ©en") - [Nederlands](https://nl.wikipedia.org/wiki/Unittesten "Unittesten – nĂ©erlandais") - [Norsk bokmĂ„l](https://no.wikipedia.org/wiki/Enhetstesting "Enhetstesting – norvĂ©gien bokmĂ„l") - [Polski](https://pl.wikipedia.org/wiki/Test_jednostkowy "Test jednostkowy – polonais") - [PortuguĂȘs](https://pt.wikipedia.org/wiki/Teste_de_unidade "Teste de unidade – portugais") - [РуссĐșĐžĐč](https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 "ĐœĐŸĐŽŃƒĐ»ŃŒĐœĐŸĐ” Ń‚Đ”ŃŃ‚ĐžŃ€ĐŸĐČĐ°ĐœĐžĐ”Â â€“Â russe") - [СрпсĐșĐž / srpski](https://sr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0%D1%80%D0%BD%D0%BE_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%B0%D1%9A%D0%B5 "ĐœĐŸĐŽŃƒĐ»Đ°Ń€ĐœĐŸ тДстОрањД – serbe") - [àź€àźźàźżàźŽàŻ](https://ta.wikipedia.org/wiki/%E0%AE%93%E0%AE%B0%E0%AE%B2%E0%AE%95%E0%AF%81%E0%AE%9A%E0%AF%8D_%E0%AE%9A%E0%AF%8B%E0%AE%A4%E0%AE%A9%E0%AF%88 "àź“àź°àźČàź•àŻàźšàŻ àźšàŻ‹àź€àź©àŻˆÂ â€“Â tamoul") - [TĂŒrkçe](https://tr.wikipedia.org/wiki/Birim_testi "Birim testi – turc") - [ĐŁĐșŃ€Đ°Ń—ĐœŃŃŒĐșа](https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F "ĐœĐŸĐŽŃƒĐ»ŃŒĐœĐ” Ń‚Đ”ŃŃ‚ŃƒĐČĐ°ĐœĐœŃÂ â€“Â ukrainien") - [Tiáșżng Việt](https://vi.wikipedia.org/wiki/Unit_testing "Unit testing – vietnamien") - [äž­æ–‡](https://zh.wikipedia.org/wiki/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95 "ć•ć…ƒæ”‹èŻ•Â â€“Â chinois") [Modifier les liens](https://www.wikidata.org/wiki/Special:EntityPage/Q907375#sitelinks-wikipedia "Modifier les liens interlangues") - [Article](https://fr.wikipedia.org/wiki/Test_unitaire "Voir le contenu de la page [c]") - [Discussion](https://fr.wikipedia.org/wiki/Discussion:Test_unitaire "Discussion au sujet de cette page de contenu [t]") français - [Lire](https://fr.wikipedia.org/wiki/Test_unitaire) - [Modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit "Modifier cette page [v]") - [Modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit "Modifier le wikicode de cette page [e]") - [Voir l’historique](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=history "Historique des versions de cette page [h]") Outils Outils dĂ©placer vers la barre latĂ©rale masquer Actions - [Lire](https://fr.wikipedia.org/wiki/Test_unitaire) - [Modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit "Modifier cette page [v]") - [Modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit "Modifier le wikicode de cette page [e]") - [Voir l’historique](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=history) GĂ©nĂ©ral - [Pages liĂ©es](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Pages_li%C3%A9es/Test_unitaire "Liste des pages liĂ©es qui pointent sur celle-ci [j]") - [Suivi des pages liĂ©es](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Suivi_des_liens/Test_unitaire "Liste des modifications rĂ©centes des pages appelĂ©es par celle-ci [k]") - [TĂ©lĂ©verser un fichier](https://fr.wikipedia.org/wiki/Aide:Importer_un_fichier "TĂ©lĂ©verser des fichiers [u]") - [Lien permanent](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&oldid=233485497 "Adresse permanente de cette version de cette page") - [Informations sur la page](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=info "Davantage d’informations sur cette page") - [Citer cette page](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Citer&page=Test_unitaire&id=233485497&wpFormIdentifier=titleform "Informations sur la maniĂšre de citer cette page") - [Obtenir l'URL raccourcie](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:UrlShortener&url=https%3A%2F%2Ffr.wikipedia.org%2Fwiki%2FTest_unitaire) - [TĂ©lĂ©charger le code QR](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:QrCode&url=https%3A%2F%2Ffr.wikipedia.org%2Fwiki%2FTest_unitaire) Imprimer / exporter - [CrĂ©er un livre](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Livre&bookcmd=book_creator&referer=Test+unitaire) - [TĂ©lĂ©charger comme PDF](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:DownloadAsPdf&page=Test_unitaire&action=show-download-screen) - [Version imprimable](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&printable=yes "Version imprimable de cette page [p]") Dans d’autres projets - [Wikilivres](https://fr.wikibooks.org/wiki/Introduction_au_test_logiciel/Tests_unitaires) - [ÉlĂ©ment Wikidata](https://www.wikidata.org/wiki/Special:EntityPage/Q907375 "Lien vers l’élĂ©ment dans le dĂ©pĂŽt de donnĂ©es connectĂ© [g]") Apparence dĂ©placer vers la barre latĂ©rale masquer Un article de WikipĂ©dia, l'encyclopĂ©die libre. [![Page d’aide sur l’homonymie](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Logo_disambig.svg/20px-Logo_disambig.svg.png)](https://fr.wikipedia.org/wiki/Aide:Homonymie "Aide:Homonymie") Pour les articles homonymes, voir [Test](https://fr.wikipedia.org/wiki/Test "Test"). En [programmation informatique](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique"), le **test unitaire** (ou **TU**, voire ***UT*** pour *Unit Testing* en anglais) est une procĂ©dure permettant de vĂ©rifier le bon fonctionnement d'une partie prĂ©cise d'un [logiciel](https://fr.wikipedia.org/wiki/Logiciel "Logiciel") ou d'une portion d'un [programme](https://fr.wikipedia.org/wiki/Programme_informatique "Programme informatique") (appelĂ©e « unitĂ© » ou « module »). Dans les applications non critiques, l'Ă©criture des tests unitaires a longtemps Ă©tĂ© considĂ©rĂ©e comme une tĂąche secondaire. Cependant, les mĂ©thodes [extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming") (XP) et [test driven development](https://fr.wikipedia.org/wiki/Test_driven_development "Test driven development") (TDD) ont remis les tests unitaires, appelĂ©s « tests du programmeur », au centre de l'activitĂ© de programmation. ## Origine et histoire \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=1 "Modifier la section : Origine et histoire") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=1 "Modifier le code source de la section : Origine et histoire")\] Les tests unitaires, en tant que principe de tester sĂ©parĂ©ment des parties plus Ă©lĂ©mentaires d'un logiciel complexe, remonte aux dĂ©buts de l'[ingĂ©nierie logicielle](https://fr.wikipedia.org/wiki/Ing%C3%A9nierie_logicielle "IngĂ©nierie logicielle"). En Juin 1956, H.D. Benington prĂ©sente en effet le projet [SAGE](https://fr.wikipedia.org/wiki/Semi-Automatic_Ground_Environment "Semi-Automatic Ground Environment") au symposium sur les mĂ©thodes de programmation avancĂ©e organisĂ© par la [marine amĂ©ricaine](https://fr.wikipedia.org/wiki/United_States_Navy "United States Navy"). L'approche utilisĂ©e prĂ©voyait Ă  l'issue de la phase de codage une Ă©tape de « tests de paramĂštres » pour valider la conformitĂ© des sous-programmes et composants Ă  leur spĂ©cifications, avant de procĂ©der Ă  un « test d'assemblage » de ces composants[\[1\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-1),[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2). En 1964, une approche similaire est dĂ©crite pour les logiciels du [programme Mercury](https://fr.wikipedia.org/wiki/Programme_Mercury "Programme Mercury") : les unitĂ©s individuelles dĂ©veloppĂ©es par diffĂ©rentes organisations Ă©taient soumises Ă  des "tests unitaires" avant d'ĂȘtre intĂ©grĂ©es entre elles. En 1969, les mĂ©thodologies de tests sont structurĂ©es encore davantage, avec des tests unitaires, des tests de composants, et des [tests d'intĂ©gration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intĂ©gration"), dans le but de valider des parties Ă©lĂ©mentaires du logiciel sĂ©parĂ©ment, puis de vĂ©rifier le bon fonctionnement des assemblages progressif en blocs plus larges[\[3\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-3). Des normes publiques adoptĂ©es Ă  la fin des annĂ©es 60, telles que les standards militaires MIL-STD-483[\[4\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-4) et MIL-STD-490 de l'armĂ©e amĂ©ricaine contribuent Ă  une large reconnaissance et adoption des tests unitaires au sein de gros projets. Les tests unitaires Ă©taient alors interactifs[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2), ou automatisĂ©s[\[5\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-5), utilisant soit des tests programmĂ©s ou des outils de capture et rĂ©pĂ©tition automatisĂ©s. En 1994 [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") dĂ©crit un environnement cadre de test pour le langage [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk"), qui deviendra [SUnit](https://fr.wikipedia.org/w/index.php?title=SUnit&action=edit&redlink=1 "SUnit (page inexistante)")[\[6\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-6) par la suite[\[7\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-7),[\[8\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-8). En 1997, [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") rencontre [Erich Gamma](https://fr.wikipedia.org/wiki/Erich_Gamma "Erich Gamma") avec lequel il crĂ©e [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit") qui, par sa popularitĂ©, entraĂźnera la crĂ©ation de nombreux [frameworks](https://fr.wikipedia.org/wiki/Frameworks "Frameworks") de tests unitaires, cet ensemble se nomme [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit")[\[9\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-9). À la mĂȘme Ă©poque, ATTOL Unit test est dĂ©veloppĂ©, puis utilisĂ© par [Sextant Avionique](https://fr.wikipedia.org/wiki/Sextant_Avionique "Sextant Avionique") en 1998[\[10\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-10) ## UtilitĂ© \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=2 "Modifier la section : UtilitĂ©") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=2 "Modifier le code source de la section : UtilitĂ©")\] On Ă©crit un test pour confronter une rĂ©alisation Ă  sa [spĂ©cification](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_fonctionnelle "SpĂ©cification fonctionnelle"). Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") dĂ©finit un critĂšre d'arrĂȘt (Ă©tat ou sorties Ă  l'issue de l'exĂ©cution) et permet de statuer sur le succĂšs ou sur l'Ă©chec d'une vĂ©rification. GrĂące Ă  la spĂ©cification, on est en mesure de faire correspondre un Ă©tat d'entrĂ©e donnĂ© Ă  un rĂ©sultat ou Ă  une sortie. Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") permet de vĂ©rifier que la relation d'entrĂ©e / sortie donnĂ©e par la spĂ©cification est bel et bien rĂ©alisĂ©e. ### Trouver les erreurs rapidement \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=3 "Modifier la section : Trouver les erreurs rapidement") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=3 "Modifier le code source de la section : Trouver les erreurs rapidement")\] La mĂ©thode XP prĂ©conise d'Ă©crire les tests en mĂȘme temps, ou mĂȘme avant la fonction Ă  tester ([Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development")). Ceci permet de dĂ©finir prĂ©cisĂ©ment l'interface du module Ă  dĂ©velopper. Les tests sont exĂ©cutĂ©s durant tout le dĂ©veloppement, permettant de visualiser si le code fraĂźchement Ă©crit correspond au besoin. ### SĂ©curiser la maintenance \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=4 "Modifier la section : SĂ©curiser la maintenance") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=4 "Modifier le code source de la section : SĂ©curiser la maintenance")\] Lors d'une modification d'un programme, les tests unitaires signalent les Ă©ventuelles [rĂ©gressions](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de rĂ©gression"). En effet, certains tests peuvent Ă©chouer Ă  la suite d'une modification, il faut donc soit réécrire le test pour le faire correspondre aux nouvelles attentes, soit corriger l'erreur se situant dans le code. ### Documenter le code \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=5 "Modifier la section : Documenter le code") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=5 "Modifier le code source de la section : Documenter le code")\] Les tests unitaires peuvent servir de complĂ©ment Ă  [l'API](https://fr.wikipedia.org/wiki/Interface_de_programmation "Interface de programmation"), il est trĂšs utile de lire les tests pour comprendre comment s'utilise une mĂ©thode. De plus, il est possible que la documentation ne soit plus Ă  jour, mais les tests eux correspondent Ă  la rĂ©alitĂ© de l'application. ## Fonctionnement \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=6 "Modifier la section : Fonctionnement") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=6 "Modifier le code source de la section : Fonctionnement")\] On dĂ©finit gĂ©nĂ©ralement 4 phases dans l'exĂ©cution d'un test unitaire : 1. **Initialisation** (fonction `setUp`) : dĂ©finition d'un environnement de test complĂštement reproductible (une [fixture](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture")). 2. **Exercice** : le module Ă  tester est exĂ©cutĂ©. 3. **VĂ©rification** (utilisation de fonctions `assert`) : comparaison des rĂ©sultats obtenus avec un vecteur de rĂ©sultat dĂ©fini. Ces tests dĂ©finissent le rĂ©sultat du test : SUCCÈS (`SUCCESS`) ou ÉCHEC (`FAILURE`). On peut Ă©galement dĂ©finir d'autres rĂ©sultats comme ÉVITÉ (`SKIPPED`). 4. **DĂ©sactivation** (fonction `tearDown`) : dĂ©sinstallation des [fixtures](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture") pour retrouver l'Ă©tat initial du systĂšme, dans le but de ne pas polluer les tests suivants. Tous les tests doivent ĂȘtre indĂ©pendants et reproductibles unitairement (quand exĂ©cutĂ©s seuls). ## Utilisation \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=7 "Modifier la section : Utilisation") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=7 "Modifier le code source de la section : Utilisation")\] Il s'agit pour le programmeur de tester un [module](https://fr.wikipedia.org/wiki/Module_\(programmation\) "Module (programmation)"), indĂ©pendamment du reste du programme, ceci afin de s'assurer qu'il rĂ©ponde aux [spĂ©cifications fonctionnelles](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_\(informatique\) "SpĂ©cification (informatique)") et qu'il fonctionne correctement en toutes circonstances. Cette vĂ©rification est considĂ©rĂ©e comme essentielle, en particulier dans les applications critiques. Elle s'accompagne couramment d'une vĂ©rification de la [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") (Ă©valuation de la couverture structurelle), qui consiste Ă  s'assurer que l'ensemble des [tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") conduit Ă  exĂ©cuter l'ensemble (ou une fraction dĂ©terminĂ©e) des instructions prĂ©sentes dans le code. L'ensemble des tests unitaires doit ĂȘtre rejouĂ© aprĂšs une modification du code afin de vĂ©rifier qu'il n'y a pas de [rĂ©gressions](https://fr.wikipedia.org/wiki/Non-r%C3%A9gression "Non-rĂ©gression") (l'apparition de nouveaux dysfonctionnements). L'emploi d'une « stratĂ©gie de test » particuliĂšre *peut* limiter les tests Ă  rejouer, par exemple : une analyse d'impact des modifications, corrĂ©lĂ©e Ă  une preuve d'indĂ©pendance des modules, permet de cibler les cas de test unitaire Ă  rejouer. ### Commencer par les tests \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=8 "Modifier la section : Commencer par les tests") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=8 "Modifier le code source de la section : Commencer par les tests")\] Un test doit correspondre aux spĂ©cifications de l'application, il faut donc Ă©crire les tests en premier puis les faire passer par la suite plutĂŽt que d'Ă©crire le code avant et de prendre le risque d'ĂȘtre influencĂ© par celui-ci lors de la rĂ©daction des tests[\[11\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-11). Bob Martin[\[12\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-12), grand dĂ©fenseur de la mĂ©thode [TDD](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development"), propose un [modĂšle](https://fr.wikipedia.org/wiki/Pattern "Pattern") simple pour l'Ă©criture des tests unitaires : 1. Écrire une fonction de test qui doit obtenir un rĂ©sultat dĂ©fini dans les spĂ©cifications. Ce code appelant un code qui n'existe pas encore, celui-ci doit Ă©chouer. Ceci a pour but de dĂ©finir une fonction qui teste « quelque chose ». 2. Écrire le code (le minimum de « quelque chose ») pour faire rĂ©ussir le test. 3. Une fois le test en succĂšs, rajouter un autre test pour obtenir un rĂ©sultat lĂ©gĂšrement diffĂ©rent, en faisant varier les entrĂ©es par exemple. Ce nouveau test fera faillir le code principal. 4. Modifier le code principal pour faire rĂ©ussir les tests. 5. Recommencer, en Ă©liminant et [refactorisant](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "RĂ©usinage de code") les Ă©ventuelles redondances dans le code des tests. On refactorise en mĂȘme temps le code principal que le code des tests. 6. Un test unitaire doit tester une caractĂ©ristique et une seule. On ne dĂ©finit pas un « [scĂ©nario](https://fr.wikipedia.org/wiki/Sc%C3%A9nario_\(informatique\) "ScĂ©nario (informatique)") » de test complexe dans un test unitaire. 7. Il est dĂ©conseillĂ© de tester les dĂ©tails d'implĂ©mentation telles que les fonctions privĂ©es d'une classe, on se concentrera Ă  tester les fonctions publiques, c'est-Ă -dire les interfaces avec lesquelles les acteurs extĂ©rieurs interagissent. Ainsi, on dĂ©couple les tests de l'implĂ©mentation et on se concentre sur la vĂ©rification du comportement attendu tout en gardant une flexibilitĂ© sur la maniĂšre d'arriver au rĂ©sultat souhaitĂ©. ### Utiliser des mocks \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=9 "Modifier la section : Utiliser des mocks") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=9 "Modifier le code source de la section : Utiliser des mocks")\] Les [mocks](https://fr.wikipedia.org/wiki/Mock_\(programmation_orient%C3%A9e_objet\) "Mock (programmation orientĂ©e objet)") sont des objets permettant de simuler un objet rĂ©el de façon contrĂŽlĂ©e. Dans certains cas, l'utilisation de mock est primordiale, pour un gain de temps de [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code"), et de fiabilitĂ© des tests[\[13\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-13) - pour simuler une [base de donnĂ©es](https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es "Base de donnĂ©es"), un [service web](https://fr.wikipedia.org/wiki/Service_web "Service web"), etc., les interactions entre l'application et ces outils prennent du temps, l'utilisation de mock pour simuler leurs fonctionnements peut ĂȘtre un gain de temps considĂ©rable ; - certains cas d'erreurs sont trĂšs difficile Ă  reproduire, l'utilisation de mock permet ici de simuler une erreur pour pouvoir traiter ce cas et donc amĂ©liorer la couverture de code, par exemple le catch d'une exception ; - sans l'utilisation de mock, le test peut retourner une erreur ne provenant pas du code qui est testĂ© (par exemple une base de donnĂ©es). Cependant, une utilisation abusive de mock peut avoir l'effet inverse, notamment allonger le temps d'exĂ©cution des tests, rendre les tests compliquĂ©s Ă  comprendre et Ă  maintenir. ## GĂ©nĂ©ration \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=10 "Modifier la section : GĂ©nĂ©ration") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=10 "Modifier le code source de la section : GĂ©nĂ©ration")\] La plupart des [frameworks](https://fr.wikipedia.org/wiki/Framework "Framework") de la famille [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") permettent la gĂ©nĂ©ration des classes de test unitaire. Cependant ces frameworks ne fournissent que le squelette des classes. Les tests devront donc ĂȘtre Ă©crits par le dĂ©veloppeur. La gĂ©nĂ©ration de tests unitaires est un sujet important pour les chercheurs et plusieurs confĂ©rences s'intĂ©ressent Ă  cette problĂ©matique, telles que [International Symposium on Software Testing and Analysis](https://fr.wikipedia.org/w/index.php?title=International_Symposium_on_Software_Testing_and_Analysis&action=edit&redlink=1 "International Symposium on Software Testing and Analysis (page inexistante)") (ISSTA), [International Conference on Software Engineering](https://fr.wikipedia.org/w/index.php?title=International_Conference_on_Software_Engineering&action=edit&redlink=1 "International Conference on Software Engineering (page inexistante)") (ICSE) et [Automated Software Engineering](https://fr.wikipedia.org/w/index.php?title=Automated_Software_Engineering&action=edit&redlink=1 "Automated Software Engineering (page inexistante)") (ASE). ### Correction de test unitaire \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=11 "Modifier la section : Correction de test unitaire") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=11 "Modifier le code source de la section : Correction de test unitaire")\] Lors d'une modification dans le code d'un programme, il se peut que certains tests ne passent plus ; dans ce cas, le dĂ©veloppeur doit dĂ©terminer si cela vient du code en lui-mĂȘme ou du test : si cela vient du test, le dĂ©veloppeur doit modifier son test car la suppression de celui-ci entraĂźnerait une augmentation des chances de rĂ©gression du programme. Certains chercheurs ont dĂ©veloppĂ© des outils pour rĂ©soudre ce problĂšme. ReAssert[\[14\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-14) est un outil suggĂ©rant des rĂ©parations pour un test qui Ă©choue, il analyse les tests Ă  modifier et suggĂšre des changements au dĂ©veloppeur, si cette suggestion convient au dĂ©veloppeur, il peut effectuer le changement en cliquant sur un bouton. ### Test unitaire paramĂ©trable \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=12 "Modifier la section : Test unitaire paramĂ©trable") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=12 "Modifier le code source de la section : Test unitaire paramĂ©trable")\] Les tests unitaires paramĂ©trables sont des tests unitaires qui prennent des paramĂštres. Ils peuvent ensuite utiliser des outils comme QuickCheck pour gĂ©nĂ©rer des paramĂštres. Ces tests sont supportĂ©s par [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit"), [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG") et NUnit. En s'appuyant sur des cas concrets d'entrĂ©e et sortie, la gĂ©nĂ©ration d'Oracle et sur la couverture de test pour minimiser les cas, des chercheurs ont rĂ©ussi Ă  gĂ©nĂ©rer des tests unitaires paramĂ©trables[\[15\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-15). Les rĂ©sultats de cette mĂ©thode sont prometteurs. ## Environnements de dĂ©veloppement \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=13 "Modifier la section : Environnements de dĂ©veloppement") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=13 "Modifier le code source de la section : Environnements de dĂ©veloppement")\] Il existe une multitude de cadriciels (*[framework](https://fr.wikipedia.org/wiki/Framework "Framework")*) permettant de rĂ©aliser facilement des tests unitaires. Il en existe dans les principaux [langages de programmation](https://fr.wikipedia.org/wiki/Langage_de_programmation "Langage de programmation"). Par exemple `Test::More`[\[16\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-16) pour le [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl"). ### Frameworks xUnit \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=14 "Modifier la section : Frameworks xUnit") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=14 "Modifier le code source de la section : Frameworks xUnit")\] Le terme gĂ©nĂ©rique « [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") » dĂ©signe un outil permettant de rĂ©aliser des tests unitaires dans un langage donnĂ© (dont l'initiale remplace « x » le plus souvent). - AUnit[\[17\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-17) pour [Ada](https://fr.wikipedia.org/wiki/Ada_\(langage\) "Ada (langage)") ; - ASUnit[\[18\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-18) pour [ActionScript](https://fr.wikipedia.org/wiki/ActionScript "ActionScript") ; - Cppunit[\[19\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-19) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ; - CUnit[\[20\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-20) pour [C](https://fr.wikipedia.org/wiki/C_\(langage\) "C (langage)") ; - DUnit pour [Delphi](https://fr.wikipedia.org/wiki/Embarcadero_Delphi "Embarcadero Delphi") ; - FLEXunit pour [Adobe Flex](https://fr.wikipedia.org/wiki/Adobe_Flex "Adobe Flex") ; - [Google](https://fr.wikipedia.org/wiki/Google "Google") Test[\[21\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-21) et Boost Test[\[22\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-22) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ; - HUnit[\[23\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-23) pour [Haskell](https://fr.wikipedia.org/wiki/Haskell "Haskell") ; - JSUnit[\[24\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-24), QUnit[\[25\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-25), [Unit.js](https://fr.wikipedia.org/wiki/Unit.js "Unit.js")[\[26\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-26) et Jest[\[27\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-27) pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ; - [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit")[\[28\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-28) et [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG")[\[29\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-29) pour [Java](https://fr.wikipedia.org/wiki/Java_\(langage\) "Java (langage)") ; - NUnit[\[30\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-30) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ; - [Microsoft](https://fr.wikipedia.org/wiki/Microsoft "Microsoft") Unit Test[\[31\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-31) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ; - xUnit[\[32\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-32) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ; - NUnitASP[\[33\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-33) pour [ASP.NET](https://fr.wikipedia.org/wiki/ASP.NET "ASP.NET") (support interrompu depuis le 31 janvier 2008 ) ; - OUnit[\[34\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-34) pour [OCaml](https://fr.wikipedia.org/wiki/OCaml "OCaml") ; - OCunit pour [Objective C](https://fr.wikipedia.org/wiki/Objective_C "Objective C") ; - PBUnit pour [PowerBuilder](https://fr.wikipedia.org/wiki/PowerBuilder "PowerBuilder") ; - [PHPUnit](https://fr.wikipedia.org/wiki/PHPUnit "PHPUnit")[\[35\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-35), SimpleTest[\[36\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-36) et Atoum[\[37\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-37) pour [PHP](https://fr.wikipedia.org/wiki/PHP "PHP") ; - plunit pour [Prolog](https://fr.wikipedia.org/wiki/Prolog "Prolog") ; - utPLSQL[\[38\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-38) pour [PL/SQL](https://fr.wikipedia.org/wiki/PL/SQL "PL/SQL") ; - Unittest et [PyUnit](https://fr.wikipedia.org/wiki/PyUnit "PyUnit") pour [Python](https://fr.wikipedia.org/wiki/Python_\(langage\) "Python (langage)") ; - [Tape](https://fr.wikipedia.org/wiki/Tape_\(framework_de_tests_JavaScript\) "Tape (framework de tests JavaScript)") pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ; - Test::Unit pour [Ruby](https://fr.wikipedia.org/wiki/Ruby "Ruby") ; - Test::More pour [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl") ; - [Typemock](https://fr.wikipedia.org/w/index.php?title=Typemock&action=edit&redlink=1 "Typemock (page inexistante)") pour .NET, C++, C\#. Avec Typemock vous pouvez travailler sur legacy code aussi. - SUnit[\[39\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-39) pour [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk") ; - RPGUnit[\[40\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-40) pour RPG ; - ScalaTest pour Scala - SASUnit[\[41\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-41) pour [SAS](https://fr.wikipedia.org/wiki/SAS_\(langage\) "SAS (langage)"). ## Outils commerciaux \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=15 "Modifier la section : Outils commerciaux") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=15 "Modifier le code source de la section : Outils commerciaux")\] Divers outils permettent l'automatisation des tests unitaires : - Le module TBrun de la suite d'outils [LDRA](https://fr.wikipedia.org/wiki/LDRA "LDRA") ; - Tessy (distribution : Hitex Development Tools/Allemagne). - Ponicode, gĂ©nĂ©ration de tests unitaires en Javascript[\[42\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-42). ## Articles connexes \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=16 "Modifier la section : Articles connexes") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=16 "Modifier le code source de la section : Articles connexes")\] Sur les autres projets Wikimedia : - [Test unitaire](https://fr.wikibooks.org/wiki/Introduction_au_test_logiciel/Tests_unitaires "b:Introduction au test logiciel/Tests unitaires"), sur Wikibooks - [Cycle en V](https://fr.wikipedia.org/wiki/Cycle_en_V "Cycle en V") - [Test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") - [Extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming") - [Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development") ## Notes \[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit&section=17 "Modifier la section : Notes") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit&section=17 "Modifier le code source de la section : Notes")\] 1. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-1) (en) Benington, Herbert D., « Production of large computer programs », *Proceedings of the Symposium on Advanced Programming Methods for Digital Computers, Washington, D.C., June 28-29, 1956*, Office of Naval Research, Department of the Navy,‎ 1956 , p. 15-28 2. ↑ [a](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-0) et [b](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-1) H. D. Benington, « Production of large computer programs », *Proceedings of the 9th international conference on Software Engineering*, IEEE Computer Society Press, iCSE '87,‎ 1er mars 1987 , p. 299–310 ([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-0-89791-216-7](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-0-89791-216-7 "SpĂ©cial:Ouvrages de rĂ©fĂ©rence/978-0-89791-216-7"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.5555/41765.41799](https://dx.doi.org/10.5555/41765.41799), [lire en ligne](https://dl.acm.org/doi/10.5555/41765.41799), consultĂ© le 3 avril 2024 ) 3. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-3) Norman A. Zimmerman, « System integration as a programming function », *Proceedings of the 1969 24th national conference*, Association for Computing Machinery, aCM '69,‎ 26 aoĂ»t 1969 , p. 459–467 ([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-1-4503-7493-4](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-1-4503-7493-4 "SpĂ©cial:Ouvrages de rĂ©fĂ©rence/978-1-4503-7493-4"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/800195.805951](https://dx.doi.org/10.1145/800195.805951), [lire en ligne](https://dl.acm.org/doi/10.1145/800195.805951), consultĂ© le 3 avril 2024 ) 4. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-4) (en) Gouvernement des Etats Unis d'AmĂ©rique, DĂ©partement de la DĂ©fence, MIL-STD-483 Military standard: configuration management practices for systems, equipment, munitions, and computer programs , 31 dĂ©cembre 1970 , Section 3.4.7.2. "The contractor shall then code and test software Units, and enter the source and object code, and associated listings of each successfully tested Unit into the Developmental Configuration" 5. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-5) (en) Michael F. Tighe, « The value of a proper software quality assurance methodology », *ACM SIGMETRICS Performance Evaluation Review*, vol. 7, nos 3-4,‎ novembre 1978 , p. 165–172 ([ISSN](https://fr.wikipedia.org/wiki/International_Standard_Serial_Number "International Standard Serial Number") [0163-5999](https://portal.issn.org/resource/issn/0163-5999), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/1007775.811118](https://dx.doi.org/10.1145/1007775.811118), [lire en ligne](https://dl.acm.org/doi/10.1145/1007775.811118), consultĂ© le 3 avril 2024 ) 6. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-6) [Camp Smalltalk SUnit](http://sunit.sourceforge.net/) 7. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-7) *[Simple Smalltalk Testing:With Patterns](http://www.xprogramming.com/testfram.htm)*, in *Smalltalk Report* octobre 1994, Kent Beck 8. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-8) (en) Ward Cunningham, « [Testing Framework](http://wiki.c2.com/?TestingFramework) » ![AccĂšs libre](https://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/20px-Lock-green.svg.png), sur wiki.c2.com . 9. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-9) [Xunit, Martin Fowler](http://www.martinfowler.com/bliki/Xunit.html) 10. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-10) GNU Based Compilation System for Space Embedded Applications, Blondin, J. P. & Martignano, M., DASIA 98 - Data Systems in Aerospace, Proceedings of the conference held 25-28 May, 1998 in Athens, Greece, Edited by B. Kaldeich-SchĂŒ.rmann. ESA SP-422. Paris: European Space Agency, 1998., p.137, "1998ESASP.422..137B", page 138 <http://adsbit.harvard.edu//full/1998ESASP.422..137B/0000138.000.html> 11. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-11) [Unit Testing Best Practices, Roy Osherove](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique"). 12. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-12) [Test First, bob Martin](http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html). 13. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-13) Robert Martin, *When to Mock*. 14. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-14) (en) Brett Daniel, Danny Dig, Tihomir Gvero, Vilas Jagannath, Johnston Jiaa, Damion Mitchell, Jurand Nogiec, Shin Hwei Tan et Darko Marinov, « *ReAssert: a tool for repairing broken unit tests* », *ICSE*,‎ 2011 ([lire en ligne](http://dl.acm.org/citation.cfm?doid=1985793.1985978)) . 15. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-15) (en) Gordon Fraser et Andreas Zeller, « Generating Parameterized Unit Tests », *ISSTA*,‎ 2011 ([lire en ligne](http://dl.acm.org/citation.cfm?doid=2001420.2001464)) . 16. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-16) [Test::More sur CPAN](https://metacpan.org/module/Test::More), entre autres [modules de tests](https://metacpan.org/search?q=Test). Voir aussi les articles de l'association des *mongueurs de Perl* dans [Linux Magazine France](https://fr.wikipedia.org/wiki/Linux_Magazine_France "Linux Magazine France") disponibles sur <http://articles.mongueurs.net/magazines> 17. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-17) [AUnit](https://libre.adacore.com/aunit/main.html) 18. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-18) [AsUnit](http://www.asunit.org/) 19. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-19) [CppUnit](http://cppunit.sourceforge.net/) et en [version 2](https://launchpad.net/cppunit2) 20. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-20) [CUnit](http://cunit.sourceforge.net/) 21. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-21) [GoogleTest](https://code.google.com/p/googletest/) 22. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-22) [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/index.html) 23. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-23) [HUnit](http://hunit.sourceforge.net/) 24. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-24) [JsUnit](http://www.jsunit.net/) 25. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-25) <http://qunitjs.com> Unit testing for Javascript made by the jQuery Foundation 26. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-26) (en) [Unit JS](http://unitjs.com/) : « Unit testing framework for Javascript ». 27. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-27) (en) « [Jest · 🃏 Delightful JavaScript Testing](https://jestjs.io/) », sur jestjs.io (consultĂ© le 2 mars 2020 ) . 28. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-28) [Welcome to The New JUnit.org! \| JUnit.org](http://junit.org/). 29. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-29) (en) « [TestNG Documentation](http://testng.org/) », sur testng.org (consultĂ© le 21 mai 2024 ) . 30. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-30) [NUnit - Home](http://www.nunit.org/) 31. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-31) (en-US) erickson-doug, « [Writing Unit Tests for the .NET Framework with the Microsoft Unit Test Framework for Managed Code - Visual Studio](https://docs.microsoft.com/fr-fr/visualstudio/test/writing-unit-tests-for-the-dotnet-framework-with-the-microsoft-unit-test-framework-for-managed-code?view=vs-2015) », sur docs.microsoft.com (consultĂ© le 4 septembre 2018 ) . 32. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-32) (en) « [Home \> xUnit.net](https://xunit.github.io/) », sur xunit.github.io (consultĂ© le 4 septembre 2018 ) . 33. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-33) [NUnitAsp - ASP.NET unit testing](http://nunitasp.sourceforge.net/) 34. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-34) [OUnit](http://ounit.forge.ocamlcore.org/) 35. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-35) [PHPUnit - Trac](https://www.phpunit.de/) 36. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-36) [SimpleTest - Unit Testing for PHP](http://www.simpletest.org/) 37. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-37) [Atoum](http://www.atoum.org/) 38. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-38) [utPLSQL](http://utplsql.sourceforge.net/) 39. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-39) [Simple Smalltalk Testing: With Patterns](http://www.xprogramming.com/testfram.htm) 40. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-40) <http://rpgunit.sourceforge.net/> 41. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-41) (en) « [SASUnit](https://sourceforge.net/projects/sasunit/) », sur SourceForge (consultĂ© le 24 fĂ©vrier 2020 ) . 42. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-42) (en) « [Ponicode - Quick and easy Javascript unit testing](https://ponicode.com/) », sur ponicode.com (consultĂ© le 23 juin 2020 ) . | [v](https://fr.wikipedia.org/wiki/Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle "ModĂšle:Palette QualitĂ© logicielle") · [m](https://fr.wikipedia.org/w/index.php?title=Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle&action=edit)Gestion de la [qualitĂ© logicielle](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle "QualitĂ© logicielle") | | |---|---| | [Indicateurs de qualitĂ©](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle#Indicateurs_de_qualit%C3%A9_logicielle "QualitĂ© logicielle") ([ISO/CEI 9126](https://fr.wikipedia.org/wiki/ISO/CEI_9126 "ISO/CEI 9126")) | CapacitĂ© fonctionnelle (rĂ©ponse aux [exigences](https://fr.wikipedia.org/wiki/Exigence_\(ing%C3%A9nierie\) "Exigence (ingĂ©nierie)")) [FiabilitĂ©](https://fr.wikipedia.org/wiki/Fiabilit%C3%A9 "FiabilitĂ©") [MaintenabilitĂ©](https://fr.wikipedia.org/wiki/Maintenabilit%C3%A9 "MaintenabilitĂ©") [Performance](https://fr.wikipedia.org/wiki/Performances_\(informatique\) "Performances (informatique)") [PortabilitĂ©](https://fr.wikipedia.org/wiki/Portabilit%C3%A9_\(informatique\) "PortabilitĂ© (informatique)") [UtilisabilitĂ©](https://fr.wikipedia.org/wiki/Utilisabilit%C3%A9 "UtilisabilitĂ©") | | ComprĂ©hension et contrĂŽle du [code source](https://fr.wikipedia.org/wiki/Code_source "Code source") | | | | | | [Tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") | [Acceptation](https://fr.wikipedia.org/wiki/Test_d%27acceptation "Test d'acceptation") [IntĂ©gration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intĂ©gration") [Performance](https://fr.wikipedia.org/wiki/Test_de_performance "Test de performance") [RĂ©gression](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de rĂ©gression") [Unitaire]() [Utilisateur](https://fr.wikipedia.org/wiki/Test_utilisateur "Test utilisateur") [Validation](https://fr.wikipedia.org/wiki/Test_de_validation "Test de validation") | | [MĂ©triques](https://fr.wikipedia.org/wiki/M%C3%A9trique_\(logiciel\) "MĂ©trique (logiciel)") | [CohĂ©sion](https://fr.wikipedia.org/wiki/Coh%C3%A9sion_\(informatique\) "CohĂ©sion (informatique)") [Couplage](https://fr.wikipedia.org/wiki/Couplage_\(informatique\) "Couplage (informatique)") [Couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") [Halstead](https://fr.wikipedia.org/wiki/M%C3%A9triques_d%27Halstead "MĂ©triques d'Halstead") [IndĂ©pendance fonctionnelle](https://fr.wikipedia.org/wiki/Ind%C3%A9pendance_fonctionnelle "IndĂ©pendance fonctionnelle") [Indice de maintenabilitĂ©](https://fr.wikipedia.org/wiki/Indice_de_maintenabilit%C3%A9 "Indice de maintenabilitĂ©") [Ligne de code](https://fr.wikipedia.org/wiki/Ligne_de_code "Ligne de code") [Nombre cyclomatique](https://fr.wikipedia.org/wiki/Nombre_cyclomatique "Nombre cyclomatique") [Point de fonction](https://fr.wikipedia.org/wiki/Point_de_fonction "Point de fonction") | | Remaniements | [Maintenance](https://fr.wikipedia.org/wiki/Maintenance_du_logiciel "Maintenance du logiciel") [Optimisation de code](https://fr.wikipedia.org/wiki/Optimisation_de_code "Optimisation de code") [RĂ©usinage de code](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "RĂ©usinage de code") ([RĂšgle de trois](https://fr.wikipedia.org/wiki/R%C3%A8gle_de_trois_\(programmation_informatique\) "RĂšgle de trois (programmation informatique)")) | | Principes de [programmation](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique") | | | | | | [SOLID](https://fr.wikipedia.org/wiki/SOLID_\(informatique\) "SOLID (informatique)") | [ResponsabilitĂ© unique](https://fr.wikipedia.org/wiki/Principe_de_responsabilit%C3%A9_unique "Principe de responsabilitĂ© unique") [Ouvert/fermĂ©](https://fr.wikipedia.org/wiki/Principe_ouvert/ferm%C3%A9 "Principe ouvert/fermĂ©") [Substitution de Liskov](https://fr.wikipedia.org/wiki/Principe_de_substitution_de_Liskov "Principe de substitution de Liskov") [SĂ©grĂ©gation des interfaces](https://fr.wikipedia.org/wiki/Principe_de_s%C3%A9gr%C3%A9gation_des_interfaces "Principe de sĂ©grĂ©gation des interfaces") [Inversion des dĂ©pendances](https://fr.wikipedia.org/wiki/Inversion_des_d%C3%A9pendances "Inversion des dĂ©pendances") | | Mauvaises pratiques | | | | | | [Antipatterns](https://fr.wikipedia.org/wiki/Antipattern "Antipattern") | [Attente active](https://fr.wikipedia.org/wiki/Attente_active "Attente active") [Grosse boule de boue](https://fr.wikipedia.org/wiki/Grosse_boule_de_boue "Grosse boule de boue") [Programmation spaghetti](https://fr.wikipedia.org/wiki/Programmation_spaghetti "Programmation spaghetti") ([syndrome](https://fr.wikipedia.org/wiki/Syndrome_du_plat_de_spaghettis "Syndrome du plat de spaghettis")) [RĂ©inventer la roue](https://fr.wikipedia.org/wiki/R%C3%A9inventer_la_roue "RĂ©inventer la roue") | | | | | [Code smells](https://fr.wikipedia.org/wiki/Code_smell "Code smell") | [Duplication de code](https://fr.wikipedia.org/wiki/Duplication_de_code "Duplication de code") [God object](https://fr.wikipedia.org/wiki/God_object "God object") | | Voir aussi : [GĂ©nie logiciel](https://fr.wikipedia.org/wiki/G%C3%A9nie_logiciel "GĂ©nie logiciel"), [Software craftsmanship](https://fr.wikipedia.org/wiki/Software_craftsmanship "Software craftsmanship"), [DĂ©gradation logicielle](https://fr.wikipedia.org/wiki/D%C3%A9gradation_logicielle "DĂ©gradation logicielle") | | - [![icĂŽne dĂ©corative](https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Circle-icons-computer.svg/40px-Circle-icons-computer.svg.png)](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail de l’informatique") [Portail de l’informatique](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail:Informatique") ![](https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=1) Ce document provient de « <https://fr.wikipedia.org/w/index.php?title=Test_unitaire&oldid=233485497> ». [CatĂ©gorie](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Accueil "CatĂ©gorie:Accueil") : - [Test logiciel](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Test_logiciel "CatĂ©gorie:Test logiciel") CatĂ©gories cachĂ©es : - [Portail:Informatique/Articles liĂ©s](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Portail:Informatique/Articles_li%C3%A9s "CatĂ©gorie:Portail:Informatique/Articles liĂ©s") - [Portail:Technologies/Articles liĂ©s](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Portail:Technologies/Articles_li%C3%A9s "CatĂ©gorie:Portail:Technologies/Articles liĂ©s") - La derniĂšre modification de cette page a Ă©tĂ© faite le 21 fĂ©vrier 2026 Ă  12:01. - [Droit d'auteur](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Citation_et_r%C3%A9utilisation_du_contenu_de_Wikip%C3%A9dia "WikipĂ©dia:Citation et rĂ©utilisation du contenu de WikipĂ©dia") : les textes sont disponibles sous [licence Creative Commons attribution, partage dans les mĂȘmes conditions](https://creativecommons.org/licenses/by-sa/4.0/deed.fr) ; d’autres conditions peuvent s’appliquer. Voyez les [conditions d’utilisation](https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/fr) pour plus de dĂ©tails, ainsi que les [crĂ©dits graphiques](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Cr%C3%A9dits_graphiques "WikipĂ©dia:CrĂ©dits graphiques"). En cas de rĂ©utilisation des textes de cette page, voyez [comment citer les auteurs et mentionner la licence](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Citer/Test_unitaire "SpĂ©cial:Citer/Test unitaire"). WikipediaÂź est une marque dĂ©posĂ©e de la [Wikimedia Foundation, Inc.](https://wikimediafoundation.org/), organisation de bienfaisance rĂ©gie par le paragraphe [501(c)(3)](https://fr.wikipedia.org/wiki/501c "501c") du code fiscal des États-Unis. - [Politique de confidentialitĂ©](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/fr) - [À propos de WikipĂ©dia](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:%C3%80_propos_de_Wikip%C3%A9dia) - [Avertissements](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Avertissements_g%C3%A9n%C3%A9raux) - [Contact](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Contact) - [Contacts juridiques & sĂ©curitĂ©](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Legal:Wikimedia_Foundation_Legal_and_Safety_Contact_Information) - [Code de conduite](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct) - [DĂ©veloppeurs](https://developer.wikimedia.org/) - [Statistiques](https://stats.wikimedia.org/#/fr.wikipedia.org) - [DĂ©claration sur les tĂ©moins (cookies)](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement) - [Version mobile](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&mobileaction=toggle_view_mobile) - [![Wikimedia Foundation](https://fr.wikipedia.org/static/images/footer/wikimedia.svg)](https://www.wikimedia.org/) - [![Powered by MediaWiki](https://fr.wikipedia.org/w/resources/assets/mediawiki_compact.svg)](https://www.mediawiki.org/) Rechercher Basculer la table des matiĂšres Test unitaire 29 langues [Ajouter un sujet](https://fr.wikipedia.org/wiki/Test_unitaire)
Readable Markdown
Un article de WikipĂ©dia, l'encyclopĂ©die libre. En [programmation informatique](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique"), le **test unitaire** (ou **TU**, voire ***UT*** pour *Unit Testing* en anglais) est une procĂ©dure permettant de vĂ©rifier le bon fonctionnement d'une partie prĂ©cise d'un [logiciel](https://fr.wikipedia.org/wiki/Logiciel "Logiciel") ou d'une portion d'un [programme](https://fr.wikipedia.org/wiki/Programme_informatique "Programme informatique") (appelĂ©e « unitĂ© » ou « module »). Dans les applications non critiques, l'Ă©criture des tests unitaires a longtemps Ă©tĂ© considĂ©rĂ©e comme une tĂąche secondaire. Cependant, les mĂ©thodes [extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming") (XP) et [test driven development](https://fr.wikipedia.org/wiki/Test_driven_development "Test driven development") (TDD) ont remis les tests unitaires, appelĂ©s « tests du programmeur », au centre de l'activitĂ© de programmation. Les tests unitaires, en tant que principe de tester sĂ©parĂ©ment des parties plus Ă©lĂ©mentaires d'un logiciel complexe, remonte aux dĂ©buts de l'[ingĂ©nierie logicielle](https://fr.wikipedia.org/wiki/Ing%C3%A9nierie_logicielle "IngĂ©nierie logicielle"). En Juin 1956, H.D. Benington prĂ©sente en effet le projet [SAGE](https://fr.wikipedia.org/wiki/Semi-Automatic_Ground_Environment "Semi-Automatic Ground Environment") au symposium sur les mĂ©thodes de programmation avancĂ©e organisĂ© par la [marine amĂ©ricaine](https://fr.wikipedia.org/wiki/United_States_Navy "United States Navy"). L'approche utilisĂ©e prĂ©voyait Ă  l'issue de la phase de codage une Ă©tape de « tests de paramĂštres » pour valider la conformitĂ© des sous-programmes et composants Ă  leur spĂ©cifications, avant de procĂ©der Ă  un « test d'assemblage » de ces composants[\[1\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-1),[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2). En 1964, une approche similaire est dĂ©crite pour les logiciels du [programme Mercury](https://fr.wikipedia.org/wiki/Programme_Mercury "Programme Mercury") : les unitĂ©s individuelles dĂ©veloppĂ©es par diffĂ©rentes organisations Ă©taient soumises Ă  des "tests unitaires" avant d'ĂȘtre intĂ©grĂ©es entre elles. En 1969, les mĂ©thodologies de tests sont structurĂ©es encore davantage, avec des tests unitaires, des tests de composants, et des [tests d'intĂ©gration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intĂ©gration"), dans le but de valider des parties Ă©lĂ©mentaires du logiciel sĂ©parĂ©ment, puis de vĂ©rifier le bon fonctionnement des assemblages progressif en blocs plus larges[\[3\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-3). Des normes publiques adoptĂ©es Ă  la fin des annĂ©es 60, telles que les standards militaires MIL-STD-483[\[4\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-4) et MIL-STD-490 de l'armĂ©e amĂ©ricaine contribuent Ă  une large reconnaissance et adoption des tests unitaires au sein de gros projets. Les tests unitaires Ă©taient alors interactifs[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2), ou automatisĂ©s[\[5\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-5), utilisant soit des tests programmĂ©s ou des outils de capture et rĂ©pĂ©tition automatisĂ©s. En 1994 [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") dĂ©crit un environnement cadre de test pour le langage [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk"), qui deviendra [SUnit](https://fr.wikipedia.org/w/index.php?title=SUnit&action=edit&redlink=1 "SUnit (page inexistante)")[\[6\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-6) par la suite[\[7\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-7),[\[8\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-8). En 1997, [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") rencontre [Erich Gamma](https://fr.wikipedia.org/wiki/Erich_Gamma "Erich Gamma") avec lequel il crĂ©e [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit") qui, par sa popularitĂ©, entraĂźnera la crĂ©ation de nombreux [frameworks](https://fr.wikipedia.org/wiki/Frameworks "Frameworks") de tests unitaires, cet ensemble se nomme [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit")[\[9\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-9). À la mĂȘme Ă©poque, ATTOL Unit test est dĂ©veloppĂ©, puis utilisĂ© par [Sextant Avionique](https://fr.wikipedia.org/wiki/Sextant_Avionique "Sextant Avionique") en 1998[\[10\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-10) On Ă©crit un test pour confronter une rĂ©alisation Ă  sa [spĂ©cification](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_fonctionnelle "SpĂ©cification fonctionnelle"). Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") dĂ©finit un critĂšre d'arrĂȘt (Ă©tat ou sorties Ă  l'issue de l'exĂ©cution) et permet de statuer sur le succĂšs ou sur l'Ă©chec d'une vĂ©rification. GrĂące Ă  la spĂ©cification, on est en mesure de faire correspondre un Ă©tat d'entrĂ©e donnĂ© Ă  un rĂ©sultat ou Ă  une sortie. Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") permet de vĂ©rifier que la relation d'entrĂ©e / sortie donnĂ©e par la spĂ©cification est bel et bien rĂ©alisĂ©e. La mĂ©thode XP prĂ©conise d'Ă©crire les tests en mĂȘme temps, ou mĂȘme avant la fonction Ă  tester ([Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development")). Ceci permet de dĂ©finir prĂ©cisĂ©ment l'interface du module Ă  dĂ©velopper. Les tests sont exĂ©cutĂ©s durant tout le dĂ©veloppement, permettant de visualiser si le code fraĂźchement Ă©crit correspond au besoin. Lors d'une modification d'un programme, les tests unitaires signalent les Ă©ventuelles [rĂ©gressions](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de rĂ©gression"). En effet, certains tests peuvent Ă©chouer Ă  la suite d'une modification, il faut donc soit réécrire le test pour le faire correspondre aux nouvelles attentes, soit corriger l'erreur se situant dans le code. Les tests unitaires peuvent servir de complĂ©ment Ă  [l'API](https://fr.wikipedia.org/wiki/Interface_de_programmation "Interface de programmation"), il est trĂšs utile de lire les tests pour comprendre comment s'utilise une mĂ©thode. De plus, il est possible que la documentation ne soit plus Ă  jour, mais les tests eux correspondent Ă  la rĂ©alitĂ© de l'application. On dĂ©finit gĂ©nĂ©ralement 4 phases dans l'exĂ©cution d'un test unitaire : 1. **Initialisation** (fonction `setUp`) : dĂ©finition d'un environnement de test complĂštement reproductible (une [fixture](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture")). 2. **Exercice** : le module Ă  tester est exĂ©cutĂ©. 3. **VĂ©rification** (utilisation de fonctions `assert`) : comparaison des rĂ©sultats obtenus avec un vecteur de rĂ©sultat dĂ©fini. Ces tests dĂ©finissent le rĂ©sultat du test : SUCCÈS (`SUCCESS`) ou ÉCHEC (`FAILURE`). On peut Ă©galement dĂ©finir d'autres rĂ©sultats comme ÉVITÉ (`SKIPPED`). 4. **DĂ©sactivation** (fonction `tearDown`) : dĂ©sinstallation des [fixtures](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture") pour retrouver l'Ă©tat initial du systĂšme, dans le but de ne pas polluer les tests suivants. Tous les tests doivent ĂȘtre indĂ©pendants et reproductibles unitairement (quand exĂ©cutĂ©s seuls). Il s'agit pour le programmeur de tester un [module](https://fr.wikipedia.org/wiki/Module_\(programmation\) "Module (programmation)"), indĂ©pendamment du reste du programme, ceci afin de s'assurer qu'il rĂ©ponde aux [spĂ©cifications fonctionnelles](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_\(informatique\) "SpĂ©cification (informatique)") et qu'il fonctionne correctement en toutes circonstances. Cette vĂ©rification est considĂ©rĂ©e comme essentielle, en particulier dans les applications critiques. Elle s'accompagne couramment d'une vĂ©rification de la [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") (Ă©valuation de la couverture structurelle), qui consiste Ă  s'assurer que l'ensemble des [tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") conduit Ă  exĂ©cuter l'ensemble (ou une fraction dĂ©terminĂ©e) des instructions prĂ©sentes dans le code. L'ensemble des tests unitaires doit ĂȘtre rejouĂ© aprĂšs une modification du code afin de vĂ©rifier qu'il n'y a pas de [rĂ©gressions](https://fr.wikipedia.org/wiki/Non-r%C3%A9gression "Non-rĂ©gression") (l'apparition de nouveaux dysfonctionnements). L'emploi d'une « stratĂ©gie de test » particuliĂšre *peut* limiter les tests Ă  rejouer, par exemple : une analyse d'impact des modifications, corrĂ©lĂ©e Ă  une preuve d'indĂ©pendance des modules, permet de cibler les cas de test unitaire Ă  rejouer. Un test doit correspondre aux spĂ©cifications de l'application, il faut donc Ă©crire les tests en premier puis les faire passer par la suite plutĂŽt que d'Ă©crire le code avant et de prendre le risque d'ĂȘtre influencĂ© par celui-ci lors de la rĂ©daction des tests[\[11\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-11). Bob Martin[\[12\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-12), grand dĂ©fenseur de la mĂ©thode [TDD](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development"), propose un [modĂšle](https://fr.wikipedia.org/wiki/Pattern "Pattern") simple pour l'Ă©criture des tests unitaires : 1. Écrire une fonction de test qui doit obtenir un rĂ©sultat dĂ©fini dans les spĂ©cifications. Ce code appelant un code qui n'existe pas encore, celui-ci doit Ă©chouer. Ceci a pour but de dĂ©finir une fonction qui teste « quelque chose ». 2. Écrire le code (le minimum de « quelque chose ») pour faire rĂ©ussir le test. 3. Une fois le test en succĂšs, rajouter un autre test pour obtenir un rĂ©sultat lĂ©gĂšrement diffĂ©rent, en faisant varier les entrĂ©es par exemple. Ce nouveau test fera faillir le code principal. 4. Modifier le code principal pour faire rĂ©ussir les tests. 5. Recommencer, en Ă©liminant et [refactorisant](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "RĂ©usinage de code") les Ă©ventuelles redondances dans le code des tests. On refactorise en mĂȘme temps le code principal que le code des tests. 6. Un test unitaire doit tester une caractĂ©ristique et une seule. On ne dĂ©finit pas un « [scĂ©nario](https://fr.wikipedia.org/wiki/Sc%C3%A9nario_\(informatique\) "ScĂ©nario (informatique)") » de test complexe dans un test unitaire. 7. Il est dĂ©conseillĂ© de tester les dĂ©tails d'implĂ©mentation telles que les fonctions privĂ©es d'une classe, on se concentrera Ă  tester les fonctions publiques, c'est-Ă -dire les interfaces avec lesquelles les acteurs extĂ©rieurs interagissent. Ainsi, on dĂ©couple les tests de l'implĂ©mentation et on se concentre sur la vĂ©rification du comportement attendu tout en gardant une flexibilitĂ© sur la maniĂšre d'arriver au rĂ©sultat souhaitĂ©. Les [mocks](https://fr.wikipedia.org/wiki/Mock_\(programmation_orient%C3%A9e_objet\) "Mock (programmation orientĂ©e objet)") sont des objets permettant de simuler un objet rĂ©el de façon contrĂŽlĂ©e. Dans certains cas, l'utilisation de mock est primordiale, pour un gain de temps de [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code"), et de fiabilitĂ© des tests[\[13\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-13) - pour simuler une [base de donnĂ©es](https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es "Base de donnĂ©es"), un [service web](https://fr.wikipedia.org/wiki/Service_web "Service web"), etc., les interactions entre l'application et ces outils prennent du temps, l'utilisation de mock pour simuler leurs fonctionnements peut ĂȘtre un gain de temps considĂ©rable ; - certains cas d'erreurs sont trĂšs difficile Ă  reproduire, l'utilisation de mock permet ici de simuler une erreur pour pouvoir traiter ce cas et donc amĂ©liorer la couverture de code, par exemple le catch d'une exception ; - sans l'utilisation de mock, le test peut retourner une erreur ne provenant pas du code qui est testĂ© (par exemple une base de donnĂ©es). Cependant, une utilisation abusive de mock peut avoir l'effet inverse, notamment allonger le temps d'exĂ©cution des tests, rendre les tests compliquĂ©s Ă  comprendre et Ă  maintenir. La plupart des [frameworks](https://fr.wikipedia.org/wiki/Framework "Framework") de la famille [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") permettent la gĂ©nĂ©ration des classes de test unitaire. Cependant ces frameworks ne fournissent que le squelette des classes. Les tests devront donc ĂȘtre Ă©crits par le dĂ©veloppeur. La gĂ©nĂ©ration de tests unitaires est un sujet important pour les chercheurs et plusieurs confĂ©rences s'intĂ©ressent Ă  cette problĂ©matique, telles que [International Symposium on Software Testing and Analysis](https://fr.wikipedia.org/w/index.php?title=International_Symposium_on_Software_Testing_and_Analysis&action=edit&redlink=1 "International Symposium on Software Testing and Analysis (page inexistante)") (ISSTA), [International Conference on Software Engineering](https://fr.wikipedia.org/w/index.php?title=International_Conference_on_Software_Engineering&action=edit&redlink=1 "International Conference on Software Engineering (page inexistante)") (ICSE) et [Automated Software Engineering](https://fr.wikipedia.org/w/index.php?title=Automated_Software_Engineering&action=edit&redlink=1 "Automated Software Engineering (page inexistante)") (ASE). Lors d'une modification dans le code d'un programme, il se peut que certains tests ne passent plus ; dans ce cas, le dĂ©veloppeur doit dĂ©terminer si cela vient du code en lui-mĂȘme ou du test : si cela vient du test, le dĂ©veloppeur doit modifier son test car la suppression de celui-ci entraĂźnerait une augmentation des chances de rĂ©gression du programme. Certains chercheurs ont dĂ©veloppĂ© des outils pour rĂ©soudre ce problĂšme. ReAssert[\[14\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-14) est un outil suggĂ©rant des rĂ©parations pour un test qui Ă©choue, il analyse les tests Ă  modifier et suggĂšre des changements au dĂ©veloppeur, si cette suggestion convient au dĂ©veloppeur, il peut effectuer le changement en cliquant sur un bouton. Les tests unitaires paramĂ©trables sont des tests unitaires qui prennent des paramĂštres. Ils peuvent ensuite utiliser des outils comme QuickCheck pour gĂ©nĂ©rer des paramĂštres. Ces tests sont supportĂ©s par [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit"), [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG") et NUnit. En s'appuyant sur des cas concrets d'entrĂ©e et sortie, la gĂ©nĂ©ration d'Oracle et sur la couverture de test pour minimiser les cas, des chercheurs ont rĂ©ussi Ă  gĂ©nĂ©rer des tests unitaires paramĂ©trables[\[15\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-15). Les rĂ©sultats de cette mĂ©thode sont prometteurs. Il existe une multitude de cadriciels (*[framework](https://fr.wikipedia.org/wiki/Framework "Framework")*) permettant de rĂ©aliser facilement des tests unitaires. Il en existe dans les principaux [langages de programmation](https://fr.wikipedia.org/wiki/Langage_de_programmation "Langage de programmation"). Par exemple `Test::More`[\[16\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-16) pour le [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl"). Le terme gĂ©nĂ©rique « [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") » dĂ©signe un outil permettant de rĂ©aliser des tests unitaires dans un langage donnĂ© (dont l'initiale remplace « x » le plus souvent). - AUnit[\[17\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-17) pour [Ada](https://fr.wikipedia.org/wiki/Ada_\(langage\) "Ada (langage)") ; - ASUnit[\[18\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-18) pour [ActionScript](https://fr.wikipedia.org/wiki/ActionScript "ActionScript") ; - Cppunit[\[19\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-19) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ; - CUnit[\[20\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-20) pour [C](https://fr.wikipedia.org/wiki/C_\(langage\) "C (langage)") ; - DUnit pour [Delphi](https://fr.wikipedia.org/wiki/Embarcadero_Delphi "Embarcadero Delphi") ; - FLEXunit pour [Adobe Flex](https://fr.wikipedia.org/wiki/Adobe_Flex "Adobe Flex") ; - [Google](https://fr.wikipedia.org/wiki/Google "Google") Test[\[21\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-21) et Boost Test[\[22\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-22) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ; - HUnit[\[23\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-23) pour [Haskell](https://fr.wikipedia.org/wiki/Haskell "Haskell") ; - JSUnit[\[24\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-24), QUnit[\[25\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-25), [Unit.js](https://fr.wikipedia.org/wiki/Unit.js "Unit.js")[\[26\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-26) et Jest[\[27\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-27) pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ; - [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit")[\[28\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-28) et [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG")[\[29\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-29) pour [Java](https://fr.wikipedia.org/wiki/Java_\(langage\) "Java (langage)") ; - NUnit[\[30\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-30) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ; - [Microsoft](https://fr.wikipedia.org/wiki/Microsoft "Microsoft") Unit Test[\[31\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-31) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ; - xUnit[\[32\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-32) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ; - NUnitASP[\[33\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-33) pour [ASP.NET](https://fr.wikipedia.org/wiki/ASP.NET "ASP.NET") (support interrompu depuis le 31 janvier 2008 ) ; - OUnit[\[34\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-34) pour [OCaml](https://fr.wikipedia.org/wiki/OCaml "OCaml") ; - OCunit pour [Objective C](https://fr.wikipedia.org/wiki/Objective_C "Objective C") ; - PBUnit pour [PowerBuilder](https://fr.wikipedia.org/wiki/PowerBuilder "PowerBuilder") ; - [PHPUnit](https://fr.wikipedia.org/wiki/PHPUnit "PHPUnit")[\[35\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-35), SimpleTest[\[36\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-36) et Atoum[\[37\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-37) pour [PHP](https://fr.wikipedia.org/wiki/PHP "PHP") ; - plunit pour [Prolog](https://fr.wikipedia.org/wiki/Prolog "Prolog") ; - utPLSQL[\[38\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-38) pour [PL/SQL](https://fr.wikipedia.org/wiki/PL/SQL "PL/SQL") ; - Unittest et [PyUnit](https://fr.wikipedia.org/wiki/PyUnit "PyUnit") pour [Python](https://fr.wikipedia.org/wiki/Python_\(langage\) "Python (langage)") ; - [Tape](https://fr.wikipedia.org/wiki/Tape_\(framework_de_tests_JavaScript\) "Tape (framework de tests JavaScript)") pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ; - Test::Unit pour [Ruby](https://fr.wikipedia.org/wiki/Ruby "Ruby") ; - Test::More pour [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl") ; - [Typemock](https://fr.wikipedia.org/w/index.php?title=Typemock&action=edit&redlink=1 "Typemock (page inexistante)") pour .NET, C++, C\#. Avec Typemock vous pouvez travailler sur legacy code aussi. - SUnit[\[39\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-39) pour [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk") ; - RPGUnit[\[40\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-40) pour RPG ; - ScalaTest pour Scala - SASUnit[\[41\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-41) pour [SAS](https://fr.wikipedia.org/wiki/SAS_\(langage\) "SAS (langage)"). Divers outils permettent l'automatisation des tests unitaires : - Le module TBrun de la suite d'outils [LDRA](https://fr.wikipedia.org/wiki/LDRA "LDRA") ; - Tessy (distribution : Hitex Development Tools/Allemagne). - Ponicode, gĂ©nĂ©ration de tests unitaires en Javascript[\[42\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-42). - [Cycle en V](https://fr.wikipedia.org/wiki/Cycle_en_V "Cycle en V") - [Test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") - [Extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming") - [Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development") 1. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-1) (en) Benington, Herbert D., « Production of large computer programs », *Proceedings of the Symposium on Advanced Programming Methods for Digital Computers, Washington, D.C., June 28-29, 1956*, Office of Naval Research, Department of the Navy,‎ 1956 , p. 15-28 2. ↑ [a](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-0) et [b](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-1) H. D. Benington, « Production of large computer programs », *Proceedings of the 9th international conference on Software Engineering*, IEEE Computer Society Press, iCSE '87,‎ 1er mars 1987 , p. 299–310 ([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-0-89791-216-7](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-0-89791-216-7 "SpĂ©cial:Ouvrages de rĂ©fĂ©rence/978-0-89791-216-7"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.5555/41765.41799](https://dx.doi.org/10.5555/41765.41799), [lire en ligne](https://dl.acm.org/doi/10.5555/41765.41799), consultĂ© le 3 avril 2024 ) 3. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-3) Norman A. Zimmerman, « System integration as a programming function », *Proceedings of the 1969 24th national conference*, Association for Computing Machinery, aCM '69,‎ 26 aoĂ»t 1969 , p. 459–467 ([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-1-4503-7493-4](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-1-4503-7493-4 "SpĂ©cial:Ouvrages de rĂ©fĂ©rence/978-1-4503-7493-4"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/800195.805951](https://dx.doi.org/10.1145/800195.805951), [lire en ligne](https://dl.acm.org/doi/10.1145/800195.805951), consultĂ© le 3 avril 2024 ) 4. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-4) (en) Gouvernement des Etats Unis d'AmĂ©rique, DĂ©partement de la DĂ©fence, MIL-STD-483 Military standard: configuration management practices for systems, equipment, munitions, and computer programs , 31 dĂ©cembre 1970 , Section 3.4.7.2. "The contractor shall then code and test software Units, and enter the source and object code, and associated listings of each successfully tested Unit into the Developmental Configuration" 5. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-5) (en) Michael F. Tighe, « The value of a proper software quality assurance methodology », *ACM SIGMETRICS Performance Evaluation Review*, vol. 7, nos 3-4,‎ novembre 1978 , p. 165–172 ([ISSN](https://fr.wikipedia.org/wiki/International_Standard_Serial_Number "International Standard Serial Number") [0163-5999](https://portal.issn.org/resource/issn/0163-5999), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/1007775.811118](https://dx.doi.org/10.1145/1007775.811118), [lire en ligne](https://dl.acm.org/doi/10.1145/1007775.811118), consultĂ© le 3 avril 2024 ) 6. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-6) [Camp Smalltalk SUnit](http://sunit.sourceforge.net/) 7. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-7) *[Simple Smalltalk Testing:With Patterns](http://www.xprogramming.com/testfram.htm)*, in *Smalltalk Report* octobre 1994, Kent Beck 8. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-8) (en) Ward Cunningham, « [Testing Framework](http://wiki.c2.com/?TestingFramework) » ![AccĂšs libre](https://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/20px-Lock-green.svg.png), sur wiki.c2.com . 9. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-9) [Xunit, Martin Fowler](http://www.martinfowler.com/bliki/Xunit.html) 10. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-10) GNU Based Compilation System for Space Embedded Applications, Blondin, J. P. & Martignano, M., DASIA 98 - Data Systems in Aerospace, Proceedings of the conference held 25-28 May, 1998 in Athens, Greece, Edited by B. Kaldeich-SchĂŒ.rmann. ESA SP-422. Paris: European Space Agency, 1998., p.137, "1998ESASP.422..137B", page 138 <http://adsbit.harvard.edu//full/1998ESASP.422..137B/0000138.000.html> 11. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-11) [Unit Testing Best Practices, Roy Osherove](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique"). 12. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-12) [Test First, bob Martin](http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html). 13. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-13) Robert Martin, *When to Mock*. 14. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-14) (en) Brett Daniel, Danny Dig, Tihomir Gvero, Vilas Jagannath, Johnston Jiaa, Damion Mitchell, Jurand Nogiec, Shin Hwei Tan et Darko Marinov, « *ReAssert: a tool for repairing broken unit tests* », *ICSE*,‎ 2011 ([lire en ligne](http://dl.acm.org/citation.cfm?doid=1985793.1985978)) . 15. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-15) (en) Gordon Fraser et Andreas Zeller, « Generating Parameterized Unit Tests », *ISSTA*,‎ 2011 ([lire en ligne](http://dl.acm.org/citation.cfm?doid=2001420.2001464)) . 16. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-16) [Test::More sur CPAN](https://metacpan.org/module/Test::More), entre autres [modules de tests](https://metacpan.org/search?q=Test). Voir aussi les articles de l'association des *mongueurs de Perl* dans [Linux Magazine France](https://fr.wikipedia.org/wiki/Linux_Magazine_France "Linux Magazine France") disponibles sur <http://articles.mongueurs.net/magazines> 17. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-17) [AUnit](https://libre.adacore.com/aunit/main.html) 18. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-18) [AsUnit](http://www.asunit.org/) 19. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-19) [CppUnit](http://cppunit.sourceforge.net/) et en [version 2](https://launchpad.net/cppunit2) 20. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-20) [CUnit](http://cunit.sourceforge.net/) 21. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-21) [GoogleTest](https://code.google.com/p/googletest/) 22. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-22) [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/index.html) 23. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-23) [HUnit](http://hunit.sourceforge.net/) 24. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-24) [JsUnit](http://www.jsunit.net/) 25. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-25) [http://qunitjs.com](http://qunitjs.com/) Unit testing for Javascript made by the jQuery Foundation 26. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-26) (en) [Unit JS](http://unitjs.com/) : « Unit testing framework for Javascript ». 27. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-27) (en) « [Jest · 🃏 Delightful JavaScript Testing](https://jestjs.io/) », sur jestjs.io (consultĂ© le 2 mars 2020 ) . 28. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-28) [Welcome to The New JUnit.org! \| JUnit.org](http://junit.org/). 29. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-29) (en) « [TestNG Documentation](http://testng.org/) », sur testng.org (consultĂ© le 21 mai 2024 ) . 30. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-30) [NUnit - Home](http://www.nunit.org/) 31. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-31) (en-US) erickson-doug, « [Writing Unit Tests for the .NET Framework with the Microsoft Unit Test Framework for Managed Code - Visual Studio](https://docs.microsoft.com/fr-fr/visualstudio/test/writing-unit-tests-for-the-dotnet-framework-with-the-microsoft-unit-test-framework-for-managed-code?view=vs-2015) », sur docs.microsoft.com (consultĂ© le 4 septembre 2018 ) . 32. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-32) (en) « [Home \> xUnit.net](https://xunit.github.io/) », sur xunit.github.io (consultĂ© le 4 septembre 2018 ) . 33. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-33) [NUnitAsp - ASP.NET unit testing](http://nunitasp.sourceforge.net/) 34. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-34) [OUnit](http://ounit.forge.ocamlcore.org/) 35. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-35) [PHPUnit - Trac](https://www.phpunit.de/) 36. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-36) [SimpleTest - Unit Testing for PHP](http://www.simpletest.org/) 37. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-37) [Atoum](http://www.atoum.org/) 38. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-38) [utPLSQL](http://utplsql.sourceforge.net/) 39. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-39) [Simple Smalltalk Testing: With Patterns](http://www.xprogramming.com/testfram.htm) 40. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-40) <http://rpgunit.sourceforge.net/> 41. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-41) (en) « [SASUnit](https://sourceforge.net/projects/sasunit/) », sur SourceForge (consultĂ© le 24 fĂ©vrier 2020 ) . 42. [↑](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-42) (en) « [Ponicode - Quick and easy Javascript unit testing](https://ponicode.com/) », sur ponicode.com (consultĂ© le 23 juin 2020 ) . | [v](https://fr.wikipedia.org/wiki/Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle "ModĂšle:Palette QualitĂ© logicielle") · [m](https://fr.wikipedia.org/w/index.php?title=Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle&action=edit)Gestion de la [qualitĂ© logicielle](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle "QualitĂ© logicielle") | | |---|---| | [Indicateurs de qualitĂ©](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle#Indicateurs_de_qualit%C3%A9_logicielle "QualitĂ© logicielle") ([ISO/CEI 9126](https://fr.wikipedia.org/wiki/ISO/CEI_9126 "ISO/CEI 9126")) | CapacitĂ© fonctionnelle (rĂ©ponse aux [exigences](https://fr.wikipedia.org/wiki/Exigence_\(ing%C3%A9nierie\) "Exigence (ingĂ©nierie)")) [FiabilitĂ©](https://fr.wikipedia.org/wiki/Fiabilit%C3%A9 "FiabilitĂ©") [MaintenabilitĂ©](https://fr.wikipedia.org/wiki/Maintenabilit%C3%A9 "MaintenabilitĂ©") [Performance](https://fr.wikipedia.org/wiki/Performances_\(informatique\) "Performances (informatique)") [PortabilitĂ©](https://fr.wikipedia.org/wiki/Portabilit%C3%A9_\(informatique\) "PortabilitĂ© (informatique)") [UtilisabilitĂ©](https://fr.wikipedia.org/wiki/Utilisabilit%C3%A9 "UtilisabilitĂ©") | | ComprĂ©hension et contrĂŽle du [code source](https://fr.wikipedia.org/wiki/Code_source "Code source") | | | | | | [Tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") | [Acceptation](https://fr.wikipedia.org/wiki/Test_d%27acceptation "Test d'acceptation") [IntĂ©gration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intĂ©gration") [Performance](https://fr.wikipedia.org/wiki/Test_de_performance "Test de performance") [RĂ©gression](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de rĂ©gression") [Unitaire]() [Utilisateur](https://fr.wikipedia.org/wiki/Test_utilisateur "Test utilisateur") [Validation](https://fr.wikipedia.org/wiki/Test_de_validation "Test de validation") | | [MĂ©triques](https://fr.wikipedia.org/wiki/M%C3%A9trique_\(logiciel\) "MĂ©trique (logiciel)") | [CohĂ©sion](https://fr.wikipedia.org/wiki/Coh%C3%A9sion_\(informatique\) "CohĂ©sion (informatique)") [Couplage](https://fr.wikipedia.org/wiki/Couplage_\(informatique\) "Couplage (informatique)") [Couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") [Halstead](https://fr.wikipedia.org/wiki/M%C3%A9triques_d%27Halstead "MĂ©triques d'Halstead") [IndĂ©pendance fonctionnelle](https://fr.wikipedia.org/wiki/Ind%C3%A9pendance_fonctionnelle "IndĂ©pendance fonctionnelle") [Indice de maintenabilitĂ©](https://fr.wikipedia.org/wiki/Indice_de_maintenabilit%C3%A9 "Indice de maintenabilitĂ©") [Ligne de code](https://fr.wikipedia.org/wiki/Ligne_de_code "Ligne de code") [Nombre cyclomatique](https://fr.wikipedia.org/wiki/Nombre_cyclomatique "Nombre cyclomatique") [Point de fonction](https://fr.wikipedia.org/wiki/Point_de_fonction "Point de fonction") | | Remaniements | [Maintenance](https://fr.wikipedia.org/wiki/Maintenance_du_logiciel "Maintenance du logiciel") [Optimisation de code](https://fr.wikipedia.org/wiki/Optimisation_de_code "Optimisation de code") [RĂ©usinage de code](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "RĂ©usinage de code") ([RĂšgle de trois](https://fr.wikipedia.org/wiki/R%C3%A8gle_de_trois_\(programmation_informatique\) "RĂšgle de trois (programmation informatique)")) | | Principes de [programmation](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique") | | | | | | [SOLID](https://fr.wikipedia.org/wiki/SOLID_\(informatique\) "SOLID (informatique)") | [ResponsabilitĂ© unique](https://fr.wikipedia.org/wiki/Principe_de_responsabilit%C3%A9_unique "Principe de responsabilitĂ© unique") [Ouvert/fermĂ©](https://fr.wikipedia.org/wiki/Principe_ouvert/ferm%C3%A9 "Principe ouvert/fermĂ©") [Substitution de Liskov](https://fr.wikipedia.org/wiki/Principe_de_substitution_de_Liskov "Principe de substitution de Liskov") [SĂ©grĂ©gation des interfaces](https://fr.wikipedia.org/wiki/Principe_de_s%C3%A9gr%C3%A9gation_des_interfaces "Principe de sĂ©grĂ©gation des interfaces") [Inversion des dĂ©pendances](https://fr.wikipedia.org/wiki/Inversion_des_d%C3%A9pendances "Inversion des dĂ©pendances") | | Mauvaises pratiques | | | | | | [Antipatterns](https://fr.wikipedia.org/wiki/Antipattern "Antipattern") | [Attente active](https://fr.wikipedia.org/wiki/Attente_active "Attente active") [Grosse boule de boue](https://fr.wikipedia.org/wiki/Grosse_boule_de_boue "Grosse boule de boue") [Programmation spaghetti](https://fr.wikipedia.org/wiki/Programmation_spaghetti "Programmation spaghetti") ([syndrome](https://fr.wikipedia.org/wiki/Syndrome_du_plat_de_spaghettis "Syndrome du plat de spaghettis")) [RĂ©inventer la roue](https://fr.wikipedia.org/wiki/R%C3%A9inventer_la_roue "RĂ©inventer la roue") | | | | | [Code smells](https://fr.wikipedia.org/wiki/Code_smell "Code smell") | [Duplication de code](https://fr.wikipedia.org/wiki/Duplication_de_code "Duplication de code") [God object](https://fr.wikipedia.org/wiki/God_object "God object") | | Voir aussi : [GĂ©nie logiciel](https://fr.wikipedia.org/wiki/G%C3%A9nie_logiciel "GĂ©nie logiciel"), [Software craftsmanship](https://fr.wikipedia.org/wiki/Software_craftsmanship "Software craftsmanship"), [DĂ©gradation logicielle](https://fr.wikipedia.org/wiki/D%C3%A9gradation_logicielle "DĂ©gradation logicielle") | | - [![icĂŽne dĂ©corative](https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Circle-icons-computer.svg/40px-Circle-icons-computer.svg.png)](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail de l’informatique") [Portail de l’informatique](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail:Informatique")
Shard152 (laksa)
Root Hash17790707453426894952
Unparsed URLorg,wikipedia!fr,/wiki/Test_unitaire s443