SlideShare une entreprise Scribd logo
1  sur  55
C’EST QUOI, DU BON CODE
?
BONJOUR !
Rémi Lesieur
@remi_lesieur
Developer
10 years
C# .Net, Java
Trainer
eXtreme Programming
VOUS INTÉGREZ UN NOUVEAU PROJET !
• Gestion de véhicules d’un aéroport
– Localisation
– Carburant
– Etat
– …
• Projet en version 1.1.x
• De nouvelles fonctions vont arriver (version 1.2 puis version 2.0)
IL RESSEMBLE À QUOI ?
• « Le projet avance lentement »
• Les corrections prennent plusieurs semaines, voire mois
• Beaucoup trop de hotfixes
• Le plupart du temps, ont doit corriger les corrections
• Vous demandez pourquoi ….
« Le code est mauvais ! »
C’EST QUOI DU MAUVAIS CODE ?
NE SOYEZ PAS S.T.U.P.I.D. !
• Singleton
• Tight Coupling
• Untestability
• Premature Optimization
• Indescriptive Naming
• Duplication
• Mais ... C’est pas un
pattern super connu et
utilisé ?
SINGLETON
ON PEUT MODIFIER LE COMPORTEMENT COMME ON VEUT !
• « On a arrêter de travailler sur Sql Server et passer sur Oracle. »
• « Oh … Mais on devra continuer à maintenir la version SQL Server pour les
anciens clients. »
• « On doit changer le type de connexion pour un autre client, on va devoir
stocker les données en XML. Tu peux nous faire ça ? »
C’EST QUOI LE PROBLÈME DU SINGLETON ?
• Maintenir plusieurs branches.
• Pattern Strategy impossible.
• Vous faites comment pour les test unitaires ?
LE PROBLÈME N’EST PAS LE PATTERN, MAIS SON UTILISATION !
• Les développeurs utilisant le singleton ont tendance à l’utiliser partout.
• Il y a toujours un autre (meilleur) moyen
• Vous ne pouvez pas changer le comportement d’un singleton sans modifier le
reste de votre code.
COMMENT FAIRE ?
• Appelez directement le constructeur
• « I cannot live without my
frying pan, it’s implemented
in my hand … »
TIGHT COUPLING
QU’EST-CE QUE C’EST ?
• (or strong coupling) : « […] manner and degree of interdependance between
software modules […] » source : Software Engineering - Guide To The
Software Engineering Body of Knowledge
• Les classes dependent trop les unes des autres
–Vous ne pouvez pas changer le comportement d’une classe sans toucher le reste du code
–Tests trop complexes.
ET ? QUEL EST LE PROBLÈME ?
• « Le constructeur de ConnectionManager doit évoluer, on doit directement lui
passer la connectionstring »
• « Oh … il faudra aussi utiliser ConnectionStringManager pour récupérer la
chaîne de connexion »
• N’oubliez pas qu’on doit aussi maintenir la version XML.
• Vous allez passer trop de temps à maintenir votre code !
COMMENT FAIRE ?
• Rendez votre code modulaire
• Rendez votre code testable
If you don’t know how to write tests,
learn it right away.
UNTESTABILITY
POURQUOI ?
• Si vous vous dites « On ne peut pas écrire de tests sur cette classe », alors
votre code est mauvais.
–La plupart du temps, vous êtes en Strong Coupling
–… Pire : des singletons !
• Concentrez vos effort sur les tests unitaires,
–votre architecture évoluera dans le bon sens
Je peux simplement surcharger le
comportement d’une classe pour obtenir celui
que je recherche dans chaque test.
PREMATURE OPTIMIZATION
RÉFLÉCHISSEZ AVANT D’OPTIMISER !
• Un code qui marche est preferable à un code rapide
• Les temps de développement sont accrus
• Vous aller oublier pourquoi et / ou comment vous l’avez fait
• Parfois, vous n’arriverez même pas à relire vore code
2 RÈGLES SIMPLES :
•Ne le faites pas !
•(pour les experts) Ne le faites pas tout de suite !
INDESCRIPTIVE NAMING
UTILISEZ DES NOMS DE VARIABLES ET DE MÉTHODES PARLANTS
• Fini les basses résolutions !
– GBLVCM1(int a, int b) n’est plus valide.
• public void Test_Use_Case_12445_B_Remade_For_Prod_20150814()
• Les numéros de US / specification ne sont PAS de bon noms de méthodes !
–Vous n’avez pas à ouvrir Word / Jira / TFS pour comprendre ce que fait une méthode.
•Si vous avez besoin de mettre des numéros ou des identifiants, utilisez les commentaires
COMMENTER EST UN SIGNE D’ÉCHEC
• Des méthodes, propriétés et variables bien nommées suffisent pour expliquer
un algorithme.
• Rajouter un commentaire complexifie la lecture
– Fait sortir le lecteur du context
– Rends le code plus long à lire
• If you need to copy-paste
your code, you’re doing it
wrong.
DUPLICATION
SOYEZ FAINÉANTS !
• Une modif = <n> modifs !
• Risque de créer <n> fois des bugs.
• 80% du temps, le code entier collé n’est pas nécessaire.
• N’hésitez pas à copier coller du code dans vos tests unitaires
–Les contextes sont plus complexes
–Plus à même d’évoluer
–Trop factoriser rends la maintenance inutilement complexe
• Good code is mainly SOLID
codeALORS LE BON CODE ?
SOLID ?
• Single Responsibility Principle
• Open/Closed Principle
• Liskov Substitution Principle
• Interface Segregation Principle
• Dependency Inversion Principle
SINGLE RESPONSIBILITY PRINCIPLE
UNE CLASSE N’EXISTE QUE POUR UNE SEULE RAISON
• Représenter les données issues de la source
• Exposer les données à la vue (merci MVC et MVVM !)
• Lire / écrire sur la source de données
• S’occuper des interdépendances entre classes
Est-ce le rôle du véhicule de se
sauvegarder en base ?
NE CRÉEZ PAS DE GOD CLASS !!
• Base pour le code spaghetti
–Trop d’attributs / méthodes / propriétés
–Source de strong coupling
–… et haute complexité cyclotimique
• Difficile de trouver le bout de code que vous vouliez modifier
–… Open / Closed principle ?
OPEN/CLOSED PRINCIPLE
OPEN
• Ouvert aux extensions
–Facile de rajouter de nouvelles fonctionnalités au gré des nouvelles demandes.
IDatabaseConnection SQLServerConnection
OracleConnection
XMLConnection …
CLOSED
• Fermé aux modifications
–A part pour corriger des bugs, vous n’avez pas à éditer le code existant
•Ce qui rend les God Classes encore plus obsolètes !
COMMENT FAIRE ?
• Grâce aux IDEs modernes, vous avez un tas d’outils automatisés
–Extraire des interfaces ou des abstractions
–Factoriser le code dupliqué
LISKOV SUBSTITUTION PRINCIPLE
WHAT DOES IT MEAN ?
• “The object of a derived class should be able to replace any object of the base
class without error or changing the program’s behavior”
• Vous rajoutez une voiture électrique.
–On ne rempli pas le reservoir d’essence, on le branche à une prise
SEGREGATION OF INTERFACES
« MANY CLIENT SPECIFIC INTERFACES ARE BETTER THAN ONE GENERAL GENERAL-
PURPOSE INTERFACE » (ROBERT C. MARTIN)
• N’obligez pas les autres développeurs à implementer une méthode qui ne leur
sert à rien.
– Un avion est un véhicule… Comme une voiture.
– Les deux transportent des passagers.
– Seul un avion peut décoller (techniquement)
DEPENDENCY INVERSION
QU’EST-CE QUE C’EST ?
• “Entities must depend on abstractions not on concretions. It states that the
high level module must not depend on the low level module, but they should
depend on abstractions.”
• L’interface utilisateur n’a pas besoin de savoir ce que fait la méthode Save().
• Un contrat lui disant “Ok, je m’occupe de la sauvegarde”.
PAR OÙ COMMENCER ?
EVITEZ LE BIG BANG A TOUT PRIX
Pire chose
dans le code
Définir une
solution
Tester
Ca ne
marche pas
…
Trouver une
autre
solution …
C’est mieux !
UN BON CODE EST UN CODE SIMPLE
• Facile à lire
– Nommé clairement
– Commentaires (très) limités
– Confiner le code optimise dans les couches basses des objets
– Elegant
• Facile à maintenir
– Corriger une méthode doit être évidente
– Des tests automatiques doivent prémunir de toute régression
– Toute evolution ne doit pas impliquer de modifier le code déjà existant
RIEN N’EST ÉCRIT DANS LE MARBRE
• Casser les principes S.O.L.I.D. si besoin
– Si seule la voiture électrique n’a pas de réservoir d’essence, doit-on forcément remettre en
cause tout le modèle ?
• Définissez des règles de codages et tenez-vous y
– Notation Pascal ou Hongroise …
– (en .Net) utiliser var ou non …
• Communiquez, remettez en cause le code existant
– Revue de code
– Pair programming
CA NE SERA PAS FACILE !
• Ca prendra du temps
– Plus plus le code est mauvais, plus cela sera long
– Sans tests automatisés en place, vos tests de non regression seront longs
• Les tests automatisés sont long à maintenir
• Ca sera sans fin
– Continuez de refactor, d’améliorer votre code
• Vous aurez de nouvelles idées
• Vous allez vous améliorer et donc découvrir de nouvelles sources d’amélioration
– De nouvelles erreurs apparaîtront
• De nouveaux développeurs arriveront
• Vous ferez toujours des erreurs (fatigue, rush …)
POUR ALLER PLUS LOIN

