Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Testing sur Legacy Code
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Jean-Laurent de Morlhon
November 20, 2013
Programming
73
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
190
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
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
300
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
120
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
440
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
210
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.6k
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
200
どこまでゆるくて許されるのか
tk3fftk
0
280
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
650
JavaDoc 再入門
nagise
1
430
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
280
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The World Runs on Bad Software
bkeepers
PRO
72
12k
sira's awesome portfolio website redesign presentation
elsirapls
0
290
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
740
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
250
Designing Powerful Visuals for Engaging Learning
tmiket
1
430
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