{"id":1863,"date":"2014-05-26T14:20:49","date_gmt":"2014-05-26T13:20:49","guid":{"rendered":"http:\/\/qualilogy.com\/fr\/?p=1863"},"modified":"2014-05-29T10:23:39","modified_gmt":"2014-05-29T09:23:39","slug":"application-legacy-c-refactoring-reingenierie-2","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/application-legacy-c-refactoring-reingenierie-2\/","title":{"rendered":"Application Legacy en C \u2013 Refactoring ou r\u00e9ing\u00e9nierie ? (II)"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft  wp-image-1865\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/WordCLegacy_UseCases2.jpg\" alt=\"WordCLegacy_UseCases2\" width=\"376\" height=\"250\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/WordCLegacy_UseCases2.jpg 560w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/WordCLegacy_UseCases2-300x199.jpg 300w\" sizes=\"(max-width: 376px) 100vw, 376px\" \/><\/a>Nous continuons cette s\u00e9rie sur les diff\u00e9rents Use Cases qui peuvent se pr\u00e9senter dans le cadre de la reprise d&rsquo;une application Lecagy en C, \u00e0 partir de l\u2019analyse du code source de Word 1.1a, la premi\u00e8re version de ce traitement de texte publi\u00e9 par Microsoft en 1990. <!--more--><\/p>\n<p>Les deux premiers posts ont \u00e9t\u00e9 consacr\u00e9s aux <a href=\"http:\/\/qualilogy.com\/fr\/audit-application-legacy-c-microsoft-word-1-1a-1\/\" target=\"_blank\">m\u00e9triques quantitatives<\/a> de taille (LOCs), de complexit\u00e9 (CC), le niveau de commentaires et de duplication, ainsi qu&rsquo;aux diff\u00e9rentes <a href=\"http:\/\/qualilogy.com\/fr\/audit-application-legacy-c-microsoft-word-1-1a-2\/\" target=\"_blank\">&lsquo;Issues\u2019 de type Blocker, Critical, Major et Minor<\/a>.<\/p>\n<p>Afin de pouvoir chiffrer au mieux diff\u00e9rentes strat\u00e9gies, notamment de <a href=\"http:\/\/qualilogy.com\/fr\/application-legacy-c-refactoring-reingenierie-1\/\" target=\"_blank\">refactoring et de r\u00e9ing\u00e9nierie<\/a>, nous avons commenc\u00e9 \u00e0 travailler sur la Complexit\u00e9 Cyclomatique (CC) des fonctions et leur distribution. Nous allons maintenant effectuer ce m\u00eame travail sur les fichiers, afin d&rsquo;identifier lesquels sont les plus complexes et\/ou incorporent des fonctions \u00e9galement complexes.<\/p>\n<h2>Complexit\u00e9<\/h2>\n<h3>Programmes<\/h3>\n<p>Le tableau suivant pr\u00e9sente la r\u00e9partition de la complexit\u00e9 parmi les fichiers :<\/p>\n<p style=\"text-align: center\"><em><strong>Tableau 4 \u2013 Complexit\u00e9 Cyclomatique des fichiers de l\u2019application Word Opus<\/strong><\/em><\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Files_Distrib.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1870\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Files_Distrib.jpg\" alt=\"Word_Files_Distrib\" width=\"247\" height=\"221\" \/><\/a>171 fichiers n\u2019ont aucune Complexit\u00e9 Cyclomatique. J\u2019ai recens\u00e9 130 fichiers .h dans l\u2019application, dont la plupart porte sur la d\u00e9finition de structures de donn\u00e9es ou de constantes, donc sans aucun algorithme correspondant \u00e0 une r\u00e8gle fonctionnelle ou technique. D\u2019autre part, 156 fichiers ont une CC sup\u00e9rieure \u00e0 90, donc cette application est extr\u00eamement polaris\u00e9e entre des fichiers avec une complexit\u00e9 faible ou m\u00eame nulle, et des fichiers avec une complexit\u00e9 \u00e9lev\u00e9e. Ou tr\u00e8s \u00e9lev\u00e9e, puisque l\u00e0 encore, une r\u00e8gle de type \u2018Major\u2019 me permet d\u2019identifier 159 fichiers avec plus de 80 points de CC.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Avoid_Cplx_Files.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1885\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Avoid_Cplx_Files.jpg\" alt=\"Word_Avoid_Cplx_Files\" width=\"461\" height=\"36\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Avoid_Cplx_Files.jpg 461w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Avoid_Cplx_Files-300x23.jpg 300w\" sizes=\"(max-width: 461px) 100vw, 461px\" \/><\/a>Comme pour les fonctions, j\u2019ai calcul\u00e9 la distribution des fichiers les plus complexes.<\/p>\n<p style=\"text-align: center\"><em><strong>Tableau 5 \u2013 Distribution des fichiers les plus complexes<\/strong><\/em><\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Files_Distrib2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1872\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Files_Distrib2.jpg\" alt=\"Word_Files_Distrib2\" width=\"513\" height=\"142\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Files_Distrib2.jpg 513w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Files_Distrib2-300x83.jpg 300w\" sizes=\"(max-width: 513px) 100vw, 513px\" \/><\/a>159 fichiers, soit 45,6% des 349 fichiers que compte l\u2019application, ont plus de 80 points de CC, et totalisent entre eux 43 058 points de CC, soit 98,2% de la Complexit\u00e9 Cyclomatique globale (43 846). Quand je vous dis que cette application est polaris\u00e9e en mati\u00e8re de complexit\u00e9 des programmes !<\/p>\n<p>On notera 24 fichiers au-del\u00e0 de 400 points de CC, donc l\u00e0 encore &#8211; tout comme pour les fonctions &#8211; un nombre limit\u00e9 d\u2019objets (15%) constitue une part importante (30%) de la complexit\u00e9 globale. Avec les 27 fichiers \u00e0 plus de 300 points de CC, cela nous fait 51 programmes (14.6% des 349 fichiers de l&rsquo;application), au-del\u00e0 de 300 CC et une complexit\u00e9 totale (12 860 + 9 472) \u00e9gale \u00e0 22 332, soit 51% de l\u2019ensemble de la Complexit\u00e9 Cyclomatique pour toute l\u2019application (43 846).<\/p>\n<p>J\u2019ai \u00e9galement v\u00e9rifi\u00e9 comment se r\u00e9partissent les fonctions les plus complexes parmi ces programmes :<\/p>\n<ul>\n<li>3 fichiers \u00e0 plus de 400 CC comptent au moins 1 fonction \u00e0 plus de 200 CC et 1 fonction \u00e0 plus de 100 CC (en rouge ci-dessous).<\/li>\n<li>1 fichier \u00e0 plus de 400 CC et 2 fichiers \u00e0 plus de 300 CC avec au moins 1 fonction \u00e0 plus de 200 CC (en orange fonc\u00e9).<\/li>\n<li>7 fichiers \u00e0 plus de 400 CC avec au moins 1 fonction \u00e0 plus de 100 CC (en orange clair).<\/li>\n<li>6 fichiers \u00e0 plus de 300 CC avec au moins 1 fonction \u00e0 plus de 100 CC (en jaune).<\/li>\n<\/ul>\n<p style=\"text-align: center\"><em><strong>Figure 1 \u2013 Croisement des fonctions et fichiers les plus complexes<\/strong><\/em><\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Fn_Distrib.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1879\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Fn_Distrib.jpg\" alt=\"Word_Fn_Distrib\" width=\"791\" height=\"656\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Fn_Distrib.jpg 791w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Fn_Distrib-300x248.jpg 300w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_Fn_Distrib-624x517.jpg 624w\" sizes=\"(max-width: 791px) 100vw, 791px\" \/><\/a>Nous savons donc maintenant quelles fonctions et quels fichiers traiter en priorit\u00e9, sur lesquels portera d\u2019abord notre effort, ainsi qu\u2019une estimation de leur niveau de complexit\u00e9.<\/p>\n<h2>Taille<\/h2>\n<p>Comme nous l&rsquo;avons vu dans <a href=\"http:\/\/qualilogy.com\/fr\/application-legacy-c-refactoring-reingenierie-1\/\" target=\"_blank\">le post pr\u00e9c\u00e9dent<\/a>, la taille est \u00e9galement un des \u00e9l\u00e9ments d&rsquo;appr\u00e9ciation des charges de refactoring ou de r\u00e9ing\u00e9nierie.<\/p>\n<h3>Fonctions<\/h3>\n<p>Je dispose \u00e9galement d\u2019une r\u00e8gle qui me permet d\u2019identifier les fonctions qui d\u00e9passent un certain seuil de taille, au-del\u00e0 de 100 lignes de code.\u00a0 <a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidFnsSize.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1882\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidFnsSize.jpg\" alt=\"Word_AvoidFnsSize\" width=\"547\" height=\"35\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidFnsSize.jpg 547w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidFnsSize-300x19.jpg 300w\" sizes=\"(max-width: 547px) 100vw, 547px\" \/><\/a>J\u2019ai \u00e0 nouveau regard\u00e9 la r\u00e9partition des fonctions avec le plus grand nombre de lignes de code.<\/p>\n<p style=\"text-align: center\"><em><strong>Tableau 6 \u2013 Distribution des fonctions selon leur taille<a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FunctionsSize_Distrib1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1901\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FunctionsSize_Distrib1.jpg\" alt=\"Word_FunctionsSize_Distrib\" width=\"463\" height=\"138\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FunctionsSize_Distrib1.jpg 463w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FunctionsSize_Distrib1-300x89.jpg 300w\" sizes=\"(max-width: 463px) 100vw, 463px\" \/><\/a><\/strong><\/em><\/p>\n<p style=\"text-align: left\">Sur 478 fonctions \u00e0 plus de 100 LOCs :<\/p>\n<ul>\n<li>3 fonctions d\u00e9passent les 1 000 lignes de code.<\/li>\n<li>21 comptent plus de 500 lignes de code.<\/li>\n<li>126 sont entre 200 et 500 lignes de code.<\/li>\n<\/ul>\n<p>J\u2019ai \u00e9galement crois\u00e9 la taille (LOCs) avec la Complexit\u00e9 Cyclomatique, pour les r\u00e9sultats suivants :<\/p>\n<ul>\n<li>La fonction la plus complexe, avec 355 points de CC compte 2 063 lignes de code (dans le fichier &lsquo;Opus\\RTFOUT.c&rsquo;) !<\/li>\n<li>Sur les 6 fonctions les plus complexes, au-del\u00e0 de 200 CC, 3 ont une taille sup\u00e9rieure \u00e0 1 000 LOCs (dont la pr\u00e9c\u00e9dente), 2 autres d\u00e9passent les 700 lignes et la derni\u00e8re atteint 393 lignes.<\/li>\n<li>Sur les 30 fonctions recens\u00e9es pr\u00e9c\u00e9demment \u00e0 plus de 100 CC, 15 ont une taille entre 500 et 1 000 LOCs, et les 15 autres entre 250 et 500 LOCs.<\/li>\n<\/ul>\n<p>Sans aucune surprise, on retrouve ces fonctions dans les fichiers identifi\u00e9s en rouge\/orange dans la figure 1 pr\u00e9c\u00e9dente.<\/p>\n<h3>Programmes<\/h3>\n<p>Nous avons vu que la complexit\u00e9 \u00e9tait tr\u00e8s polaris\u00e9e entre les fichiers, avec 159 d\u2019entre eux au-del\u00e0 de 80 points de CC. Une autre r\u00e8gle nous permet \u00e9galement de constater 149 fichiers qui comptent plus de 1 000 lignes de code.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidPgmSize.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1886\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidPgmSize.jpg\" alt=\"Word_AvoidPgmSize\" width=\"537\" height=\"31\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidPgmSize.jpg 537w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_AvoidPgmSize-300x17.jpg 300w\" sizes=\"(max-width: 537px) 100vw, 537px\" \/><\/a>Nous avons 9 fichiers au-del\u00e0 de 3 000 lignes, dont 1 a 4 117 LOCs, et 36 fichiers entre 2 000 et 3 000 lignes. J&rsquo;ai v\u00e9rifi\u00e9 pour ces 9 fichiers les plus importants s&rsquo;ils comptaient des fonctions \u00e9galement volumineuses, et dans quelles proportions (nombre et taille de ces fonctions).<\/p>\n<p style=\"text-align: center\"><em><strong>Tableau 7 &#8211; Croisement des fichiers les plus volumineux avec les fonctions de taille \u00e9lev\u00e9e<\/strong><\/em><\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FilesFns_Size.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1887\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FilesFns_Size.jpg\" alt=\"Word_FilesFns_Size\" width=\"572\" height=\"290\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FilesFns_Size.jpg 572w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/Word_FilesFns_Size-300x152.jpg 300w\" sizes=\"(max-width: 572px) 100vw, 572px\" \/><\/a>La colonne &lsquo;Nbr. Functions&rsquo; liste le nombre de fonctions de plus de 100 LOCs dans le fichier, puis les 3 colonnes &lsquo;Function size&rsquo; le nombre de fonctions au del\u00e0 de 1 000 \/ 500 \/ 200 LOCs. Par exemple :<\/p>\n<ul>\n<li>Le fichier &lsquo;Opus\\wordtech\\select.c&rsquo; comporte 7 fonctions de plus de 100 lignes, dont 1 de plus de 500 lignes et 5 de plus de 200 lignes.<\/li>\n<li>Le fichier &lsquo;Opus\\interp\\elcore.c&rsquo; comporte 5 fonctions de plus de 100 lignes dont 1 de plus de 1 000 lignes et 1 de plus de 500 lignes.<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>On constate que le nombre de fonctions de taille importante d\u00e9cro\u00eet proportionnellement \u00e0 la taille du fichier. J&rsquo;ai not\u00e9 2 exceptions cependant :<\/p>\n<ul>\n<li>Le fichier &lsquo;RTFOUT.c&rsquo; avec 2 222 LOCs et la fonction la plus complexe : 355 points de CC et 2 063 lignes de code.<\/li>\n<li>Le fichier &lsquo;formula.c&rsquo; avec 2 179 LOCs et une fonction \u00e0 plus de 1 000 lignes de code.<\/li>\n<\/ul>\n<p>Egalement, sur les 36 fichiers entre 2 000 et 3 000 LOCs :<\/p>\n<ul>\n<li>8 fichiers entre 2 000 et 3 000 LOCs comptent 10 fonctions \u00e0 plus de 500 LOCs, dont 6 avec de surcro\u00eet au moins 1 fonction \u00e0 plus de 200 LOCs.<\/li>\n<li>25 fichiers entre 2 000 et 3 000 LOCs comptent 25 functions entre 200 et 500 LOCs.<a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/PictComplexity.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1890\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/05\/PictComplexity.jpg\" alt=\"PictComplexity\" width=\"290\" height=\"126\" \/><\/a><\/li>\n<\/ul>\n<p>Nous avons identifi\u00e9 les fonctions et les fichiers qui p\u00e9seront le plus sur la difficult\u00e9 et donc les co\u00fbts de <a href=\"http:\/\/qualilogy.com\/fr\/application-legacy-c-refactoring-reingenierie-1\/\" target=\"_blank\">refactoring et de r\u00e9ing\u00e9nierie<\/a>, de par leur taille et leur complexit\u00e9.<\/p>\n<p>Dans le prochain post, nous v\u00e9rifierons si ces fichiers comportent \u00e9galement des d\u00e9fauts de structure (bloc imbriqu\u00e9s, goto, etc.) qui rendront encore plus difficile la compr\u00e9hension et l&rsquo;\u00e9volution de son code.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous continuons cette s\u00e9rie sur les diff\u00e9rents Use Cases qui peuvent se pr\u00e9senter dans le cadre de la reprise d&rsquo;une application Lecagy en C, \u00e0 partir de l\u2019analyse du code source de Word 1.1a, la premi\u00e8re version de ce traitement de texte publi\u00e9 par Microsoft en 1990.<\/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-1863","post","type-post","status-publish","format-standard","hentry","category-qualite-des-applications"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1863"}],"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=1863"}],"version-history":[{"count":37,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1863\/revisions"}],"predecessor-version":[{"id":1914,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1863\/revisions\/1914"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=1863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=1863"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=1863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}