Contenu connexe

Tendances

Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testablemartinsson
 
Sonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveSonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveFreddy Mallet
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarElsassJUG
 
Essential skills for the agile developer
Essential skills for the agile developerEssential skills for the agile developer
Essential skills for the agile developerAlice Barralon
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013Romain Linsolas
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAssociation Agile Nantes
 
La revue de code : facile !
La revue de code : facile !La revue de code : facile !
La revue de code : facile !Lucian Precup
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDXavier NOPRE
 
La revue de code : agile, lean, indispensable !
La revue de code : agile, lean, indispensable !La revue de code : agile, lean, indispensable !
La revue de code : agile, lean, indispensable !Lucian Precup
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)Cellenza
 
LnL - Assurer la qualité de vos outils PowerShell
LnL - Assurer la qualité de vos outils PowerShellLnL - Assurer la qualité de vos outils PowerShell
LnL - Assurer la qualité de vos outils PowerShellPatrick Lavallée
 
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)Jean-Pierre Lambert
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techMarine Karam
 
Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017Jean-Pierre Lambert
 
XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008JUG Lausanne
 
4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciel4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciellauraty3204
 
C'est quoi le Software Craftsmanship ?
C'est quoi le Software Craftsmanship ?C'est quoi le Software Craftsmanship ?
C'est quoi le Software Craftsmanship ?Jean-Pierre Lambert
 

