SlideShare une entreprise Scribd logo
1  sur  26
Qualité de code et Sonar
MUG Lyon – 24 octobre 2013 – Hébergé par Sciences-U
Clément Bouillier - @clem_bouillier
Le MUG Lyon
Une session tous les derniers jeudis du mois à Sciences-U (merci !)
•

Petite question : préférez-vous 19h ou 19h30 ?  vote à main levée ?

Prochaines sessions
•
•

Plateforme TFS online et Azure + afterwork le 28/11
Afterwork seulement probablement en décembre (date à fixer)

Suivez toutes les communautés lyonnaises sur le calendrier Lyon Tech
Hub !
•

Coding Dojo DDD le jeudi 7 novembre à l’INSA
Qui suis-je ?
Architecte/chef de projet/consultant mais avant tout
ARTISAN DEVELOPPEUR
> Twitter : @clem_bouillier

Membre actif des groupes suivants
> DevLyon : groupe de développeurs indépendants partageant une
vision de l’informatique créant de la valeur  http://devlyon.fr
> MUG Lyon : groupe de passionnés de technologies en
environnement Microsoft sur Lyon
> Fier d’être développeur : groupe visant à promouvoir le métier
de développeur en France  http://fierdetredeveloppeur.org/
Tour d’horizon
La qualité de code, c’est-à-dire ?
Pourquoi ?
Différents aspects
•
•
•

Règles de code  pour assurer l’homogénéité du code d’une équipe
Métriques  pour comprendre la structure/le design du code
Tests  pour se couvrir de régressions potentielles

Une problématique de fond : maîtriser la dette technique
•
•
•

C’est quoi ?
Pourquoi ?
Laquelle ?
La dette technique
Et Sonar ?
Un outil parmi d’autres (Cast, NDepend…)…

…mais un outil qui est facile à mettre en œuvre…
…et qui est gratuit (sauf quelques plugins)
Mais avant de passer à l’outillage, revenons aux fondamentaux !
Quelques fondamentaux
De la programmation orientée objet du moins…
Quelques références
Clean Code – Robert C. Martin (Uncle Bob)

Agile Principles, Patterns, and Practices in C# - Uncle Bob
Code Complete – Steve McConnell
Vidéos d’Uncle Bob : https://www.cleancoders.com/
Principes de programmation
DRY = Don’t Repeat Yourself
•
•

Copier/coller du code est à banir
Factoriser

YAGNI = Your Aren’t Gonna Need It
•

Ne faites pas une usine à gaz pour écraser une mouche

KISS = Keep It Simple Stupid
•

/! “Everything should be made as simple as possible,
but not simpler.” Einstein
Principes de conception orientée objet
Utiliser un langage orienté objet ne suffit pas pour faire de la POO
Des pratiques ayant bientôt 20 ans sont encore très mal connues
•
•
•

Class cohesion
SOLID
Law of Demeter

Objectif : rendre le logiciel plus facile à modifier (évolutif et maintenable)
Un point commun : la gestion des dépendances
•
•
•
•

Réduire leur nombre
Organiser de manière cohérente
Coupler faiblement
/! au classique « plat de spaghettis »
Quelques détails rapides…
SOLID
•
•
•
•
•

SRP = Single Responsability Principle
Open/closed principle = ouvert à l’extensibilité mais fermé à la modification
Liskov substitution = tout objet doit pouvoir être substitué par un objet d’une
classe dérivée
Interface segregation = créer de petites interfaces
Dependency Inversion = fournissez les dépendances à vos objets  IOC/DI

Law of Demeter = éviter monObjet.MaRelation.MaPropriété
Class Cohesion = éviter de mettre dans une même classe des membres qui
n’ont pas de cohésion entre eux  métrique LCOM = 4
Dépendances = toutes les classes dont dépend une classe  métrique RFC =
nombre de méthode + nombre d’appels de méthodes externes
Homogénéité du code
« ce n’est que de la cosmétique… »
Et bien non pas tout à fait
•
•
•

La non homogénéité détourne l’attention de chacun => attention aux guerres de
cloché
Ca crée du bruit dans le gestionnaire de code source => historique moins lisible
C’est particulièrement compliqué à gérer lors de fusion de branches

