anti-patrons de tests unitaires - club d'entraide des développeurs francophones

anti-patrons de tests unitaires - club d'entraide des développeurs francophones rechercher: sur developpez.com sur les forums forums | tutoriels | f.a.q's | participez | hébergement | contacts club blogs emploi formation dév. web php xml python autres 2d-3d-jeux sécurité systèmes windows linux accueil   tv   conception java dotnet visual basic  c  c++ delphi pascal ms-office sql & sgbd oracle  4d  forums conception tutoriels conception f.a.qs conception uml merise livres conception anti-patrons de tests unitairesdate de mise à jour : 05/10/2007 par bruno orsier (site web de bruno orsier)  en complément de mon tutoriel sur le développement dirigé par les tests, cette page propose une traduction des anti-patrons de tests unitaires recensés par james carr sur son blog. traduction faite avec la permission de james carr.                version pdf (miroir)   version hors-ligne (miroir) i. introduction ii. liste de james carr le menteur l'overdose d'initialisations le géant la mascarade l'inspecteur les restes copieux le héros local le pinailleur l'attrapeur caché l'escroc la grande gueule le glouton le séquenceur la dépendance cachée l'énumérateur l'étranger l'évangéliste du système d'exploitation le succès envers et contre tout la course gratuite l'unique le voyeur l'escargot iii. commentaires sur le blog de james carr le coucou la mère poule l'oie sauvage le dodo le prévisible le chasseur de trésors le dégueulasse iv. remerciements i. introduction nous avons vu dans le tutoriel l'intérêt de travailler avec des tests unitaires. cette manière de travailler comporte toutefois certains risques de dérapages. heureusement les professionnels pratiquant ces tests ont identifié un certain nombre de choses à éviter et les ont cataloguées sous forme de liste d'anti-patrons (anti-pattern en anglais). tout comme les "bons" patrons de conception, un anti-patron doit avoir été identifié de manière indépendante par plusieurs personnes et doit être décrit de manière assez formalisée, avec ses avantages, ses inconvénients etc. ici nous nous contentons toutefois d'une liste assez informelle, qui a tout le même le mérite d'avoir été discutée en détail sur le forum  testdrivendevelopment. james carr a ensuite recensé ces anti-patrons dans son blog (section ii ci-dessous), puis divers commentateurs en ont ajouté de nouveaux (section iii). les lecteurs recherchant plutôt des anti-patrons bien formalisés pourront consulter le site  http://xunitpatterns.com/ ainsi que le livre correspondant. ii. liste de james carr le menteur une classe de test unitaire dont toutes les méthodes passent et qui donc apparaît valide, mais après une inspection détaillée on découvre qu'elle ne teste pas du tout ce que l'on pensait. l'overdose d'initialisations un test qui demande beaucoup d'initialisations avant de commencer à tester. quelquefois plusieurs centaines de lignes de code sont nécessaires pour initialiser l'environnement pour un seul test, avec plusieurs objets impliqués, ce qui rend difficile de savoir ce qui est réellement testé. le géant une classe de test unitaire qui comporte des tests valides, mais comprend des milliers de lignes de code et contient beaucoup de cas de tests. ceci peut être une indication que le système testé est un "objet dieu", à savoir un objet qui fait tout, qui voit tout, donc dont les responsabilités sont trop importantes. la mascarade doubler (mock en anglais) des objets est parfois très utile. mais il arrive que des développeurs s'égarent dans leur effort de doubler ce qui n'est pas à tester. dans ce cas un test unitaire contient tellement de doublures de tests (mocks, stubs, fakes :  voir définitions) que le système testé n'est en fait pas testé du tout : ce sont les données fournies par les doublures qui sont testées. l'inspecteur un test unitaire qui viole l'encapsulation afin d'atteindre 100% de couverture de code, et qui connaît tellement bien l'objet testé que toute tentative de remaniement cassera le test existant, si bien que toute modification de code entraînera une modification de test. les restes copieux un test unitaire crée des données qui persistent quelque part (sur le disque dur par exemple). ces données sont ensuite utilisées à tort par un autre test, qui échouera ou réussira à cause d'un effet de bord. le héros local un cas de test qui dépend de l'environnement de développement. par conséquent il passe sur les machines de développement, mais échoue ailleurs. le pinailleur un test qui examine une sortie complète alors qu'en réalité il est intéressé par seulement de petites parties. par conséquent ce test doit continuellement être mis à jour sur des points de détails pas réellement importants. endémique dans le test d'applications web. l'attrapeur caché un test qui à première vue semble ne faire aucune vérification car les assertions sont absentes. en fait le test est basé sur des exceptions lancées par le code testé et il considère que le framework de test va capturer l'exception et la reporter à l'utilisateur comme un échec du test. l'escroc une classe de test unitaire qui comporte beaucoup de tests sur des effets de bord mineurs (et faciles à tester) mais qui ne teste jamais le comportement central désiré. cela peut arriver dans les tests d'accès à une base de données, où une méthode est appelée, puis le test sélectionne des informations de la base et exécute des assertions sur le résultat. la grande gueule une classe de test unitaire qui remplit la console avec des messages de diagnostic, d'informations, etc. même quand les tests passent. ces messages sont quelquefois nécessaires durant la création des tests, mais ils risquent d'être laissés là, bien qu'inutiles. le glouton un test qui attrape les exceptions et masque la pile d'appel ; il peut même les remplacer par des messages d'échecs contenant moins d'informations, voire les écrire dans un journal et laisser le test passer. le séquenceur un test unitaire qui dépend du fait que des éléments d'une liste non ordonnée vont toujours apparaître dans le même ordre durant les assertions. la dépendance cachée un proche cousin du héros local, un test unitaire qui exige que des données aient été correctement remplies avant que le test ne s'exécute. si ces données ne sont pas fournies, le test échoue mais donne très peu d'indications sur ce qui manque, ce qui force les développeurs à explorer des quantités de code pour trouver ce qui ne va pas. l'énumérateur une classe de test unitaire dans laquelle le nom de chaque méthode de test est simplement une énumération, i.e. test1, test2, test3. par conséquent l'intention de chaque cas de test est obscure et le seul moyen de l'éclaircir est de lire le code du test. l'étranger une méthode de test qui n'appartient pas réellement à la classe de test unitaire dont elle fait partie. elle teste un objet b séparé, probablement un objet utilisé par l'objet a actuellement testé. mais le cas de test s'est mis à tester cet objet b directement, au lieu de s'appuyer sur les sorties de l'objet a (qui utilise b pour son propre comportement). egalement connu sous le nom du cousin éloigné. l'évangéliste du système d'exploitation un test unitaire qui dépend d'une fonction ou caractéristique particulière du système d'exploitation. par exemple un cas de test qui dépendrait du caractère de fin de ligne de windows et qui échouerait sous linux. le succès envers et contre tout un test écrit pour réussir d'abord au lieu d'échouer d'abord. avec pour effet de bord malheureux que le test passe tout le temps, même quand il devrait échouer. la course gratuite au lieu d'ajouter une nouvelle méthode pour un nouveau cas de test, une assertion est ajoutée dans une méthode existante. l'unique une combinaison de plusieurs anti-patterns, en particulier la course gratuite et le géant : une classe de test unitaire qui contient une seule méthode de test qui teste toutes les fonctionnalités offertes par un objet. un indicateur courant est que le nom de la méthode de test est souvent le même que celui du test unitaire, et qu'elle contient de nombreuses lignes d'initialisation et d'assertions. le voyeur un test qui, à cause de ressources partagées, peut voir les données résultant d'un autre test, ce qui peut faire échouer le test même si le système testé est parfaitement valide. egalement connu sous le nom des invités indésirables. l'escargot un test incroyablement lent. les développeurs ont le temps d'aller aux toilettes, fumer une cigarette, ou pire, sont obligés de démarrer le test en partant à la fin de la journée. iii. commentaires sur le blog de james carr cette section propose une traduction d'un sous-ensemble des anti-patterns suggérés par des commentateurs sur le blog de james carr. le coucou dans une classe de tests unitaires, une des méthodes de tests utilise les mêmes (potentiellement longues) initialisations que les autres méthodes, puis elle élimine tout ou partie de ces initialisations pour faire les siennes. la mère poule une initialisation commune qui fait beaucoup plus que ce dont les méthodes de test ont réellement besoin. par exemple elle crée des quantités de structures de données complexes qu'elle remplit avec des valeurs uniques apparemment importantes, alors que les tests vérifient uniquement la présence ou l'absence de quelque chose. cela peut indiquer que l'initialisation a été écrite avant les tests eux-mêmes, ce qui est un cas subtil de violation des principes du développement dirigé par les tests. l'oie sauvage un test unitaire qui, bien qu'initialement simple, demande la création et l'initialisation d'une partie de l'application toujours plus importante au fil du temps. il peut alors consommer un temps de développement disproportionné et fait perdre le bénéfice de la rapidité du cycle du tdd. dans le pire des cas, le tdd est complètement abandonné. ce cas est courant chez les novices en tdd qui ne seraient pas encore à l'aise avec le principe de simuler des réponses. le dodo un test unitaire qui teste un comportement qui n'est plus nécessaire dans l'application. a la fois le test et le comportement en question devraient probablement être supprimés. le prévisible un test unitaire qui teste des conditions multi-threadées avec le même ordonnancement des threads à chaque fois, ou des données aléatoires qui sont en fait toujours exactement les mêmes (ce qui arrive si on utilise toujours la même initialisation du générateur de nombres aléatoires). le chasseur de trésors des tests qui assurent l'obtention du pourcentage désiré de couverture de code, en exerçant le maximum de chemins dans le code, mais qui ne testent rien de réellement utile. le dégueulasse un test qui crée des ressources persistantes, mais ne les nettoie pas après lui. iv. remerciements merci à dia pour sa relecture.                version pdf (miroir)   version hors-ligne (miroir) ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. la copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. responsable bénévole de la rubrique conception : miles - contacter par email : vos questions techniques : forum d'entraide conception - publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones nous contacter - copyright © 2000-2007 www.developpez.com - legal informations.

