JUG Elsass 2012



                  Inspection Continue
                  La chasse aux 7 péchés capitaux du
                  développeur peut commencer !




                  Par Freddy Mallet
                  freddy.mallet@sonarsource.com
Une époque est révolue
Le savant génial
Capitaine Flam est parmi nous




Au fin fond de l'Univers, à des années
et des années-lumière de la Terre,
Veille celui que le gouvernement
intersidéral appelle quand il n'est plus
Capable de trouver une solution à
ses problèmes, quand il ne reste plus
Aucun espoir :

le Capitaine FLAM !
C'est mon jouet !
La peur du changement…
Quand l'industrialisation s'en mêle

                  Projet géré sous contrôleur
                   de version
                  Projet sous intégration
                   continue
                  Projet avec traçabilité
                   technique / fonctionnelle
Quel est notre mission ?




                 ?
Faire du neuf avec du vieux
Tout est maintenance évolutive !



           Création
       d'une application




    Maintenance
 D'une l'application
Rien n'est plus important que le Code
Mais le code n'est rien tout seul
Une époque est révolue
Développer pour les autres
Méthodologie
Transparence
Les outils évoluent tout comme nous




       Makefile          Gestionnaire         Intégration       Tests unitaires
                      de projet technique      Continue

VI / Emacs    Gestionnaire           Gestionnaire      Refactoring           Inspection
               de source              de tickets       depuis l'IDE           Continue
Poussés par des exigences
Gestionnaire de configuration

   Aucune modification ne passe en production
    sans avoir été préalablement placée sous
    contrôle de version
   L'ensemble cohérent des sources d'une version
    applicative doit pouvoir être retrouvé
    aisément dans le gestionnaire de source
Poussés par des exigences
Intégration continue

   Le code contenu dans le gestionnaire de
    source doit pouvoir être compilé à tout instant
    et par n'importe qui
   L'exécution des tests unitaires fait pleinement
    parti du processus de construction
   La sortie du processus de construction est un
    livrable prêt à l'emploi
   Si une des exigences n'est plus respectée, rien
    n'est plus important que de corriger l'anomalie
Poussés par des exigences
Inspection Continue

   Tout nouveau code doit être accompagné de
    tests unitaires
   Aucune méthode ne doit excéder un seuil de
    complexité
   Il ne doit pas exister de cycles entre packages
   ...
Rappel de bon sens
Des étapes de maturité doivent être respectées

   Assurer la traçabilité technique
    Gestionnaire de configuration
   Assurer la traçabilité fonctionnelle
    Gestionnaire de tickets
   Assurer la stabilité du build
    Intégration continue
   Assurer la qualité du code source
    Inspection Continue (Sonar)
La fin ne justifie plus les moyens



   Doing the right software



   Doing the software right
Qu'est-ce qu'un code de qualité ?




      « A well-written program is a program
     where the cost of implementing a feature
 is constant throughout the program's lifetime. »

                                        Itay Maman
Comment mesurer cette qualité ?
La dette technique
Les différents types de dette

                     Imprudente                               Prudente


           « Nous n'avons pas le temps                    « Nous devons livrer
           de faire de la conception. »                       maintenant
                                                    et assumer les conséquences. »

       Volontaire
       Involontaire

                    « C'est quoi des                    « Maintenant nous savons
                 couches logicielles ? »                  comment nous aurions
                                                               du faire. »




Extrait de http://martinfowler.com/bliki/TechnicalDebtQuadrant.html
Les 7 péchés capitaux
du développeur




                         Péchés



                          Dette
                        technique
Les 7 péchés capitaux ?
Appliqués au code source

   ?
   ?
   ?
   ?
   ?
   ?
   ?
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaires
Pour (re)trouver le droit chemin
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaires
Code dupliqué

   Que choisir entre la peste et le choléra ?
Once and only once (Kent Beck)


    Tout code dupliqué est une opportunité pour
 élever le niveau d'abstraction et étoffer la richesse
                     du design
Avant tout une histoire de bon sens

   Avez-vous deux processus pour
    
        Passer en production une nouvelle version
        applicative ?
    
        Soumettre un appel d'offre ?
    
        Recruter un collaborateur ?
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaires
Mauvaise distribution de la complexité
Qu'est-ce que la complexité cyclomatique ?
Mauvaise distribution de la complexité

   Vaut-il mieux :
       1 méthode d'une complexité de 30
    
        10 méthodes d'une complexité de 3
La complexité se gère à tous les étages

   Méthode
   Classe
   Package
   Module




Règle d'or :
Une méthode ou une classe n'est jamais trop petite
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaires
Mauvais design
Comportant deux niveaux d'abstraction

   Quel package/classe est responsable de quoi ?
Les couches d'architecture
Les cycles apparaissent comme le nez au milieu de figure
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaires
Peu ou pas d'utilisation des tests unitaires

   Merci d'ajouter un
    nouveau cas et
    d'éviter toute
    régression bien
    évidemment...
Un code sans tests unitaires est soit

   Du code jetable
   Du code dont le coût d'ajout d'une
    fonctionnalité et des régressions associées est
    sans importance
   Du code d'une pure application CRUD (Create
    Read Update Delete)
   Du code legacy dont la piètre qualité entraine
    un coût d'écriture et de maintenance des tests
    unitaires trop élevé
