SlideShare une entreprise Scribd logo
1  sur  52
La qualité logicielle :
enjeux, outillage,
processus
Hello!
Je suis Sylvain Leroy
Vous pouvez me trouver sur :
sylvain.leroy@tocea.com / @sleroy0
about.me/sylvain_leroy
2007
Ingénieur
Recherche
Informatique
2011
Création
Société Tocea
2014
Acquisition Tocea
Groupe Metrixware
CTO Tocea
2015
Acquisition Echoes
Groupe Metrixware
CTO MetrixwareProjet Recherche
Ma Société
▧ Assistance Qualité / Recette
applications
▧ Modernisation automatique
d’applications
▧ Offre Intégration Usine
Logicielle
▧ Formateurs Bonnes Pratiques
/Cleancode / Qualité / Devops
▧ Distributeur Outils de
qualité de code
(Optimyth)
▧ Komea Dashboard
(Pilotage développements
par la
qualité/productivité)
▧ Offres Cobol/Mainframe
Contrôler la qualité
du code
Analyser
la qualité
d’un logiciel
L’audit fonctionnel
Vérifier l’adéquation du logiciel avec
les attentes métiers / utilisateurs
La méthodologie DDD
public boolean peutReserver(Cargo cargo, Voyage voyage) {
double maxReservations = voyage.capacite *
Constants.SURCAPACITE_RATIO;
if (voyage.tailleCargoReserve + cargo.taille >
maxReservations) {
return false;
}
}
public boolean peutReserver(Cargo cargo, Voyage voyage) {
if (!overbookingRegle.estAutorisee(cargo, voyage)) {
return false;
}
}
Domain Driven Design
▧ Définition d’un langage commun utilisateur
/ concepteurs / développeurs
▧ Documentation d’un lexique des termes
métiers (et règles métiers)
▧ Inférence entre le métier et la structure de
l’application
▧ Définition d’un modèle métier
▧ Nécessité de silo-ter
fonctionnellement/données => Architecture
microservices
▧ Des frameworks existent (optionnels) : Qi4J
Le choix des
technologies
Choisissez vos technologies avec soin
Nexus Lifecycle Auditor ($$)
Le choix d’une technologie peut avoir un impact sur la
qualité du produit
JDBC pur
193 lignes Java
Spring JDBC
140 lignes Java
MyBatis
46 lignes XML
Spring Data
20 lignes Java
Exemple d’utilisation
Groovy/Grails
Exemple d’utilisation JSP
vs Thymeleaf vs
Mustache ?
Spring Initializr
Les choix de licences
GPL/LGPL/AGPL/WTF/ASF/CC?
https://www.inria.fr/content/download/5896/48452/version/2/file/INRIA_recueil_fiches_lic
ences_libres_vf.pdf
Qu’utilisez-vous pour
générer du PDF ?
IText ?
Quelle version ?
>=5 ?
Vous devez tout mettre en opensource
ou payer une licence
Antepedia(€)
Fossology
L’architecture de
l’application
Mesurer le respect des règles
d’architecture définies dans
l’application
Structure101, Macker, ...
<?xml version="1.0"?>
<macker>
<ruleset name="Simple example">
<access-rule>
<deny>
<from class="**Print*" />
<to class="java.**" />
</deny>
</access-rule>
</ruleset>
</macker>
https://innig.net/macker/
(Checking ruleset: Layering rules ...)
Only the model can talk to the persistence layer
Illegal reference
from net.innig.macker.example.layering.gui.ThingerUI
to
net.innig.macker.example.layering.persistence.PersistenceExcept
ion
(1 error)
Macker rules checking failed
Macker (free)
Structure101 ($$)
SonarQube (free/€€)
La maîtrise des
technologies
Contrôlez l’application des bonnes
pratiques liées à une technologie
Outillage
Kiuwan
https://www.kiuwan.com
Conception de l’application
Traquez les bad smells
Utilisation de Design Patterns
Outillage
● JDeodorant
● Code Badsmell Detector
● CodePro Analytix
L’algorithmie
Exemple Parcours de LinkedList
LinkedList<Integer> notes = …
int total =0;
for (int i = 0 ; i < notes.size() ; ++i) {
total += notes.get(i);
}
L’algorithmie (suite)
public static String treatString(final String str) {
final int length = str.length();
final List<Character> charList = new ArrayList<Character>(str.length());
for (int zIndex = -1; zIndex < length - 1; ++zIndex) {
charList.add(str.charAt(zIndex + 1));
}
final List<Character> charList2 = new LinkedList<Character>();
int z2Index = -2;
final int value = 8;
final int res = value % 3;
while (z2Index < length - 2) {
charList2.add(charList2.size(), charList.get(z2Index + res));
z2Index++;
}
final char[] array = new char[length];
for (int i = 0; i < length; ++i) {
array[length - i - 1] = charList2.get(i);
}
return new String(array);
}
}
L’algorithmie (bad smells)
public static String treatString(final String str) {
final int length = str.length();
final List<Character> charList = new ArrayList<Character>(str.length());
for (int zIndex = -1; zIndex < length - 1; ++zIndex) {
charList.add(str.charAt(zIndex + 1));
}
final List<Character> charList2 = new LinkedList<Character>();
int z2Index = -2;
final int value = 8;
final int res = value % 3;
while (z2Index < length - 2) {
charList2.add(charList2.size(), charList.get(z2Index + res));
z2Index++;
}
final char[] array = new char[length];
for (int i = 0; i < length; ++i) {
array[length - i - 1] = charList2.get(i);
}
return new String(array);
}
} CC=4
Nommage !
Performance!
MagicNumbers
Indice complexe
Faille de sécurité!
L’algorithmie (solution)
new StringBuilder(str).reverse();
Attention aux faux-
positifs!
Exemple Règles Hibernate
Equals/Hascode doivent être
implémentés
Analyse syntaxique, sémantique,
héritage des classes, fonctionnelle
(que vérifie le equals)...
La qualité des tests
Combien de tests unitaires pour ce code ?
public static String foo(int i) {
if ( i >= 0 ) {
return "foo";
} else {
return "bar";
}
}
Combien de tests unitaires pour ce code ?
public static String foo(int i) {
if ( i >= 0 ) {
return "foo";
} else {
return "bar";
}
}
@Test
public void shouldReturnBarWhenGiven1() {
assertEquals("bar", foo(1));
}
@Test
public void shouldReturnFooWhenGivenMinus1() {
assertEquals("foo", foo(-1));
}
Outillage PIT
Pouvez-vous me
citer des métriques
intéressantes ?
Quelles métriques utiles ?
A lire : Métriques et critères d'évaluation de la qualité du code source d’un logiciel
Métrique Seuil conseillé
Nombre d’erreurs bloquantes /critiques 0
Taux de couverture de code 80%
Densité de commentaire 20-40%
Complexity Cyclomatique (Méthode) <= 10
Complexité NPath <= 5
Couverture (branches) 80%
Couvertures (% loc) 80%
Nombre de lignes de code / module Small (2K), Intermediate(8K), Medium(32K),
Large(128K), Very Large (512K)
% API Publique documentée 100%
Couplage afférent/efférent 20
La notion de
référentiel
En pratique, une release contient :
Comment construire son référentiel
▧ Evaluer l’impact du défaut associé à la règle
BLOCKER : Conséquence visible à l’utilisateur ?
CRITICAL : Conséquence invisible mais
comportement anormal vérifié
MAJOR : Conséquence invisible, comportement
anormal possible mais non déterministe
CRITICAL : Impact sur la capacité à tester
(unitairement, intégration)
MINOR, INFO : Pas d’anomalie de comportement
possible
Attention au paramétrage des règles
OUtils et process
pour contrôler la
qualité de code
Un processus de
revue de code
Utilisez une
convention de codage
Définissez des règles communes
Un portail de
qualimétrie
Intégration Sonar + Maven
▧ <project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>
...
</project>
▧ mvn sonar:sonar -DsonarHostURL=...
Intégration Sonar + Gradle
▧ apply plugin: "sonar"
▧ sonar {
server {
url = "http://my.server.com"
}
database {
url = "jdbc:mysql://my.server.com/sonar"
driverClassName = "com.mysql.jdbc.Driver"
username = "Fred Flintstone"
password = "very clever"
}
}
▧ gradle sonarAnalyze
Pour aller plus loin :
Formation Cleancode / Développeurs
Formation Tests automatisés, TDD/BDD
Formation Audit de code
Merci
Vous pouvez me trouver :
@sleroy0
sylvain.leroy@tocea.com

