Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Testing sur Legacy Code
Search
Jean-Laurent de Morlhon
November 20, 2013
Programming
77
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Testing sur Legacy Code
Jean-Laurent de Morlhon
November 20, 2013
More Decks by Jean-Laurent de Morlhon
See All by Jean-Laurent de Morlhon
Retour Sur DockerCon 2016 - Docker Mega Meetup
jeanlaurent
1
140
Retour sur DockerCon 2016
jeanlaurent
2
220
Pourquoi Maurice ne doit surtout pas coder en Go.
jeanlaurent
0
200
Diamond Kata Workshop
jeanlaurent
0
200
Testing sur code legacy
jeanlaurent
0
140
FruitShop
jeanlaurent
3
860
Phantom, Zombie & Karma, overview of the greatest testing tools for modern web app
jeanlaurent
5
780
Live Coding Tester une Application HTML5
jeanlaurent
1
110
Le fantome, le zombie et testacular Karma. Panorama des outils de tests pour application web moderne.
jeanlaurent
1
110
Other Decks in Programming
See All in Programming
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
Building an Out-of-Order CPU
latte72
1
730
Webプラットフォームで議論されているセキュリティ課題 / Security issues being discussed on Web Platforms
petamoriken
0
290
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
120
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
100
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
170
Family mrubyの進捗
kishima
1
100
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
890
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
Paper Plane (Part 1)
katiecoart
PRO
1
11k
Navigating Weather and Climate Data
rabernat
0
510
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Speed Design
sergeychernyshev
33
2.1k
Skip the Path - Find Your Career Trail
mkilby
1
220
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Building Applications with DynamoDB
mza
96
7.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Navigating Team Friction
lara
192
16k
Transcript
TESTING SUR CODE LEGACY Jean-Laurent de Morlhon
WHO'S WHO ? Nom & rôle dans votre entreprise ?
Expérience professionnelle ? Votre niveau en testing sur du code legacy ?
AGENDA Présentation Craftsmanship Testing & Legacy Gilded Rose Legacy Code
Refactoring WrapUp 4 % 4 % 12 % 24 % 48 % 8 % Présentation Craftsmanship Testing & Legacy Gilded Rose Mayhem Wrap Up
CRAFTSMANSHIP
Process Coding CRAFTSMANSHIP
Attitude
MENTORING & TRAINING
TESTING & LEGACY
None
TAXONOMIE DES TESTS Tests unitaires Tests d'intégrations e2e Tests de
performance Tests de charge Tests exploratoires Tests d'ergonomie Automatisées manuels
TEST UNITAIRE @Test public void should_find_winning_bids_when_there_is_option_bids() { Bid bid =
new Bid(); bid.setStatus(OPTION); ExpiredBids expiredBids = new ExpiredBids(); expiredBids.add(bid); assertThat(expiredBids.isAnyWinning()).isTrue(); } Test très technique Teste une classe en isolation des autres Ultra rapide (< 10ms)
TEST D'INTÉGRATION Test souvent technique Teste le comportement de plusieurs
composants ensemble Rapide à lent ( 500ms ~ 1s) @Test public void i_can_retrieve_auctions_bided_by_an_investor() { Investor investor = investors.add(buildInvestor()); Auction auction = auctions.add(buildAuction()); auctions.addBidToAuction(auction.getId(), buildBid()); assertThat(auctions.fromInvestors(investor.get_id())).isNotEmpty(); }
TEST END 2 END Test souvent fonctionnel Teste toute l'application,
souvent via l'interface Lent (+1s) it 'should find my company account from siren', (done) -> browser = new Browser() browser.visit home, -> browser.clickLink 'Inscrivez-vous', -> browser.choose 'une entreprise' browser.pressButton 'Envoyer', -> browser.fill 'sirenCode', '394149496' browser.clickLink 'Rechercher', -> expect(browser.evaluate('$(\'input[name="e"]\').val()')).to.equal 'SERPODILE' done()
TECHNIQUES
TEST "AFTER" J'écris du code J'écris un test qui couvre
le code que je viens d'écrire du mieux que je peux. Facile à faire Génère des tests d'intégrations Tests souvent compliqués.
TDD Ecrire un test unitaire qui échoue Faire passer le
test simplement Refactor Switch de clavier
TECHNIQUE OUTSIDE-IN Ecrire un test d'acceptance qui échoue Ecrire un
test unitaire qui échoue Faire passer le test simplement Refactor
BDD - TDD WITH STYLE Scenario: substract two numbers Given
I have entered 10 in the calculator And I have entered 7 in the calculator When I press substract Then the result should be 3 on the screen
LEGACY CODE ? Un système en production Manque de maintenance
Manque de tests Customization Locking Pas de source
PYRAMIDE DES TESTS Tests unitaires Tests d'intégrations e2e 1-5% 5-15%
80-90% + - Temps Complexité Fragilité
PYRAMIDE DES TESTS 0-5% 5-15% 80-90% + - Temps Complexité
Fragilité e2e Tests d'intégrations Tests unitaires
INVERSER LA PYRAMIDE e2e Tests d'intégrations Tests unitaires Tests unitaires
Tests d'intégrations e2e Système legacy Système sous contrôle
INVERSER LA PYRAMIDE 4 règles du design simple Attitude Boy
Scout Rule Appropriation collective du code Politique de tests Design émergent
4 RÈGLES DU DESIGN SIMPLE 1. Tous les tests passent
2. Révèle ton intention 3. Evite la duplication 4. Petites classes & petites méthodes
FENETRE CASSEE
PAIR PROGRAMMING
DESIGN EMERGENT
RÈGLE DU BOY SCOUT
TOUT EST LIÉ
CODE
GILDED ROSE https://github.com/xebia-france/gildedrose-kata Exercice de refactoring sur legacy Par binôme
Tentez une technique Vous êtes la pour expérimenter, apprendre Pas pour "gagner" l'exercice. Niveau: moyen 1h30
MAYHEM https://github.com/jeanlaurent/devoxx-legacy-code-labs MAY-HEM: A state of violent disorder or riotous
confusion; havoc 3h Exercice de refactoring sur legacy Par binôme Niveau: difficile
UN PEU DE LECTURE
CONTACT
[email protected]
@morlhon http://code-story.net http://morlhon.net/blog