57
1 Formation tests Florence CHABANOIS Mardi 14 décembre 2010

Formation tests decembre2010

  • Upload
    fou-cha

  • View
    1.207

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Formation tests decembre2010

1

Formation tests

Florence CHABANOISMardi 14 décembre 2010

Page 2: Formation tests decembre2010

2

Consultante Soat

Ce que j’aimeLe partageLe fun

Ce que je n’aime pasLa répétition

Qualité Développement

Page 3: Formation tests decembre2010

3

Vous ?

Ce qui vous sort par les yeux, en général ou au quotidien

Ce que vous trouviez « bien » dans votre projet et sur vos pratiques

Votre projetL’objectif ?Ce qui l’empêche d’y arriver

Page 4: Formation tests decembre2010

4

Planning

Mardi Matin : présentation générale sur les testsAprès-midi : étude de l’existant et choix des outils

Mercredi-JeudiMélée dans les équipes pour poser des tests

VendrediMatin : atelier de mise au point (rattrapage, traitement d’un problème récurrent ou perfectionnement)Après-midi : synthèse avec les managers

Page 5: Formation tests decembre2010

5

Formation tests

Jusque 11h

Page 6: Formation tests decembre2010

6

Tester ?

Vérifier le bon fonctionnement

Révéler les défauts

Page 7: Formation tests decembre2010

7

Nous faisons

tous

des tests

Page 8: Formation tests decembre2010

8

Page 9: Formation tests decembre2010

9

Page 10: Formation tests decembre2010

10

En informatique

Un client nous remonte qu’il vient de s’inscrire sur notre site d’e-commerce et qu’il a eu un message d’erreur

Page 11: Formation tests decembre2010

11

Page 12: Formation tests decembre2010

12

Page 13: Formation tests decembre2010

13

Page 14: Formation tests decembre2010

14

Page 15: Formation tests decembre2010

15

Page 16: Formation tests decembre2010

16

Tests manuels en IT

Hypothèse invalidéeIl faut supprimer le compte et tester une autre hypothèse

Page 17: Formation tests decembre2010

17

Coûts des tests manuels

Longs Nouveaux + existants

Propices aux erreursConcentration, oublis

Laissent moins de place aux autres tests (exploratoires, de charge, expérience utilisateur, etc.)X10 x10 x10

Industrialiser les tests

Page 18: Formation tests decembre2010

18

Typologie des tests

Test fonctionnel

Test unitaire

Test de charge

Test d’exploitabilité

Test d’intégration

Test d’accessibilité

Test de conformité W3C

Test fonctionnel

Test unitaire

« bon fonctionnement »

Page 19: Formation tests decembre2010

19

Tests fonctionnels

Boite noire Données en entrée et observations attendues

nom

prenom

emailInscription

newsletter

« Vous êtes bien inscrit »

Page 20: Formation tests decembre2010

20

Selenium

http://seleniumhq.org

Mode opératoire0. Lancer le plugin firefox1. Enregistrement du scénario2. Spécifications des attentes3. Arrêt de l’enregistrement3. Ajustement pour faire passer le test

Présentation

Code

Selenium

Données

Page 21: Formation tests decembre2010

21

Exemple Selenium

Spécification : un mot recherché ne doit pas tenir compte de la casse

« electricite »

Recherche

« Electricité »

Page 22: Formation tests decembre2010

22

Selenium

Page 23: Formation tests decembre2010

23

Selenium

Les avantagesFacilité de création des cas de testsAssure la non régressionTeste la fonctionnalité comme le ferait un utilisateurTestable en continu

Page 24: Formation tests decembre2010

24

Selenium

Les inconvénientsLenteursTests non déterministesPotentiellement très nombreuxPeu évolutifs et difficiles à maintenirCrées après l’implémentationDépendants du navigateurPeu compréhensibles avant d’être exécutés

Page 25: Formation tests decembre2010

25

Fitnesse

http://fitnesse.org

Mode opératoire0. Lancer le serveur fitnesse1. Déclarer vos spécifications dans le wiki2. Câbler votre code dessus (par le biais de

fixture)

Présentation

Code

Fitnesse

Données

Fixtures

Page 26: Formation tests decembre2010

26

Fitnesse

Page 27: Formation tests decembre2010

27

Fitnesse

Page 28: Formation tests decembre2010

28

Fitnesse

Les avantagesLimite les malentendus par les exemplesConstitue une spécification exécutable (TDR)FactorisableTestable en continuCentralisé

Les inconvénientsTicket d’entréeNe teste pas l’application tout à fait comme un utilisateur

Page 29: Formation tests decembre2010

29

Autres outils de tests fonctionnels

Greenpepper avec XWiki ou Confluencehttp://www.greenpeppersoftware.com

Concordionhttp://www.concordion.org/

Page 30: Formation tests decembre2010

31

Page 31: Formation tests decembre2010

32

Page 32: Formation tests decembre2010

33

D’où vient le problème ?

Frein ?

Direction assistée?

Boite de vitesse ?

Pneus usés ?

Page 33: Formation tests decembre2010

34

Tests unitaires

Permet de vérifier isolément que les composants fonctionnent bien

Tester une partie du produit Simuler un comportement différent de la production

Page 34: Formation tests decembre2010

35

Tests unitaires

Pour pouvoir tester unitairement :Les composants doivent être séparables pour être utilisés de façon isoléeLes éléments testés doivent être simples

Page 35: Formation tests decembre2010

36

Test Driven Development

Développement dirigé par les tests

• Given… When… Then• Implémentation• Refactoring

Page 36: Formation tests decembre2010