Contenu connexe

Tendances

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
 
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
 
Exigences de qualité des systèmes / logiciels
Exigences de qualité des systèmes / logicielsExigences de qualité des systèmes / logiciels
Exigences de qualité des systèmes / logicielsPierre
 
Conférence: L'assurance qualité au-delà de la qualité logicielle
Conférence: L'assurance qualité au-delà de la qualité logicielleConférence: L'assurance qualité au-delà de la qualité logicielle
Conférence: L'assurance qualité au-delà de la qualité logiciellegeosaa
 
Métriques de qualité logicielle
Métriques de qualité logicielleMétriques de qualité logicielle
Métriques de qualité logicielleYouness Boukouchi
 
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
 
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
 
Introduction à la validation de logiciel
Introduction à la validation de logicielIntroduction à la validation de logiciel
Introduction à la validation de logicielJean-Paul CARMONA
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionSylvain Leroy
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels Bilel Abed
 
Exposé qualité et test
Exposé qualité et test Exposé qualité et test
Exposé qualité et test Imen Turki
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17Marc Hage Chahine
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Aql métriques logicielles
Aql métriques logiciellesAql métriques logicielles
Aql métriques logiciellesmarwa baich
 
Qualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebQualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebChristophe Rochefolle
 

Tendances (20)

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é
 
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...
 