Le plus simple reste d’utiliser des standards de fait commun à toute l’équipe
=> StyleCop
•

Avec quelques ajustements/personnalisation éventuels => StyleCop+ (plus long)
Tests automatisés
Le plus important est d’avoir des tests automatisés
•
•
•

Attention au coût  « test first »
Aide à produire un meilleur design technique
Voire aide à déceler des incohérences/problématiques

Regardez le TDD et le BDD pour en savoir plus…
Attention, à ne pas trop se concentrer sur la couverture
•
•

100% ne signifie pas un code parfait => combinatoire
La couverture par rapport à la complexité peut être plus
intéressante
Synthétisé en 7 « péchés capitaux » du
dev
Dans la documentation Sonar, on trouve les 7 péchés capitaux du dev
suivants :
•
•
•
•
•
•
•

Mauvaise distribution de la complexité  KISS, SRP (le S de SOLID)
Duplication de code  DRY
Manque de tests automatisés  TDD/BDD
Pas de norme de codage  homogénéité du code
Pas assez ou trop de commentaires  KISS, SRP
Bugs potentiels  violations de l’ensemble des règles
Design Spaghetti  gestion des dépendances en POO
Un outillage avec SonarQube
Un parmi d’autres possibles…
Pour commencer : quelques pièges à
éviter !
L’outil ne remplace pas les revues de code

L’outil doit être apprivoisé par toute l’équipe,
ainsi que des pratiques autour de la
réduction/maîtrise de la dette technique
L’outil reste un outil, attention aux dérives du
contrôle et de l’objectivation sur des mesures
•

Toute mesure objectivée est artificiellement
optimisée
Lancer une analyse Sonar pour C#
Installation d’un JDK (et oui Sonar est issu de la communauté
Java…encore )
Serveur (dans mon cas une VM Ubuntu)
•
•
•

Dé-zipper la distribution de SonarQube
Configurer une base de données pour Sonar (créer une base vide + login)
Installer le plugin Sonar via l’interface d’admin (un clic + redémarrage)

Client (dans mon cas une VM Windows 2008 R2)
•
•
•
•

Dé-zipper la distribution de SonarRunner
Configurer l’accès au serveur (une ligne de config)
Installer FxCop (si besoin)
Créer un fichier de config pour le projet (10 lignes)

* ATTENTION : quelques cas particuliers non gérés comme pas de solution, projet WebSite…

Bien exercé c’est
30 minutes !!
Sinon comptez 2h*
Comment ça marche ?
Un plugin C# installé sur le serveur récupéré par SonarRunner, basé sur
•
•

Un analyseur de code propre à Sonar
Des outils de l’environnement .NET : StyleCop, FxCop, Gendarme, Gallio

Un profil de qualité pour configurer les règles sur le serveur
SonarRunner lance l’analyse en récupérant ces informations et en
lançant chacun de ces outils
Démo
Un premier coup d’œil : le dashboard

Zoom sur quelques métriques/règles
Configuration des règles de codage
On relance et on observe l’évolution
Suivi de plans d’action

Avec le code des projets suivants:
• CodeStory du MugLyon
• SDK AR Drone
R# et SonarQube
SonarQube peut paraître fastidieux et le feedback n’est pas immédiat…

Pour la partie homogénéité du code, couplez-le à R# et StyleCop (plugin
R# par défaut)
• Erreurs en temps réel (soulignées)
• Propositions de correction automatique !
 Plus d’excuses…

=> rapide démo
Autres fonctionnalités…
Analyser des projets basés sur d’autres langages : Java, PHP, Javascript, Web
(HTML, CSS), VB.Net, COBOL, ABAP…(/! certains plugins sont payants)
•
•