Tendances (20)

Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testable
 
Sonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveSonar 2.0 au JUG Genève
Sonar 2.0 au JUG Genève
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec Sonar
 
Essential skills for the agile developer
Essential skills for the agile developerEssential skills for the agile developer
Essential skills for the agile developer
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
 
La revue de code : facile !
La revue de code : facile !La revue de code : facile !
La revue de code : facile !
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDD
 
La revue de code : agile, lean, indispensable !
La revue de code : agile, lean, indispensable !La revue de code : agile, lean, indispensable !
La revue de code : agile, lean, indispensable !
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)
 
LnL - Assurer la qualité de vos outils PowerShell
LnL - Assurer la qualité de vos outils PowerShellLnL - Assurer la qualité de vos outils PowerShell
LnL - Assurer la qualité de vos outils PowerShell
 
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)Introduction aux spécifications exécutables (dit aussi atdd, bdd)
Introduction aux spécifications exécutables (dit aussi atdd, bdd)
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
to Test or not to Test?
to Test or not to Test?to Test or not to Test?
to Test or not to Test?
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue tech
 
Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017
 
Le pilotage par les tests
Le pilotage par les testsLe pilotage par les tests
Le pilotage par les tests
 
XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008
 
4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciel4-Cours de Géniel Logiciel
4-Cours de Géniel Logiciel
 
C'est quoi le Software Craftsmanship ?
C'est quoi le Software Craftsmanship ?C'est quoi le Software Craftsmanship ?
C'est quoi le Software Craftsmanship ?
 

En vedette

