83
Les Aventures d'Alice la Révolte des Tests Ly-Jia Goldstein – Arolla @Ly_Jia

Les Aventures d'Alice - la Révolte des Tests

Embed Size (px)

DESCRIPTION

Talk présenté à BDX.IO Alice rêve de tests à ajouter dans son application quand elle aperçoit le Lapin blanc soucieux de qualité. Partie à sa poursuite, elle se trouve propulsée dans un monde ressemblant étrangement à son code, et commence à faire apparaître de nombreux tests unitaires. Pourtant, le Lapin blanc est encore insatisfait ; lesdits tests se rebellent, deviennent incontrôlables et ne veulent plus vérifier ce qu'elle veut. Comment Alice va-t-elle réussir à reprendre la main sur les tests et les faire fonctionner correctement ? À travers les aventures d'Alice, je vais vous présenter les pièges courants du testing qui découragent souvent les débutants, mais également les bonnes pratiques et des outils pour obtenir des tests fonctionnels et efficaces.

Citation preview

Page 1: Les Aventures d'Alice - la Révolte des Tests

Les Aventures d'Alice

la Révolte des Tests

Ly-Jia Goldstein – Arolla

@Ly_Jia

Page 2: Les Aventures d'Alice - la Révolte des Tests

Que dit un test unitaire en entrant dans un bar ?

Page 3: Les Aventures d'Alice - la Révolte des Tests

Assert-moi un vert !

Page 4: Les Aventures d'Alice - la Révolte des Tests

Assert-moi un vert !

Page 5: Les Aventures d'Alice - la Révolte des Tests

Développeuse

@Ly_Jia

Paris

.NET/C#

Software Craftsmanship

TDD

BDD

DDD

http://lyjia.net

Jeux vidéo

XP MeetUp

Page 6: Les Aventures d'Alice - la Révolte des Tests

Test unitaire ?

Page 7: Les Aventures d'Alice - la Révolte des Tests

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 »)

Source : Wikipédia

Page 8: Les Aventures d'Alice - la Révolte des Tests

À quoi sert un test unitaire ?

Page 9: Les Aventures d'Alice - la Révolte des Tests

Non-régression

Page 10: Les Aventures d'Alice - la Révolte des Tests

Non-régression

Feedback

Page 11: Les Aventures d'Alice - la Révolte des Tests

Non-régression

Feedback

Documentation

Page 12: Les Aventures d'Alice - la Révolte des Tests

Calendrier

● Ajout d'évènements● Pas de chevauchement entre les évènements● Pas d'ajout d'évènement dans le passé

● Affichage des évènements● Seulement ceux à venir● Selon une culture donnée

Page 13: Les Aventures d'Alice - la Révolte des Tests

In the

movie

s...

Page 14: Les Aventures d'Alice - la Révolte des Tests

But in

real

life..

.

Page 15: Les Aventures d'Alice - la Révolte des Tests

But in

real

life..

.

Page 16: Les Aventures d'Alice - la Révolte des Tests
Page 17: Les Aventures d'Alice - la Révolte des Tests

Let's check the code!!!

Page 18: Les Aventures d'Alice - la Révolte des Tests

Tests morts

Page 19: Les Aventures d'Alice - la Révolte des Tests

Tests morts

Page 20: Les Aventures d'Alice - la Révolte des Tests

Coupez-leur la tête !

Page 21: Les Aventures d'Alice - la Révolte des Tests

Tests morts

Page 22: Les Aventures d'Alice - la Révolte des Tests
Page 23: Les Aventures d'Alice - la Révolte des Tests

Tests liés à l'implémentation

Page 24: Les Aventures d'Alice - la Révolte des Tests

Tests liés à l'implémentation

Page 25: Les Aventures d'Alice - la Révolte des Tests

Tests liés à l'implémentation

Page 26: Les Aventures d'Alice - la Révolte des Tests

Documentation

Page 27: Les Aventures d'Alice - la Révolte des Tests
Page 28: Les Aventures d'Alice - la Révolte des Tests
Page 29: Les Aventures d'Alice - la Révolte des Tests

Logique

Page 30: Les Aventures d'Alice - la Révolte des Tests

Logique

Plusieurs assertions

Page 31: Les Aventures d'Alice - la Révolte des Tests

Tests trop gros

Logique

Plusieurs assertions

Page 32: Les Aventures d'Alice - la Révolte des Tests

Plus c'est petit, Plus c'est mignon

Page 33: Les Aventures d'Alice - la Révolte des Tests

Plus c'est petit, Plus c'est mignon

Page 34: Les Aventures d'Alice - la Révolte des Tests

Attention ! Parfois il est normal

d'avoir plusieurs asserts dans un seul test !

Page 35: Les Aventures d'Alice - la Révolte des Tests
Page 36: Les Aventures d'Alice - la Révolte des Tests

Duplication de code !

Page 37: Les Aventures d'Alice - la Révolte des Tests

Factorisation

Page 38: Les Aventures d'Alice - la Révolte des Tests

SetUp / TearDown

Page 39: Les Aventures d'Alice - la Révolte des Tests
Page 40: Les Aventures d'Alice - la Révolte des Tests

Attention aux variables

Page 41: Les Aventures d'Alice - la Révolte des Tests
Page 42: Les Aventures d'Alice - la Révolte des Tests

Attention aux abus de fixture !

Page 43: Les Aventures d'Alice - la Révolte des Tests

Builders

Page 44: Les Aventures d'Alice - la Révolte des Tests