37

Page 37: Formation tests decembre2010

38

Premier test

Page 38: Formation tests decembre2010

39

Quand… Avec … Alors …

@Test public void add_DeuxEtTrois_retourneCinq() { int resultat = new Computer().ajoute(2, 3); assertThat(resultat,is(equalTo(5))); }

Page 39: Formation tests decembre2010

40

Barre rouge

Page 40: Formation tests decembre2010

41

Implémentation et barre verte

Page 41: Formation tests decembre2010

42

Deuxième test

Page 42: Formation tests decembre2010

43

Généralisation

Page 43: Formation tests decembre2010

44

Tester une méthode qui traverse des couches

Page 44: Formation tests decembre2010

45

Utiliser les mocks pour tester en isolation

public class Utilisateur { private String login = « login »;

public boolean login(String motDePasse) {UserDao userDao = new UserDao();

String motDePasseDeLaBase = userDao.getPassword(login);

return (motDePasse==motDePasseDeLaBase); }

Page 45: Formation tests decembre2010

46

@Test public void login_utilisateurExisteEtPasswordOk_retourneTrue()

{ insereUtilisateurDansLaBase("login","mot de passe correct"); boolean estLoggue = new Utilisateur().login("mot de passe

correct"); assertThat(estLoggue, is(true)); supprimerUtilisateurDeLaBase("login"); }

Page 46: Formation tests decembre2010

47

Tester les cas limites

@Test public void login_utilisateurExisteEtPasswordOk_retourneTrue() { insereUtilisateurDansLaBase("login","mot de passe correct"); boolean estLoggue = new Utilisateur().login("mot de passe correct"); assertThat(estLoggue, is(true)); supprimerUtilisateurDeLaBase("login"); } @Test public void login_utilisateurExisteEtPasswordIncorrect_retourneFalse() { insereUtilisateurDansLaBase("login","mot de passe correct"); boolean estLoggue = new Utilisateur().login(« pas le bon mot de passe"); assertThat(estLoggue, is(false)); supprimerUtilisateurDeLaBase("login"); }

Page 47: Formation tests decembre2010

48

Factoriser

@Before public void setUp() { insereUtilisateurDansLaBase("login","mot de passe correct"); } @After public void tearDown() { supprimerUtilisateurDeLaBase("login"); } @Test public void login_utilisateurExisteEtPasswordOk_retourneTrue() { boolean estLoggue = new Utilisateur().login("mot de passe correct"); assertThat(estLoggue, is(true)); }

Page 48: Formation tests decembre2010

49

InconvénientsInterdépendance avec la base

Tests non parallélisablesEtat instable (si données non supprimées)Potentiellement non déterministe

Couplage fortNombreux tests à modifier

SolutionRefactorer pour permettre un branchement

Page 49: Formation tests decembre2010

50

Création d’une veine pour le DAO

public class Utilisateur { String login = « login »; UserDao userDao = new UserDao();

Utilisateur(UserDao userDao) { this.userDao = userDao; }

public boolean login(String motDePasse) { String motDePasseDeLaBase =

userDao.getPassword(login); return (motDePasse.equals(motDePasseDeLaBase)); }

Page 50: Formation tests decembre2010

51

Utilisation de mock pour simuler d’autres comportements

@Test public void login_utilisateurExisteEtPasswordOk_retourneTrue() { UserDao dao = Mockito.mock(UserDao.class); when(dao.getPassword("login")).thenReturn("mot de passe correct"); boolean estLoggue = new Utilisateur(dao).login("mot de passe

correct"); assertThat(estLoggue, is(true)); }

Page 51: Formation tests decembre2010

52

Autre cas limite

@Test public void login_utilisateurExisteEtException_retourneFalse() { UserDao dao = Mockito.mock(UserDao.class); when(dao.getPassword("login")).thenThrow(new RuntimeException());

boolean estLoggue = new Utilisateur(dao).login("mot de passe correct");

verify(dao).getPassword("login"); assertThat(estLoggue, is(false)); }

Page 52: Formation tests decembre2010

53

Vérification du comportement

@Test public void login_utilisateurExisteEtPasswordOk_retourneTrue() { UserDao dao = mock(UserDao.class); when(dao.getPassword("login")).thenReturn("mot de passe correct"); boolean estLoggue = new Utilisateur(dao).login("mot de passe

correct"); verify(dao).getPassword("login"); assertThat(estLoggue, is(true)); }

Page 53: Formation tests decembre2010

54

Autres frameworks de tests

ClassiquesJMock, Easymock

Pour le code legacyPowermock, JMockit

Page 54: Formation tests decembre2010

55

Tests unitaires

AvantagesPermet de sécuriser son application … incrémentalementAugmente la confianceAide à construire le logiciel

InconvénientsApprentissageRalentit le développement dans un premier temps

Page 55: Formation tests decembre2010

56

Ressources complémentaires

TestsTest Driven Development, K.BeckxUnit Test Patterns, G.MeszarosGrowing Object Oriented Software, S.Freeman, N.PryceWorking Effectively With Legacy Code, M.Feathers

DesignCoder Proprement, R.MartinRefactoring, M.Fowler

Page 56: Formation tests decembre2010

57

A retenir

Test non automatisé = (pas de test)Un bug corrigé une fois est corrigé pour toujoursFaites toujours passer un test au rouge avant de le passer au vertSoignez le comme du code de productionSoignez votre code de production (boy scout rule, DRY, KISS)

Page 57: Formation tests decembre2010

58

Questions ?

Votre expérience ?Vos besoins ? Votre ressenti ?