{"id":83,"date":"2011-11-24T09:56:22","date_gmt":"2011-11-24T08:56:22","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=83"},"modified":"2013-01-04T09:59:42","modified_gmt":"2013-01-04T08:59:42","slug":"mesurer-et-controler","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/mesurer-et-controler\/","title":{"rendered":"Mesurer et contr\u00f4ler"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-91\" title=\"QualMeasCon2t\" alt=\"Measure and Control\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/11\/QualMeasCon2t.jpg\" width=\"148\" height=\"247\" \/><\/a>\u00ab You can\u2019t control what you can\u2019t measure \u00bb (Tom de Marco)<\/p>\n<p>J\u2019expliquais dans le post pr\u00e9c\u00e9dent <a title=\"Les 3 co\u00fbts\" href=\"http:\/\/qualilogy.com\/fr\/les-3-couts\" target=\"_blank\">Les 3 co\u00fbts<\/a> que les outils d\u2019analyse de code nous fournissaient un grand nombre d\u2019informations qualitatives alors que les m\u00e9triques quantitatives \u00e9taient moins nombreuses, mais tr\u00e8s utiles. Cette opinion n\u2019est pas toujours partag\u00e9e.<\/p>\n<p>Les m\u00e9triques quantitatives ou \u2018raw metrics\u2019 en anglais (que l\u2019on pourrait traduire par \u2018donn\u00e9es brutes\u2019) sont des mesures assez faciles \u00e1 obtenir avec la grande majorit\u00e9 des outils d\u2019analyse de code. G\u00e9n\u00e9ralement, un tel outil commence par pr\u00e9senter une note globale de qualit\u00e9 qui agr\u00e8ge diff\u00e9rentes r\u00e8gles en mati\u00e8re de bonnes pratiques de programmation, de design, de documentation, etc.<br \/>\nCette simple note donne un aper\u00e7u g\u00e9n\u00e9ral de la qualit\u00e9 de l\u2019application, mais se r\u00e9v\u00e8le en fait assez subjective : elle d\u00e9pend tr\u00e8s fortement de l\u2019outil.<br \/>\n<!--more-->Les bonnes pratiques qui r\u00e9gissent la qualit\u00e9 du code sont assez bien standardis\u00e9es et on devrait donc retrouver les m\u00eames ensembles de r\u00e8gles au sein de chaque outil. Or, c\u2019est peu souvent le cas. Certains logiciels sont sp\u00e9cialis\u00e9s sur un langage unique pour lequel ils proposent le maximum de r\u00e8gles possibles. D\u2019autres sont multi-technologies et visent \u00e1 \u00e9quilibrer voir \u00e1 normaliser les r\u00e8gles entre les diff\u00e9rents langages, et non pas \u00e1 en supporter le plus possible.<\/p>\n<p>Un facteur plus subjectif encore est la criticit\u00e9 accord\u00e9e \u00e1 une r\u00e8gle, son poids dans le mod\u00e8le qualim\u00e9trique propos\u00e9. En r\u00e9alisant une \u00e9tude comparative entre deux outils, j\u2019ai d\u00e9couvert que, sur une \u00e9chelle de poids de 1 \u00e1 10 :<\/p>\n<ul>\n<li>Le premier outil proposait 15 diagnostics avec un poids de 6 \u00e1 10, sur un total de 73 r\u00e8gles, soit 20% de celles-ci.<\/li>\n<li>Le second outil proposait 58 diagnostics sur 102, avec un poids sup\u00e9rieur \u00e1 6, soit plus de la moiti\u00e9 du nombre total de r\u00e9gles.<\/li>\n<\/ul>\n<p>Parfois, baisser ou relever simplement la criticit\u00e9 d\u2019une r\u00e8gle suffit pour modifier drastiquement la note globale de qualit\u00e9. Plus grave encore, il arrive qu\u2019un outil se trompe dans la mesure d\u2019une r\u00e8gle, soit parce qu\u2019il produit un grand nombre de false-positives, soit tout simplement \u00e1 cause d&rsquo;un bug.<\/p>\n<p>Je me souviens d\u2019un logiciel d&rsquo;analyse de code qui ne trouvait pas tous les liens vers la page d\u2019erreur de l\u2019application et en concluait qu\u2019il y avait l\u00e1 un grave d\u00e9faut pour la s\u00e9curit\u00e9 de celle-ci. Emoi dans la salle lorsque l\u2019\u00e9quipe de projet et ses managers \u2013 et souvent un CIO \u2013 d\u00e9couvrent que leur application super-critique pr\u00e9sente un risque majeur pour la s\u00e9curit\u00e9. Grand moment de solitude pour le consultant Qualit\u00e9 qui pr\u00e9sente cette conclusion sans avoir v\u00e9rifi\u00e9 au pr\u00e9alable l\u2019exactitude de cette mesure qualitative.<\/p>\n<p>On en arrive donc \u00e1 ce paradoxe que la qualit\u00e9 de votre application d\u00e9pend\u2026 de la qualit\u00e9 du logiciel qui \u00e9value la qualit\u00e9 de votre application.<\/p>\n<p>Si deux outils distincts ne parviennent pas \u00e1 la m\u00eame mesure quand aux donn\u00e9es qualitatives, les mesures quantitatives sont elles le plus souvent semblables et exactes.<\/p>\n<p>J\u2019entends souvent dire : \u00ab cette application est complexe \u00bb mais si je demande pourquoi elle est complexe, les r\u00e9ponses ne sont pas pr\u00e9cises. Il me suffit de regarder le nombre de lignes de code et j\u2019aurai d\u00e9j\u00e0 une indication. La taille de cette application est-elle plut\u00f4t en dessous ou plut\u00f4t au-dessus de la moyenne pour cette technologie ? Ensuite, la Complexit\u00e9 Cyclomatique me fournit une seconde information : cette application incorpore-t-elle un grand nombre de r\u00e8gles ? Son niveau de complexit\u00e9 la rend-elle facilement maintenable ?<\/p>\n<p>Si vous savez qu\u2019une personne p\u00e8se 60 kg, cela vous suffit-il pour dire si elle est mince ou pas ? Bien s\u00fbr que non. Mais si vous connaissez sa taille, alors vous pouvez dire si elle est ou non en surpoids.<br \/>\nCertaines mesures compl\u00e9mentaires telles que le taux de commentaires ou le pourcentage de code dupliqu\u00e9 permettent de reconstituer le profil de l\u2019application. Bien s\u00fbr, les donn\u00e9es quantitatives sont limit\u00e9es. Certains me diront que c\u2019est une h\u00e9r\u00e9sie d\u2019utiliser le nombre de lignes de code, d\u2019autres ne jurent que par les points de fonction. Tous ces avis pr\u00e9sentent de l\u2019int\u00e9r\u00eat, mais les \u2018raw metrics\u2019 pr\u00e9sentent certains avantages ind\u00e9niables :<\/p>\n<ul>\n<li>Elles sont facilement disponibles.<\/li>\n<li>Elles sont g\u00e9n\u00e9ralement exactes.<\/li>\n<li>Elles sont facilement compr\u00e9hensibles pour le management de projet.<\/li>\n<\/ul>\n<p>Elles constituent donc une base solide pour \u00e9valuer la qualit\u00e9 d\u2019une application et si celle-ci est co\u00fbteuse \u00e1 maintenir. L\u2019examen des m\u00e9triques qualitatives permet ensuite de pr\u00e9ciser notre \u00e9valuation et le \u2018pourquoi\u2019 de ce co\u00fbt : parce qu\u2019elle est peu lisible, parce qu\u2019elle pr\u00e9sente des d\u00e9fauts pour sa fiabilit\u00e9, parce que les bonnes pratiques en mati\u00e8re de performance ou d\u2019optimisation ne sont pas appliqu\u00e9es, etc.<\/p>\n<p>Les m\u00e9triques qualitatives permettent d\u2019affiner un diagnostic, de construire un plan de rem\u00e9diation, de mettre en \u0153uvre un processus d\u2019am\u00e9lioration continue de la qualit\u00e9. Elles sont pr\u00e9cieuses pour les \u00e9quipes de projet.<br \/>\nLorsqu\u2019il s\u2019agit de r\u00e9pondre \u00e1 la question l\u00e9gitime des manageurs et des utilisateurs : combien me co\u00fbte cette application ? les donn\u00e9es quantitatives sont plus simples, plus pr\u00e9cises et plus faciles d\u2019utilisation.<\/p>\n<p>Commencons par mesurer ce que nous pouvons contr\u00f4ler.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00ab You can\u2019t control what you can\u2019t measure \u00bb (Tom de Marco) J\u2019expliquais dans le post pr\u00e9c\u00e9dent Les 3 co\u00fbts que les outils d\u2019analyse de code nous fournissaient un grand nombre d\u2019informations qualitatives alors que les m\u00e9triques quantitatives \u00e9taient moins nombreuses, mais tr\u00e8s utiles. Cette opinion n\u2019est pas toujours partag\u00e9e. Les m\u00e9triques quantitatives ou \u2018raw [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-83","post","type-post","status-publish","format-standard","hentry","category-qualite-des-applications"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/83"}],"collection":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/comments?post=83"}],"version-history":[{"count":2,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/83\/revisions"}],"predecessor-version":[{"id":85,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/83\/revisions\/85"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=83"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=83"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=83"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}