Exigences de qualité des systèmes / logiciels
Exigences de qualité des systèmes / logicielsExigences de qualité des systèmes / logiciels
Exigences de qualité des systèmes / logiciels
 
Conférence: L'assurance qualité au-delà de la qualité logicielle
Conférence: L'assurance qualité au-delà de la qualité logicielleConférence: L'assurance qualité au-delà de la qualité logicielle
Conférence: L'assurance qualité au-delà de la qualité logicielle
 
Métriques de qualité logicielle
Métriques de qualité logicielleMétriques de qualité logicielle
Métriques de qualité logicielle
 
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
 
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...
 
Introduction à la validation de logiciel
Introduction à la validation de logicielIntroduction à la validation de logiciel
Introduction à la validation de logiciel
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / Introduction
 
Test logiciel
Test logicielTest logiciel
Test logiciel
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels
 
Exposé qualité et test
Exposé qualité et test Exposé qualité et test
Exposé qualité et test
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Assurance qualité
Assurance qualitéAssurance qualité
Assurance qualité
 
Tests unitaires
Tests unitairesTests unitaires
Tests unitaires
 
Aql métriques logicielles
Aql métriques logiciellesAql métriques logicielles
Aql métriques logicielles
 
Maintenance logicielle
Maintenance logicielleMaintenance logicielle
Maintenance logicielle
 
Ingénierie du test 0.9
Ingénierie du test 0.9Ingénierie du test 0.9
Ingénierie du test 0.9
 
Qualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebQualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et Web
 

En vedette

Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open sourceSoirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open sourceFrançois Le Droff
 
L'approche processus et l'entreprise agile
L'approche processus et l'entreprise agileL'approche processus et l'entreprise agile
L'approche processus et l'entreprise agileFrance Qualité • AFQP
 