Acceuil

suivante

anti-patrons de tests unitaires - club d'entraide des développeurs francophones  Test de français langue étrangère et seconde  Tests et diagnostics du réseau  Les bêta-tests de MMOG et MMORPG  Logiciels pedagogiques, tests en ligne, sources de programmation ...  Bienvenue sur Esopole.com  Les tests ADN à travers l'Europe - 20minutes.fr  ADN : de Christophe Colomb aux tests de paternité...  GameUp.com  SpamAssassin: Tests Performed  Cool, jeux et tests pour les juniors  Tests Numériques: Test de raisonnement numérique  Les tests de recrutement  PocketPC Paradise - News  Le réseau juridique du Québec : Les tests d'ADN, pour une réponse ...  Tous les tests de jeux PS2, PSP et PS3  Tests : Nokia 6110 Navigator, Toshiba Portégé G900  Bienvenue sur comparatest.com !  Outils de test gratuits des data centers de Google, par WebRankInfo  Tests de deux cartes graphiques chez nos amis de GinjFo - PC INpact  Premiers tests de Leopard Actualite --- vnunet.fr ---  Test (psychologie) - Wikipédia  WiMAX: premiers tests de connexion nomade pour Bolloré Telecom ...  Lycos Jeux : toute l'actu jeux vidéo, tests, previews  Mandrake 9 : TESTs !  IQTest.com  Ressources didactiques sur internet: tests. C. Vera.  Tests Psicológicos : Test y Cuestionarios  PLAYINGZONE Jeux Video - Le magazine online des jeux vidéo : tests ...  Les tests de jeux vidéo sur PC et Consoles du Magazine en ligne de ...  Matériel informatique - test hardware PC  jQuery 1.1.4 : plus rapide, plus de tests, prêt pour la version ...  Capture d’écran, Présentations, Tests d’utilisabilité - TechSmith ...  Tests ADN : Ils ont voté contre : la vraie couleur du cameleon  N°25 Avis sur l'application des tests génétiques aux études ...  ESSAI-CLINIQUE.COM tests cliniques et essais cliniques rémunérés.  Introduction aux tests unitaires avec PHPUnit 3.1 - Club d ...  Test-Recrutement.com : Tests de recrutement, test recrutement ...  Mondes Persistants, l'actu des MMOG et MMORPG » Tests  AOL Jeux - Tests de jeux vidéos  Tests de QI et psycho-tests - Home  Tests ADN, François Bayrou : "Que le Conseil constitutionnel dise ...  Mode, stars, amours, santé, psycho... : testez-vous sur Marie Claire  iPod Nano Blog.fr: News, info, tests, astuces, reviews ...  Les tests GED  Eclairage sur le RGAA: la logique des tests unitaires mai 2007 ...  Formule 1 - Schumacher effectuera des tests à Barcelone pour ...  Art de vivre : Tests interactifs  TTests-e-Performance : Tests de charge et de performance ...  Tests d'imprimabilité, travaux pratiques, tutoriel, EFPG  Retraite et pénibilité : vers des tests ADN ? - POLITIQUE SOCIALE ...  France 2 -> TESTS - Testez-vous  Rake test:units lance les tests sur la BDD de développement ...  CODE DE LA ROUTE LEADER - DES TESTS DE CODE - LE N°1 DU CODE EN ...  certification bureautique Microsoft Office Specialist, liste ...  Les tests unitaires en pratique, par Patrick Smacchia  Tests de QI gratuits, bibliographie sur les tests, jeux gratuits ...  Journal des Femmes Psychologie : Tous nos tests  Concours infirmier infirmiere tests psychotechniques test psy  Test.com Web Based Testing Software  Tests logiciels de l'année 2007 - ZATAZ.COM Journal, Actualité ...