Encontra os 4 sabores
Encontra os 4 saboresEncontra os 4 sabores
Encontra os 4 saboresTânia Reis
 
UTA Who - What We Are-Rev3
UTA Who - What We Are-Rev3UTA Who - What We Are-Rev3
UTA Who - What We Are-Rev3James Kolesar
 
Parte 2
Parte 2Parte 2
Parte 2KPatyy
 
Cindy Ratzlaff ~ The Power Of Women
Cindy Ratzlaff ~ The Power Of WomenCindy Ratzlaff ~ The Power Of Women
Cindy Ratzlaff ~ The Power Of WomenCindy Ratzlaff
 
Simetría Axial y Radial
Simetría Axial y RadialSimetría Axial y Radial
Simetría Axial y Radialpabrodriguez
 
Ejercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos IIEjercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos IIPablo Macon
 
Keraton Banjar Kalimantan Selatan
Keraton Banjar Kalimantan SelatanKeraton Banjar Kalimantan Selatan
Keraton Banjar Kalimantan SelatanBani Noor Muchamad
 
Séminaire FROTSI Midi-Pyrénées - MOPA
Séminaire FROTSI Midi-Pyrénées - MOPASéminaire FROTSI Midi-Pyrénées - MOPA
Séminaire FROTSI Midi-Pyrénées - MOPALudovic Dublanchet
 
Session live 3 CHOIXDIF
Session live 3 CHOIXDIFSession live 3 CHOIXDIF
Session live 3 CHOIXDIFFirst_Finance
 
Zavala mojardin marco antonio
Zavala mojardin marco antonioZavala mojardin marco antonio
Zavala mojardin marco antonioIPPSON
 
Officium Pack Tawjih pour les Etudiants et Chercheurs d'emploi
Officium Pack Tawjih pour les Etudiants et Chercheurs d'emploiOfficium Pack Tawjih pour les Etudiants et Chercheurs d'emploi
Officium Pack Tawjih pour les Etudiants et Chercheurs d'emploiMaria DISANDRA
 
Fiesta de Reyes Welcome Packet
Fiesta de Reyes Welcome PacketFiesta de Reyes Welcome Packet
Fiesta de Reyes Welcome Packetrestaurantcnct
 
Job Moins Sympa
Job Moins SympaJob Moins Sympa
Job Moins Sympasoudangael
 

En vedette (20)

Encontra os 4 sabores
Encontra os 4 saboresEncontra os 4 sabores
Encontra os 4 sabores
 
UTA Who - What We Are-Rev3
UTA Who - What We Are-Rev3UTA Who - What We Are-Rev3
UTA Who - What We Are-Rev3
 
Parte 2
Parte 2Parte 2
Parte 2
 
Cindy Ratzlaff ~ The Power Of Women
Cindy Ratzlaff ~ The Power Of WomenCindy Ratzlaff ~ The Power Of Women
Cindy Ratzlaff ~ The Power Of Women
 
Simetría Axial y Radial
Simetría Axial y RadialSimetría Axial y Radial
Simetría Axial y Radial
 
Ejercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos IIEjercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos II
 
Keraton Banjar Kalimantan Selatan
Keraton Banjar Kalimantan SelatanKeraton Banjar Kalimantan Selatan
Keraton Banjar Kalimantan Selatan
 
Wer bessere Angebote schreibt macht mehr umsatz
Wer bessere Angebote schreibt macht mehr umsatzWer bessere Angebote schreibt macht mehr umsatz
Wer bessere Angebote schreibt macht mehr umsatz
 
Presentacion la paradoja
Presentacion la paradojaPresentacion la paradoja
Presentacion la paradoja
 
Essai FPx Ottawa
Essai FPx OttawaEssai FPx Ottawa
Essai FPx Ottawa
 
Vie Heureuse
Vie HeureuseVie Heureuse
Vie Heureuse
 
Séminaire FROTSI Midi-Pyrénées - MOPA
Séminaire FROTSI Midi-Pyrénées - MOPASéminaire FROTSI Midi-Pyrénées - MOPA
Séminaire FROTSI Midi-Pyrénées - MOPA
 
Session live 3 CHOIXDIF
Session live 3 CHOIXDIFSession live 3 CHOIXDIF
Session live 3 CHOIXDIF
 