Gestionnaires des ressources humaines
Gestionnaires des ressources humaines Gestionnaires des ressources humaines
Gestionnaires des ressources humaines Ifact-dz Formation HSE
 
Développement efficace d'application logicielle
Développement efficace d'application logicielleDéveloppement efficace d'application logicielle
Développement efficace d'application logiciellePyxis Technologies
 
Audit technique de code
Audit technique de codeAudit technique de code
Audit technique de codeMehdi TAZI
 
Procédure de contrôle qualité
Procédure de contrôle qualité Procédure de contrôle qualité
Procédure de contrôle qualité Marwoua Ben Salem
 
Les tableaux de bord & les indicateurs de performance
Les tableaux de bord & les indicateurs de performanceLes tableaux de bord & les indicateurs de performance
Les tableaux de bord & les indicateurs de performanceAhmed Mesellem
 
Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.aettarrouzi
 
Normalisation des exigences système / logiciel
Normalisation des exigences système / logicielNormalisation des exigences système / logiciel
Normalisation des exigences système / logicielPierre
 
RAINBOW by ECS-3.COM: Contrôle qualité (version française)
RAINBOW by ECS-3.COM: Contrôle qualité  (version française)RAINBOW by ECS-3.COM: Contrôle qualité  (version française)
RAINBOW by ECS-3.COM: Contrôle qualité (version française)RAINBOW by ECS-3.COM
 
Gestion de projets agiles avec scrum
Gestion de projets agiles avec scrumGestion de projets agiles avec scrum
Gestion de projets agiles avec scrumPierre E. NEIS
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPNicolas Perriault
 
Le controle de qualite au laboratoire
Le controle de qualite au laboratoireLe controle de qualite au laboratoire
Le controle de qualite au laboratoireS/Abdessemed
 
