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
I...
Ma Société
▧ Assistance Qualité / Recette
applications
▧ Modernisation automatique
d’applications
▧ Offre Intégration Usin...
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 *
C...
Domain Driven Design
▧ Définition d’un langage commun utilisateur
/ concepteurs / développeurs
▧ Documentation d’un lexiqu...
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 ...
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_recu...
Qu’utilisez-vous pour
générer du PDF ?
IText ?
Quelle version ?
>=5 ?
Vous devez tout mettre en opensource
ou payer une li...
Antepedia(€)
Fossology
L’architecture de
l’application
Mesurer le respect des règles
d’architecture définies dans
l’application
Structure101, Mac...
<?xml version="1.0"?>
<macker>
<ruleset name="Simple example">
<access-rule>
<deny>
<from class="**Print*" />
<to class="j...
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()...
L’algorithmie (suite)
public static String treatString(final String str) {
final int length = str.length();
final List<Cha...
L’algorithmie (bad smells)
public static String treatString(final String str) {
final int length = str.length();
final Lis...
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émanti...
La qualité des tests
Combien de tests unitaires pour ce code ?
public static String foo(int i) {
if ( i >= 0 ) {
return "foo";
} else {
return ...
Combien de tests unitaires pour ce code ?
public static String foo(int i) {
if ( i >= 0 ) {
return "foo";
} else {
return ...
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...
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’utili...
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>sona...
Intégration Sonar + Gradle
▧ apply plugin: "sonar"
▧ sonar {
server {
url = "http://my.server.com"
}
database {
url = "jdb...
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
Contrôle de la qualité logiciel
Contrôle de la qualité logiciel
Contrôle de la qualité logiciel
Contrôle de la qualité logiciel
Prochain SlideShare
Chargement dans…5
×

Contrôle de la qualité logiciel

553 vues

Publié le

Quelques slides pour présenter différentes méthodes et approches du contrôle de la qualité logiciel.

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
553
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
27
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Versionner la documentation
    Générer la documentation
    Collaborer pour améliorer la documentatio
  • http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/
  • http://blog.sonatype.com/2010/04/why-nexus-for-the-non-programmer/#.VWXvO9-uNhE
  • http://blog.sonatype.com/2010/04/why-nexus-for-the-non-programmer/#.VWXvO9-uNhE
  • http://blog.sonatype.com/2010/04/why-nexus-for-the-non-programmer/#.VWXvO9-uNhE
  • Versionner la documentation
    Générer la documentation
    Collaborer pour améliorer la documentatio
  • Contrôle de la qualité logiciel

    1. 1. La qualité logicielle : enjeux, outillage, processus
    2. 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. 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
    4. 4. Contrôler la qualité du code
    5. 5. Analyser la qualité d’un logiciel
    6. 6. L’audit fonctionnel Vérifier l’adéquation du logiciel avec les attentes métiers / utilisateurs
    7. 7. 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; } }
    8. 8. 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
    9. 9. Le choix des technologies Choisissez vos technologies avec soin
    10. 10. Nexus Lifecycle Auditor ($$)
    11. 11. 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
    12. 12. Exemple d’utilisation Groovy/Grails
    13. 13. Exemple d’utilisation JSP vs Thymeleaf vs Mustache ? Spring Initializr
    14. 14. 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
    15. 15. Qu’utilisez-vous pour générer du PDF ? IText ? Quelle version ? >=5 ? Vous devez tout mettre en opensource ou payer une licence
    16. 16. Antepedia(€)
    17. 17. Fossology
    18. 18. L’architecture de l’application Mesurer le respect des règles d’architecture définies dans l’application Structure101, Macker, ...
    19. 19. <?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)
    20. 20. Structure101 ($$)
    21. 21. SonarQube (free/€€)
    22. 22. La maîtrise des technologies Contrôlez l’application des bonnes pratiques liées à une technologie
    23. 23. Outillage Kiuwan https://www.kiuwan.com
    24. 24. Conception de l’application Traquez les bad smells Utilisation de Design Patterns
    25. 25. Outillage ● JDeodorant ● Code Badsmell Detector ● CodePro Analytix
    26. 26. L’algorithmie Exemple Parcours de LinkedList LinkedList<Integer> notes = … int total =0; for (int i = 0 ; i < notes.size() ; ++i) { total += notes.get(i); }
    27. 27. 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); } }
    28. 28. 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é!
    29. 29. L’algorithmie (solution) new StringBuilder(str).reverse();
    30. 30. 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)...
    31. 31. La qualité des tests
    32. 32. Combien de tests unitaires pour ce code ? public static String foo(int i) { if ( i >= 0 ) { return "foo"; } else { return "bar"; } }
    33. 33. 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)); }
    34. 34. Outillage PIT
    35. 35. Pouvez-vous me citer des métriques intéressantes ?
    36. 36. 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
    37. 37. La notion de référentiel
    38. 38. En pratique, une release contient :
    39. 39. 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
    40. 40. Attention au paramétrage des règles
    41. 41. OUtils et process pour contrôler la qualité de code
    42. 42. Un processus de revue de code
    43. 43. Utilisez une convention de codage Définissez des règles communes
    44. 44. Un portail de qualimétrie
    45. 45. 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=...
    46. 46. 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
    47. 47. Pour aller plus loin : Formation Cleancode / Développeurs Formation Tests automatisés, TDD/BDD Formation Audit de code
    48. 48. Merci Vous pouvez me trouver : @sleroy0 sylvain.leroy@tocea.com

    ×