Zavala mojardin marco antonio
Zavala mojardin marco antonioZavala mojardin marco antonio
Zavala mojardin marco antonio
 
RODOLFO Y RUFUS
RODOLFO Y RUFUSRODOLFO Y RUFUS
RODOLFO Y RUFUS
 
Officium Pack Tawjih pour les Etudiants et Chercheurs d'emploi
Officium Pack Tawjih pour les Etudiants et Chercheurs d'emploiOfficium Pack Tawjih pour les Etudiants et Chercheurs d'emploi
Officium Pack Tawjih pour les Etudiants et Chercheurs d'emploi
 
Fiesta de Reyes Welcome Packet
Fiesta de Reyes Welcome PacketFiesta de Reyes Welcome Packet
Fiesta de Reyes Welcome Packet
 
Job Moins Sympa
Job Moins SympaJob Moins Sympa
Job Moins Sympa
 
La magie des arbres
La magie des arbresLa magie des arbres
La magie des arbres
 
Juego Avion en 3D
Juego Avion en 3DJuego Avion en 3D
Juego Avion en 3D
 

Similaire à C'est quoi, du bon code ?

Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?Christophe HERAL
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgileAgile Tour 2009 Québec
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsThierry Gayet
 
Présentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésPrésentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésDjamel Zouaoui
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgile Toulouse
 
The worst practices for Magento
The worst practices for MagentoThe worst practices for Magento
The worst practices for MagentoLe Bot Christophe
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdf01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdfJunior724645
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Microsoft
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 
OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015Tarik Zakaria Benmerar
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Arnaud LEMAIRE
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBContent Square
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
 

Similaire à C'est quoi, du bon code ? (20)

Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes Agile
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Présentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisésPrésentation Alt.net - Tests unitaires automatisés
Présentation Alt.net - Tests unitaires automatisés
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratique
 
Coder propre !
Coder propre !Coder propre !
Coder propre !
 
The worst practices for Magento
The worst practices for MagentoThe worst practices for Magento
The worst practices for Magento
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Flex Unit Testing
Flex Unit TestingFlex Unit Testing
Flex Unit Testing
 
01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdf01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdf
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
OOP and Design Patterns
OOP and Design PatternsOOP and Design Patterns
OOP and Design Patterns
 
OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015
 

Dernier

Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 

Dernier (8)

JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 

