Guide de tests fonctionnels. En utilisant ces principes, mes équipes ont réduit de 90% les défauts détectés en tests d’acceptation (UAT) et permis la livraison de trois projets avec zéro défaut.
Aujourd’hui, les tests sont devenu un élément crucial au cycle de développement logiciel, des sociétés ont investi dans la création d’un service interne de tests, rien ne peut être mis en production sans être validé par ce service.
Pour cela, cette présentation va mettre en évidence les fondamentaux de test logiciel à savoir: définitions, types, processus, méthodes, outils, principes, stratégies, jeux de test, etc.
Formation généraliste rédigée en Juin 2009
Qualité logiciel
Plan Qualité
Gestion Processus de développement
Gestion des exigences
Gestion de configuration
Gestion des tests
Gestion des anomalies
Gestion de la documentation
Exigences de qualité des systèmes / logicielsPierre
Présentation visant les objectifs suivants:
- Objectifs généraux:
-- Réduire les pertes (reworks), la difficulté et le risque d’échec de nos projets TI
-- Améliorer la qualité de nos TI (systèmes / logiciels)
- Objectifs spécifiques:
-- Présenter les normes et exigences de qualité des systèmes / logiciels selon ISO/IEC
-- Améliorer nos exigences de qualité, pour l’atteinte des objectifs généraux ci-dessus mentionnés
Strategie de test à agile tour bordeauxNicolas Fédou
Une stratégie de tests, on sait tous que c’est nécessaire, mais sans forcément savoir à quoi ça ressemble.
Une stratégie de tests est la façon de s’organiser pour montrer qu’une application est de qualité suffisante pour aller en production. Il ne s’agit donc pas d’un inventaire de tests manuels ou automatisés, mais d’un raisonnement avec des choix et des renoncements.
Dans cette présentation nous verrons comment une stratégie de tests vise à optimiser la confiance et les preuves de qualité dans le cadre du développement d’un produit agile.
Guide de tests fonctionnels. En utilisant ces principes, mes équipes ont réduit de 90% les défauts détectés en tests d’acceptation (UAT) et permis la livraison de trois projets avec zéro défaut.
Aujourd’hui, les tests sont devenu un élément crucial au cycle de développement logiciel, des sociétés ont investi dans la création d’un service interne de tests, rien ne peut être mis en production sans être validé par ce service.
Pour cela, cette présentation va mettre en évidence les fondamentaux de test logiciel à savoir: définitions, types, processus, méthodes, outils, principes, stratégies, jeux de test, etc.
Formation généraliste rédigée en Juin 2009
Qualité logiciel
Plan Qualité
Gestion Processus de développement
Gestion des exigences
Gestion de configuration
Gestion des tests
Gestion des anomalies
Gestion de la documentation
Exigences de qualité des systèmes / logicielsPierre
Présentation visant les objectifs suivants:
- Objectifs généraux:
-- Réduire les pertes (reworks), la difficulté et le risque d’échec de nos projets TI
-- Améliorer la qualité de nos TI (systèmes / logiciels)
- Objectifs spécifiques:
-- Présenter les normes et exigences de qualité des systèmes / logiciels selon ISO/IEC
-- Améliorer nos exigences de qualité, pour l’atteinte des objectifs généraux ci-dessus mentionnés
Strategie de test à agile tour bordeauxNicolas Fédou
Une stratégie de tests, on sait tous que c’est nécessaire, mais sans forcément savoir à quoi ça ressemble.
Une stratégie de tests est la façon de s’organiser pour montrer qu’une application est de qualité suffisante pour aller en production. Il ne s’agit donc pas d’un inventaire de tests manuels ou automatisés, mais d’un raisonnement avec des choix et des renoncements.
Dans cette présentation nous verrons comment une stratégie de tests vise à optimiser la confiance et les preuves de qualité dans le cadre du développement d’un produit agile.
Toute application Web dite dynamique nécessite une base de données ainsi que des outils qui permettront de manipuler ces données.Dans la palette des outils à la disposition des développeurs PHP, on trouve entre autres les DBAL (DataBase Abstraction Layer ou couche d'abstraction de base de données) ou les ORM (Object Relational Mapping ou mapping objet-relationnel).
Modernisez le cycle fournisseurs: comment gagner en efficience et sérénité ?Mazars
Mazars et DIMO Software s’associent autour de la modernisation du cycle fournisseurs. Retrouvez sur ce support les conseils de nos experts autour les 5 piliers de l’optimisation de votre cycle Purchase-to-Pay.
Plus d'informations sur http://maza.rs/ZVpip
ArianeGroup, leader mondial dans la conception, le développement et la production des moteurs à propergol solide pour missiles et lanceurs spatiaux, n’avait pas la possibilité de vérifier la qualité logicielle imposée par ses standards. En effet, les exigences du secteur en terme de sécurité et de fiabilité nécessitent la vérification de la qualité des programmes automates industriels.
Ce leader en aérospatial a donc fait appel à Itris Automation. Depuis 2011, ArianeGroup utilise systématiquement PLC Checker, outil automatique de contrôle, sur chaque automate remplacé, ajouté ou modifié de manière significative.
Découvrez dès à présent le fonctionnement du contrôle qualité des automates au sein du secteur de l’Aérospatial, la Défense, la Sécurité.
Bonne lecture !
Retrouvez-nous sur http://www.itris-automation.com
Contactez-nous sur contact@itris-automation.com pour plus d'informations.
L'Approche SMV améliore la qualité en général dans le cycle de vie du développement d'un application grâce à l'interconnexion entre la gestion des exigences, la modélisation, la simulation et le test automatique
L’industrie pharmaceutique comporte une spécificité : la mise sur le marché d’un produit est liée à des contraintes réglementaires strictes. Un grand groupe pharmaceutique français souhaitait améliorer le suivi de ses règles et standards pour les automates programmables industriels, sans passer par la revue de code manuelle.
Ce groupe a fait appel a Itris Automation : PLC Checker a été identifié comme la solution pour automatiser la revue de code.
Découvrez dès à présent le fonctionnement de la vérification de la qualité des programmes automates au sein de l'industrie pharmaceutique.
Bonne lecture !
Retrouvez-nous sur http://www.itris-automation.com/
Contactez-nous sur contact@itris-automation.com pour plus d'informations.
ATMTL23 - La QA a-t-elle reussi à prendre le virage agile? Et saura-t-elle f...Agile Montréal
"L'industrie du développement de logiciels a beaucoup progressé ces dernières années et a dû s'adapter aux innovations rapides dans un environnement agile impliquant la mise en place d’une démarche structurée et dynamique des activités entre le métier, TI et QA dans le cycle de vie du projet pour maîtriser les risques métiers, techniques, accroître l'efficacité de la qualification logicielle.
Dans notre conférence vous découvrirez où en est la place de la collaboration par un retour d'expérience: Les 3 amigos au coeur des activités. Le QA a réussi le virage du projet traditionnel au projet agile, quels sont les outils qui le permettront de réussir le virage vers l'IA. L’IA suffira-t-elle pour clarifier les user stories, obtenir une bonne couverture des requis par les essais et garantir une livraison de qualité par les essais automatisés ?"
qualimétrie logiciel - Entreprise Software Analytic - nov 2015Julien Vq
Présentation en français
Comment évaluer la qualité d'un logiciel ?
Quels outils de qualimétrie logiciel choisir ?
Entreprise Software Analitic
Comment valider les livrables de vos fournisseurs avec le support d'ALL4TEST et de ces outils de qualimétrie ?
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Laurent Speyser
(Conférence dessinée)
Vous êtes certainement à l’origine, ou impliqué, dans un changement au sein de votre organisation. Et peut être que cela ne se passe pas aussi bien qu’attendu…
Depuis plusieurs années, je fais régulièrement le constat de l’échec de l’adoption de l’Agilité, et plus globalement de grands changements, dans les organisations. Je vais tenter de vous expliquer pourquoi ils suscitent peu d'adhésion, peu d’engagement, et ils ne tiennent pas dans le temps.
Heureusement, il existe un autre chemin. Pour l'emprunter il s'agira de cultiver l'invitation, l'intelligence collective , la mécanique des jeux, les rites de passages, .... afin que l'agilité prenne racine.
Vous repartirez de cette conférence en ayant pris du recul sur le changement tel qu‘il est généralement opéré aujourd’hui, et en ayant découvert (ou redécouvert) le seul guide valable à suivre, à mon sens, pour un changement authentique, durable, et respectueux des individus! Et en bonus, 2 ou 3 trucs pratiques!
L'IA connaît une croissance rapide et son intégration dans le domaine éducatif soulève de nombreuses questions. Aujourd'hui, nous explorerons comment les étudiants utilisent l'IA, les perceptions des enseignants à ce sujet, et les mesures possibles pour encadrer ces usages.
Constat Actuel
L'IA est de plus en plus présente dans notre quotidien, y compris dans l'éducation. Certaines universités, comme Science Po en janvier 2023, ont interdit l'utilisation de l'IA, tandis que d'autres, comme l'Université de Prague, la considèrent comme du plagiat. Cette diversité de positions souligne la nécessité urgente d'une réponse institutionnelle pour encadrer ces usages et prévenir les risques de triche et de plagiat.
Enquête Nationale
Pour mieux comprendre ces dynamiques, une enquête nationale intitulée "L'IA dans l'enseignement" a été réalisée. Les auteurs de cette enquête sont Le Sphynx (sondage) et Compilatio (fraude académique). Elle a été diffusée dans les universités de Lyon et d'Aix-Marseille entre le 21 juin et le 15 août 2023, touchant 1242 enseignants et 4443 étudiants. Les questionnaires, conçus pour étudier les usages de l'IA et les représentations de ces usages, abordaient des thèmes comme les craintes, les opportunités et l'acceptabilité.
Résultats de l'Enquête
Les résultats montrent que 55 % des étudiants utilisent l'IA de manière occasionnelle ou fréquente, contre 34 % des enseignants. Cependant, 88 % des enseignants pensent que leurs étudiants utilisent l'IA, ce qui pourrait indiquer une surestimation des usages. Les usages identifiés incluent la recherche d'informations et la rédaction de textes, bien que ces réponses ne puissent pas être cumulées dans les choix proposés.
Analyse Critique
Une analyse plus approfondie révèle que les enseignants peinent à percevoir les bénéfices de l'IA pour l'apprentissage, contrairement aux étudiants. La question de savoir si l'IA améliore les notes sans développer les compétences reste débattue. Est-ce un dopage académique ou une opportunité pour un apprentissage plus efficace ?
Acceptabilité et Éthique
L'enquête révèle que beaucoup d'étudiants jugent acceptable d'utiliser l'IA pour rédiger leurs devoirs, et même un quart des enseignants partagent cet avis. Cela pose des questions éthiques cruciales : copier-coller est-il tricher ? Utiliser l'IA sous supervision ou pour des traductions est-il acceptable ? La réponse n'est pas simple et nécessite un débat ouvert.
Propositions et Solutions
Pour encadrer ces usages, plusieurs solutions sont proposées. Plutôt que d'interdire l'IA, il est suggéré de fixer des règles pour une utilisation responsable. Des innovations pédagogiques peuvent également être explorées, comme la création de situations de concurrence professionnelle ou l'utilisation de détecteurs d'IA.
Conclusion
En conclusion, bien que l'étude présente des limites, elle souligne un besoin urgent de régulation. Une charte institutionnelle pourrait fournir un cadre pour une utilisation éthique.
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...Horgix
This is the slide deck of a talk by Alexis "Horgix" Chotard and Laurentiu Capatina presented at the MongoDB Paris User Group in June 2024 about the feedback on how PayFit move away from a monolithic hell of a self-hosted MongoDB cluster to managed alternatives. Pitch below.
March 15, 2023, 6:59 AM: a MongoDB cluster collapses. Tough luck, this cluster contains 95% of user data and is absolutely vital for even minimal operation of our application. To worsen matters, this cluster is 7 years behind on versions, is not scalable, and barely observable. Furthermore, even the data model would quickly raise eyebrows: applications communicating with each other by reading/writing in the same MongoDB documents, documents reaching the maximum limit of 16MiB with hundreds of levels of nesting, and so forth. The incident will last several days and result in the loss of many users. We've seen better scenarios.
Let's explore how PayFit found itself in this hellish situation and, more importantly, how we managed to overcome it!
On the agenda: technical stabilization, untangling data models, breaking apart a Single Point of Failure (SPOF) into several elements with a more restricted blast radius, transitioning to managed services, improving internal accesses, regaining control over risky operations, and ultimately, approaching a technical migration when it impacts all development teams.
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...OCTO Technology
Par Nicolas Bordier (Consultant numérique responsable @OCTO Technology) et Alaric Rougnon-Glasson (Sustainable Tech Consultant @OCTO Technology)
Sur un exemple très concret d’audit d’éco-conception de l’outil de bilan carbone C’Bilan développé par ICDC (Caisse des dépôts et consignations) nous allons expliquer en quoi l’ACV (analyse de cycle de vie) a été déterminante pour identifier les pistes d’actions pour réduire jusqu'à 82% de l’empreinte environnementale du service.
Vidéo Youtube : https://www.youtube.com/watch?v=7R8oL2P_DkU
Compte-rendu :
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Analyse de code: accélérez la validation de vos applications C#
1. DEMO
Application SHARPDEVELOP
Rapport d’audit
01/01/2011
Ce document est un exemple de rapport d’audit produit automatiquement
à partir des résultats de l’analyse de l’application sur la plateforme Kalistick.
Il n’intègre pas de commentaires spécifiques sur les résultats obtenus.
Son objectif est de servir de modèle pour constituer des rapports personnalisés,
il illustre la capacité de la plateforme à restituer une vision claire et compréhensible
de la qualité d’une application.
Ce document est confidentiel, il est la propriété de Kalistick,
Il ne doit pas être diffusé ni modifié sans autorisation.
Kalistick
13 av Albert Einstein
F-69100 Villeurbanne
+33(0) 486 68 89 42
contact@kalistick.com
www.kalistick.com
2. Audit de code de l’application SharpDevelop 01/01/2011
1 Executive Summary
Le Cockpit Qualité utilise des techniques d’analyse statique : il n’exécute pas l’application mais analyse les
éléments qui la constituent (code, résultats des tests, architecture, …). Les résultats sont corrélés, agrégés et
comparés avec les enjeux du projet pour identifier les risques liés à la qualité. Ce rapport présente les
résultats obtenus.
Synthèse - Ecart par rapport à l’objectif
Ce graphique compare la situation actuelle du projet
par rapport aux objectifs fixés sur chacun des axes
de qualité.
L’objectif, configuré à l’initialisation de l’audit,
représente l’importance de chaque axe de qualité. Il
est destiné à déterminer les règles à respecter dans
les développements et la tolérance acceptée.
Taux de non-conformité global
Cette jauge indique le niveau de qualité global de
l’application par rapport à son objectif qualité. Elle
présente le pourcentage de l’application (code)
considéré comme non-conforme.
Selon la configuration réalisée, un taux supérieur à
15% indique la nécessité d’approfondir l’analyse des
résultats.
Origine des violations
Ce graphique identifie l’origine technique des
non-conformités détectées, et les principaux
domaines d’amélioration.
Selon les éléments soumis lors de l’analyse,
certains domaines peuvent ne pas avoir été
évalués.
Confidentiel - Ce document est la propriété de Kalistick 2/61
3. Audit de code de l’application SharpDevelop 01/01/2011
Organisation du rapport
Ce rapport présente les concepts du Cockpit Qualité, l’objectif fixé et les exigences techniques associées,
avant de poursuivre par les résultats synthétiques puis détaillés par domaine technique.
1 Executive Summary ...................................................................................................................................... 2
2 Introduction .................................................................................................................................................. 4
2.1 Le Cockpit Qualité ................................................................................................................................. 4
2.2 La grille d’analyse ................................................................................................................................. 4
3 Objectif qualité ............................................................................................................................................. 7
3.1 Le profil qualité..................................................................................................................................... 7
3.2 Les exigences techniques ..................................................................................................................... 7
4 Synthèse des résultats ................................................................................................................................ 10
4.1 Situation du projet.............................................................................................................................. 10
4.2 Benchmarking ..................................................................................................................................... 13
4.3 Modélisation de l’application ............................................................................................................. 17
5 Résultats détaillés....................................................................................................................................... 20
5.1 Détail par axes de qualité ................................................................................................................... 20
5.2 Implémentation .................................................................................................................................. 21
5.3 Structure ............................................................................................................................................. 26
5.4 Test ..................................................................................................................................................... 35
5.5 Architecture ........................................................................................................................................ 42
5.6 Duplication ......................................................................................................................................... 43
5.7 Documentation................................................................................................................................... 44
6 Plan d’action ............................................................................................................................................... 47
7 Glossaire ..................................................................................................................................................... 49
8 Annexes ...................................................................................................................................................... 51
8.1 La complexité cyclomatique ............................................................................................................... 51
8.2 Le couplage ......................................................................................................................................... 53
8.3 Le TRI et TEI ........................................................................................................................................ 54
8.4 Exigences techniques ......................................................................................................................... 56
Confidentiel - Ce document est la propriété de Kalistick 3/61
4. Audit de code de l’application SharpDevelop 01/01/2011
2 Introduction
2.1 Le Cockpit Qualité
Cet audit est basé sur un processus d’analyse de code industrialisé. Cette industrialisation permet de garantir
des résultats fiables et facilement comparables avec les résultats d’autres audits.
Le processus d’analyse repose sur la plateforme « Cockpit Qualité », disponible en mode SaaS1
(https://cockpit.kalistick.com). Cette plateforme présente l’avantage d’offrir une base de connaissances
unique du fait qu’elle centralise les résultats statistiques issus de l’analyse de millions de lignes de code, base
enrichie en continu avec les nouvelles analyses. Elle permet notamment de réaliser des analyses
comparatives avec d’autres projets similaires.
2.2 La grille d’analyse
L’analyse porte sur le code Java (JEE) ou C# (.Net) de l’application (code source et code binaire). C’est une
analyse statique (sans exécution), complétée par la corrélation avec des informations extraites des outils de
développement déjà mis en œuvre pour le projet : gestionnaires de versions, frameworks de tests unitaires,
outils de couverture de code.
Les résultats sont proposés dans une grille d’analyse qui s’articule autour de 3 dimensions principales :
Les axes de qualité, qui déterminent la nature de l’impact des non-conformités détectées, donc la
conséquence sur le niveau de qualité de l’application
Les domaines de qualité, qui précisent l’origine technique des non-conformités
Les niveaux de sévérité, qui positionnent les non-conformités sur une échelle de gravité afin de
caractériser leur priorité
1
Software as a Service : application accessible à distance via Internet (à l’aide d’un navigateur standard)
Confidentiel - Ce document est la propriété de Kalistick 4/61
5. Audit de code de l’application SharpDevelop 01/01/2011
2.2.1 Les axes de qualité
Les axes de qualité standardisent un ensemble de qualités auxquelles doit prétendre l’application selon la
norme ISO 912623 :
Maintenabilité. Capacité d’un logiciel à pouvoir être dépanné facilement, en fonction de l’effort
exigé pour localiser, identifier et corriger les erreurs.
Fiabilité. Aptitude d’un logiciel à fonctionner correctement en rendant le service attendu dans les
conditions normales de fonctionnement.
Evolutivité. Aptitude d’un logiciel à pouvoir évoluer, en fonction de l’effort requis pour ajouter,
supprimer, modifier des fonctions d’un logiciel déjà opérationnel.
Sécurité. Aptitude du logiciel à fonctionner en respectant les contraintes d’intégrité, de
confidentialité et de traçabilité requises.
Transférabilité. Capacité à faire réaliser la maintenance et les évolutions d’un logiciel par une
nouvelle équipe distincte de celle ayant développé le logiciel initial.
Efficacité. Relation entre le niveau de performance du logiciel et la quantité de ressources
nécessaires pour le faire fonctionner dans des conditions nominales.
2.2.2 Les domaines de qualité
Les domaines de qualité déterminent la nature des problèmes selon leur origine technique. Ils sont au
nombre de six :
Implémentation. Les problèmes inhérents au codage : mauvaise utilisation du langage, bugs
potentiels, code difficilement compréhensible, … Ces problèmes peuvent nuire à un ou plusieurs des
six axes de qualités.
Structure. Les problèmes liés à l’organisation du code : méthodes trop longues, trop complexes, avec
trop de dépendances, … Ces problèmes impactent généralement la maintenabilité et l’évolutivité de
l’application.
2
ISO/IEC 9126-1:2001 Software engineering — Product quality — Part 1: Quality model :
http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=22749
3
L’analyse porte sur un sous-ensemble de la norme ISO 9126 afin de se focaliser sur les dimensions contrôlables de
manière automatisée.
Confidentiel - Ce document est la propriété de Kalistick 5/61
6. Audit de code de l’application SharpDevelop 01/01/2011
Test. Qualifie la manière dont est testée l’application, à partir des résultats des tests unitaires (taux
d’échec, durée d’exécution, …), mais également en fonction de la nature du code couvert par
l’exécution des tests. L’objectif consiste à s’assurer que les tests couvrent les parties critiques de
l’application.
Architecture. Problèmes liés à l’architecture logicielle de l’application. Il est possible de définir un
modèle d’architecture pour modulariser l’application en couches ou composants puis de définir des
contraintes d’appel entre ces éléments. L’analyse identifie au sein du code tous les appels ne
respectant pas ces contraintes, pour détecter les risques au niveau de la maintenabilité, de
l’évolutivité et de la sécurité.
Documentation. Problèmes liés au manque de documentation dans le code. Ce domaine impacte
essentiellement la transférabilité du code.
Duplication. Identification de tous les copier-collers importants au sein de l’application. Ceux-ci
présentent des risques sur les axes fiabilité, maintenabilité, transférabilité et évolutivité.
2.2.3 Les niveaux de sévérité
Les niveaux de sévérité sont destinés à caractériser la priorité de correction d’une non-conformité. Cette
priorité dépend de la gravité de l’impact d’une non-conformité, mais également de l’effort à fournir pour la
correction : certains problèmes moyennement critiques seront marqués avec un niveau de sévérité
important en raison de la trivialité de leur résolution.
Pour simplifier leur interprétation, les niveaux de sévérité sont exprimés à l’aide d’une échelle à quatre
niveaux. Le premier correspond à une erreur, les trois suivants à des avertissements, du plus grave au moins
grave :
Interdit
Fortement déconseillé
Déconseillé
A éviter
Par rapport au niveau Interdit, les autres niveaux de sévérité sont gérés à l’aide d’un seuil de tolérance, qui
augmente inversement avec la gravité.
Confidentiel - Ce document est la propriété de Kalistick 6/61
7. Audit de code de l’application SharpDevelop 01/01/2011
3 Objectif qualité
Une des particularités du « Cockpit Qualité » consiste à réaliser une analyse en fonction des besoins réels du
projet en terme de qualité, afin d’éviter des efforts inutiles de « sur-qualité » et de garantir une meilleure
pertinence sur les risques qualité.
Ces besoins sont formalisés via la définition d’un « profil qualité » de l’application, qui caractérise les niveaux
de qualité attendus sur chacun des six axes de qualités. Ce profil qualité est ensuite traduit en « exigences
techniques », qui sont des règles techniques que devront respecter les développeurs.
3.1 Le profil qualité
Pour cet audit, le profil qualité établi est le suivant :
Voir sur le Cockpit Qualité
3.2 Les exigences techniques
En se basant sur le profil qualité précédent, les exigences techniques ont été sélectionnées à partir de la base
de connaissances du « Cockpit Qualité ». Ces exigences techniques couvrent les six domaines de qualités
(implémentation, structure, test, architecture, documentation, duplication) et sont configurées en fonction
du profil qualité (seuils, niveaux de sévérité, …). L’objectif est d’assurer un calibrage des exigences qui assure
le meilleur retour sur investissement.
Confidentiel - Ce document est la propriété de Kalistick 7/61
8. Audit de code de l’application SharpDevelop 01/01/2011
Voici le détail de ces exigences techniques :
Domaine Règle Explication, objectif et seuils éventuels
- Selon votre profil, entre 150 et 200 règles ont été sélectionnées. Elles sont
Implémentation
présentées exhaustivement en annexe du rapport (8.4.1 Règles
d’implémentation).
Objectif : éviter les mauvaises pratiques et appliquer les bonnes pratiques
liées aux technologies utilisées.
Taille des méthodes Nombre de ligne d'instructions. Cette mesure est différente du nombre de
ligne de code : elle n'inclut pas les lignes de commentaire ni les lignes
blanches mais seulement les lignes comportant au moins une instruction.
Objectif : éviter les blocs de traitements difficilement compréhensibles.
Le seuil retenu pour le projet est :
nombre de lignes : 100
Complexité des Complexité cyclomatique d'une méthode. Elle mesure la complexité
méthodes algorithmique d'une méthode en comptant le nombre de chemins
indépendants couvrant tous les cas possibles. Plus ce nombre est élevé, plus
le code est difficile à maintenir et à tester.
Structure
Objectif : éviter les blocs de traitements difficilement compréhensibles, non
testables et qui tendent à avoir un taux de dysfonctionnement important.
Le seuil retenu pour le projet est :
complexité cyclomatique : 20
Complexité et couplage Identifie les méthodes difficiles à comprendre, à tester et à maintenir en
des méthodes raison d'une complexité moyenne (complexité cyclomatique) et à de
nombreuses références à des types tiers (couplage efférent)
Objectif : éviter les blocs de traitements difficilement compréhensibles et
non testables.
Les seuils retenus pour le projet sont :
complexité cyclomatique : 15
couplage efférent : 20
Confidentiel - Ce document est la propriété de Kalistick 8/61
9. Audit de code de l’application SharpDevelop 01/01/2011
Domaine Règle Explication, objectif et seuils éventuels
Couverture de test des Taux de couverture de code d'une méthode. Cette métrique est
méthodes standardisée par notre plateforme à partir des mesures brutes de
couverture de code quand elles sont fournies au sein de l'archive du projet.
Cette exigence associe un seuil minimal de test (couverture de code) à
chaque méthode de l'application selon le TRI (TestRelevancyIndex) ; le TRI
évalue pour chaque méthode le risque qu'elle contienne des bugs. Son
calcul tient compte des risques métiers définis pour l'application.
Test
Objectif : orienter sa stratégie et les efforts de test sur les points sensibles
de l’application et la vérifier. Ces points sensibles sont évalués selon leur
propension à contenir des bugs et les risques métiers/fonctionnels de
l’application.
Le détail des seuils est fourni en annexe du rapport (8.4.2 Seuils de
couverture de code).
Règles définies Voir le modèle d’architecture éventuellement défini pour découvrir les
spécifiquement pour le contraintes d’architecture en cours.
Architecture
modèle d’architecture
de l’application. Objectif : s’assurer que les développements respectent le modèle
d’architecture prévu et n’introduisent pas des incohérences synonymes de
failles de sécurité, de difficultés de maintenance ou d’évolution.
NB : les violations d’architecture ne sont pas prises en compte dans le calcul
de la non-conformité.
Entête de Identifie les méthodes de complexité moyenne qui ne disposent pas
documentation des d'entête de documentation. Les méthodes prises en compte sont celles
Documentation
méthodes dont la complexité cyclomatique et le nombre d'instructions excèdent des
seuils définis spécifiquement pour le projet.
Objectif : s’assurer que la documentation est présente sur les blocs de
traitements clés en vue de faciliter les éventuels changements d’équipe
(transférabilité).
Les seuils retenus pour le projet sont :
complexité cyclomatique : 10
nombre de lignes : 50
Détection des Les duplications sont invalidées au-delà de 20 instructions
Duplication
duplications
Objectif : détecter l’implémentation de traitements identiques à plusieurs
endroits différents dans l’application, très souvent source d’incohérences
lorsque l’on effectue des modifications, et facteur d’augmentation des
coûts de tests et d’évolution.
Confidentiel - Ce document est la propriété de Kalistick 9/61
10. Audit de code de l’application SharpDevelop 01/01/2011
4 Synthèse des résultats
Ce chapitre synthétise la situation du projet à l’aide d’indicateurs globaux. Ceux-ci mesurent la qualité
intrinsèque du projet, mais comparent également sa situation à celle des autres projets de la base de
référence du « Cockpit Qualité ».
4.1 Situation du projet
Les indicateurs suivants concernent la situation intrinsèque du projet.
4.1.1 Taux de non-conformité global
Le taux de non-conformité mesure la proportion du code de l’application considéré comme non-conforme.
Voir sur le Cockpit Qualité
Plus précisément, ce chiffre résulte du rapport entre le nombre total d’instructions, et le
nombre d’instructions des classes non-conformes. Une classe est considérée comme non
conforme si au moins un des cas suivants est rencontré :
- Une non-conformité de sévérité interdite est détectée dans la classe
- Un ensemble de non-conformités fortement déconseillées, déconseillées, ou à éviter sont
détectées dans la classe et dépassent un certain seuil. Ce calcul dépend de la sévérité de chaque
non-conformité ainsi que du profil qualité qui ajuste le seuil de tolérance.
Confidentiel - Ce document est la propriété de Kalistick 10/61
11. Audit de code de l’application SharpDevelop 01/01/2011
4.1.2 Ecart par rapport à l’objectif
Ce graphique résume l’écart entre l’objectif visé tel que représenté par le profil qualité et la situation actuelle
du projet. Cet écart est présenté pour chacun des axes de qualité :
Voir sur le Cockpit Qualité
Le niveau de non-conformité est calculé pour chaque axe de qualité, puis pondéré en
fonction du niveau d’exigence fixé pour l’axe concerné.
Axe de qualité Classes Violations impactantes % application
Efficacité 159 283 42%
Evolutivité 429 1794 84%
Fiabilité 425 1925 84%
Maintenabilité 54 339 18%
Sécurité 0 0 0%
Transférabilité 51 180 25%
[Total] 480 2286 87%
Les résultats détaillés précisent pour chaque axe de qualité : le nombre de classes non-
conformes, le nombre de violations des règles sélectionnées, et le pourcentage de l’application
présent dans les classes concernées.
Confidentiel - Ce document est la propriété de Kalistick 11/61
12. Audit de code de l’application SharpDevelop 01/01/2011
4.1.3 Origine des non-conformités
Le graphique suivant montre la répartition des non-conformités selon leur origine technique :
Voir sur le Cockpit Qualité
Ce graphique compare chaque domaine selon l’impact des règles qui lui sont associées sur
la qualité de l’application. L’impact est mesuré à partir du nombre d’instructions des classes non-
conformes.
4.1.4 Volumétrie
Le tableau suivant précise la volumétrie de l’application analysée :
Métrique Valeur Tendance
Nombre de lignes 70895 +0,14%
Nombre d'instructions 48877 +0,15%
Nombre de méthodes 7568 +0,36%
Nombre de classes 975 +0,21%
Nombre de packages 48 =
Voir sur le Cockpit Qualité
Une « ligne » correspond à une ligne physique d'un fichier de code. Elle peut concerner une
ligne blanche, ou une ligne de commentaire. Une « instruction » représente une unité de code
primaire, elle peut s’écrire sur plusieurs lignes, mais une ligne peut également contenir plusieurs
instructions. Pour simplifier, une instruction est délimitée par un point-virgule (;) ou par une
accolade gauche ({).
Confidentiel - Ce document est la propriété de Kalistick 12/61
13. Audit de code de l’application SharpDevelop 01/01/2011
4.2 Benchmarking
La base de connaissance du « Cockpit Qualité » permet de réaliser une analyse comparative du projet avec
les autres projets analysés sur la plateforme. L’objectif est de mesurer son niveau de qualité par rapport à
une moyenne générale.
Cette comparaison « benchmarking » est proposée par rapport à deux catégories de projets :
Les projets « intra-Cockpit » : les projets analysés en continu sur la plateforme, donc, à priori, avec
un niveau de qualité supérieur à la moyenne
Les projets « extra-Cockpit » : les projets analysés ponctuellement sur la plateforme, en mode audit,
donc avec un niveau de qualité très hétérogène.
NB : chaque projet disposant d’un profil qualité qui lui est spécifique, on ne compare pas l’écart en fonction
de l’objectif, mais à l’aide de caractéristiques brutes, afin de donner des points de repère.
4.2.1 Comparaison sur les problèmes d’implémentation
Le graphique suivant présente la situation du projet dans le domaine implémentation par rapport aux projets
« extra-Cockpit », donc analysés ponctuellement sur la plateforme. Pour chaque niveau de sévérité, le niveau
de qualité du projet est positionné par rapport aux autres :
Voir sur le Cockpit Qualité
Confidentiel - Ce document est la propriété de Kalistick 13/61
14. Audit de code de l’application SharpDevelop 01/01/2011
Le projet est positionné par rapport aux autres projets selon son taux de violations pour
chaque règle. La répartition est basée sur la méthode des quartiles, trois groupes sont
distingués, « Meilleur » : les 25% de projets les meilleurs, « Dans la moyenne » : les 50% de
projets médians, « Moins bon » : les 25% de projets les moins bons. Cette information est
synthétisée ensuite par niveau de sévérité. Plus le rouge domine plus le problème est important.
Les règles d’implémentation comparées ne sont pas forcément les mêmes selon les profils
de qualité, mais on compare ici les règles selon leur niveau de sévérité défini pour chaque projet.
Le graphique suivant propose la même analyse, mais cette fois avec les projets « intra-Cockpit », analysés en
continu sur la plateforme, donc avec un niveau de qualité normalement supérieur à la moyenne car dans un
processus d’amélioration où les violations détectées sont corrigées :
Voir sur le Cockpit Qualité
Une couleur rouge dominante indique que les autres projets tendent à corriger les
violations détectées sur ce projet.
Confidentiel - Ce document est la propriété de Kalistick 14/61
15. Audit de code de l’application SharpDevelop 01/01/2011
4.2.2 Cartographie de la structure
Le graphique suivant compare la cartographie de la taille des méthodes du projet avec celle des autres
projets, « intra-Cockpit » et « extra-Cockpit », en comparant la proportion de l’application (en pourcentage
d’instructions) qui est située dans des blocs de traitement (méthodes) avec un nombre d’instructions élevé :
Voir sur le Cockpit Qualité
Une proportion importante de l’application dans la zone droite est un indicateur de coûts
de maintenance et d’évolution plus importants.
NB : l’application analysée est indiquée sous le terme « Release ».
Confidentiel - Ce document est la propriété de Kalistick 15/61
16. Audit de code de l’application SharpDevelop 01/01/2011
Une cartographie similaire est proposée à partir de la complexité cyclomatique4 des méthodes, en
comparant la proportion de l’application (en pourcentage d’instructions) qui est située dans des blocs de
traitement (méthodes) complexes :
Voir sur le Cockpit Qualité
Une proportion importante de l’application dans la zone droite indique non-seulement des
coûts de maintenance et d’évolution plus importants, mais également des problèmes de fiabilité
car ce code est difficile à tester.
4.2.3 Comparaison des principales métriques
Le tableau suivant compare le projet avec les autres projets, « intra-Cockpit » et « extra-Cockpit », sur les
principales métriques liées à la structure du code. Les intervalles de valeurs recommandées sont fournis à
titre d’information.
Métrique Project Extra-Cockpit Intra-Cockpit Intervalle recommandé
Classes par package 20,31 10,48 10,9 6 - 26
Méthodes par classe 7,76 7,78 7,58 4 - 10
Lignes de code par méthode 6,46 12,76 10,85 7 - 13
Complexité par ligne de code 0,31 0,22 0,15 0.16 - 0.24
Voir sur le Cockpit Qualité
4
La complexité cyclomatique mesure la complexité algorithmique du code, et donc sa facilité à le tester, cf.
http://classes.cecs.ucf.edu/eel6883/berrios/notes/Paper%204%20(Complexity%20Measure).pdf
Confidentiel - Ce document est la propriété de Kalistick 16/61
17. Audit de code de l’application SharpDevelop 01/01/2011
4.3 Modélisation de l’application
Pour faciliter la restitution des résultats d’analyse, l’application est modélisée sous deux angles: un angle
fonctionnel pour mieux identifier les fonctionnalités métier de l’application et les rattacher au code, et un
angle technique pour vérifier l’architecture technique de l’application.
Ces modèles sont construits à l’aide de l’assistant de modélisation disponible au sein du Cockpit. Vous
pouvez modifier ces modèles sur les pages Modélisation fonctionelle et Architecture technique (selon
vos droits utilisateurs).
4.3.1 Modèle fonctionnel
Le modèle fonctionnelle représente la vue métier de l’application, compréhensible par l’ensemble des
acteurs du projet.
Voir sur le Cockpit Qualité
Le modèle fonctionnel est constitué de « modules » qui représente chacun une
fonctionnalité métier, ou un groupe de fonctionnalité. Ces modules ont été identifiés à partir d’un
corpus lexical généré à partir du code de l’application et qui permet d’isoler le vocabulaire métier
de l’application.
Confidentiel - Ce document est la propriété de Kalistick 17/61
18. Audit de code de l’application SharpDevelop 01/01/2011
4.3.2 Modèle technique
Le modèle technique représente l’architecture du code de l’application. Le principe consiste à définir un
modèle d’architecture cible, qui identifie des couches et/ou des composants techniques au sein de
l’application, puis établit des contraintes pour autoriser ou interdire les communications entre chacun de ces
éléments.
L’objectif est triple :
Homogénéiser le comportement d'une application. Par exemple s'assurer que les écritures de logs
utilisent telle API spécifique, que les accès aux données passent par telle couche, que telle librairie
ne soit utilisée que par tel composant, ...
Assurer l'étanchéité de certains composants pour faciliter leur évolution et limiter les effets
imprévus, mais aussi les rendre mutualisables avec d'autres applications. Les cycles de dépendances
sont par exemple proscrits.
Eviter les failles de sécurité en s'assurant par exemple que des appels directs vers une couche
d'accès aux données ne sont jamais réalisés sans passer par une couche métier qui serait
responsable de contrôles de validation
Le résultat de l’analyse des contraintes d’architecture est présenté dans le chapitre 5.5 Architecture.
Confidentiel - Ce document est la propriété de Kalistick 18/61
19. Audit de code de l’application SharpDevelop 01/01/2011
Voir sur le Cockpit Qualité
Les flèches vertes formalisent des communications autorisées entre modules, tandis que
les flèches rouges formalisent des communications proscrites.
Confidentiel - Ce document est la propriété de Kalistick 19/61
20. Audit de code de l’application SharpDevelop 01/01/2011
5 Résultats détaillés
Ce chapitre détaille les résultats en ciblant plus précisément les règles et les éléments de code non-
conformes. Une analyse domaine par domaine est proposée.
5.1 Détail par axes de qualité
L’histogramme suivant complète l’analyse synthétique en détaillant le taux de non-conformité ainsi que le
nombre de classes non-conformes pour chaque axe de qualité. Pour rappel, le taux de non-conformité est
basé sur le volume d’instructions des classes non-conformes par rapport au volume d’instructions global du
projet.
Ces taux de non-conformité dépendent directement du profil qualité du et du niveau des exigences qui ont
été sélectionnées :
Voir sur le Cockpit Qualité
Une même classe pouvant être non-conforme sur plusieurs axes, le total ne correspond pas
nécessairement à la somme des axes.
Confidentiel - Ce document est la propriété de Kalistick 20/61
21. Audit de code de l’application SharpDevelop 01/01/2011
5.2 Implémentation
Le domaine Implémentation couvre les règles se rapportant aux techniques de codage. Contrairement aux
autres domaines, ces règles sont souvent spécifiques aux caractéristiques du langage (Java / C#). Elles
identifient par exemple :
des bugs potentiels : variables non initialisées, problèmes d’accès concurrents, appels récursifs, …
des optimisations en terme mémoire ou CPU
des failles de sécurité
des utilisations de code obsolètes
des écritures s’écartant des standards recommandés
…
Les règles d’implémentations sont les plus nombreuses au sein des exigences techniques. Elles sont ici
nommées « pratiques ».
5.2.1 Répartition par sévérité
L’objectif de cet indicateur est d’identifier la sévérité des pratiques qui ont provoqué l’invalidation des
classes. On restreint ici les niveaux de sévérité à deux niveaux : les pratiques interdites (niveau de sévérité
Interdit) et les pratiques déconseillées (niveaux de sévérité Fortement déconseillé, Déconseillé et A éviter).
Le graphique suivant compare le nombre de classes invalidées en implémentation, selon les pratiques qui ont
participé à cette invalidation :
Si une classe ne viole que des pratiques interdites, elle est dans le groupe « Pratiques interdites »
Si une classe ne viole que des pratiques déconseillées, elle est dans le groupe « Pratiques
déconseillées »
Sinon, elle viole des pratiques des deux catégories et se trouve dans le groupe « Pratiques
déconseillées et interdites »
Voir sur le Cockpit Qualité
Confidentiel - Ce document est la propriété de Kalistick 21/61
22. Audit de code de l’application SharpDevelop 01/01/2011
L’effort de correction lié aux pratiques interdites est généralement moins important par
rapport aux sévérités inférieures : une seule violation interdite suffit à générer une non-
conformité alors qu’il en faut plusieurs non interdites pour générer une non-conformité, en
fonction des seuils de tolérance.
Le tableau suivant détaille le graphique en introduisant la notion de « violation impactante ». Une violation
impactante est une violation dont la correction permet de corriger totalement ou partiellement la non-
conformité d’une classe. En effet, en raison des seuils de tolérance associés aux niveaux de sévérité, la
correction de certaines violations n’a aucune influence sur la non-conformité globale de la classe.
Sévérité Violations Nouvelles Violations Autres
impactantes violations corrigées violations
Interdit 382 5 0 0
Fortement déconseillé 176 1 0 55
Déconseillé 81 5 2 336
A éviter 202 1 1 340
Les colonnes « Nouvelles violations » et « Violations corrigées » ne sont pertinentes que
dans le cas où l’audit fait suite à un audit précédent.
Confidentiel - Ce document est la propriété de Kalistick 22/61
23. Audit de code de l’application SharpDevelop 01/01/2011
5.2.2 Pratiques à corriger en priorité
Les deux tableaux suivants fournissent la liste des pratiques interdites et fortement déconseillées détectées
dans l’application. Ce sont généralement les règles à corriger en priorité.
Ces tableaux proposent pour chaque pratique le nombre de nouvelles violations (si un audit précédent a été
réalisé), le nombre de violations au total pour cette pratique, le nombre de classes non-conformes où cette
pratique a été détectée et le pourcentage d’instructions de ces classes par rapport au volume d’instruction
global du projet.
Ces chiffres permettent d’établir un plan d’action en fonction de l’impact associé à chaque pratique.
5.2.2.1 Pratiques interdites
Pratique Nouvelles Violations Classes %
NC application
AvoidRedundantCasts 1 124 83 29%
ImplementIDisposableForTypesWithDisposableFields 0 103 64 13%
DontHardcodeLocaleSpecificStrings 2 81 56 14%
UseConstInsteadOfReadOnlyWhenPossible_ 0 33 10 4%
UseIsNullOrEmptyToCheckEmptyStrings 0 12 9 4%
OverrideEqualsWithOperatorOnValueTypes 0 11 11 4%
PropertyNamesMustNotMatchGetMethods 0 6 5 1%
InstantiateExceptionsWithArguments 0 5 4 2%
DontImplementWriteOnlyProperty 0 3 3 1%
DefineMessageForObsoleteAttribute 2 2 2 1%
DontUseInadvisableTypes 0 1 1 1%
DontRaiseExceptionInUnexpectedMethod_ 0 1 1 1%
Voir sur le Cockpit Qualité
Confidentiel - Ce document est la propriété de Kalistick 23/61
24. Audit de code de l’application SharpDevelop 01/01/2011
5.2.2.2 Pratiques fortement déconseillées
Pratique Nouvelles Violations Classes %
NC application
NeverMakeCtorCallOverridableMethod 0 185 48 10%
DontUseNonConstantStaticVisibleFields 1 26 11 3%
OverrideMethodsInIComparableImplementations 0 9 6 2%
DefineAttributeForISerializableTypes 0 7 5 3%
DontNestGenericInMemberSignatures_ 0 3 2 2%
DontIgnoreMethodsReturnValue 0 1 1 1%
Voir sur le Cockpit Qualité
5.2.3 Classes à corriger en priorité sur les problèmes d’implémentation
Les deux tableaux suivants fournissent une vision complémentaire concernant l’impact des problèmes
d’implémentation en détaillant la liste des principales classes concernées par des pratiques interdites ou
fortement déconseillées.
Pour chaque classe sont associés le nombre de violations existantes (pratiques interdites ou fortement
déconseillées), le nombre de nouvelles violations (si un audit précédent a été réalisé), et l’état de conformité
de la classe.
Confidentiel - Ce document est la propriété de Kalistick 24/61
26. Audit de code de l’application SharpDevelop 01/01/2011
5.2.3.2 Classes avec des pratiques fortement déconseillées
Classe NC Nouvelles Violations Instructions
ICSharpCode.SharpDevelop.Gui.ExtTreeNode Oui 0 69 248
ICSharpCode.SharpDevelop.Gui.ClassBrowser.MemberNode Oui 0 12 72
ICSharpCode.SharpDevelop.Gui.XmlForms.XmlForm Oui 0 12 22
ICSharpCode.SharpDevelop.Dom.HostCallback Oui 1 9 19
ICSharpCode.SharpDevelop.Dom.ReflectionLayer.ReflectionClass Oui 0 8 102
ICSharpCode.SharpDevelop.Dom.ExpressionContext Oui 0 6 142
ICSharpCode.SharpDevelop.Dom.ReflectionLayer.ReflectionMethod Oui 0 5 41
ICSharpCode.SharpDevelop.Project.Dialogs.NewProjectDialog Oui 0 4 274
ICSharpCode.SharpDevelop.Project.FileNode Oui 0 4 155
ICSharpCode.SharpDevelop.Gui.NewFileDialog Oui 0 3 378
ICSharpCode.SharpDevelop.Project.ProjectNode Oui 0 3 114
ICSharpCode.SharpDevelop.Dom.DefaultEvent Oui 0 3 43
ICSharpCode.SharpDevelop.Dom.ReflectionLayer.ReflectionParame Oui 0 3 14
ter
ICSharpCode.SharpDevelop.Dom.DefaultProperty Oui 0 3 62
ICSharpCode.SharpDevelop.Dom.DefaultMethod Oui 0 3 84
ICSharpCode.SharpDevelop.Dom.DefaultProjectContent Oui 0 2 554
ICSharpCode.SharpDevelop.Internal.Templates.FileTemplate Oui 0 2 124
ICSharpCode.SharpDevelop.Dom.DefaultParameter Oui 0 2 76
ICSharpCode.Core.MenuCommand Oui 0 2 85
Voir sur le Cockpit Qualité
5.3 Structure
Le domaine Structure cible les règles se rapportant à la structuration du code, par exemple :
La taille des méthodes
La complexité cyclomatique des méthodes
Le couplage, ou la dépendance des méthodes par rapport aux classes extérieures
L’objectif est de s’assurer que le code est structuré de telle manière qui puisse être facilement maintenu,
testé, et qu’il puisse évoluer.
Ces règles sont des « métriques ». Elles mesurent des valeurs (p. ex. : un nombre d’instructions) et sont
conditionnées par des seuils (p. ex. : 100 instructions / méthode). Seules les métriques qui offrent un levier
d’action facile à comprendre et à mettre en œuvre sont proposées ici. Elles s’appliquent toutes à des
méthodes.
Confidentiel - Ce document est la propriété de Kalistick 26/61
27. Audit de code de l’application SharpDevelop 01/01/2011
5.3.1 Typologie des problèmes de structure
Cet histogramme montre pour chaque règle de structure le nombre de non-conformités (donc de méthodes)
ainsi que le pourcentage du volume d’instructions concernées par rapport au volume global de l’application :
Voir sur le Cockpit Qualité
Le pourcentage d’instructions représenté est intéressant dans la mesure où on constate
souvent qu’un petit nombre de méthodes concentrent une grosse partie du code de l’application.
Si des règles ont été configurées pour ne pas être prises en compte dans l’audit, elles sont
affichées dans ce graphe mais sans aucun résultat.
Une méthode peut-être concernée par plusieurs règles, en conséquence le total ne
correspond pas à la somme des chiffres.
Le tableau suivant complète cette vision en introduisant le nombre de nouvelles violations et le nombre de
violations corrigées dans le cas où un audit précédent aurait été réalisé :
Confidentiel - Ce document est la propriété de Kalistick 27/61
28. Audit de code de l’application SharpDevelop 01/01/2011
Anomalie Violation Nouvelles Violations NC
s violations corrigées
impactant
es
Complexité cyclomatique supérieure à 20 41 1 0 5%
Voir sur le Cockpit Qualité
5.3.2 Cartographie des méthodes par taille
L’histogramme suivant présente une cartographie des méthodes de l’application selon leur taille. La taille est
exprimée en nombre d’instructions pour faire abstraction du format d’écriture (conventions de styles
appliquées sur le projet).
Le dernier intervalle identifie les méthodes dont le nombre d’instructions dépasse le seuil fixé. Ces méthodes
sont considérées comme non-conformes car elles sont généralement difficiles à maintenir et à faire évoluer,
et montrent également une forte propension à faire apparaître des bugs, car elles sont difficilement
testables.
Le pourcentage d’instructions est fourni car les méthodes les plus grosses concentrent généralement une
part importante de l’application :
Voir sur le Cockpit Qualité
Le tableau suivant détaille les principales méthodes non-conformes, identifiées dans le dernier intervalle du
graphique précédent :
Confidentiel - Ce document est la propriété de Kalistick 28/61
29. Audit de code de l’application SharpDevelop 01/01/2011
Méthode Instructions Lignes Complexité Nouvelle
violation
5.3.3 Cartographie des méthodes par complexité
L’histogramme suivant présente une cartographie des méthodes de l’application selon leur complexité
cyclomatique (cf 8.1 La complexité cyclomatique).
La complexité cyclomatique est une mesure qui permet de caractériser la complexité d’un bloc de code, en
s’intéressant aux différents chemins d’exécution possibles. Ce concept a été standardisé par Mc Cabe5 mais
plusieurs modes de calcul existent. Celui retenu ici est l’un des plus répandus et l’un des plus simples : il
consiste à compter le nombre d’opérateur d’embranchements (if, for, while, ?, …) et de conditions ( ??,
&&, …).
Le dernier intervalle identifie les méthodes dont la complexité dépasse le seuil fixé. Ces méthodes sont
considérées comme non-conformes pour les mêmes raisons que pour les méthodes trop longues : elles sont
généralement difficiles à maintenir et à faire évoluer, et montrent également une forte propension à faire
apparaître des bugs.
Le pourcentage d’instructions ainsi que le pourcentage de complexité sont fournis car les méthodes les plus
complexes concentrent généralement une part importante de l’application.
Voir sur le Cockpit Qualité
Le tableau suivant détaille les principales méthodes non-conformes, identifiées dans le dernier intervalle du
graphique précédent :
5
1976, IEEE Transactions on Software Engineering: 308–320.
http://classes.cecs.ucf.edu/eel6883/berrios/notes/Paper%204%20(Complexity%20Measure).pdf.
Confidentiel - Ce document est la propriété de Kalistick 29/61
31. Audit de code de l’application SharpDevelop 01/01/2011
ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRef 53 81 28
actoryResolver.ResolveIdentifierInternal ( System.String)
ICSharpCode.SharpDevelop.Commands.ToolMenuBuilder.To 54 74 26
olEvt ( System.Object, System.EventArgs)
ICSharpCode.SharpDevelop.Dom.MemberLookupHelper.Get 32 51 26
BetterFunctionMember (
ICSharpCode.SharpDevelop.Dom.IReturnType[],
ICSharpCode.SharpDevelop.Dom.IMethodOrProperty,
ICSharpCode.SharpDevelop.Dom.IReturnType[],
System.Boolean,
ICSharpCode.SharpDevelop.Dom.IMethodOrProperty,
ICSharpCode.SharpDevelop.Dom.IReturnType[],
System.Boolean)
ICSharpCode.SharpDevelop.Dom.CSharp.CSharpExpression 51 68 26
Finder.FindFullExpression ( System.String, System.Int32)
ICSharpCode.SharpDevelop.Dom.CSharp.CSharpExpression 58 76 25
Finder.ReadNextToken ( )
5.3.4 Cartographie des méthodes selon leur complexité et leur couplage efférent
Cette règle vise à identifier les méthodes dont le code présente de nombreuses dépendances vers d’autres
classes que la classe courante. La notion de « couplage efférent » correspond à ces dépendances
« sortantes ».
Le principe est qu’une méthode accusant un fort couplage efférent est difficile à comprendre, à maintenir et
à tester d’une part parce qu’elle nécessite la connaissance des différents types tiers dépendants, d’autre par
parce que son risque de déstabilisation est plus élevé en raison de ses dépendances.
Cette règle est croisée avec la complexité cyclomatique afin d’ignorer certaines méthodes triviales, par
exemple des méthodes d’initialisation d’interfaces graphiques qui font appels à de nombreuses classes de
composants graphiques sans présenter de réelle complexité.
Cette règle considère donc qu’une méthode est non-conforme si elle excède un seuil de couplage efférent et
un seuil de complexité cyclomatique.
Confidentiel - Ce document est la propriété de Kalistick 31/61
32. Audit de code de l’application SharpDevelop 01/01/2011
Le graphique suivant présente une cartographie des méthodes selon leur complexité et leur couplage
efférent. Chaque point représente une ou des méthodes avec les mêmes valeurs de complexité et de
couplage. Ils sont répartis dans quatre zones selon leur état par rapport aux deux seuils :
La zone en bas à gauche (points verts) contient des méthodes conformes qui n’ont atteint aucun des
deux seuils
La zone en bas à droite (points gris) contient des méthodes conformes ; elles ont atteint le seuil de
complexité, mais restent en-dessous du seuil de couplage
La zone en haut à gauche (points gris) contient des méthodes conformes ; elles ont atteint le seuil de
couplage, mais restent en-dessous du seuil de complexité
La zone en haut à droite (points rouges) contient les méthodes non-conformes car les deux seuils
sont atteints
Voir sur le Cockpit Qualité
L’intensité de la couleur des points dépend du nombre de méthodes partageant les mêmes
valeurs en complexité et en couplage : plus la couleur du point est marquée, plus il y a de
méthodes concernées.
Confidentiel - Ce document est la propriété de Kalistick 32/61
33. Audit de code de l’application SharpDevelop 01/01/2011
L’histogramme suivant fournit une vision complémentaire de cette cartographie et précise les chiffres pour
les quatre zones, en termes de pourcentage des méthodes de l’application et en termes de pourcentage du
nombre d’instructions total de l’application. Les dernières barres correspondent à la zone de non-
conformité :
Voir sur le Cockpit Qualité
Le tableau suivant détaille les principales méthodes non-conformes :
Confidentiel - Ce document est la propriété de Kalistick 33/61
35. Audit de code de l’application SharpDevelop 01/01/2011
Voir sur le Cockpit Qualité
5.4 Test
Le domaine Test propose des règles pour s’assurer que l’application est suffisamment testée,
quantitativement mais surtout qualitativement, c.-à-d. que les tests ciblent les zones à risques.
5.4.1 Problématiques
Il est important de situer les problématiques inhérentes à la gestion des tests afin de comprendre les
résultats d’analyse pour ce domaine.
5.4.1.1 Tests unitaires et couverture de code
Les résultats de ce domaine dépendent du processus de test appliqué sur le projet : si processus de tests
unitaires automatisés et/ou de la couverture de code sont mis en œuvre sur le projet, alors l’analyse
exploite les résultats de ces processus.
Pour rappel, il faut bien distinguer test unitaire et couverture de code :
Un test unitaire est un test automatisé, qui teste généralement une méthode. Mais cette
méthode ayant généralement des dépendances vers d’autres méthodes ou classes, un test
unitaire peut tester un ensemble plus ou moins important de l’application (et plus cet ensemble
est large, moins le test est pertinent)
La couverture de code mesure le volume de code réellement exécuté suite à des tests, en
identifiant précisément chaque élément de code exécuté (instruction, branche conditionnelle,
fonction, …). Ces tests peuvent être des tests unitaires (automatisés), ou des tests d’intégration /
fonctionnels (manuels ou automatisés).
La couverture de code est intéressante à combiner aux tests unitaires car c’est le seul moyen de mesurer le
code réellement testé. Cependant, beaucoup de projets ne vérifient toujours pas la couverture du code, ce
qui ne permet pas de vérifier la qualité des tests dans ce type d’analyse.
Les indicateurs présentés par la suite permettent d’adresser les différents cas, que le projet mette en œuvre
ou non des tests unitaires ou de la couverture de code.
5.4.1.2 Pertinence de la couverture de code
La couverture de code fournit des chiffres précisant la proportion du code exécuté suite à des tests, par
exemple 68% des instructions d’une méthode sont couvertes, 57% des instructions du projet.
Le problème est que ces chiffres ne tiennent pas compte de la pertinence à tester le code. Par exemple une
couverture de 70% de l’application est un bon chiffre, mais le code couvert peut être trivial et sans réel
intérêt pour les tests (par exemple les accesseurs ou du code généré), alors que le code sensible pourra se
trouver dans les 30% non couverts.
Confidentiel - Ce document est la propriété de Kalistick 35/61
36. Audit de code de l’application SharpDevelop 01/01/2011
L’analyse réalisée ici tient compte de la pertinence à tester chaque méthode, ce qui permet de calibrer les
exigences de couverture de code et de fixer des exigences en termes de seuil de couverture qui utilisent au
mieux l’effort de test en l’orientant sur les zones à risques.
5.4.2 Les métriques TestRelevancyIndex (TRI) et TestEffortIndex (TEI)
Pour affiner l’analyse des tests, deux nouvelles métriques ont été conçues par le Centre d’Excellence en
Technologies de l’Information et de la Communication (CETIC) en s’appuyant sur les recherches effectuées
durant les 20 dernières années et à partir de la base de connaissances du « Cockpit Qualité »6.
Le TestRelevancyIndex (TRI) mesure la pertinence à tester une méthode selon ses risques techniques et ses
risques fonctionnels.
Le risque technique évalue la probabilité de trouver un défaut, il est basé sur différentes métriques qui les
favorisent telles que la complexité cyclomatique, le nombre de variables, de paramètres, le couplage
efférent, le nombre de non-conformités cumulé, …
Le risque fonctionnel associe un facteur de risque aux différents groupes de traitements fonctionnels que
l’on souhaite tester en priorité (risque majoré) ou à l’inverse ne pas tester (risque minoré). Il doit être
déterminé au début de l’audit pour être pris en compte dans les calculs de TRI. L’objectif est d’orienter
l’effort de test sur les fonctionnalités importantes.
Pour cela, le TRI permet de classer les méthodes selon une échelle de priorité de tests, et donc de bien
distinguer les méthodes réellement pertinentes à tester des méthodes triviales et sans intérêt sur ce
domaine. Pour chaque niveau de l’échelle, un seuil de couverture de code à atteindre peut être fixé
indépendamment. Ceci permet de définir un seuil exigeant pour des méthodes critiques, et un seuil bas pour
des méthodes à priorité basse.
Le TestEffortIndex (TEI) complète le TRI en mesurant le niveau d’effort pour tester une méthode. Comme le
TRI, il est basé sur un ensemble de métriques unitaires caractérisant la méthode. Il permet d’affiner les
décisions pour sélectionner le code à tester en mettant dans la balance l’effort à fournir par rapport à la
pertinence de test.
Le détail du calcul de ces deux index est fourni en annexe (8.2 Le couplage).
5.4.3 Cartographie des méthodes par priorité de test
L’histogramme suivant présente une cartographie des méthodes selon leur priorité de tests, à l’aide d’une
échelle de quatre niveaux basée sur le TRI des méthodes (chaque niveau correspondant à un intervalle de
TRI).
Cette cartographie exploite les informations de couverture de code seulement si elles ont été fournies pour
l’analyse. Pour chaque niveau de priorité est indiqué :
Le taux de couverture moyen (0 si les informations de couverture n’ont pas été fournies)
Le nombre de méthodes non couvertes (aucune couverture)
6
CETIC, Kalistick. Statistically Calibrated Indexes for Unit Test Relevancy and Unit Test Writing Effort, 2010
Confidentiel - Ce document est la propriété de Kalistick 36/61
37. Audit de code de l’application SharpDevelop 01/01/2011
Le nombre de méthodes insuffisamment couvertes (taux de couverture inférieur au taux fixé en
objectif pour ce niveau de priorité)
Le nombre de méthodes suffisamment couvertes (taux de couverture supérieur ou égal au taux fixé
en objectif pour ce niveau de priorité)
Le tableau suivant détaille ces chiffres pour chaque niveau de priorité, en ajoutant également un cinquième
niveau correspondant aux méthodes sans priorité de test :
Priorité de test Couvertes Non couvertes Insuffisamment
couvertes
Critique 0 1373 0
Haute 0 515 0
Moyenne 0 10 0
Basse 0 14 0
Aucune 0 5656 0
[Total] 0 7568 0
Voir sur le Cockpit Qualité
5.4.4 Couverture de l’application par les tests
Ce graphique, appelé « TreeMap », restitue une vision de la couverture de l’application par les tests par
rapport aux objectifs. Il permet d’identifier facilement les parties de l’application qui ne sont pas assez
testées par rapport aux risques identifiés. Il regroupe les classes du projet par sous-ensembles techniques, et
les caractérise selon deux dimensions :
la taille, qui dépend de leur nombre d'instructions
la couleur, qui représente l'écart par rapport à l'objectif de test fixé pour la classe : la couleur rouge
indique que le taux de couverture actuel est loin de l’objectif, la couleur verte indique que l’objectif
est atteint
Confidentiel - Ce document est la propriété de Kalistick 37/61
38. Audit de code de l’application SharpDevelop 01/01/2011
Voir sur le Cockpit Qualité
Une classe peut être de couleur verte même si elle n’est pas ou peu testée, par exemple
pour des classes avec une faible probabilité de défauts ou un risque fonctionnel réduit.
Inversement, une classe déjà bien testée peut être indiquée comme insuffisante (rouge/brun) si
son objectif est très exigeant.
Une stratégie efficace pour améliorer sa couverture consiste à se concentrer sur les classes
de taille importantes et proches de l’objectif.
5.4.5 Classes les plus importantes à tester (Top Risks)
Le graphique suivant permet d’identifier rapidement les classes les plus pertinentes à tester, les « Top
Risks ». C’est une représentation dite en « nuage », qui affiche les classes à l’aide de deux dimensions :
La taille du nom de classe dépend de son intérêt à être testée (valeur de TRI cumulée pour toutes ses
méthodes)
La couleur représente l'écart par rapport à l'objectif de couverture fixé pour la classe, tout comme
pour le TreeMap précédent
Confidentiel - Ce document est la propriété de Kalistick 38/61
39. Audit de code de l’application SharpDevelop 01/01/2011
Voir sur le Cockpit Qualité
Cette représentation permet d’identifier les éléments critiques, mais si l’on souhaite tenir
compte de l’effort d’écriture des tests il faut privilégier la représentation suivante pour
sélectionner les éléments à corriger.
5.4.6 Classes les plus importantes à tester et demandant le moins d’effort (Quick Wins)
Les « Quick Wins » complémente les « Top Risks » en tenant compte de l’effort de test à fournir pour tester
la classe (TEI) :
La taille du nom de classe dépend de son intérêt à être testée (TRI), mais pondéré par l’effort
nécessaire (TEI cumulé pour toutes ses méthodes) : une classe avec un fort TRI et un fort TEI (donc
difficile à tester) apparaît plus petite qu’une classe avec un TRI moyen mais un faible TEI
La couleur représente l'écart par rapport à l'objectif de couverture fixé pour la classe, tout comme
pour le TreeMap ou les QuickWins
Confidentiel - Ce document est la propriété de Kalistick 39/61
40. Audit de code de l’application SharpDevelop 01/01/2011
Voir sur le Cockpit Qualité
5.4.7 Méthodes à tester en priorité
Le tableau suivant détaille les principales méthodes à tester en priorité. A chaque méthode sont associés son
taux de couverture actuel, sa valeur brute de TRI, et son niveau de TEI échelonnée de 0 à 4 :
Confidentiel - Ce document est la propriété de Kalistick 40/61
42. Audit de code de l’application SharpDevelop 01/01/2011
ICSharpCode.SharpDevelop.Dom.NRefactoryResolver. 0% 35.00 Critique Très élevé
NRefactoryResolver.ResolveInternal (
ICSharpCode.NRefactory.Ast.Expression,
ICSharpCode.SharpDevelop.Dom.ExpressionContext)
ICSharpCode.SharpDevelop.Dom.NRefactoryResolver. 0% 35.00 Critique Très élevé
TypeVisitor.CreateReturnType (
ICSharpCode.NRefactory.Ast.TypeReference,
ICSharpCode.SharpDevelop.Dom.IClass,
ICSharpCode.SharpDevelop.Dom.IMember,
System.Int32, System.Int32,
ICSharpCode.SharpDevelop.Dom.IProjectContent,
System.Boolean)
ICSharpCode.SharpDevelop.Dom.CSharp.CSharpExpre 0% 35.00 Critique Elevé
ssionFinder.SearchBracketForward ( System.String,
System.Int32, System.Char, System.Char)
ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.A 0% 35.00 Critique Elevé
bstractCodeCompletionDataProvider.CreateItem (
System.Object,
ICSharpCode.SharpDevelop.Dom.ExpressionContext)
ICSharpCode.SharpDevelop.Project.MSBuildEngine.Bu 0% 34.00 Critique Normal
ildRun.ParseSolution (
Microsoft.Build.BuildEngine.Project)
ICSharpCode.SharpDevelop.Project.ProjectService.Loa 0% 34.00 Critique Elevé
dProject ( System.String)
ICSharpCode.SharpDevelop.Project.ProjectBrowserCo 0% 34.00 Critique Elevé
ntrol.FindDeepestOpenNodeForPath ( System.String)
Voir sur le Cockpit Qualité
5.5 Architecture
Le domaine Architecture vise à contrôler le respect d’un modèle d’architecture logicielle. Le modèle
d’architecture cible a été présenté dans le chapitre 4.3.2 Modèle technique. Le schéma suivant montre les
résultats de l’analyse des contraintes d’architecture en comparant ce modèle cible avec le code de
l’application.
Actuellement, les violations des contraintes d’architecture ne sont pas prises en compte
dans le calcul de la non-conformité de l’application.
Confidentiel - Ce document est la propriété de Kalistick 42/61
43. Audit de code de l’application SharpDevelop 01/01/2011
Voir sur le Cockpit Qualité
Les violations de contraintes de communication entre deux éléments sont représentées à
l’aide de flèches. Le point de départ est l’élément appelant, le point de destination est l’appelé.
Les flèches oranges concernent une communication directe entre une couche haute et une
couche basse non adjacente (parfois acceptables). Les flèches noires concernent des
communications totalement prohibées.
5.6 Duplication
Le domaine Duplication concerne les « copier-coller » identifiés au sein de l’application. Pour éviter les
nombreux faux-positifs dans ce domaine, seuls sont remontés les blocs dupliqués impliquant un seuil
minimal d’instructions.
Les duplications sont à proscrire pour de multiples raisons : problèmes de maintenance et d’évolutivité, coûts
de tests, défaut de fiabilité, …
5.6.1 Cartographie des duplications
Le graphique suivant présente une cartographie des duplications au sein de l’application. Il ne tient pas
compte des duplications impliquant un nombre d’instructions inférieur au seuil, car celles-ci sont
généralement nombreuses et peu pertinentes (par exemple les duplications d’accesseurs entre différentes
classes partageant des propriétés semblables).
Confidentiel - Ce document est la propriété de Kalistick 43/61