{"id":216,"date":"2012-09-03T10:47:08","date_gmt":"2012-09-03T09:47:08","guid":{"rendered":"http:\/\/dev.qualilogy.com\/fr\/?p=216"},"modified":"2013-01-05T10:47:47","modified_gmt":"2013-01-05T09:47:47","slug":"taille-dune-application","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/taille-dune-application\/","title":{"rendered":"Taille d&rsquo;une application"},"content":{"rendered":"<p>De retour de vacances, c&rsquo;est la rentr\u00e9e.<\/p>\n<p>Plein d&rsquo;id\u00e9es d&rsquo;articles pour cette nouvelle saison, mais je vais commencer simplement avec un petit &lsquo;quizz&rsquo;.<\/p>\n<p>Imaginons que l&rsquo;on vous demande de cat\u00e9goriser une application en fonction de sa taille, en nombre de lignes de code (LOC) ou en nombre d&rsquo;objets. Quelle est votre estimation d&rsquo;une application de petite taille ? Quand dites-vous qu&rsquo;une application est grosse ? A partir de quels nombres pensez-vous qu&rsquo;elle est &lsquo;monstrueuse&rsquo; ou hors normes ?<\/p>\n<p><!--more--><\/p>\n<p>Cette question se pose assez fr\u00e9quemment et, dans mon exp\u00e9rience, il est difficile d&rsquo;y r\u00e9pondre pr\u00e9cis\u00e9ment et avec certitude.<\/p>\n<p>On vous demande &lsquo;200 000 lignes de code Java, c&rsquo;est une grosse application ?&rsquo; ou bien &lsquo;500 programmes Cobol, c&rsquo;est gros ?&rsquo;. Ce peut \u00eatre votre patron ou un commercial \u00e0 qui un client demande une id\u00e9e de tarif pour prendre en charge la maintenance d&rsquo;une application de cette taille. Ce peut \u00eatre un client ou un responsable au sein de votre entreprise qui souhaite faire appel \u00e0 vos services pour un audit de qualit\u00e9 applicative mais voudrait savoir quel effort ou combien de temps s&rsquo;av\u00e8re n\u00e9cessaire pour analyser cette application.<\/p>\n<p>Remarquez bien que je ne suis pas en train de parler d&rsquo;effort de d\u00e9veloppement ou de maintenance d&rsquo;une application ou de productivit\u00e9 des programmeurs. Certaines personnes consid\u00e8rent que la m\u00e9trique LOC est une &lsquo;malpractice&rsquo; et je suis bien d&rsquo;accord pour dire qu&rsquo;elle ne doit pas \u00eatre utilis\u00e9e pour mesurer la productivit\u00e9, l&rsquo;effort ou les fonctionnalit\u00e9s dans une application. Mais quand je vais analyser le code d&rsquo;une application, j&rsquo;aime savoir s&rsquo;il s&rsquo;agit d&rsquo;une petite application ou d&rsquo;un gros monstre. Tous les consultants en Qualit\u00e9 de code se posent cette question, et chacun \u00e0 sa propre grille.<\/p>\n<p>Ci-dessous, les valeurs que j&rsquo;utilise :<\/p>\n<h4 style=\"text-align: center\"><em><span style=\"text-decoration: underline\"><strong>Taille de l\u2019application en KLoc<\/strong><\/span><\/em><\/h4>\n<table width=\"620\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"60\" height=\"18\"><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><\/td>\n<td style=\"text-align: center\" colspan=\"4\" valign=\"bottom\" width=\"120\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: 9px\">Taille de l\u2019application<\/span><\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Basse<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Moyenne<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Elev\u00e9e<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Tr\u00e8s \u00e9lev\u00e9e<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Technologie<\/span><\/strong><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Objets<\/span><\/strong><\/td>\n<td style=\"text-align: center\" colspan=\"4\" width=\"120\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Lignes de code (000)<\/span><\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\"><span style=\"font-family: Arial;font-size: x-small\">Mainframe Cobol<\/span><\/td>\n<td valign=\"top\" width=\"400\"><span style=\"font-family: Arial;font-size: x-small\">Programmes Cobol et Copy-books<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">200<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">800<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">2 000<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">4 500<\/span><\/td>\n<\/tr>\n<\/tbody>\n<tbody>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Client\/Server 4GL<\/span><\/td>\n<td valign=\"top\" width=\"400\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Programmes (VB, \u2026), classes (C, C#), proc\u00e9dures (PL\/SQL), etc.<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">80<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">300<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">750<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">1 500<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">J2EE, .NET<\/span><\/td>\n<td valign=\"top\" width=\"400\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Pages (ASP, JSP, HTML), classes (Java , C#), Javascript, Xml, etc.<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">50<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">200<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">400<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">1 000<br \/>\n<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">ABAP<\/span><\/td>\n<td valign=\"top\" width=\"400\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Programmes, includes, reports, fonctions, etc.<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">100<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">400<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">800<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">1 500<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Par exemple, une application J2EE sera :<\/p>\n<ul>\n<li>De taille r\u00e9duite en dessous de 50 000 LOC.<\/li>\n<li>De taille moyenne entre 50 KLoc et 200 KLoc.<\/li>\n<li>De taille \u00e9lev\u00e9 entre 200 KLoc et 400 Kloc.<\/li>\n<li>De taille tr\u00e8s \u00e9lev\u00e9e jusqu&rsquo;\u00e0 1 000 Kloc.<\/li>\n<\/ul>\n<p>Au-del\u00e0 de 1 million de lignes de code, je consid\u00e8re qu&rsquo;une application J2EE est &lsquo;monstrueuse&rsquo;, c&rsquo;est-\u00e0-dire hors-normes. Remarque : le plus souvent, il ne s&rsquo;agira pas d&rsquo;une unique application, mais plut\u00f4t d&rsquo;un syst\u00e8me compos\u00e9 de multiples modules applicatifs. Mais quelque soit le nom qu&rsquo;on lui attribue, si ce code est entre les mains d&rsquo;une unique \u00e9quipe de projet, alors celle-ci est face \u00e0 un Everest. Avec les probl\u00e8mes sp\u00e9cifiques que pose la gestion d&rsquo;une telle montagne de code.<\/p>\n<p>La table ci-dessous pr\u00e9sente la m\u00eame \u00e9valuation, mais bas\u00e9e sur le nombre d&rsquo;objets.<\/p>\n<h4 style=\"text-align: center\"><em><span style=\"text-decoration: underline\"><strong>Taille de l\u2019application en nombre d&rsquo;objets<br \/>\n<\/strong><\/span><\/em><\/h4>\n<table width=\"620\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"60\" height=\"18\"><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><\/td>\n<td style=\"text-align: center\" colspan=\"4\" valign=\"bottom\" width=\"120\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: 9px\">Taille de l\u2019application<\/span><\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Basse<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Moyenne<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Elev\u00e9e<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Tr\u00e8s \u00e9lev\u00e9e<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Technologie<\/span><\/strong><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Objets<\/span><\/strong><\/td>\n<td style=\"text-align: center\" colspan=\"4\" width=\"120\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Nombre d&rsquo;objets<\/span><\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\"><span style=\"font-family: Arial;font-size: x-small\">Mainframe Cobol<\/span><\/td>\n<td valign=\"top\" width=\"400\"><span style=\"font-family: Arial;font-size: x-small\">Programmes Cobol et Copy-books<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">200<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">750<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">2 000<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">4 000<br \/>\n<\/span><\/td>\n<\/tr>\n<\/tbody>\n<tbody>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Client\/Server 4GL<\/span><\/td>\n<td valign=\"top\" width=\"400\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Programmes (VB, \u2026), classes (C, C#), proc\u00e9dures (PL\/SQL), etc.<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">100<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">200<br \/>\n<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">600<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">1 500<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">J2EE, .NET<\/span><\/td>\n<td valign=\"top\" width=\"400\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Pages (ASP, JSP, HTML), classes (Java , C#), Javascript, Xml, etc.<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">80<br \/>\n<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\"> 150<br \/>\n<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">500<br \/>\n<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">1 000<br \/>\n<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">ABAP<\/span><\/td>\n<td valign=\"top\" width=\"400\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">Programs, includes, reports, fonctions, etc.<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">400<br \/>\n<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">1 000<br \/>\n<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">2 500<br \/>\n<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: x-small\">6 000<br \/>\n<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Souvent, le nombre d&rsquo;objets sera la seule indication connue : peu de clients ou de responsables de projet connaissent le nombre de lignes de code dans une application. Et cette indication peut \u00eatre trompeuse.<\/p>\n<p>Par exemple, on vous livre une application Cobol avec 800 programmes, et comme la personne en charge d&rsquo;effectuer cette extraction n&rsquo;a pas voulu s&#8217;emb\u00eater, il vous a livr\u00e9 les 20 000 Copy-books pr\u00e9sents sur le syst\u00e8me Mainframe. Au premier abord, c&rsquo;est plus que monstrueux, mais il n&rsquo;y a probablement que 2 ou 3% de ces Copy-books qui correspondent \u00e0 cette application. Celle-ci est donc en d\u00e9finitive de taille moyenne. Par contre, si vous d\u00e9cidez d&rsquo;analyser toutes les Copys, alors vous avez un gros travail d&rsquo;analyse devant vous, pour un r\u00e9sultat qui n&rsquo;a pas pas beaucoup de sens en termes d&rsquo;audit applicatif, puisque le p\u00e9rim\u00e8tre d&rsquo;analyse ne correspond pas \u00e0 une application ou une \u00e9quipe de projet.<\/p>\n<p>Parfois vous aurez une application J2EE avec \u00e9norm\u00e9ment de pages JSP ou un grand nombre de fichiers de configuration Xml (notamment avec certains frameworks du march\u00e9) et peu de classes m\u00e9tier. L\u00e1 encore, le nombre d&rsquo;objets ou de lignes de code ne sera pas vraiment repr\u00e9sentatif.<\/p>\n<p>J&rsquo;ai eu beaucoup d&rsquo;\u00e9changes \u00e0 ce sujet avec des professionnels r\u00e9alisant des audits de qualit\u00e9 de code, et si nous arrivons souvent \u00e0 tomber sur des chiffres assez proches, tous s&rsquo;accordent \u00e0 dire que ce n&rsquo;est qu&rsquo;une indication qui peut varier fortement comme le montrent les exemples pr\u00e9c\u00e9dents. Mais parfois, vous devez r\u00e9pondre \u00e0 cette question &lsquo;Est-ce une grosse application?&rsquo; sans avoir plus de donn\u00e9es.<\/p>\n<p>Et vous, comment cat\u00e9gorisez-vous une application ?<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>De retour de vacances, c&rsquo;est la rentr\u00e9e. Plein d&rsquo;id\u00e9es d&rsquo;articles pour cette nouvelle saison, mais je vais commencer simplement avec un petit &lsquo;quizz&rsquo;. Imaginons que l&rsquo;on vous demande de cat\u00e9goriser une application en fonction de sa taille, en nombre de lignes de code (LOC) ou en nombre d&rsquo;objets. Quelle est votre estimation d&rsquo;une application de [&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-216","post","type-post","status-publish","format-standard","hentry","category-qualite-des-applications"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/216"}],"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=216"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/216\/revisions"}],"predecessor-version":[{"id":217,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/216\/revisions\/217"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=216"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}