L'effet boule de neige du TDD

   Raisonnement en terme de contrat
    
        Donc en terme de responsabilité (SRP)
       Expressivité du vocabulaire
   Approche itérative et incrémentale au niveau
    le plus fin
       Méthodes peu complexes
    
        Linéarité des développements et donc meilleuer
        prédictibilité des délais
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaire
Non respect des standards
La gestion des exceptions
Taille verticale et horizontale d'un fichier




Quel traitement réservez-vous aux emails qui ne
           tiennent pas sur un écran ?
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaires
Bugs potentiels



 if (listeners == null)
     listeners.remove(listener);


 Sun java : JDK1.6.0, b105,
 sun.awt.x11.XMSelection
 lines 243-244
Les 7 péchés capitaux
Appliqués au code source

   Duplications
   Mauvaise distribution de la complexité
   Mauvais Design
   Pas de tests unitaires
   Pas de respect des standards
   Bugs potentiels
   Pas ou trop de commentaires
Pas ou trop de commentaires
Expressivité du vocabulaire
Versus densité des commentaires
La javadoc : un commentaire particulier

   L'utilisation doit être limitée aux API
   La Javadoc s'adresse en priorité à des
    consommateurs et non aux équipes en charge
    de la maintenance évolutive
Un commentaire doit être utile
Ou ne pas être


   Pour amplifier l'importance d'une logique


   Pour apporter une vision dynamique



   Quelques anti-patterns
La mission de Sonar




Permettre de déclarer ouverte la
         chasse aux
      7 péchés capitaux
Sonar à cœur ouvert

                  Sonar Runner
                   Sonar Runner                  Checkstyle     mvn sonar:sonar
 Code
  Code                 JUnit                     PMD / CPD          or
source
 source                Jacoco
                                    Squid
                                                 Findbugs
                                                              1
                                                              - ant sonar
  Java,
   Java,                                                            or
Cobol, VB,    1                                                 sonar-runner
 Cobol, VB,
 PL/SQL,
  PL/SQL,
  Flex,
   Flex,
  C, ...
   C, ...          3                              2


                                Sonar web interface
                                 Sonar web interface
                       4
          Sonar
           DB                                                 2-   http://sonar




                                                  5

                                Sonar Eclipse
                                 Sonar Eclipse
Quelques chiffres




     5,000+     téléchargements par mois

     1,000+     abonnés aux mailing lists

     15         releases de la plateforme en 2 ans

     50         plugins dans la forge


     X?,000     instances dans le monde

