Contrôle de la qualité logiciel

806 views

Published on

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

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
806
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
39
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 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

    ×