SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Clean Code en pratique


   Jérôme Avoustin




       www.agiletour.com   1
Jérôme Avoustin
                            .NET, Agilité, Performance
                                                    @JeromeAvoustin




                                           Agilité, AMOA, .NET, SharePoint
http://blog.avoustin.com
                                                http://www.smartview.fr
                            www.agiletour.com                             3
Agenda
•   Pourquoi ?
•   Qu’est ce qu’un Code Clean ?
•   Les mauvaises pratiques
•   Les bonnes pratiques




                      www.agiletour.com        4
Disclaimer
• Discours essentiellement pour :
  o Langages objets
  o Langages évolués


• Je n’entre pas dans tous les détails
  o Je vais aller très vite sur certaines choses
• Je vais enfoncer quelques portes ouvertes
• Je ne veux pas essayer de vous convaincre
• Il peut y avoir un peu de frustration
                         www.agiletour.com                  5
Agile et Qualité




Continuous attention to technical excellence
     and good design enhances agility.
                         9e principe du Manifeste Agile




                   www.agiletour.com                      6
Pourquoi la Qualité ?




Responding to change over following a plan
                        3e valeur du Manifeste Agile




                  www.agiletour.com                    7
Une vue de la Qualité

        Une application informatique est de qualité lorsque
Coût    le coût d’ajout d’une fonctionnalité reste stable.
 Coût




                                                               Temps
                                                              Temps


                            www.agiletour.com                          8
Pourquoi un Code Clean ?


• Pour s’adapter au changement à moindre coût
• Pour pérenniser les produits
• Pour valoriser le travail d’un développeur
  o Vecteur de motivation intrinsèque
• Pour réconcilier progrès économique et social
                     Kent Beck, Extreme Programming Explained 2nd Ed.




                      www.agiletour.com                                 9
Qu’est-ce qu’un Code Clean ?
• Bjarne Stroustrup, Grady Booch, Ron Jeffries, Kent
  Beck, Michael Feathers, Ward Cunningham…
  o Testé !
  o Elégant et facile à lire
  o Montre clairement l’intention de son auteur
    • Ecrit à destination des prochains développeurs
    • Il est difficile pour les bugs de se cacher
  o Simple
    • Non dupliqué
    • Contient un minimum d’artefacts (classes, méthodes, etc.)
  o Les dépendances sont minimales et explicites

                           www.agiletour.com                      10
A propos des tests…

             Quand j’entends que les tests
      « c’est pour ceux qui savent pas coder » …




Source : http://lesjoiesducode.tumblr.com/post/31452862688/quand-le-stagiaire-me-dit-que-les-tests-cest-pour



                                            www.agiletour.com                                                  11
Quelles horreurs dans le code ?

    Code Smells
                                   Large class
            Data class
                           Duplicated code                 Refused bequest
Uncommunicative name             Lazy class                Type embedded in name
Message chain      Conditional complexity                   Inappropriate intimacy
                                                   Data clumps
  Speculative generality     Comments                                 Dead code
                                Primitive obsession Shotgun Surgery
   Inconsistent names                                      Middle man
                         Divergent change     Feature envy
    Temporary field       Long parameter list    Long method
    Wrong level of abstraction                   Alternative classes with different interfaces
                        Parallel inheritance hierarchies


                                   www.agiletour.com                                       12
Quelles horreurs dans le code ?


Singleton
Tight coupling
Untestable
Premature optimization
I ndescriptive naming
Duplication
          www.agiletour.com          13
Quelles bonnes pratiques ?



      SOLID                       YAGNI

DRY           SoC
                                     GRASP
  KISS         Loi de Demeter
              www.agiletour.com              14
Quelles bonnes pratiques ?


Single Responsibility Principle
Open-Closed Principle
Liskov Substitution Principle
I nterface Segregation Principle
Dependency Inversion Principle

            www.agiletour.com          15
Nommage
• Les noms doivent révéler l’intention
• Ne tronquez pas les mots !
    o Le coût du
•   Utilisez des mots qui ont du sens
•   Pas d’encodage
•   Ne surchargez pas les noms d’infos inutiles
•   N’hésitez pas à changer un nom



                      www.agiletour.com           16
Duplication de code


• Règle n°2, selon Kent Beck
• DRY : Don’t Repeat Yourself !




                                         Extraction de méthode

                     www.agiletour.com                           17