Soirée Qualité Logicielle avec Sonar

  • 1.
    JUG Elsass 2012 Inspection Continue La chasse aux 7 péchés capitaux du développeur peut commencer ! Par Freddy Mallet freddy.mallet@sonarsource.com
  • 2.
  • 3.
  • 4.
    Capitaine Flam estparmi nous Au fin fond de l'Univers, à des années et des années-lumière de la Terre, Veille celui que le gouvernement intersidéral appelle quand il n'est plus Capable de trouver une solution à ses problèmes, quand il ne reste plus Aucun espoir : le Capitaine FLAM !
  • 5.
  • 6.
    La peur duchangement…
  • 7.
    Quand l'industrialisation s'enmêle  Projet géré sous contrôleur de version  Projet sous intégration continue  Projet avec traçabilité technique / fonctionnelle
  • 8.
    Quel est notremission ? ?
  • 9.
    Faire du neufavec du vieux
  • 10.
    Tout est maintenanceévolutive ! Création d'une application Maintenance D'une l'application
  • 11.
    Rien n'est plusimportant que le Code Mais le code n'est rien tout seul
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
    Les outils évoluenttout comme nous Makefile Gestionnaire Intégration Tests unitaires de projet technique Continue VI / Emacs Gestionnaire Gestionnaire Refactoring Inspection de source de tickets depuis l'IDE Continue
  • 17.
    Poussés par desexigences Gestionnaire de configuration  Aucune modification ne passe en production sans avoir été préalablement placée sous contrôle de version  L'ensemble cohérent des sources d'une version applicative doit pouvoir être retrouvé aisément dans le gestionnaire de source
  • 18.
    Poussés par desexigences Intégration continue  Le code contenu dans le gestionnaire de source doit pouvoir être compilé à tout instant et par n'importe qui  L'exécution des tests unitaires fait pleinement parti du processus de construction  La sortie du processus de construction est un livrable prêt à l'emploi  Si une des exigences n'est plus respectée, rien n'est plus important que de corriger l'anomalie
  • 19.
    Poussés par desexigences Inspection Continue  Tout nouveau code doit être accompagné de tests unitaires  Aucune méthode ne doit excéder un seuil de complexité  Il ne doit pas exister de cycles entre packages  ...
  • 20.
    Rappel de bonsens Des étapes de maturité doivent être respectées  Assurer la traçabilité technique Gestionnaire de configuration  Assurer la traçabilité fonctionnelle Gestionnaire de tickets  Assurer la stabilité du build Intégration continue  Assurer la qualité du code source Inspection Continue (Sonar)
  • 21.
    La fin nejustifie plus les moyens Doing the right software Doing the software right
  • 22.
    Qu'est-ce qu'un codede qualité ? « A well-written program is a program where the cost of implementing a feature is constant throughout the program's lifetime. » Itay Maman
  • 23.
  • 24.
  • 25.
    Les différents typesde dette Imprudente Prudente « Nous n'avons pas le temps « Nous devons livrer de faire de la conception. » maintenant et assumer les conséquences. » Volontaire Involontaire « C'est quoi des « Maintenant nous savons couches logicielles ? » comment nous aurions du faire. » Extrait de http://martinfowler.com/bliki/TechnicalDebtQuadrant.html
  • 26.
    Les 7 péchéscapitaux du développeur Péchés Dette technique
  • 27.
    Les 7 péchéscapitaux ? Appliqués au code source  ?  ?  ?  ?  ?  ?  ?
  • 28.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaires
  • 29.
    Pour (re)trouver ledroit chemin
  • 30.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaires
  • 31.
    Code dupliqué  Que choisir entre la peste et le choléra ?
  • 32.
    Once and onlyonce (Kent Beck) Tout code dupliqué est une opportunité pour élever le niveau d'abstraction et étoffer la richesse du design
  • 33.
    Avant tout unehistoire de bon sens  Avez-vous deux processus pour  Passer en production une nouvelle version applicative ?  Soumettre un appel d'offre ?  Recruter un collaborateur ?
  • 34.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaires
  • 35.
    Mauvaise distribution dela complexité Qu'est-ce que la complexité cyclomatique ?
  • 36.
    Mauvaise distribution dela complexité  Vaut-il mieux :  1 méthode d'une complexité de 30  10 méthodes d'une complexité de 3
  • 37.
    La complexité segère à tous les étages  Méthode  Classe  Package  Module Règle d'or : Une méthode ou une classe n'est jamais trop petite
  • 38.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaires
  • 39.
    Mauvais design Comportant deuxniveaux d'abstraction  Quel package/classe est responsable de quoi ?
  • 40.
    Les couches d'architecture Lescycles apparaissent comme le nez au milieu de figure
  • 41.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaires
  • 42.
    Peu ou pasd'utilisation des tests unitaires  Merci d'ajouter un nouveau cas et d'éviter toute régression bien évidemment...
  • 43.
    Un code sanstests unitaires est soit  Du code jetable  Du code dont le coût d'ajout d'une fonctionnalité et des régressions associées est sans importance  Du code d'une pure application CRUD (Create Read Update Delete)  Du code legacy dont la piètre qualité entraine un coût d'écriture et de maintenance des tests unitaires trop élevé
  • 44.
    L'effet boule deneige du TDD  Raisonnement en terme de contrat  Donc en terme de responsabilité (SRP)  Expressivité du vocabulaire  Approche itérative et incrémentale au niveau le plus fin  Méthodes peu complexes  Linéarité des développements et donc meilleuer prédictibilité des délais
  • 45.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaire
  • 46.
    Non respect desstandards
  • 47.
    La gestion desexceptions
  • 48.
    Taille verticale ethorizontale d'un fichier Quel traitement réservez-vous aux emails qui ne tiennent pas sur un écran ?
  • 49.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaires
  • 50.
    Bugs potentiels if(listeners == null) listeners.remove(listener); Sun java : JDK1.6.0, b105, sun.awt.x11.XMSelection lines 243-244
  • 51.
    Les 7 péchéscapitaux Appliqués au code source  Duplications  Mauvaise distribution de la complexité  Mauvais Design  Pas de tests unitaires  Pas de respect des standards  Bugs potentiels  Pas ou trop de commentaires
  • 52.
    Pas ou tropde commentaires
  • 53.
    Expressivité du vocabulaire Versusdensité des commentaires
  • 54.
    La javadoc :un commentaire particulier  L'utilisation doit être limitée aux API  La Javadoc s'adresse en priorité à des consommateurs et non aux équipes en charge de la maintenance évolutive
  • 55.
    Un commentaire doitêtre utile Ou ne pas être  Pour amplifier l'importance d'une logique  Pour apporter une vision dynamique  Quelques anti-patterns
  • 56.
    La mission deSonar Permettre de déclarer ouverte la chasse aux 7 péchés capitaux
  • 57.
    Sonar à cœurouvert Sonar Runner Sonar Runner Checkstyle mvn sonar:sonar Code Code JUnit PMD / CPD or source source Jacoco Squid Findbugs 1 - ant sonar Java, Java, or Cobol, VB, 1 sonar-runner Cobol, VB, PL/SQL, PL/SQL, Flex, Flex, C, ... C, ... 3 2 Sonar web interface Sonar web interface 4 Sonar DB 2- http://sonar 5 Sonar Eclipse Sonar Eclipse
  • 58.
    Quelques chiffres 5,000+ téléchargements par mois 1,000+ abonnés aux mailing lists 15 releases de la plateforme en 2 ans 50 plugins dans la forge X?,000 instances dans le monde