Posturas ante la Crisis del Estado del Bienestar (años '70s)
Posturas ante la Crisis del Estado del Bienestar (años '70s)Posturas ante la Crisis del Estado del Bienestar (años '70s)
Posturas ante la Crisis del Estado del Bienestar (años '70s)Celeste Box
 

En vedette (17)

Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open sourceSoirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
 
L'approche processus et l'entreprise agile
L'approche processus et l'entreprise agileL'approche processus et l'entreprise agile
L'approche processus et l'entreprise agile
 
Gestionnaires des ressources humaines
Gestionnaires des ressources humaines Gestionnaires des ressources humaines
Gestionnaires des ressources humaines
 
Développement efficace d'application logicielle
Développement efficace d'application logicielleDéveloppement efficace d'application logicielle
Développement efficace d'application logicielle
 
Audit technique de code
Audit technique de codeAudit technique de code
Audit technique de code
 
Procédure de contrôle qualité
Procédure de contrôle qualité Procédure de contrôle qualité
Procédure de contrôle qualité
 
Les tableaux de bord & les indicateurs de performance
Les tableaux de bord & les indicateurs de performanceLes tableaux de bord & les indicateurs de performance
Les tableaux de bord & les indicateurs de performance
 
Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.
 
Normalisation des exigences système / logiciel
Normalisation des exigences système / logicielNormalisation des exigences système / logiciel
Normalisation des exigences système / logiciel
 
RAINBOW by ECS-3.COM: Contrôle qualité (version française)
RAINBOW by ECS-3.COM: Contrôle qualité  (version française)RAINBOW by ECS-3.COM: Contrôle qualité  (version française)
RAINBOW by ECS-3.COM: Contrôle qualité (version française)
 
Gestion de projets agiles avec scrum
Gestion de projets agiles avec scrumGestion de projets agiles avec scrum
Gestion de projets agiles avec scrum
 
Methodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XPMethodologies de Developpement Agiles : Scrum et XP
Methodologies de Developpement Agiles : Scrum et XP
 
Agilité pour les nuls
Agilité pour les nulsAgilité pour les nuls
Agilité pour les nuls
 
Le controle de qualite au laboratoire
Le controle de qualite au laboratoireLe controle de qualite au laboratoire
Le controle de qualite au laboratoire
 
Going Scrum
Going Scrum Going Scrum
Going Scrum
 
Posturas ante la Crisis del Estado del Bienestar (años '70s)
Posturas ante la Crisis del Estado del Bienestar (años '70s)Posturas ante la Crisis del Estado del Bienestar (años '70s)
Posturas ante la Crisis del Estado del Bienestar (años '70s)
 
Assurance qualité
Assurance qualitéAssurance qualité
Assurance qualité
 

Similaire à Contrôle de la qualité logiciel

Owf 2013 rii panorama leroy
Owf 2013 rii panorama leroyOwf 2013 rii panorama leroy
Owf 2013 rii panorama leroyPatrick MOREAU
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Cédric Leblond
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Captronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteeCaptronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteePatrick MOREAU
 
Formation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procéduraleFormation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procéduralekemenaran
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaPatrick Allaert
 
Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...ATPENSC-Group
 
ASP.NET from Zero to Hero
ASP.NET from Zero to HeroASP.NET from Zero to Hero
ASP.NET from Zero to HeroCellenza
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCERTyou Formation
 
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 legacyFrançois Petitit
 
Presentation BMIA
Presentation BMIAPresentation BMIA
Presentation BMIAPMarsaud
 

Similaire à Contrôle de la qualité logiciel (20)

Linq Tech Days08 Lux
Linq Tech Days08 LuxLinq Tech Days08 Lux
Linq Tech Days08 Lux
 
Cours1.pptx
Cours1.pptxCours1.pptx
Cours1.pptx
 
Owf 2013 rii panorama leroy
Owf 2013 rii panorama leroyOwf 2013 rii panorama leroy
Owf 2013 rii panorama leroy
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Captronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteeCaptronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presentee
 
Formation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procéduraleFormation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procédurale
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et Pinba
 
Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 1 de préparation probatoire (littéraire et scientifique) du Camer...
 
La parallélisation au service de l'optimisation
La parallélisation au service de l'optimisationLa parallélisation au service de l'optimisation
La parallélisation au service de l'optimisation
 
ASP.NET from Zero to Hero
ASP.NET from Zero to HeroASP.NET from Zero to Hero
ASP.NET from Zero to Hero
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-python
 
PFE PPT2
PFE PPT2PFE PPT2
PFE PPT2
 
[FR] Papier Cetsis 2014 - PLC Checker
[FR] Papier Cetsis 2014 - PLC Checker[FR] Papier Cetsis 2014 - PLC Checker
[FR] Papier Cetsis 2014 - PLC Checker
 
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
 
Theme 6
Theme 6Theme 6
Theme 6
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Presentation BMIA
Presentation BMIAPresentation BMIA
Presentation BMIA
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 

Contrôle de la qualité logiciel

  • 1. La qualité logicielle : enjeux, outillage, processus
  • 2. Hello! Je suis Sylvain Leroy Vous pouvez me trouver sur : sylvain.leroy@tocea.com / @sleroy0 about.me/sylvain_leroy 2007 Ingénieur Recherche Informatique 2011 Création Société Tocea 2014 Acquisition Tocea Groupe Metrixware CTO Tocea 2015 Acquisition Echoes Groupe Metrixware CTO MetrixwareProjet Recherche
  • 3. Ma Société ▧ Assistance Qualité / Recette applications ▧ Modernisation automatique d’applications ▧ Offre Intégration Usine Logicielle ▧ Formateurs Bonnes Pratiques /Cleancode / Qualité / Devops ▧ Distributeur Outils de qualité de code (Optimyth) ▧ Komea Dashboard (Pilotage développements par la qualité/productivité) ▧ Offres Cobol/Mainframe
  • 6.
  • 7. L’audit fonctionnel Vérifier l’adéquation du logiciel avec les attentes métiers / utilisateurs
  • 8. La méthodologie DDD public boolean peutReserver(Cargo cargo, Voyage voyage) { double maxReservations = voyage.capacite * Constants.SURCAPACITE_RATIO; if (voyage.tailleCargoReserve + cargo.taille > maxReservations) { return false; } } public boolean peutReserver(Cargo cargo, Voyage voyage) { if (!overbookingRegle.estAutorisee(cargo, voyage)) { return false; } }
  • 9. Domain Driven Design ▧ Définition d’un langage commun utilisateur / concepteurs / développeurs ▧ Documentation d’un lexique des termes métiers (et règles métiers) ▧ Inférence entre le métier et la structure de l’application ▧ Définition d’un modèle métier ▧ Nécessité de silo-ter fonctionnellement/données => Architecture microservices ▧ Des frameworks existent (optionnels) : Qi4J
  • 10. Le choix des technologies Choisissez vos technologies avec soin
  • 12. Le choix d’une technologie peut avoir un impact sur la qualité du produit JDBC pur 193 lignes Java Spring JDBC 140 lignes Java MyBatis 46 lignes XML Spring Data 20 lignes Java
  • 14. Exemple d’utilisation JSP vs Thymeleaf vs Mustache ? Spring Initializr
  • 15. Les choix de licences GPL/LGPL/AGPL/WTF/ASF/CC? https://www.inria.fr/content/download/5896/48452/version/2/file/INRIA_recueil_fiches_lic ences_libres_vf.pdf
  • 16. Qu’utilisez-vous pour générer du PDF ? IText ? Quelle version ? >=5 ? Vous devez tout mettre en opensource ou payer une licence
  • 19. L’architecture de l’application Mesurer le respect des règles d’architecture définies dans l’application Structure101, Macker, ...
  • 20.
  • 21.
  • 22. <?xml version="1.0"?> <macker> <ruleset name="Simple example"> <access-rule> <deny> <from class="**Print*" /> <to class="java.**" /> </deny> </access-rule> </ruleset> </macker> https://innig.net/macker/ (Checking ruleset: Layering rules ...) Only the model can talk to the persistence layer Illegal reference from net.innig.macker.example.layering.gui.ThingerUI to net.innig.macker.example.layering.persistence.PersistenceExcept ion (1 error) Macker rules checking failed Macker (free)
  • 25. La maîtrise des technologies Contrôlez l’application des bonnes pratiques liées à une technologie
  • 26.
  • 28. Conception de l’application Traquez les bad smells Utilisation de Design Patterns
  • 29. Outillage ● JDeodorant ● Code Badsmell Detector ● CodePro Analytix
  • 30. L’algorithmie Exemple Parcours de LinkedList LinkedList<Integer> notes = … int total =0; for (int i = 0 ; i < notes.size() ; ++i) { total += notes.get(i); }
  • 31. L’algorithmie (suite) public static String treatString(final String str) { final int length = str.length(); final List<Character> charList = new ArrayList<Character>(str.length()); for (int zIndex = -1; zIndex < length - 1; ++zIndex) { charList.add(str.charAt(zIndex + 1)); } final List<Character> charList2 = new LinkedList<Character>(); int z2Index = -2; final int value = 8; final int res = value % 3; while (z2Index < length - 2) { charList2.add(charList2.size(), charList.get(z2Index + res)); z2Index++; } final char[] array = new char[length]; for (int i = 0; i < length; ++i) { array[length - i - 1] = charList2.get(i); } return new String(array); } }
  • 32. L’algorithmie (bad smells) public static String treatString(final String str) { final int length = str.length(); final List<Character> charList = new ArrayList<Character>(str.length()); for (int zIndex = -1; zIndex < length - 1; ++zIndex) { charList.add(str.charAt(zIndex + 1)); } final List<Character> charList2 = new LinkedList<Character>(); int z2Index = -2; final int value = 8; final int res = value % 3; while (z2Index < length - 2) { charList2.add(charList2.size(), charList.get(z2Index + res)); z2Index++; } final char[] array = new char[length]; for (int i = 0; i < length; ++i) { array[length - i - 1] = charList2.get(i); } return new String(array); } } CC=4 Nommage ! Performance! MagicNumbers Indice complexe Faille de sécurité!
  • 34. Attention aux faux- positifs! Exemple Règles Hibernate Equals/Hascode doivent être implémentés Analyse syntaxique, sémantique, héritage des classes, fonctionnelle (que vérifie le equals)...
  • 36. Combien de tests unitaires pour ce code ? public static String foo(int i) { if ( i >= 0 ) { return "foo"; } else { return "bar"; } }
  • 37. Combien de tests unitaires pour ce code ? public static String foo(int i) { if ( i >= 0 ) { return "foo"; } else { return "bar"; } } @Test public void shouldReturnBarWhenGiven1() { assertEquals("bar", foo(1)); } @Test public void shouldReturnFooWhenGivenMinus1() { assertEquals("foo", foo(-1)); }
  • 39. Pouvez-vous me citer des métriques intéressantes ?
  • 40. Quelles métriques utiles ? A lire : Métriques et critères d'évaluation de la qualité du code source d’un logiciel Métrique Seuil conseillé Nombre d’erreurs bloquantes /critiques 0 Taux de couverture de code 80% Densité de commentaire 20-40% Complexity Cyclomatique (Méthode) <= 10 Complexité NPath <= 5 Couverture (branches) 80% Couvertures (% loc) 80% Nombre de lignes de code / module Small (2K), Intermediate(8K), Medium(32K), Large(128K), Very Large (512K) % API Publique documentée 100% Couplage afférent/efférent 20
  • 42. En pratique, une release contient :
  • 43. Comment construire son référentiel ▧ Evaluer l’impact du défaut associé à la règle BLOCKER : Conséquence visible à l’utilisateur ? CRITICAL : Conséquence invisible mais comportement anormal vérifié MAJOR : Conséquence invisible, comportement anormal possible mais non déterministe CRITICAL : Impact sur la capacité à tester (unitairement, intégration) MINOR, INFO : Pas d’anomalie de comportement possible
  • 45. OUtils et process pour contrôler la qualité de code
  • 47. Utilisez une convention de codage Définissez des règles communes
  • 49. Intégration Sonar + Maven ▧ <project> ... <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>2.6</version> </plugin> </plugins> </build> ... </project> ▧ mvn sonar:sonar -DsonarHostURL=...
  • 50. Intégration Sonar + Gradle ▧ apply plugin: "sonar" ▧ sonar { server { url = "http://my.server.com" } database { url = "jdbc:mysql://my.server.com/sonar" driverClassName = "com.mysql.jdbc.Driver" username = "Fred Flintstone" password = "very clever" } } ▧ gradle sonarAnalyze
  • 51. Pour aller plus loin : Formation Cleancode / Développeurs Formation Tests automatisés, TDD/BDD Formation Audit de code
  • 52. Merci Vous pouvez me trouver : @sleroy0 sylvain.leroy@tocea.com

Notes de l'éditeur

  1. Versionner la documentation Générer la documentation Collaborer pour améliorer la documentatio
  2. http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/
  3. http://blog.sonatype.com/2010/04/why-nexus-for-the-non-programmer/#.VWXvO9-uNhE
  4. http://blog.sonatype.com/2010/04/why-nexus-for-the-non-programmer/#.VWXvO9-uNhE
  5. http://blog.sonatype.com/2010/04/why-nexus-for-the-non-programmer/#.VWXvO9-uNhE
  6. Versionner la documentation Générer la documentation Collaborer pour améliorer la documentatio