Builders

Page 45: Les Aventures d'Alice - la Révolte des Tests

Builders

Page 46: Les Aventures d'Alice - la Révolte des Tests
Page 47: Les Aventures d'Alice - la Révolte des Tests

Utilisation du code de production

Page 48: Les Aventures d'Alice - la Révolte des Tests

Tests inconsistants

Page 49: Les Aventures d'Alice - la Révolte des Tests

Tests inconsistants

● Random● DateTime.Now● Ordre des tests● Tests non unitaires (ex : dépendance

à une base de données)

Page 50: Les Aventures d'Alice - la Révolte des Tests

Granularité > Classe / Couplage

Page 51: Les Aventures d'Alice - la Révolte des Tests

Mock

Page 52: Les Aventures d'Alice - la Révolte des Tests

Mock

Page 53: Les Aventures d'Alice - la Révolte des Tests

Mock

Page 54: Les Aventures d'Alice - la Révolte des Tests

STUB

Page 55: Les Aventures d'Alice - la Révolte des Tests

STUB

Page 56: Les Aventures d'Alice - la Révolte des Tests

Mélanger Mock et Stub

Page 57: Les Aventures d'Alice - la Révolte des Tests

Plusieurs Mocks dans un seul test

Page 58: Les Aventures d'Alice - la Révolte des Tests

Récapitulatif des Pièges courants

● Tests morts● Tests liés à l'implémentation● Trop de vérifications dans un seul test● Logique dans les tests● Abus du setup/teardown et des fixtures● Utiliser du code de production pour construire un test● Non-consistance (DateTime.Now, ordre des tests, random)● Granularité > classe (couplage avec un tiers)● Mélange entre Mock et Stub● Plusieurs mocks dans un seul test

Page 59: Les Aventures d'Alice - la Révolte des Tests

Lisibilité

Maintenabilité

Fiabilité

Page 60: Les Aventures d'Alice - la Révolte des Tests

Fluent ASSERTIONS

Page 61: Les Aventures d'Alice - la Révolte des Tests

Jouer les tests le plus souvent possible

Page 62: Les Aventures d'Alice - la Révolte des Tests

Code de production et code de test sont

amis pour la vie

Page 63: Les Aventures d'Alice - la Révolte des Tests
Page 64: Les Aventures d'Alice - la Révolte des Tests

RedGreen

Refactor

Page 65: Les Aventures d'Alice - la Révolte des Tests

RedGreen

RefactorRefactor your tests

Page 66: Les Aventures d'Alice - la Révolte des Tests

qui garde les gardes ?

Page 67: Les Aventures d'Alice - la Révolte des Tests

Mutation testing

Page 68: Les Aventures d'Alice - la Révolte des Tests

Rapport pitest

Mutation testing

Source : http://pitest.org/

Page 69: Les Aventures d'Alice - la Révolte des Tests

Mutation testing

Page 70: Les Aventures d'Alice - la Révolte des Tests

Attention aux

ressources

Mutation testing

Page 71: Les Aventures d'Alice - la Révolte des Tests

Comment gérerle code de test

legacy ?

Page 72: Les Aventures d'Alice - la Révolte des Tests

Revue de code de test

Page 73: Les Aventures d'Alice - la Révolte des Tests

● Un test ne teste qu'une chose● Les asserts sont séparés des actions (ie sur différentes lignes)● Des valeurs simples sont utilisées pour vérifier les comportements● ...

Lisibilité

Page 74: Les Aventures d'Alice - la Révolte des Tests

● Les tests sont isolés les uns des autres et sont répétables● Tester des méthodes privées ou protected ne doit pas être une norme ● Ne pas avoir plus d'un mock par test● …

maintenabilité

Page 75: Les Aventures d'Alice - la Révolte des Tests

● Les tests unitaires sont séparés des tests d'intégration● Utiliser que des valeurs fixes (éviter DateTime.Now par exemple)● Les tests ne vérifient pas des valeurs qui sont créées dynamiquement

(possibilité de reproduire du code de production dans le test)● ...

fiabilité

Page 76: Les Aventures d'Alice - la Révolte des Tests

Sinon...

Page 77: Les Aventures d'Alice - la Révolte des Tests

Coupez-leur la tête !

Page 78: Les Aventures d'Alice - la Révolte des Tests

Frameworks et outils

● Nunit, Xunit

● Moq, RhinoMocks

● NFluent

● NinjaTurtles, OpenMutate

● ContinuousTest / MightyMoose, Giles

● Opencover

● Junit

● EasyMock, Mockito, JMock

● AssertJ

● Pitest

● Infinitest

● Cobertura

Page 79: Les Aventures d'Alice - la Révolte des Tests
Page 80: Les Aventures d'Alice - la Révolte des Tests

Bibliographie

The Art of Unit Testing – Roy Osherove, http://artofunittesting.com/

TDD By Example – Kent Beck

Mocks & StubsMocks Aren't Stubs – Martin Fowler, http://martinfowler.com/articles/mocksArentStubs.html

Understanding Mock Objects – Roy Osherove,http://osherove.com/videos/2009/8/25/tdd-understanding-mock-objects.html

Mutation TestingNinjaTurtles : http://www.mutation-testing.net/

Pitest : http://pitest.org/

Page 81: Les Aventures d'Alice - la Révolte des Tests

Merci

Page 82: Les Aventures d'Alice - la Révolte des Tests
Page 83: Les Aventures d'Alice - la Révolte des Tests