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
Jean-Laurent de Morlhon
November 20, 2013
Programming
74
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
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.7k
VibeCodingからAgenticWorkflowへ
starfish719
0
590
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
210
React本体のコードリーディング
high_g_engineer
1
150
「人を評価する AI」の設計と実装
ryoyanara
0
210
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
110
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
320
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
140
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
240
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
530
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
160
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
480
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
860
How STYLIGHT went responsive
nonsquared
100
6.2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
240
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Product Roadmaps are Hard
iamctodd
55
12k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.8k
A better future with KSS
kneath
240
18k
Crafting Experiences
bethany
1
250
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
700
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