Abstraction
• 1 niveau d’abstraction par méthode
   o Extraction de méthode
   o Polymorphisme
   o Descendre/Monter/Déplacer une méthode
   o Et même le renommage !
• Loi de Demeter
   o « Don’t talk to strangers »


a.getB().getC().doSomething()                a.doSomething()


                         www.agiletour.com                     18
Abstraction


• Préoccupations transverses
  o A ne pas mélanger avec le code métier
    • Securité, logs, cache, transaction, etc.
  o Introduire l’AOP




                         www.agiletour.com                 19
Couplage fort


               A
Tests
Intégration
Réutilisation
Correction de bugs
Ajout de fonctions
Etc.

                     www.agiletour.com              20
Couplage fort
• Qu’est-ce qui crée un couplage fort ?
  o new MaDependance();
  o Les appels statiques
  o Les dépendances sur des classes concrètes
• Que faut-il faire ?
  o Méthodes d’instance
  o Injection de dépendances : pattern n°1
  o Utilisation de types abstraits ou d’interfaces



                        www.agiletour.com               21
Injection de dépendances

public class A                            On va injecter B et C !
{
  private B b;

    public void ExecuteA(int a)
    {                                On crée un couplage
      b = new B();                   fort entre A et B/C !!
      C c = new C();

        if (a != 3)                 A collabore avec B et C
           b.ExecuteB();
        else
           c.ExecuteC();
    }
}
Injection de dépendances
   • Comment injecter B et C ?                               public class A {
                                                               private B b;
       o Par constructeur                                      private C c;

       o Par setter                                            public A(B b) { this.b = b; }
         • Late binding                                        public void setC(C c) {
       o Reflection                                              this.c = c;
                               static Main (string[] args)
                                                               }
                               {
                                 B b = new B();
                                                               public void ExecuteA() {
                                 A a = new A(b);
En bleu, peut être délégué à                                     int a = 1;
   une Factory : ce sont                                         b = new B();
                                   a.setC(new C1());
                                                                 C c = new C();
                                   a.ExecuteA();
les Conteneurs d’IoC                                             if (a != 3)
                                                                    b.ExecuteB();
                                   a.setC(new C1());
                                                                 else
                                   a.ExecuteA();
                                                                    C.ExecuteC();
                               }
                                                               }
Méthodes longues
•   Qui a des normes de code à respecter ?
•   Qui les respecte ?
•   Quelle est la taille maximale pour une méthode ?
•   Petite astuce (d’un certain J.A.) :
    o Commentez votre méthode sans modération
    o Renommez les variables, champs, constantes, etc.
      avec les concepts utilisés dans les commentaires
    o Faites des extractions de méthode en utilisant les
      commentaires pour nommer les méthodes
    o Eliminez la duplication
    o Virez les commentaires !
                         www.agiletour.com                  24
Commentaires
• Uncle Bob : « Comments are always failures »
  o Ils mentent, vieillissent très mal, ne sont pas
    refactorables, etc.
  o « Aveu de faiblesse » à…
    • Utiliser un bon nom
    • Découper une méthode
    • Monter en abstraction
  o Avant d’écrire un commentaire, faites 7 fois le tour de
    votre chaise
  o Sauf pour : explication (pourquoi ?), javadoc,
    copyright.

                        www.agiletour.com                 25
Gestion d’exceptions
• Principe n°1 : Fail Fast
  o Programmation défensive, par assertions
  o Lever des exceptions dès que nécessaire
    • i.e. : pour des cas non métiers
  o Ne pas masquer systématiquement les autres
    exceptions
    • Type NullPointerException




                       www.agiletour.com               26
Tests
• Indispensables pour modifier le code
• Le code des tests est au moins aussi important que
  le code de production
  o Les tests doivent être clean
  o Un concept par test
  o Utilisez des noms et une structure qui documentent
    • ShouldDoThisWhenThat()
    • Given / When / Then
• Qualité essentielle : lisibilité
  o Un test doit pouvoir se lire comme une histoire
  o Créez votre propre DSL de test !

                         www.agiletour.com               28
Tests


Fast
I ndependant
Repeatable
Self-Validating
Timely
       www.agiletour.com      29
Autres conseils
• N’écrivez pas de Singleton !
  o Mettez en place l’injection de dépendances
  o Et gérez la durée de vie de vos objets


• Ne pensez pas héritage, pensez polymorphisme
  o Sinon : "a un" au lieu de "est un“


• Ne pensez pas "switch/if", pensez polymorphisme
  o Pattern strategy

                        www.agiletour.com                30
Autres conseils
• Du code non testé n’est pas maintenable
• Ne pensez pas "réutilisabilité", pensez
  abstraction
  o La réutilisabilité est une conséquence de la montée
    en abstraction et de l’élimination de la duplication
• Pas d’optimisation prématurée !
  o YAGNI ! KISS !
  o « First make it work, then make it right »


• Tout ça, ça commence DEMAIN !
                        www.agiletour.com                  31
Aller plus loin




www.agiletour.com                32
Pour finir…
Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
Martin Fowler

       Codez toujours en pensant que celui qui maintiendra
   votre code est un psychopathe qui connait votre adresse.
                                            Martin Golding

Penser que les tests [et le refactoring] ralentissent le développement
c’est comme penser que prendre des voyageurs ralentit le bus
David Evans

                              www.agiletour.com                    33
MERCI !
                                     @JeromeAvoustin



http://blog.avoustin.com


                            www.agiletour.com      34

Contenu connexe

En vedette

Proyectos educativos implementados mediante tics
Proyectos educativos implementados mediante ticsProyectos educativos implementados mediante tics
Proyectos educativos implementados mediante tics
Maribel Flores Castro
 
Moment potrivit
Moment potrivitMoment potrivit
Moment potrivit
Namaste17
 

En vedette (20)

Teams that finish early : Allez vers des équipes agiles plus performantes
Teams that finish  early : Allez vers des équipes agiles plus performantesTeams that finish  early : Allez vers des équipes agiles plus performantes
Teams that finish early : Allez vers des équipes agiles plus performantes
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / Introduction
 
Clean code game - Agile France 2013
Clean code game - Agile France 2013Clean code game - Agile France 2013
Clean code game - Agile France 2013
 
Création de Vues | SQL Oracle
Création de Vues | SQL OracleCréation de Vues | SQL Oracle
Création de Vues | SQL Oracle
 
Afficher des Données Issues de Plusieurs Tables : SQL Oracle
Afficher des Données Issues de Plusieurs Tables : SQL OracleAfficher des Données Issues de Plusieurs Tables : SQL Oracle
Afficher des Données Issues de Plusieurs Tables : SQL Oracle
 
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
 
Elpuente
ElpuenteElpuente
Elpuente
 
Proyectos educativos implementados mediante tics
Proyectos educativos implementados mediante ticsProyectos educativos implementados mediante tics
Proyectos educativos implementados mediante tics
 
0 bjectif 4 p c
0 bjectif 4 p c 0 bjectif 4 p c
0 bjectif 4 p c
 
Aprender y enseñar en colaboración
Aprender y enseñar en colaboraciónAprender y enseñar en colaboración
Aprender y enseñar en colaboración
 
PRIMEROS AUXILIOS
PRIMEROS AUXILIOSPRIMEROS AUXILIOS
PRIMEROS AUXILIOS
 
Componentes Internos De Una Computadora
Componentes Internos De Una ComputadoraComponentes Internos De Una Computadora
Componentes Internos De Una Computadora
 
Trabajo de cienciencias naturales
Trabajo de cienciencias naturalesTrabajo de cienciencias naturales
Trabajo de cienciencias naturales
 
Autobiografia
AutobiografiaAutobiografia
Autobiografia
 
Listo ebola
Listo ebola Listo ebola
Listo ebola
 
Editor de imagenes y gestores de videos
Editor de imagenes y gestores de videosEditor de imagenes y gestores de videos
Editor de imagenes y gestores de videos
 
Informe pisa y medios comunicación. Sociología.
Informe pisa y medios comunicación. Sociología.Informe pisa y medios comunicación. Sociología.
Informe pisa y medios comunicación. Sociología.
 
Moment potrivit
Moment potrivitMoment potrivit
Moment potrivit
 
Ppt De Presentation Cqpnl RéDuite.Key
Ppt De Presentation Cqpnl   RéDuite.KeyPpt De Presentation Cqpnl   RéDuite.Key
Ppt De Presentation Cqpnl RéDuite.Key
 
transcripts
transcriptstranscripts
transcripts
 

Similaire à AgileTour Toulouse 2012 : clean code en pratique

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
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
CocoaHeads France
 
Tdd en action - refactoring
Tdd en action - refactoringTdd en action - refactoring
Tdd en action - refactoring
Eric Mignot
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
cyrilgandon
 
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
Djamel Zouaoui
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
French Scrum User Group
 

Similaire à AgileTour Toulouse 2012 : clean code en pratique (20)

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
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
[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 ?
 
Agile tour 2015 alliés contre les défauts
Agile tour 2015   alliés contre les défautsAgile tour 2015   alliés contre les défauts
Agile tour 2015 alliés contre les défauts
 
Agile tour Lille 2015 allies ensemble contre les defauts
Agile tour Lille 2015 allies ensemble contre les defautsAgile tour Lille 2015 allies ensemble contre les defauts
Agile tour Lille 2015 allies ensemble contre les defauts
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
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...
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 
Tdd en action - refactoring
Tdd en action - refactoringTdd en action - refactoring
Tdd en action - refactoring
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
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
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - Epitez
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 

Plus de Agile Toulouse

AgileTour Toulouse 2012 : posture Ingénieur Qualité en agilité
AgileTour Toulouse 2012 : posture Ingénieur Qualité en agilitéAgileTour Toulouse 2012 : posture Ingénieur Qualité en agilité
AgileTour Toulouse 2012 : posture Ingénieur Qualité en agilité
Agile Toulouse
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFS
Agile Toulouse
 
AgileTour Toulouse 2012 : testing strategy
AgileTour Toulouse 2012 : testing strategyAgileTour Toulouse 2012 : testing strategy
AgileTour Toulouse 2012 : testing strategy
Agile Toulouse
 
AgileTour Toulouse 2012 : quel chemin vers l’agilité
AgileTour Toulouse 2012 : quel chemin vers l’agilitéAgileTour Toulouse 2012 : quel chemin vers l’agilité
AgileTour Toulouse 2012 : quel chemin vers l’agilité
Agile Toulouse
 
AgileTour Toulouse 2012 : objectif mars
AgileTour Toulouse 2012 : objectif marsAgileTour Toulouse 2012 : objectif mars
AgileTour Toulouse 2012 : objectif mars
Agile Toulouse
 
AgileTour Toulouse 2012 : lego4scrum
AgileTour Toulouse 2012 : lego4scrumAgileTour Toulouse 2012 : lego4scrum
AgileTour Toulouse 2012 : lego4scrum
Agile Toulouse
 
AgileTour Toulouse 2012 : innovation games
AgileTour Toulouse 2012 : innovation gamesAgileTour Toulouse 2012 : innovation games
AgileTour Toulouse 2012 : innovation games
Agile Toulouse
 

Plus de Agile Toulouse (20)

ATTLS22 - Sophie ROCCA - Le leadership inconscient des experts
ATTLS22 - Sophie ROCCA - Le leadership inconscient des expertsATTLS22 - Sophie ROCCA - Le leadership inconscient des experts
ATTLS22 - Sophie ROCCA - Le leadership inconscient des experts
 
ATTLS22 - Haja RAMBELONTSALAMA - Changement de Culture bien ordonnée commence...
ATTLS22 - Haja RAMBELONTSALAMA - Changement de Culture bien ordonnée commence...ATTLS22 - Haja RAMBELONTSALAMA - Changement de Culture bien ordonnée commence...
ATTLS22 - Haja RAMBELONTSALAMA - Changement de Culture bien ordonnée commence...
 
ATTLS22 - Déborah MULLER GAUTHIER - Tribulations d’une SM
ATTLS22 - Déborah MULLER GAUTHIER - Tribulations d’une SMATTLS22 - Déborah MULLER GAUTHIER - Tribulations d’une SM
ATTLS22 - Déborah MULLER GAUTHIER - Tribulations d’une SM
 
ATTLS22 - Claudia OROZCO-GOMEZ - ATELIER - Experimenter la collaboration
ATTLS22 - Claudia OROZCO-GOMEZ - ATELIER - Experimenter la collaborationATTLS22 - Claudia OROZCO-GOMEZ - ATELIER - Experimenter la collaboration
ATTLS22 - Claudia OROZCO-GOMEZ - ATELIER - Experimenter la collaboration
 
Agile Tour Toulouse 2020 : FORTUNEO - Tous pour un, l'agile pour tous ! Comme...
Agile Tour Toulouse 2020 : FORTUNEO - Tous pour un, l'agile pour tous ! Comme...Agile Tour Toulouse 2020 : FORTUNEO - Tous pour un, l'agile pour tous ! Comme...
Agile Tour Toulouse 2020 : FORTUNEO - Tous pour un, l'agile pour tous ! Comme...
 
agile tour toulouse 2015 - Kanban pour l'it une experience d'amélioration co...
 agile tour toulouse 2015 - Kanban pour l'it une experience d'amélioration co... agile tour toulouse 2015 - Kanban pour l'it une experience d'amélioration co...
agile tour toulouse 2015 - Kanban pour l'it une experience d'amélioration co...
 
agile tour toulouse 2015 - Intel REX
 agile tour toulouse 2015 - Intel REX agile tour toulouse 2015 - Intel REX
agile tour toulouse 2015 - Intel REX
 
agile tour toulouse 2015 - Ibp - les communautés de pratiques
 agile tour toulouse 2015  - Ibp - les communautés de pratiques agile tour toulouse 2015  - Ibp - les communautés de pratiques
agile tour toulouse 2015 - Ibp - les communautés de pratiques
 
Agile Tour Toulouse 2015 - Keynote 2 - Luc Pouliquen
Agile Tour Toulouse 2015 - Keynote 2 - Luc PouliquenAgile Tour Toulouse 2015 - Keynote 2 - Luc Pouliquen
Agile Tour Toulouse 2015 - Keynote 2 - Luc Pouliquen
 
Agile Tour Toulouse 2015 - Ekito
Agile Tour Toulouse 2015 - EkitoAgile Tour Toulouse 2015 - Ekito
Agile Tour Toulouse 2015 - Ekito
 
Agile Tour Toulouse 2015 - Patch bonheur au travail
Agile Tour Toulouse 2015 - Patch bonheur au travailAgile Tour Toulouse 2015 - Patch bonheur au travail
Agile Tour Toulouse 2015 - Patch bonheur au travail
 
Agile Tour Toulouse 2015 - Jean Marc Nozeran - La Performance
Agile Tour Toulouse 2015 - Jean Marc Nozeran - La PerformanceAgile Tour Toulouse 2015 - Jean Marc Nozeran - La Performance
Agile Tour Toulouse 2015 - Jean Marc Nozeran - La Performance
 
Agile Tour Toulouse 2015 - çA prendra combien de temps
Agile Tour Toulouse 2015 - çA prendra combien de tempsAgile Tour Toulouse 2015 - çA prendra combien de temps
Agile Tour Toulouse 2015 - çA prendra combien de temps
 
AgileTour Toulouse 2012 : posture Ingénieur Qualité en agilité
AgileTour Toulouse 2012 : posture Ingénieur Qualité en agilitéAgileTour Toulouse 2012 : posture Ingénieur Qualité en agilité
AgileTour Toulouse 2012 : posture Ingénieur Qualité en agilité
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFS
 
AgileTour Toulouse 2012 : testing strategy
AgileTour Toulouse 2012 : testing strategyAgileTour Toulouse 2012 : testing strategy
AgileTour Toulouse 2012 : testing strategy
 
AgileTour Toulouse 2012 : quel chemin vers l’agilité
AgileTour Toulouse 2012 : quel chemin vers l’agilitéAgileTour Toulouse 2012 : quel chemin vers l’agilité
AgileTour Toulouse 2012 : quel chemin vers l’agilité
 
AgileTour Toulouse 2012 : objectif mars
AgileTour Toulouse 2012 : objectif marsAgileTour Toulouse 2012 : objectif mars
AgileTour Toulouse 2012 : objectif mars
 
AgileTour Toulouse 2012 : lego4scrum
AgileTour Toulouse 2012 : lego4scrumAgileTour Toulouse 2012 : lego4scrum
AgileTour Toulouse 2012 : lego4scrum
 
AgileTour Toulouse 2012 : innovation games
AgileTour Toulouse 2012 : innovation gamesAgileTour Toulouse 2012 : innovation games
AgileTour Toulouse 2012 : innovation games
 

AgileTour Toulouse 2012 : clean code en pratique

  • 1. Clean Code en pratique Jérôme Avoustin www.agiletour.com 1
  • 2.
  • 3. Jérôme Avoustin .NET, Agilité, Performance @JeromeAvoustin Agilité, AMOA, .NET, SharePoint http://blog.avoustin.com http://www.smartview.fr www.agiletour.com 3
  • 4. Agenda • Pourquoi ? • Qu’est ce qu’un Code Clean ? • Les mauvaises pratiques • Les bonnes pratiques www.agiletour.com 4
  • 5. Disclaimer • Discours essentiellement pour : o Langages objets o Langages évolués • Je n’entre pas dans tous les détails o Je vais aller très vite sur certaines choses • Je vais enfoncer quelques portes ouvertes • Je ne veux pas essayer de vous convaincre • Il peut y avoir un peu de frustration www.agiletour.com 5
  • 6. Agile et Qualité Continuous attention to technical excellence and good design enhances agility. 9e principe du Manifeste Agile www.agiletour.com 6
  • 7. Pourquoi la Qualité ? Responding to change over following a plan 3e valeur du Manifeste Agile www.agiletour.com 7
  • 8. Une vue de la Qualité Une application informatique est de qualité lorsque Coût le coût d’ajout d’une fonctionnalité reste stable. Coût Temps Temps www.agiletour.com 8
  • 9. Pourquoi un Code Clean ? • Pour s’adapter au changement à moindre coût • Pour pérenniser les produits • Pour valoriser le travail d’un développeur o Vecteur de motivation intrinsèque • Pour réconcilier progrès économique et social Kent Beck, Extreme Programming Explained 2nd Ed. www.agiletour.com 9
  • 10. Qu’est-ce qu’un Code Clean ? • Bjarne Stroustrup, Grady Booch, Ron Jeffries, Kent Beck, Michael Feathers, Ward Cunningham… o Testé ! o Elégant et facile à lire o Montre clairement l’intention de son auteur • Ecrit à destination des prochains développeurs • Il est difficile pour les bugs de se cacher o Simple • Non dupliqué • Contient un minimum d’artefacts (classes, méthodes, etc.) o Les dépendances sont minimales et explicites www.agiletour.com 10
  • 11. A propos des tests… Quand j’entends que les tests « c’est pour ceux qui savent pas coder » … Source : http://lesjoiesducode.tumblr.com/post/31452862688/quand-le-stagiaire-me-dit-que-les-tests-cest-pour www.agiletour.com 11
  • 12. Quelles horreurs dans le code ? Code Smells Large class Data class Duplicated code Refused bequest Uncommunicative name Lazy class Type embedded in name Message chain Conditional complexity Inappropriate intimacy Data clumps Speculative generality Comments Dead code Primitive obsession Shotgun Surgery Inconsistent names Middle man Divergent change Feature envy Temporary field Long parameter list Long method Wrong level of abstraction Alternative classes with different interfaces Parallel inheritance hierarchies www.agiletour.com 12
  • 13. Quelles horreurs dans le code ? Singleton Tight coupling Untestable Premature optimization I ndescriptive naming Duplication www.agiletour.com 13
  • 14. Quelles bonnes pratiques ? SOLID YAGNI DRY SoC GRASP KISS Loi de Demeter www.agiletour.com 14
  • 15. Quelles bonnes pratiques ? Single Responsibility Principle Open-Closed Principle Liskov Substitution Principle I nterface Segregation Principle Dependency Inversion Principle www.agiletour.com 15
  • 16. Nommage • Les noms doivent révéler l’intention • Ne tronquez pas les mots ! o Le coût du • Utilisez des mots qui ont du sens • Pas d’encodage • Ne surchargez pas les noms d’infos inutiles • N’hésitez pas à changer un nom www.agiletour.com 16
  • 17. Duplication de code • Règle n°2, selon Kent Beck • DRY : Don’t Repeat Yourself ! Extraction de méthode www.agiletour.com 17
  • 18. Abstraction • 1 niveau d’abstraction par méthode o Extraction de méthode o Polymorphisme o Descendre/Monter/Déplacer une méthode o Et même le renommage ! • Loi de Demeter o « Don’t talk to strangers » a.getB().getC().doSomething() a.doSomething() www.agiletour.com 18
  • 19. Abstraction • Préoccupations transverses o A ne pas mélanger avec le code métier • Securité, logs, cache, transaction, etc. o Introduire l’AOP www.agiletour.com 19
  • 20. Couplage fort A Tests Intégration Réutilisation Correction de bugs Ajout de fonctions Etc. www.agiletour.com 20
  • 21. Couplage fort • Qu’est-ce qui crée un couplage fort ? o new MaDependance(); o Les appels statiques o Les dépendances sur des classes concrètes • Que faut-il faire ? o Méthodes d’instance o Injection de dépendances : pattern n°1 o Utilisation de types abstraits ou d’interfaces www.agiletour.com 21
  • 22. Injection de dépendances public class A On va injecter B et C ! { private B b; public void ExecuteA(int a) { On crée un couplage b = new B(); fort entre A et B/C !! C c = new C(); if (a != 3) A collabore avec B et C b.ExecuteB(); else c.ExecuteC(); } }
  • 23. Injection de dépendances • Comment injecter B et C ? public class A { private B b; o Par constructeur private C c; o Par setter public A(B b) { this.b = b; } • Late binding public void setC(C c) { o Reflection this.c = c; static Main (string[] args) } { B b = new B(); public void ExecuteA() { A a = new A(b); En bleu, peut être délégué à int a = 1; une Factory : ce sont b = new B(); a.setC(new C1()); C c = new C(); a.ExecuteA(); les Conteneurs d’IoC if (a != 3) b.ExecuteB(); a.setC(new C1()); else a.ExecuteA(); C.ExecuteC(); } }
  • 24. Méthodes longues • Qui a des normes de code à respecter ? • Qui les respecte ? • Quelle est la taille maximale pour une méthode ? • Petite astuce (d’un certain J.A.) : o Commentez votre méthode sans modération o Renommez les variables, champs, constantes, etc. avec les concepts utilisés dans les commentaires o Faites des extractions de méthode en utilisant les commentaires pour nommer les méthodes o Eliminez la duplication o Virez les commentaires ! www.agiletour.com 24
  • 25. Commentaires • Uncle Bob : « Comments are always failures » o Ils mentent, vieillissent très mal, ne sont pas refactorables, etc. o « Aveu de faiblesse » à… • Utiliser un bon nom • Découper une méthode • Monter en abstraction o Avant d’écrire un commentaire, faites 7 fois le tour de votre chaise o Sauf pour : explication (pourquoi ?), javadoc, copyright. www.agiletour.com 25
  • 26. Gestion d’exceptions • Principe n°1 : Fail Fast o Programmation défensive, par assertions o Lever des exceptions dès que nécessaire • i.e. : pour des cas non métiers o Ne pas masquer systématiquement les autres exceptions • Type NullPointerException www.agiletour.com 26
  • 27. Tests • Indispensables pour modifier le code • Le code des tests est au moins aussi important que le code de production o Les tests doivent être clean o Un concept par test o Utilisez des noms et une structure qui documentent • ShouldDoThisWhenThat() • Given / When / Then • Qualité essentielle : lisibilité o Un test doit pouvoir se lire comme une histoire o Créez votre propre DSL de test ! www.agiletour.com 28
  • 29. Autres conseils • N’écrivez pas de Singleton ! o Mettez en place l’injection de dépendances o Et gérez la durée de vie de vos objets • Ne pensez pas héritage, pensez polymorphisme o Sinon : "a un" au lieu de "est un“ • Ne pensez pas "switch/if", pensez polymorphisme o Pattern strategy www.agiletour.com 30
  • 30. Autres conseils • Du code non testé n’est pas maintenable • Ne pensez pas "réutilisabilité", pensez abstraction o La réutilisabilité est une conséquence de la montée en abstraction et de l’élimination de la duplication • Pas d’optimisation prématurée ! o YAGNI ! KISS ! o « First make it work, then make it right » • Tout ça, ça commence DEMAIN ! www.agiletour.com 31
  • 32. Pour finir… Any fool can write code that a computer can understand. Good programmers write code that humans can understand. Martin Fowler Codez toujours en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse. Martin Golding Penser que les tests [et le refactoring] ralentissent le développement c’est comme penser que prendre des voyageurs ralentit le bus David Evans www.agiletour.com 33
  • 33. MERCI ! @JeromeAvoustin http://blog.avoustin.com www.agiletour.com 34