{"id":1686,"date":"2014-03-07T13:38:22","date_gmt":"2014-03-07T12:38:22","guid":{"rendered":"http:\/\/qualilogy.com\/fr\/?p=1686"},"modified":"2014-03-08T09:21:40","modified_gmt":"2014-03-08T08:21:40","slug":"analyse-plsql-avec-sonarqube-evaluer-la-qualite-33","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/analyse-plsql-avec-sonarqube-evaluer-la-qualite-33\/","title":{"rendered":"Analyse PL\/SQL avec SonarQube \u2013 Evaluer la qualit\u00e9 (3\/3)"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1698\" alt=\"PLSQL_TechnicalDebt\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQL_TechnicalDebt.jpg\" width=\"283\" height=\"450\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQL_TechnicalDebt.jpg 283w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQL_TechnicalDebt-188x300.jpg 188w\" sizes=\"(max-width: 283px) 100vw, 283px\" \/><\/a>Dernier post de notre s\u00e9rie sur l\u2019<a href=\"http:\/\/qualilogy.com\/fr\/category\/sonar\/sonarqube-plsql\/\" target=\"_blank\">analyse de la qualit\u00e9 du code PL\/SQL avec SonarQube<\/a>.<\/p>\n<p>Evaluer la qualit\u00e9 d\u2019une application ne consiste pas uniquement en l\u2019analyse du code : cela, n\u2019importe qui peut le faire. Le travail du consultant Qualit\u00e9 s\u2019articule autour des questions suivantes : quoi, pourquoi, comment, combien.<\/p>\n<ul>\n<li>Quoi : analyser les r\u00e9sultats. <a href=\"http:\/\/qualilogy.com\/fr\/analyse-plsql-avec-sonarqube-evaluer-la-qualite-1\/\" target=\"_blank\">Taille<\/a> et <a href=\"http:\/\/qualilogy.com\/fr\/analyse-plsql-avec-sonarqube-evaluer-la-qualite-2\/\" target=\"_blank\">complexit\u00e9 du code, duplications<\/a>, c\u2019est ce que nous avons vu dans les posts pr\u00e9c\u00e9dents. On examinera les chiffres globaux mais aussi les moyennes, ainsi que les tendances dans le temps si l\u2019on dispose de plusieurs versions. Puis on regarde les principales violations aux bonnes pratiques, en s\u2019int\u00e9ressant en priorit\u00e9 aux Blockers et Criticals.<\/li>\n<li>Pourquoi ces r\u00e9sultats : rechercher les causes des mesures analys\u00e9es, investiguer l\u2019origine des r\u00e9sultats rencontr\u00e9s.<\/li>\n<li>Comment rem\u00e9dier : proposer un plan d\u2019action. En fait, r\u00e9aliser plusieurs propositions de plan d\u2019action. Nous verrons ci-dessous que je d\u00e9cline ceux-ci en diff\u00e9rents plans \u00e0 court, moyen et long terme.<\/li>\n<li>Combien cela co\u00fbte : \u00e9valuation du co\u00fbt de chaque plan. <!--more--><\/li>\n<\/ul>\n<p>Par exemple :<\/p>\n<ul>\n<li>Quoi : nous constatons un d\u00e9faut, critique pour la s\u00e9curit\u00e9.<\/li>\n<li>Pourquoi : il est probable qu\u2019une ou plusieurs personnes dans l\u2019\u00e9quipe de projet ne connaisse pas cette r\u00e8gle. Ou au contraire, la bonne pratique correspondante est connue, mais une erreur d\u2019inattention est toujours possible.<\/li>\n<li>Comment : la rem\u00e9diation peut consister en une simple correction du d\u00e9faut dans le code ou une action de formation sur la bonne pratique.<\/li>\n<li>Combien : c\u2019est l\u00e0 o\u00f9 le plugin SQALE nous sera utile.<\/li>\n<\/ul>\n<p>Je ne vais pas vous pr\u00e9senter en d\u00e9tail la m\u00e9thode SQUALE et le plugin SQALE de SonarQube. Peut-\u00eatre aurons-nous l\u2019occasion de le faire dans un futur post, mais il existe d\u00e9j\u00e0 suffisamment d\u2019informations sur le sujet. Je vous conseille notamment :<\/p>\n<ul>\n<li><a href=\"http:\/\/www.sqale.org\/\" target=\"_blank\">http:\/\/www.sqale.org\/<\/a><\/li>\n<li><a href=\"http:\/\/www.sonarqube.org\/sqale-models-more-than-just-tiny-cities\/\" target=\"_blank\">http:\/\/www.sonarqube.org\/sqale-models-more-than-just-tiny-cities\/<\/a><\/li>\n<\/ul>\n<p>Pour nos calculs, nous allons consid\u00e9rer que l\u2019\u00e9quipe de projet pour maintenir ce code SQL est compos\u00e9e de 3 personnes. En g\u00e9n\u00e9ral, une application Legacy de ce type n\u2019est pas modifi\u00e9e tr\u00e8s fr\u00e9quemment, donc nous allons consid\u00e9rer que cette \u00e9quipe produit 4 versions par an.<br \/>\nRappelons qu\u2019une ann\u00e9e homme est \u00e9gale \u00e0 52 semaines, moins les cong\u00e9s et autres jours f\u00e9ri\u00e9s (ou autres absences maladie), soit 45 semaines ou 225 jours (en France). Ce chiffre peut varier selon les pays, mais pas tant que cela.<\/p>\n<h2>La dette technique en PL\/SQL<\/h2>\n<h3>Plan court terme \u2013 Supprimer les menaces<\/h3>\n<p>Le plus important et prioritaire consiste \u00e0 supprimer tout ce qui constitue une menace pour l\u2019utilisateur final, le plus rapidement et le plus t\u00f4t possible. C\u2019est le plan minimal, indispensable, \u00e0 court terme donc.<\/p>\n<p>Nous avons orient\u00e9 notre Quality Profile vers les violations en mati\u00e8re de S\u00e9curit\u00e9, de Robustesse et de Performance, qui impactent l\u2019utilisateur. Les d\u00e9fauts Blockers et Criticals constituent bien \u00e9videmment les menaces les plus s\u00e9rieuses.<\/p>\n<p>Le plugin SQALE nous permet de v\u00e9rifier le co\u00fbt de rem\u00e9diation pour ceux-ci : environ 113 jours.<a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/BlockersCriticals.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1690\" alt=\"BlockersCriticals\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/BlockersCriticals.jpg\" width=\"582\" height=\"179\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/BlockersCriticals.jpg 582w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/BlockersCriticals-300x92.jpg 300w\" sizes=\"(max-width: 582px) 100vw, 582px\" \/><\/a><\/p>\n<p>Le plan \u00e0 court terme consiste donc en un chantier de refactoring de 6 mois hommes, ou 2 mois pour notre \u00e9quipe de projet de 3 personnes.<\/p>\n<p>Quand : le plus t\u00f4t possible, pour la prochaine version dans 3 mois. Il est tout \u00e0 fait acceptable de proposer aux stakholders de reporter les \u00e9volutions non indispensables sur la version suivante, de telle sorte que l\u2019\u00e9quipe de projet effectue d\u2019abord les 2 mois de refactoring, puis travaille le mois suivant sur les fonctionnalit\u00e9s les plus essentielles. Si ces derni\u00e8res sont trop nombreuses, il est possible de jouer avec le calendrier en d\u00e9calant la prochaine version \u00e0 4 mois. Ou de faire une version \u2018refactoris\u00e9e\u2019 \u00e0 2 mois et la prochaine dans les 4 mois suivants.<\/p>\n<p>B\u00e9n\u00e9fices : une application plus s\u00fbre, plus robuste et plus performante, gr\u00e2ce \u00e0 la suppression des menaces les plus urgentes et les plus graves.<\/p>\n<h3>Plan moyen terme \u2013 Aligner la dette technique avec les objectifs IT<\/h3>\n<p>Il ne faut jamais oublier que la strat\u00e9gie IT, et donc la gestion du portefeuille d\u2019applications, est toujours align\u00e9e sur la strat\u00e9gie de l\u2019entreprise. Un march\u00e9 est soit :<\/p>\n<ul>\n<li>Mature, avec une strat\u00e9gie de pr\u00e9servation des parts de march\u00e9 et des marges financi\u00e8res, donc le respect des budgets et des co\u00fbts sera un objectif majeur de la strat\u00e9gie IT. Au niveau de l\u2019\u00e9quipe de projet, cela se traduit par : priorit\u00e9 \u00e0 la maintenabilit\u00e9 et l\u2019\u00e9volutivit\u00e9 de l\u2019application. Ne pas laisser d\u00e9river la dette technique sur ces 2 facteurs.<\/li>\n<li>Nouveau, avec une strat\u00e9gie de gains de part de march\u00e9, un time-to-market important, des applications robustes et performantes : c\u2019est l\u2019orientation que nous avons donn\u00e9 \u00e0 notre Quality Profile et notre analyse de la qualit\u00e9 de cette application.<\/li>\n<\/ul>\n<p>Notre plan \u00e0 moyen terme visera donc \u00e0 corriger tous les d\u00e9fauts impactant la s\u00e9curit\u00e9, la performance et la fiabilit\u00e9, et non pas simplement les Blockers et Critical. La pyramide SQALE nous permet de calculer le co\u00fbt de ce plan \u00e0 moyen terme.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/TechDebPyramid.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1692\" alt=\"TechDebPyramid\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/TechDebPyramid.jpg\" width=\"578\" height=\"248\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/TechDebPyramid.jpg 578w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/TechDebPyramid-300x128.jpg 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/><\/a><\/p>\n<p>Un total de 395.6 jours. A 3 personnes, cela repr\u00e9sente un chantier de 7 mois au complet. Difficile de paralyser le projet durant plus de la moiti\u00e9 de l\u2019ann\u00e9e.<\/p>\n<p>Cependant, ces 395 jours incluent les 113 pr\u00e9c\u00e9dents (du plan \u00e0 court terme), donc il s\u2019agit en fait de 282 jours additionnels, ou encore 15 mois d\u2019une personne ou 5 mois pour chacune des 3 personnes de l\u2019\u00e9quipe de projet. Diff\u00e9rentes suggestions viennent alors \u00e0 l\u2019esprit :<\/p>\n<ul>\n<li>Limiter le nombre de fonctionnalit\u00e9s nouvelles sur les 5 prochaines versions afin de lib\u00e9rer 1 mois par version pour chaque membre de l\u2019\u00e9quipe afin qu\u2019il se consacre \u00e0 ces rem\u00e9diations. Envisageable si cette application n&rsquo;\u00e9volue plus \u00e9norrm\u00e9ment et que les utilisateurs demandent effectivement des am\u00e9liorations en mati\u00e8re de robustesse et de performance, par exemple.<\/li>\n<li>Si nombre de fonctionnalit\u00e9s nouvelles sont critiques et que la charge d\u2019\u00e9volution ne peut \u00eatre r\u00e9duite, alors les stakeholders doivent \u00eatre pr\u00eats \u00e0 payer pour ajouter une 4\u00e8me personne \u00e0 l\u2019\u00e9quipe de projet, qui se consacrera uniquement \u00e0 corriger ces d\u00e9fauts au cours des 5 prochaines versions.<\/li>\n<\/ul>\n<p>Comme on peut le voir, ce plan est \u00e0 moyen terme, \u00e0 l\u2019horizon des 18 prochains mois en incluant le plan \u00e0 court terme, mais il est possible d\u2019affiner pour pr\u00e9senter diff\u00e9rentes variantes, plus acceptables pour les stakeholders et le Directeur Informatique soucieux de son budget. L\u00e0 encore, le plugin SQALE nous permet d\u2019aller \u00e0 l\u2019essentiel.<\/p>\n<p>Par exemple, le SQALE Sunburst suivant nous montre que, en mati\u00e8re de Performance (Efficiency), 104 jours sont n\u00e9cessaire pour corriger les violations \u00e0 une r\u00e8gle concernant les types de donn\u00e9es.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSunburst.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1693\" alt=\"PLSQLSunburst\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSunburst.jpg\" width=\"592\" height=\"642\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSunburst.jpg 592w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSunburst-276x300.jpg 276w\" sizes=\"(max-width: 592px) 100vw, 592px\" \/><\/a><\/p>\n<p>Il me semble que c\u2019est avec la version Oracle 11g qu\u2019un nouveau type de donn\u00e9es a permis d\u2019am\u00e9liorer jusqu\u2019\u00e0 50% la performance de certaines proc\u00e9dures stock\u00e9es. Si les temps de r\u00e9ponse de l\u2019application ne sont pas un probl\u00e8me majeur pour les utilisateurs, alors nous pouvons reporter la rem\u00e9diation de cette r\u00e8gle Major dans un plan \u00e0 plus long terme, et gagner ainsi 104 jours, soit 21 semaines, soit environ 7 semaines par membre de l\u2019\u00e9quipe de projet. Bien s\u00fbr, il ne s\u2019agit pas de r\u00e9duire le plan \u00e0 moyen terme en un plan \u00e0 court terme, mais de se concentrer sur l\u2019essentiel, avec l\u2019aide de ce graphique qui nous montre la r\u00e9partition de la dette technique sur les diff\u00e9rents types de risques applicatifs.<\/p>\n<h3>Plan long terme \u2013 Aligner la dette technique avec la strat\u00e9gie applicative<\/h3>\n<p>Le plan \u00e0 long terme doit adresser une question \u00e9vidente : que faire de <a href=\"http:\/\/qualilogy.com\/fr\/analyse-plsql-avec-sonarqube-evaluer-la-qualite-1\/\" target=\"_blank\">ce composant monstrueux <\/a>qui embarque toute la logique applicative de l\u2019application ? Le plugin SQALE nous montre que la dette technique pour ce seul composant est de 1 431.9 jours, soit 75% de la dette technique totale pour cette application (plus de 6 ann\u00e9es-hommes).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSqaleHighest.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1696\" alt=\"PLSQLSqaleHighest\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSqaleHighest.jpg\" width=\"583\" height=\"193\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSqaleHighest.jpg 583w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/03\/PLSQLSqaleHighest-300x99.jpg 300w\" sizes=\"(max-width: 583px) 100vw, 583px\" \/><\/a><\/p>\n<p>En fait, la question qui se pose devient d\u00e9s lors : que faire de cette application ? Tout va d\u00e9pendre de son niveau de criticit\u00e9.<\/p>\n<p>Si une application avec une dette technique tr\u00e8s \u00e9lev\u00e9e n\u2019est pas critique, la solution est simple : vous la jetez. La maintenir va co\u00fbter plus cher que la remplacer, soit par un progiciel, soit par une nouvelle application d\u00e9velopp\u00e9e dans une technologie plus r\u00e9cente. Comme l\u2019application n\u2019est pas critique, il n\u2019est pas indispensable que vous en conserviez la ma\u00eetrise ou la connaissance, donc vous pouvez soit externaliser ce d\u00e9veloppement aupr\u00e8s d\u2019un outsourceur, soit effectuer un appel d\u2019offres pour mettre en concurrence \u00e9diteur de logiciels ou int\u00e9grateurs comp\u00e9tents sur un progiciel du m\u00eame type. Dans tous les cas, le partenaire que vous aurez choisi pourra assurer la maintenance de la solution, avec des co\u00fbts normalement moindres que si vous effectuez vous-m\u00eames la maintenance \u2013 mais aussi avec la complexit\u00e9 suppl\u00e9mentaire de g\u00e9rer un fournisseur externe.<\/p>\n<p>Si l\u2019application est critique, alors vous devez g\u00e9rer le probl\u00e8me vous-m\u00eames puisque vous ne souhaitez pas abandonner \u00e0 un tiers la gestion du risque \u2018business\u2019 que cette application peut repr\u00e9senter pour votre entreprise. Il n\u2019existe alors que deux possibilit\u00e9s : un refactoring de l\u2019application ou la r\u00e9\u00e9criture compl\u00e8te de celle-ci.<\/p>\n<p>En l\u2019esp\u00e8ce, corriger tous les d\u00e9fauts rencontr\u00e9s dans ce composant monstrueux et laisser celui-ci tel quel n\u2019a pas beaucoup de sens. Le refactoring doit porter prioritairement sur un nouveau design de cette application, ce qui favorise en fait la solution de porter celle-ci vers une nouvelle technologie.<\/p>\n<p>Nous avons vu que cette base de donn\u00e9es comportait 687 tables, sans compter les vues, mais avec une duplication importante de structures de donn\u00e9es. Ma recommandation pour un plan \u00e0 long terme sera donc :<\/p>\n<ul>\n<li>D\u2019effectuer une r\u00e9tro-documentation afin de lister les diff\u00e9rents composants pr\u00e9sents dans cette application et les liens entre ceux-ci.<\/li>\n<li>D\u2019effectuer un re-design conceptuel afin de dresser la carte des objets fonctionnels, d\u2019abord \u00e0 p\u00e9rim\u00e8tre \u00e9gal, puis en prenant en compte les \u00e9volutions fonctionnelles souhait\u00e9es par les utilisateurs.<\/li>\n<\/ul>\n<p>Il est possible d\u2019externaliser ce travail vers un prestataire, notamment si l\u2019\u00e9quipe de projet actuel a connu un turnover important durant la vie de cette application et a quelque peu perdu la connaissance de celle-ci.<\/p>\n<p>Il faut n\u00e9anmoins que ce prestataire soit outill\u00e9 pour ce faire : m\u00eame avec \u00ab seulement \u00bb 150 000 lignes de code et de commentaires, ce travail doit \u00eatre automatis\u00e9 \u00e0 l\u2019aide d\u2019un outil de cartographie applicative qui permette de tracer l\u2019ensemble des composants et leurs liens.<\/p>\n<p>Cela tombe bien : SonarSource a justement dans ses cartons un projet pour un tel outil. Notre application PL\/SQL sera donc une bonne candidate pour un test de cette future production SonarSource.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dernier post de notre s\u00e9rie sur l\u2019analyse de la qualit\u00e9 du code PL\/SQL avec SonarQube. Evaluer la qualit\u00e9 d\u2019une application ne consiste pas uniquement en l\u2019analyse du code : cela, n\u2019importe qui peut le faire. Le travail du consultant Qualit\u00e9 s\u2019articule autour des questions suivantes : quoi, pourquoi, comment, combien. Quoi : analyser les r\u00e9sultats. [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-1686","post","type-post","status-publish","format-standard","hentry","category-sonarqube-plsql"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1686"}],"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=1686"}],"version-history":[{"count":20,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1686\/revisions"}],"predecessor-version":[{"id":1688,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1686\/revisions\/1688"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=1686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=1686"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=1686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}