C'est quoi, du bon code ?

  • 1. C’EST QUOI, DU BON CODE ?
  • 2. BONJOUR ! Rémi Lesieur @remi_lesieur Developer 10 years C# .Net, Java Trainer eXtreme Programming
  • 3. VOUS INTÉGREZ UN NOUVEAU PROJET ! • Gestion de véhicules d’un aéroport – Localisation – Carburant – Etat – … • Projet en version 1.1.x • De nouvelles fonctions vont arriver (version 1.2 puis version 2.0)
  • 4. IL RESSEMBLE À QUOI ? • « Le projet avance lentement » • Les corrections prennent plusieurs semaines, voire mois • Beaucoup trop de hotfixes • Le plupart du temps, ont doit corriger les corrections • Vous demandez pourquoi ….
  • 5. « Le code est mauvais ! »
  • 6. C’EST QUOI DU MAUVAIS CODE ?
  • 7. NE SOYEZ PAS S.T.U.P.I.D. ! • Singleton • Tight Coupling • Untestability • Premature Optimization • Indescriptive Naming • Duplication
  • 8. • Mais ... C’est pas un pattern super connu et utilisé ? SINGLETON
  • 9.
  • 10. ON PEUT MODIFIER LE COMPORTEMENT COMME ON VEUT ! • « On a arrêter de travailler sur Sql Server et passer sur Oracle. » • « Oh … Mais on devra continuer à maintenir la version SQL Server pour les anciens clients. » • « On doit changer le type de connexion pour un autre client, on va devoir stocker les données en XML. Tu peux nous faire ça ? »
  • 11. C’EST QUOI LE PROBLÈME DU SINGLETON ? • Maintenir plusieurs branches. • Pattern Strategy impossible. • Vous faites comment pour les test unitaires ?
  • 12. LE PROBLÈME N’EST PAS LE PATTERN, MAIS SON UTILISATION ! • Les développeurs utilisant le singleton ont tendance à l’utiliser partout. • Il y a toujours un autre (meilleur) moyen • Vous ne pouvez pas changer le comportement d’un singleton sans modifier le reste de votre code.
  • 13. COMMENT FAIRE ? • Appelez directement le constructeur
  • 14. • « I cannot live without my frying pan, it’s implemented in my hand … » TIGHT COUPLING
  • 15. QU’EST-CE QUE C’EST ? • (or strong coupling) : « […] manner and degree of interdependance between software modules […] » source : Software Engineering - Guide To The Software Engineering Body of Knowledge • Les classes dependent trop les unes des autres –Vous ne pouvez pas changer le comportement d’une classe sans toucher le reste du code –Tests trop complexes.
  • 16.
  • 17. ET ? QUEL EST LE PROBLÈME ? • « Le constructeur de ConnectionManager doit évoluer, on doit directement lui passer la connectionstring » • « Oh … il faudra aussi utiliser ConnectionStringManager pour récupérer la chaîne de connexion » • N’oubliez pas qu’on doit aussi maintenir la version XML. • Vous allez passer trop de temps à maintenir votre code !
  • 18. COMMENT FAIRE ? • Rendez votre code modulaire • Rendez votre code testable
  • 19. If you don’t know how to write tests, learn it right away. UNTESTABILITY
  • 20. POURQUOI ? • Si vous vous dites « On ne peut pas écrire de tests sur cette classe », alors votre code est mauvais. –La plupart du temps, vous êtes en Strong Coupling –… Pire : des singletons ! • Concentrez vos effort sur les tests unitaires, –votre architecture évoluera dans le bon sens
  • 21. Je peux simplement surcharger le comportement d’une classe pour obtenir celui que je recherche dans chaque test.
  • 23. RÉFLÉCHISSEZ AVANT D’OPTIMISER ! • Un code qui marche est preferable à un code rapide • Les temps de développement sont accrus • Vous aller oublier pourquoi et / ou comment vous l’avez fait • Parfois, vous n’arriverez même pas à relire vore code
  • 24. 2 RÈGLES SIMPLES : •Ne le faites pas ! •(pour les experts) Ne le faites pas tout de suite !
  • 26. UTILISEZ DES NOMS DE VARIABLES ET DE MÉTHODES PARLANTS • Fini les basses résolutions ! – GBLVCM1(int a, int b) n’est plus valide. • public void Test_Use_Case_12445_B_Remade_For_Prod_20150814() • Les numéros de US / specification ne sont PAS de bon noms de méthodes ! –Vous n’avez pas à ouvrir Word / Jira / TFS pour comprendre ce que fait une méthode. •Si vous avez besoin de mettre des numéros ou des identifiants, utilisez les commentaires
  • 27. COMMENTER EST UN SIGNE D’ÉCHEC • Des méthodes, propriétés et variables bien nommées suffisent pour expliquer un algorithme. • Rajouter un commentaire complexifie la lecture – Fait sortir le lecteur du context – Rends le code plus long à lire
  • 28. • If you need to copy-paste your code, you’re doing it wrong. DUPLICATION
  • 29. SOYEZ FAINÉANTS ! • Une modif = <n> modifs ! • Risque de créer <n> fois des bugs. • 80% du temps, le code entier collé n’est pas nécessaire. • N’hésitez pas à copier coller du code dans vos tests unitaires –Les contextes sont plus complexes –Plus à même d’évoluer –Trop factoriser rends la maintenance inutilement complexe
  • 30. • Good code is mainly SOLID codeALORS LE BON CODE ?
  • 31. SOLID ? • Single Responsibility Principle • Open/Closed Principle • Liskov Substitution Principle • Interface Segregation Principle • Dependency Inversion Principle
  • 33. UNE CLASSE N’EXISTE QUE POUR UNE SEULE RAISON • Représenter les données issues de la source • Exposer les données à la vue (merci MVC et MVVM !) • Lire / écrire sur la source de données • S’occuper des interdépendances entre classes
  • 34. Est-ce le rôle du véhicule de se sauvegarder en base ?
  • 35.
  • 36. NE CRÉEZ PAS DE GOD CLASS !! • Base pour le code spaghetti –Trop d’attributs / méthodes / propriétés –Source de strong coupling –… et haute complexité cyclotimique • Difficile de trouver le bout de code que vous vouliez modifier –… Open / Closed principle ?
  • 38. OPEN • Ouvert aux extensions –Facile de rajouter de nouvelles fonctionnalités au gré des nouvelles demandes. IDatabaseConnection SQLServerConnection OracleConnection XMLConnection …
  • 39. CLOSED • Fermé aux modifications –A part pour corriger des bugs, vous n’avez pas à éditer le code existant •Ce qui rend les God Classes encore plus obsolètes !
  • 40.
  • 41. COMMENT FAIRE ? • Grâce aux IDEs modernes, vous avez un tas d’outils automatisés –Extraire des interfaces ou des abstractions –Factoriser le code dupliqué
  • 43.
  • 44. WHAT DOES IT MEAN ? • “The object of a derived class should be able to replace any object of the base class without error or changing the program’s behavior” • Vous rajoutez une voiture électrique. –On ne rempli pas le reservoir d’essence, on le branche à une prise
  • 46. « MANY CLIENT SPECIFIC INTERFACES ARE BETTER THAN ONE GENERAL GENERAL- PURPOSE INTERFACE » (ROBERT C. MARTIN) • N’obligez pas les autres développeurs à implementer une méthode qui ne leur sert à rien. – Un avion est un véhicule… Comme une voiture. – Les deux transportent des passagers. – Seul un avion peut décoller (techniquement)
  • 48. QU’EST-CE QUE C’EST ? • “Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they should depend on abstractions.” • L’interface utilisateur n’a pas besoin de savoir ce que fait la méthode Save(). • Un contrat lui disant “Ok, je m’occupe de la sauvegarde”.
  • 49.
  • 51. EVITEZ LE BIG BANG A TOUT PRIX Pire chose dans le code Définir une solution Tester Ca ne marche pas … Trouver une autre solution … C’est mieux !
  • 52. UN BON CODE EST UN CODE SIMPLE • Facile à lire – Nommé clairement – Commentaires (très) limités – Confiner le code optimise dans les couches basses des objets – Elegant • Facile à maintenir – Corriger une méthode doit être évidente – Des tests automatiques doivent prémunir de toute régression – Toute evolution ne doit pas impliquer de modifier le code déjà existant
  • 53. RIEN N’EST ÉCRIT DANS LE MARBRE • Casser les principes S.O.L.I.D. si besoin – Si seule la voiture électrique n’a pas de réservoir d’essence, doit-on forcément remettre en cause tout le modèle ? • Définissez des règles de codages et tenez-vous y – Notation Pascal ou Hongroise … – (en .Net) utiliser var ou non … • Communiquez, remettez en cause le code existant – Revue de code – Pair programming
  • 54. CA NE SERA PAS FACILE ! • Ca prendra du temps – Plus plus le code est mauvais, plus cela sera long – Sans tests automatisés en place, vos tests de non regression seront longs • Les tests automatisés sont long à maintenir • Ca sera sans fin – Continuez de refactor, d’améliorer votre code • Vous aurez de nouvelles idées • Vous allez vous améliorer et donc découvrir de nouvelles sources d’amélioration – De nouvelles erreurs apparaîtront • De nouveaux développeurs arriveront • Vous ferez toujours des erreurs (fatigue, rush …)

Notes de l'éditeur

  1. Super facile avec un singleton ! Il suffit de changer l’implementation de ConnectionManager Vous devrez créer une branche et la maintenir en parallèle Un nouveau développement et une nouvelle branche
  2. Si trop de spécificités Vous ne pouvez changer le comportement à l’exécution
  3. Ca s’appelle du Tight Coupling.
  4. (à passer en public, donc) Vous pourrez factoriser le tout plus tard.
  5. Effectuer des tests sur chaque classe vous force à instancier d’autres classes, même si ce n’est pas necessaire.
  6. Vous devrez reprendre tous les appels du constructeur de ConnectionManager Pareil …
  7. Un code testable unitairement va contribuer à délier vos classes les unes des autres
  8. Oui, on voit bien ce que la méthode teste, là ! Jira & Word are PO & project manager’s tools. Yours is your IDE.
  9. regardez le code généré sur Hibernate ou Entity Framework Objects and data structures