Paris Novembre 2012


            Hands on Sonar

            Par Alexandre Victoor
            et Mathias Kluba
Qui sommes nous?

Mathias Kluba (FastConnect)
Expert .Net et Java, créateur de NDeps ;)
@mathiaskluba


Alexandre Victoor (SGCIB)
Contributeur principal du plugin Sonar pour .Net
@alex_victoor
Pourquoi Sonar

• La crise fait rage, il faut réduire les coûts

• mais souvent les projets vieillissent mal

• et accumulent de la dette technique
Plan

•   Introduction à la qualimétrie
•   Sonar in a Nutshell
•   Comment ça marche
•   Etendre Sonar (API)
•   Fonctionnalités avancées
Introduction à la qualimétrie

Qu’est ce que la qualimétrie?
• C’est mesurer la qualité.
Introduction à la qualimétrie

Qu’est ce que la qualité d’un
logiciel ?
•   Robustesse
•   Maintenance
•   Evolutivité
•   Performance
•   Sécurité
Introduction à la qualimétrie

Qu’est ce que la qualité d’un logiciel ?
selon SQALE (http://www.sqale.org/)
• Testability
• Reliability
• Changeability
• Efficiency
• Security
• Maintenability
• Portability
• Reusability
Introduction à la qualimétrie

Pourquoi mesurer la qualité?
• Avoir plus d’information
  pour prendre des décisions
• Suivre son évolution:
  dégradation ou amélioration
• Transparence
• Réduire la « dette technique »
  et se fixer des objectifs réalistes
• Justifier le refactoring
Introduction à la qualimétrie

Pourquoi mesurer la qualité?
• On monitore l’état du logiciel en production:
   – Erreurs, warnings, …
   – consommation CPU/RAM, …
• Et pourquoi pas monitorer l’état du logiciel
  avant:
   – Est-ce que ça compile?
   – Est-ce qu’il a de régressions? (tests unitaires)
   – Est-ce que la qualité se dégrade ?
Introduction à la qualimétrie

Comment mesurer la qualité ?
Introduction à la qualimétrie

Comment mesurer la qualité ?
•   Résultat des tests
•   Couverture du code par les tests
•   Duplication
•   Complexité cyclomatique
•   Convention de nommage
•   Bugs potentiels
•   Erreurs de design
Introduction à la qualimétrie

Résultat des tests
Solution: corriger les tests
Introduction à la qualimétrie

Couverture du code
par les tests
Solution:
rédiger plus de tests
Introduction à la qualimétrie

Duplication
Solution: factoriser
Introduction à la qualimétrie

Complexité cyclomatique
Solution: SoC, découper en plus petites méthodes



                               CC = 11
Introduction à la qualimétrie

Convention de nommage
Solution: respecter UNE convention
(peu importe laquelle)
Introduction à la qualimétrie

Bugs potentiels
Solution: corriger les bugs
Introduction à la qualimétrie

Erreurs de design
Solution: SRP, réduire le LCOM, découpler
Sonar le Free de la qualimétrie
Sonar in a Nutshell
Coment ça marche

Qu’est ce que Sonar ?
• Un « client » qui analyse votre projet (Java, C#,
  etc.)
• Un portail qui affiche le résultat des analyses
Mais aussi
• Un plugin Eclipse
• Un plugin Jenkins/Hudson
• Etc.
Coment ça marche

Qu’est ce que Sonar ?
•   Un projet OpenSource, gratuit
•   Codé en Java
•   Disponible sur https://github.com/SonarCommunity
•   Avec une mailling-list dev@sonar.codehaus.org
•   Maintenue par la société SonarSource
•   Qui réalise le support et des plugins
    commerciaux
Coment ça marche
Etendre Sonar

• Une API REST pour
  – Injecter des indicateurs manuels
  – Ou business
  – générer des rapports

• Pour aller plus loin une API Plugin
  – Batch side: les capteurs
  – Server side: l’IHM
  – De la glue avec Pico
REST API

• Ressources sonar ?

• Metrics et measures ?

• Exemples de requêtes: les events
http://nemo.sonarsource.org/api/events?resource=org.codehaus.sonar:son
    ar&categories=Alert,Version&fromDate=2012-07-01&toDate=2012-08-
    31
Plugin API, batch side

• Sensor & SensorContext

• MavenPluginHandler

• Decorator
Plugin API, server side

• Composants liés aux langages, aux règles
  ProfileImporter, RulesRepository…


• GWT
  Documenté mais bientôt deprecated


• RAILS
  Simple, dynamique mais…
DI avec PICO


• Enregistrement des composants par une
  classe « plugin »

• Injection par constructeur

• Utilisation d’interfaces de marquage
Fonctionnalités évoluées

• Filtres

• Dashboards

• Plans d’actions

Hands on Sonar

  • 1.
    Paris Novembre 2012 Hands on Sonar Par Alexandre Victoor et Mathias Kluba
  • 2.
    Qui sommes nous? MathiasKluba (FastConnect) Expert .Net et Java, créateur de NDeps ;) @mathiaskluba Alexandre Victoor (SGCIB) Contributeur principal du plugin Sonar pour .Net @alex_victoor
  • 3.
    Pourquoi Sonar • Lacrise fait rage, il faut réduire les coûts • mais souvent les projets vieillissent mal • et accumulent de la dette technique
  • 4.
    Plan • Introduction à la qualimétrie • Sonar in a Nutshell • Comment ça marche • Etendre Sonar (API) • Fonctionnalités avancées
  • 5.
    Introduction à laqualimétrie Qu’est ce que la qualimétrie? • C’est mesurer la qualité.
  • 6.
    Introduction à laqualimétrie Qu’est ce que la qualité d’un logiciel ? • Robustesse • Maintenance • Evolutivité • Performance • Sécurité
  • 7.
    Introduction à laqualimétrie Qu’est ce que la qualité d’un logiciel ? selon SQALE (http://www.sqale.org/) • Testability • Reliability • Changeability • Efficiency • Security • Maintenability • Portability • Reusability
  • 8.
    Introduction à laqualimétrie Pourquoi mesurer la qualité? • Avoir plus d’information pour prendre des décisions • Suivre son évolution: dégradation ou amélioration • Transparence • Réduire la « dette technique » et se fixer des objectifs réalistes • Justifier le refactoring
  • 9.
    Introduction à laqualimétrie Pourquoi mesurer la qualité? • On monitore l’état du logiciel en production: – Erreurs, warnings, … – consommation CPU/RAM, … • Et pourquoi pas monitorer l’état du logiciel avant: – Est-ce que ça compile? – Est-ce qu’il a de régressions? (tests unitaires) – Est-ce que la qualité se dégrade ?
  • 10.
    Introduction à laqualimétrie Comment mesurer la qualité ?
  • 11.
    Introduction à laqualimétrie Comment mesurer la qualité ? • Résultat des tests • Couverture du code par les tests • Duplication • Complexité cyclomatique • Convention de nommage • Bugs potentiels • Erreurs de design
  • 12.
    Introduction à laqualimétrie Résultat des tests Solution: corriger les tests
  • 13.
    Introduction à laqualimétrie Couverture du code par les tests Solution: rédiger plus de tests
  • 14.
    Introduction à laqualimétrie Duplication Solution: factoriser
  • 15.
    Introduction à laqualimétrie Complexité cyclomatique Solution: SoC, découper en plus petites méthodes CC = 11
  • 16.
    Introduction à laqualimétrie Convention de nommage Solution: respecter UNE convention (peu importe laquelle)
  • 17.
    Introduction à laqualimétrie Bugs potentiels Solution: corriger les bugs
  • 18.
    Introduction à laqualimétrie Erreurs de design Solution: SRP, réduire le LCOM, découpler
  • 19.
    Sonar le Freede la qualimétrie
  • 20.
    Sonar in aNutshell
  • 21.
    Coment ça marche Qu’estce que Sonar ? • Un « client » qui analyse votre projet (Java, C#, etc.) • Un portail qui affiche le résultat des analyses Mais aussi • Un plugin Eclipse • Un plugin Jenkins/Hudson • Etc.
  • 22.
    Coment ça marche Qu’estce que Sonar ? • Un projet OpenSource, gratuit • Codé en Java • Disponible sur https://github.com/SonarCommunity • Avec une mailling-list dev@sonar.codehaus.org • Maintenue par la société SonarSource • Qui réalise le support et des plugins commerciaux
  • 23.
  • 24.
    Etendre Sonar • UneAPI REST pour – Injecter des indicateurs manuels – Ou business – générer des rapports • Pour aller plus loin une API Plugin – Batch side: les capteurs – Server side: l’IHM – De la glue avec Pico
  • 25.
    REST API • Ressourcessonar ? • Metrics et measures ? • Exemples de requêtes: les events http://nemo.sonarsource.org/api/events?resource=org.codehaus.sonar:son ar&categories=Alert,Version&fromDate=2012-07-01&toDate=2012-08- 31
  • 26.
    Plugin API, batchside • Sensor & SensorContext • MavenPluginHandler • Decorator
  • 27.
    Plugin API, serverside • Composants liés aux langages, aux règles ProfileImporter, RulesRepository… • GWT Documenté mais bientôt deprecated • RAILS Simple, dynamique mais…
  • 28.
    DI avec PICO •Enregistrement des composants par une classe « plugin » • Injection par constructeur • Utilisation d’interfaces de marquage
  • 29.
    Fonctionnalités évoluées • Filtres •Dashboards • Plans d’actions