En PHP, couplez-le à PHPStorm (encore JetBrains, l’éditeur de R#...)
En Java, couplez-le à Eclipse ou IntelliJ (toujours JetBrains…)

Analyser des projets multi-langages : Java/Javascript/Web
•

Ca ne marche pas avec le plugin C# couplé à d’autres langages   projets
séparés

Plus d’outils en Java : Dependency Structure Matrix, FindBugs…
Beaucoup de plugins
Retour d’expérience sur des audits
L’outil n’est pas la première étape d’analyse
•
•

Faites-vous expliquer la solution et l’architecture
Regardez la structure du code

L’outil va uniquement permettre de zoomer sur certains points,
d’identifier des problèmes
L’interprétation des résultats constitue le réel apport d’un audit, avec
un plan d’action défini
Alors on fait quoi demain ?
On maîtrise sa dette technique !
Comprendre ce qu’est la qualité de code  Documentez-vous !

Définir votre cible  Think Big
Commencez par ce qui est le plus important  Act Small
Outiller votre démarche, ça sera moins douloureux…
Et le code existant n’est pas une excuse ! Ca ne fera qu’empirer !
Feedback

MERCI !

Contenu connexe

Tendances

Introduction to NI, LabVIEW, ELVIS and Planet NI
Introduction to NI, LabVIEW, ELVIS and Planet NIIntroduction to NI, LabVIEW, ELVIS and Planet NI
Introduction to NI, LabVIEW, ELVIS and Planet NIslemoslideshare
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverteEric Mignot
 
Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...
Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...
Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...TelecomValley
 
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
 
Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web modernehalleck45
 
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éfautsJulien Jakubowski
 
Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010Jean-Marc Fontaine
 
Solutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHPSolutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHPJean-Marc Fontaine
 
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
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes PratiquesEmmanuel Hugonnet
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2Christophe Rochefolle
 
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
 
Analyser la sécurité de son code source avec SonarSource
Analyser la sécurité de son code source avec SonarSourceAnalyser la sécurité de son code source avec SonarSource
Analyser la sécurité de son code source avec SonarSourceSébastien GIORIA
 
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeSoirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeTelecomValley
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
La revue de code : facile !
La revue de code : facile !La revue de code : facile !
La revue de code : facile !Lucian Precup
 
Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...
Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...
Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...TelecomValley
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifkemenaran
 
Qu'est ce qu'un logiciel de qualité
Qu'est ce qu'un logiciel de qualitéQu'est ce qu'un logiciel de qualité
Qu'est ce qu'un logiciel de qualitéSylvain Leroy
 

Tendances (20)

Introduction to NI, LabVIEW, ELVIS and Planet NI
Introduction to NI, LabVIEW, ELVIS and Planet NIIntroduction to NI, LabVIEW, ELVIS and Planet NI
Introduction to NI, LabVIEW, ELVIS and Planet NI
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverte
 
Architecture Plug-in en LabVIEW : de la conception à la réalisation
Architecture Plug-in en LabVIEW : de la conception à la réalisationArchitecture Plug-in en LabVIEW : de la conception à la réalisation
Architecture Plug-in en LabVIEW : de la conception à la réalisation
 
Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...
Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...
Soirée du Test Logiciel - Intelligence Artificielle dans le test - J. VAN QUA...
 
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
 
Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderne
 
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
 
Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010
 
Solutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHPSolutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHP
 
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
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
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 !
 
Analyser la sécurité de son code source avec SonarSource
Analyser la sécurité de son code source avec SonarSourceAnalyser la sécurité de son code source avec SonarSource
Analyser la sécurité de son code source avec SonarSource
 
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeSoirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
La revue de code : facile !
La revue de code : facile !La revue de code : facile !
La revue de code : facile !
 
Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...
Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...
Soirée du Test Logiciel - Administration et orchestration des tests avec Refe...
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 
Qu'est ce qu'un logiciel de qualité
Qu'est ce qu'un logiciel de qualitéQu'est ce qu'un logiciel de qualité
Qu'est ce qu'un logiciel de qualité
 

En vedette

What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...
What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...
What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...VISEO
 
[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
 
Audit technique de code
Audit technique de codeAudit technique de code
Audit technique de codeMehdi TAZI
 
Sonar qube to impove code quality
Sonar qube   to impove code qualitySonar qube   to impove code quality
Sonar qube to impove code qualityMani Sarkar
 
Gestión financiera aplicando coaching nagua
Gestión financiera aplicando coaching naguaGestión financiera aplicando coaching nagua
Gestión financiera aplicando coaching naguaenbus
 
Circuitos electronicos
Circuitos electronicosCircuitos electronicos
Circuitos electronicoskranford_816
 
Les réseaux sociaux pourquoi faire ?
Les réseaux sociaux pourquoi faire ? Les réseaux sociaux pourquoi faire ?
Les réseaux sociaux pourquoi faire ? SO HAPPY WEB
 
Pasos para instalar windows xp
Pasos para instalar windows xpPasos para instalar windows xp
Pasos para instalar windows xpgatitajon
 
Venissage de tibili à la galerie de la Hotte aux Diablerets
Venissage de tibili à la galerie de la Hotte aux DiableretsVenissage de tibili à la galerie de la Hotte aux Diablerets
Venissage de tibili à la galerie de la Hotte aux DiableretsFrançoise Cassan
 
Mis bandas preferidas powerpoint lucas tassi
Mis bandas preferidas powerpoint lucas tassiMis bandas preferidas powerpoint lucas tassi
Mis bandas preferidas powerpoint lucas tassilucastassi
 
Cedeño actividad dia mundial de la af 2014
Cedeño actividad dia mundial de la af 2014Cedeño actividad dia mundial de la af 2014
Cedeño actividad dia mundial de la af 2014Byron Cedeño
 
L'histoire de Lyon
L'histoire de Lyon L'histoire de Lyon
L'histoire de Lyon albii_9
 
Tout savoir sur_la_qualite_de_lair_en_9_points_essentiels
Tout savoir sur_la_qualite_de_lair_en_9_points_essentielsTout savoir sur_la_qualite_de_lair_en_9_points_essentiels
Tout savoir sur_la_qualite_de_lair_en_9_points_essentielsEntre Nous
 
Poblacion peruana en el senso 2007
Poblacion peruana en el senso 2007Poblacion peruana en el senso 2007
Poblacion peruana en el senso 2007Charro Prieto Paz
 
Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...
Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...
Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...Jb Gabellieri
 

En vedette (20)

What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...
What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...
What’s new in Microsoft ALM 2013, hosted in Windows Azure, VISUAL STUDIO ONLI...
 
[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 ?
 
Audit technique de code
Audit technique de codeAudit technique de code
Audit technique de code
 
Sonar qube to impove code quality
Sonar qube   to impove code qualitySonar qube   to impove code quality
Sonar qube to impove code quality
 
Gestión financiera aplicando coaching nagua
Gestión financiera aplicando coaching naguaGestión financiera aplicando coaching nagua
Gestión financiera aplicando coaching nagua
 
Circuitos electronicos
Circuitos electronicosCircuitos electronicos
Circuitos electronicos
 
Disfonias
DisfoniasDisfonias
Disfonias
 
Les réseaux sociaux pourquoi faire ?
Les réseaux sociaux pourquoi faire ? Les réseaux sociaux pourquoi faire ?
Les réseaux sociaux pourquoi faire ?
 
Avis clients
Avis clientsAvis clients
Avis clients
 
Pasos para instalar windows xp
Pasos para instalar windows xpPasos para instalar windows xp
Pasos para instalar windows xp
 
Venissage de tibili à la galerie de la Hotte aux Diablerets
Venissage de tibili à la galerie de la Hotte aux DiableretsVenissage de tibili à la galerie de la Hotte aux Diablerets
Venissage de tibili à la galerie de la Hotte aux Diablerets
 
Mis bandas preferidas powerpoint lucas tassi
Mis bandas preferidas powerpoint lucas tassiMis bandas preferidas powerpoint lucas tassi
Mis bandas preferidas powerpoint lucas tassi
 
Cedeño actividad dia mundial de la af 2014
Cedeño actividad dia mundial de la af 2014Cedeño actividad dia mundial de la af 2014
Cedeño actividad dia mundial de la af 2014
 
Tribus urbanas
Tribus urbanasTribus urbanas
Tribus urbanas
 
Présentation1
Présentation1Présentation1
Présentation1
 
La Circunferencia
 La Circunferencia  La Circunferencia
La Circunferencia
 
L'histoire de Lyon
L'histoire de Lyon L'histoire de Lyon
L'histoire de Lyon
 
Tout savoir sur_la_qualite_de_lair_en_9_points_essentiels
Tout savoir sur_la_qualite_de_lair_en_9_points_essentielsTout savoir sur_la_qualite_de_lair_en_9_points_essentiels
Tout savoir sur_la_qualite_de_lair_en_9_points_essentiels
 
Poblacion peruana en el senso 2007
Poblacion peruana en el senso 2007Poblacion peruana en el senso 2007
Poblacion peruana en el senso 2007
 
Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...
Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...
Introduction to app analytics : mobile, Facebook... Tournai Café Numérique 09...
 

Similaire à 20131024 qualité de code et sonar - mug lyon

DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)Cyrille Martraire
 
#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQube#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQubeVincent Biret
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation Microsoft
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOpsMicrosoft
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfboulonvert
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSMicrosoft
 
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
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotiqueMicrosoft
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8Microsoft
 
Agile Tour 2010 - Mise en place d'un projet agile
Agile Tour 2010 - Mise en place d'un projet agileAgile Tour 2010 - Mise en place d'un projet agile
Agile Tour 2010 - Mise en place d'un projet agileLaurent Deséchalliers
 
AT2010 Mise place d'un projet Agile
AT2010 Mise place d'un projet AgileAT2010 Mise place d'un projet Agile
AT2010 Mise place d'un projet AgileNormandy JUG
 
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
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...ENSIBS
 
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 defautsAntoine Blk
 
Happy dev ... & ops
Happy dev ... & opsHappy dev ... & ops
Happy dev ... & opsQuentin Adam
 

Similaire à 20131024 qualité de code et sonar - mug lyon (20)

Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)
 
#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQube#MSDEVMTL Introduction à #SonarQube
#MSDEVMTL Introduction à #SonarQube
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJS
 
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
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
Normandy JUG integration Continue
Normandy JUG integration ContinueNormandy JUG integration Continue
Normandy JUG integration Continue
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
 
Agile Tour 2010 - Mise en place d'un projet agile
Agile Tour 2010 - Mise en place d'un projet agileAgile Tour 2010 - Mise en place d'un projet agile
Agile Tour 2010 - Mise en place d'un projet agile
 
AT2010 Mise place d'un projet Agile
AT2010 Mise place d'un projet AgileAT2010 Mise place d'un projet Agile
AT2010 Mise place d'un projet Agile
 
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
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
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
 
Happy dev ... & ops
Happy dev ... & opsHappy dev ... & ops
Happy dev ... & ops
 

Plus de Clement Bouillier

EventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-MarseilleEventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-MarseilleClement Bouillier
 
20141021 - Coding dojo EventSourcing
20141021 - Coding dojo EventSourcing20141021 - Coding dojo EventSourcing
20141021 - Coding dojo EventSourcingClement Bouillier
 
20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyon20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyonClement Bouillier
 
20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks Lyon20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks LyonClement Bouillier
 
20131008 - uxda - human talk
20131008 - uxda - human talk20131008 - uxda - human talk
20131008 - uxda - human talkClement Bouillier
 

Plus de Clement Bouillier (6)

EventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-MarseilleEventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-Marseille
 
20141021 - Coding dojo EventSourcing
20141021 - Coding dojo EventSourcing20141021 - Coding dojo EventSourcing
20141021 - Coding dojo EventSourcing
 
20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyon20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyon
 
20131214 - gdcr 2013 - lyon
20131214 - gdcr 2013 - lyon20131214 - gdcr 2013 - lyon
20131214 - gdcr 2013 - lyon
 
20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks Lyon20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks Lyon
 
20131008 - uxda - human talk
20131008 - uxda - human talk20131008 - uxda - human talk
20131008 - uxda - human talk
 

20131024 qualité de code et sonar - mug lyon

  • 1. Qualité de code et Sonar MUG Lyon – 24 octobre 2013 – Hébergé par Sciences-U Clément Bouillier - @clem_bouillier
  • 2. Le MUG Lyon Une session tous les derniers jeudis du mois à Sciences-U (merci !) • Petite question : préférez-vous 19h ou 19h30 ?  vote à main levée ? Prochaines sessions • • Plateforme TFS online et Azure + afterwork le 28/11 Afterwork seulement probablement en décembre (date à fixer) Suivez toutes les communautés lyonnaises sur le calendrier Lyon Tech Hub ! • Coding Dojo DDD le jeudi 7 novembre à l’INSA
  • 3. Qui suis-je ? Architecte/chef de projet/consultant mais avant tout ARTISAN DEVELOPPEUR > Twitter : @clem_bouillier Membre actif des groupes suivants > DevLyon : groupe de développeurs indépendants partageant une vision de l’informatique créant de la valeur  http://devlyon.fr > MUG Lyon : groupe de passionnés de technologies en environnement Microsoft sur Lyon > Fier d’être développeur : groupe visant à promouvoir le métier de développeur en France  http://fierdetredeveloppeur.org/
  • 5. La qualité de code, c’est-à-dire ? Pourquoi ? Différents aspects • • • Règles de code  pour assurer l’homogénéité du code d’une équipe Métriques  pour comprendre la structure/le design du code Tests  pour se couvrir de régressions potentielles Une problématique de fond : maîtriser la dette technique • • • C’est quoi ? Pourquoi ? Laquelle ?
  • 7. Et Sonar ? Un outil parmi d’autres (Cast, NDepend…)… …mais un outil qui est facile à mettre en œuvre… …et qui est gratuit (sauf quelques plugins) Mais avant de passer à l’outillage, revenons aux fondamentaux !
  • 8. Quelques fondamentaux De la programmation orientée objet du moins…
  • 9. Quelques références Clean Code – Robert C. Martin (Uncle Bob) Agile Principles, Patterns, and Practices in C# - Uncle Bob Code Complete – Steve McConnell Vidéos d’Uncle Bob : https://www.cleancoders.com/
  • 10. Principes de programmation DRY = Don’t Repeat Yourself • • Copier/coller du code est à banir Factoriser YAGNI = Your Aren’t Gonna Need It • Ne faites pas une usine à gaz pour écraser une mouche KISS = Keep It Simple Stupid • /! “Everything should be made as simple as possible, but not simpler.” Einstein
  • 11. Principes de conception orientée objet Utiliser un langage orienté objet ne suffit pas pour faire de la POO Des pratiques ayant bientôt 20 ans sont encore très mal connues • • • Class cohesion SOLID Law of Demeter Objectif : rendre le logiciel plus facile à modifier (évolutif et maintenable) Un point commun : la gestion des dépendances • • • • Réduire leur nombre Organiser de manière cohérente Coupler faiblement /! au classique « plat de spaghettis »
  • 12. Quelques détails rapides… SOLID • • • • • SRP = Single Responsability Principle Open/closed principle = ouvert à l’extensibilité mais fermé à la modification Liskov substitution = tout objet doit pouvoir être substitué par un objet d’une classe dérivée Interface segregation = créer de petites interfaces Dependency Inversion = fournissez les dépendances à vos objets  IOC/DI Law of Demeter = éviter monObjet.MaRelation.MaPropriété Class Cohesion = éviter de mettre dans une même classe des membres qui n’ont pas de cohésion entre eux  métrique LCOM = 4 Dépendances = toutes les classes dont dépend une classe  métrique RFC = nombre de méthode + nombre d’appels de méthodes externes
  • 13. Homogénéité du code « ce n’est que de la cosmétique… » Et bien non pas tout à fait • • • La non homogénéité détourne l’attention de chacun => attention aux guerres de cloché Ca crée du bruit dans le gestionnaire de code source => historique moins lisible C’est particulièrement compliqué à gérer lors de fusion de branches Le plus simple reste d’utiliser des standards de fait commun à toute l’équipe => StyleCop • Avec quelques ajustements/personnalisation éventuels => StyleCop+ (plus long)
  • 14. Tests automatisés Le plus important est d’avoir des tests automatisés • • • Attention au coût  « test first » Aide à produire un meilleur design technique Voire aide à déceler des incohérences/problématiques Regardez le TDD et le BDD pour en savoir plus… Attention, à ne pas trop se concentrer sur la couverture • • 100% ne signifie pas un code parfait => combinatoire La couverture par rapport à la complexité peut être plus intéressante
  • 15. Synthétisé en 7 « péchés capitaux » du dev Dans la documentation Sonar, on trouve les 7 péchés capitaux du dev suivants : • • • • • • • Mauvaise distribution de la complexité  KISS, SRP (le S de SOLID) Duplication de code  DRY Manque de tests automatisés  TDD/BDD Pas de norme de codage  homogénéité du code Pas assez ou trop de commentaires  KISS, SRP Bugs potentiels  violations de l’ensemble des règles Design Spaghetti  gestion des dépendances en POO
  • 16. Un outillage avec SonarQube Un parmi d’autres possibles…
  • 17. Pour commencer : quelques pièges à éviter ! L’outil ne remplace pas les revues de code L’outil doit être apprivoisé par toute l’équipe, ainsi que des pratiques autour de la réduction/maîtrise de la dette technique L’outil reste un outil, attention aux dérives du contrôle et de l’objectivation sur des mesures • Toute mesure objectivée est artificiellement optimisée
  • 18. Lancer une analyse Sonar pour C# Installation d’un JDK (et oui Sonar est issu de la communauté Java…encore ) Serveur (dans mon cas une VM Ubuntu) • • • Dé-zipper la distribution de SonarQube Configurer une base de données pour Sonar (créer une base vide + login) Installer le plugin Sonar via l’interface d’admin (un clic + redémarrage) Client (dans mon cas une VM Windows 2008 R2) • • • • Dé-zipper la distribution de SonarRunner Configurer l’accès au serveur (une ligne de config) Installer FxCop (si besoin) Créer un fichier de config pour le projet (10 lignes) * ATTENTION : quelques cas particuliers non gérés comme pas de solution, projet WebSite… Bien exercé c’est 30 minutes !! Sinon comptez 2h*
  • 19. Comment ça marche ? Un plugin C# installé sur le serveur récupéré par SonarRunner, basé sur • • Un analyseur de code propre à Sonar Des outils de l’environnement .NET : StyleCop, FxCop, Gendarme, Gallio Un profil de qualité pour configurer les règles sur le serveur SonarRunner lance l’analyse en récupérant ces informations et en lançant chacun de ces outils
  • 20. Démo Un premier coup d’œil : le dashboard Zoom sur quelques métriques/règles Configuration des règles de codage On relance et on observe l’évolution Suivi de plans d’action Avec le code des projets suivants: • CodeStory du MugLyon • SDK AR Drone
  • 21. R# et SonarQube SonarQube peut paraître fastidieux et le feedback n’est pas immédiat… Pour la partie homogénéité du code, couplez-le à R# et StyleCop (plugin R# par défaut) • Erreurs en temps réel (soulignées) • Propositions de correction automatique !  Plus d’excuses… => rapide démo
  • 22. Autres fonctionnalités… Analyser des projets basés sur d’autres langages : Java, PHP, Javascript, Web (HTML, CSS), VB.Net, COBOL, ABAP…(/! certains plugins sont payants) • • En PHP, couplez-le à PHPStorm (encore JetBrains, l’éditeur de R#...) En Java, couplez-le à Eclipse ou IntelliJ (toujours JetBrains…) Analyser des projets multi-langages : Java/Javascript/Web • Ca ne marche pas avec le plugin C# couplé à d’autres langages   projets séparés Plus d’outils en Java : Dependency Structure Matrix, FindBugs… Beaucoup de plugins
  • 23. Retour d’expérience sur des audits L’outil n’est pas la première étape d’analyse • • Faites-vous expliquer la solution et l’architecture Regardez la structure du code L’outil va uniquement permettre de zoomer sur certains points, d’identifier des problèmes L’interprétation des résultats constitue le réel apport d’un audit, avec un plan d’action défini
  • 24. Alors on fait quoi demain ?
  • 25. On maîtrise sa dette technique ! Comprendre ce qu’est la qualité de code  Documentez-vous ! Définir votre cible  Think Big Commencez par ce qui est le plus important  Act Small Outiller votre démarche, ça sera moins douloureux… Et le code existant n’est pas une excuse ! Ca ne fera qu’empirer !