{"id":163,"date":"2012-09-03T10:46:16","date_gmt":"2012-09-03T09:46:16","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=163"},"modified":"2013-01-05T10:46:59","modified_gmt":"2013-01-05T09:46:59","slug":"tamano-de-aplicacion","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/tamano-de-aplicacion\/","title":{"rendered":"Tama\u00f1o de aplicaci\u00f3n"},"content":{"rendered":"<p>Ya se acabaron las vacaciones, es hora de volver a nuestros posts.<\/p>\n<p>Tengo bastante ideas para esta nueva temporada, pero voy a empezar con un &#8216;quiz&#8217;.<\/p>\n<p>Se te pide clasificar una aplicaci\u00f3n seg\u00fan su tama\u00f1o, el n\u00famero de l\u00edneas de c\u00f3digo (LOC) o el n\u00famero de objetos. \u00bfCu\u00e1l es tu estimaci\u00f3n de una peque\u00f1a aplicaci\u00f3n? Cuando dices que una aplicaci\u00f3n es grande? Con qu\u00e9 valores crees que es &#8216;monstruosa&#8217; o at\u00edpica?<\/p>\n<p><!--more--><\/p>\n<p>Esta cuesti\u00f3n se encuentra bastante y, en mi experiencia, es dif\u00edcil responder con precisi\u00f3n y certeza.<\/p>\n<p>Se te pide &#8216;200 000 l\u00edneas de c\u00f3digo Java, es una aplicaci\u00f3n de gran tama\u00f1o?&#8217; o &#8216;500 programas Cobol, es grande? &#8216;. Puede ser tu jefe o un vendedor a quien un cliente solicita una idea de los costes de mantenimiento para una aplicaci\u00f3n de este tama\u00f1o. Puede ser un responsable de proyecto en tu empresa que quiere una auditor\u00eda de calidad de su aplicaci\u00f3n, pero le gustar\u00eda saber cu\u00e1nto tiempo se necesita para analizar el c\u00f3digo.<\/p>\n<p>No estoy hablando de esfuerzo de desarrollo o del mantenimiento de una aplicaci\u00f3n o de la productividad del programador. Algunas personas consideran que la m\u00e9trica LOC es una &#8216;malpractice&#8217; y estoy totalmente de acuerdo en que no se debe utilizar para medir la productividad, el esfuerzo de desarrollo o las funcionalidades de una aplicaci\u00f3n. Sin embargo, cuando se analiza el c\u00f3digo de una aplicaci\u00f3n, me gusta saber si se trata de una peque\u00f1a aplicaci\u00f3n o de un enorme monstruo. Todos los consultores en Calidad de c\u00f3digo tienen esta pregunta, y cada uno su propia estimaci\u00f3n, que siempre es interesante compartir.<\/p>\n<p>A continuaci\u00f3n, los valores que utilizo:<\/p>\n<h4 style=\"text-align: center\"><em><span style=\"text-decoration: underline\"><strong>Tama\u00f1o 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\">Tama\u00f1o de la aplicaci\u00f3n<\/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\">Bajo<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Medio<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">  Alto<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Muy Alto<br \/>\n<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Tecnolog\u00eda<\/span><\/strong><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Objetos<\/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\">L\u00edneas de c\u00f3digo (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\">Programas Cobol y 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\">2000<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">4500<\/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\">Programas (VB, \u2026), clases (C, C#), procedimientos (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\">1500<\/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\">P\u00e1ginas (ASP, JSP, HTML), clases (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\">1000<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\">Programas, includes, reports, 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\">1500<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Por ejemplo, una aplicaci\u00f3n J2EE es:<\/p>\n<ul>\n<li>De tama\u00f1o reducido por debajo de 50 000 LOC.<\/li>\n<li>De tama\u00f1o medio entre 50 KLoc et 200 KLoc.<\/li>\n<li>De tama\u00f1o alto entre 200 KLoc et 400 Kloc.<\/li>\n<li>De tama\u00f1o muy alto hasta 1 000 Kloc.<\/li>\n<\/ul>\n<p>M\u00e1s all\u00e1 de 1 mill\u00f3n de l\u00edneas de c\u00f3digo J2EE, creo que una aplicaci\u00f3n es &#8216;monstruosa&#8217;. Nota: en la mayor\u00eda de los casos, no ser\u00e1 una aplicaci\u00f3n \u00fanica, sino m\u00e1s bien un sistema compuesto por varios m\u00f3dulos aplicativos. Pero cualquiera que sea el nombre, aplicaci\u00f3n o sistema, si este c\u00f3digo est\u00e1 entre las manos de un \u00fanico equipo de proyecto, entonces se enfrenta a un Everest. Con los problemas espec\u00edficos a la gesti\u00f3n de esta monta\u00f1a de c\u00f3digo.<\/p>\n<p>La siguiente tabla muestra la misma evaluaci\u00f3n, pero basada en el n\u00famero de objetos.<\/p>\n<h4 style=\"text-align: center\"><em><span style=\"text-decoration: underline\"><strong>Tama\u00f1o en numero de objetos<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\">Tama\u00f1o de la aplicaci\u00f3n<\/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\">Bajo<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Medio<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Alto<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\" height=\"18\"><span style=\"font-family: Arial;font-size: 9px\">Muy Alto<br \/>\n<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"60\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Tecnolog\u00eda<\/span><\/strong><\/td>\n<td valign=\"bottom\" width=\"400\" height=\"18\"><strong><span style=\"font-family: Verdana;font-size: x-small\">Objetos<\/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\">Numero de objetos<br \/>\n<\/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\">Programas Cobol y 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\">2000<\/span><\/td>\n<td style=\"text-align: center\" valign=\"top\" width=\"30\"><span style=\"font-family: Arial;font-size: x-small\">4000<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\">Programas (VB, \u2026), clases (C, C#), procedimientos (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\">1500<\/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\">P\u00e1ginas (ASP, JSP, HTML), clases (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\">1000<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\">Programas, includes, reports, 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\">1000<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\">2500<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\">6000<br \/>\n<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Muy a menudo, el n\u00famero de objetos es la \u00fanica indicaci\u00f3n que tenemos: pocos clientes o jefes de proyecto conocen el n\u00famero de l\u00edneas de c\u00f3digo de su aplicaci\u00f3n. Y esta informaci\u00f3n puede ser enga\u00f1osa.<\/p>\n<p>Por ejemplo, tienes una aplicaci\u00f3n con 800 programas Cobol, y la persona encargada de realizar esta extracci\u00f3n entrega adem\u00e1s los 20 000 Copy-books que se encuentran en el mainframe, porque no sabia cuales son los utilizados por la aplicaci\u00f3n. A primera vista, esta es m\u00e1s que super-monstruosa, pero probablemente hay solamente 2 o 3% de las Copys que trabajan con esta aplicaci\u00f3n, por lo tanto, de tama\u00f1o medio. Pero si decides analizar todos las Copys, entonces tienes un gran trabajo por delante para un resultado que no tiene mucho sentido, en t\u00e9rminos de auditor\u00eda de aplicaci\u00f3n, porque el perimetro de an\u00e1lisis no se corresponde con una aplicaci\u00f3n o un equipo de proyecto.<\/p>\n<p>A veces hay una aplicaci\u00f3n J2EE con un mont\u00f3n de p\u00e1ginas JSP o un gran n\u00famero de archivos de configuraci\u00f3n XML (especialmente con algunos frameworks) y pocas clases. De nuevo, el n\u00famero de objetos o l\u00edneas de c\u00f3digo no ser\u00e1 realmente representativo.<\/p>\n<p>He tenido muchas conversaciones sobre este tema con profesionales de auditor\u00eda de calidad de c\u00f3digo, y todos estamos de acuerdo que esto es una indicaci\u00f3n que puede variar considerablemente como se muestra en los ejemplos anteriores. Pero a veces hay que responder a la pregunta &#8216;\u00bfEs una aplicaci\u00f3n grande?&#8217; sin m\u00e1s datos.<\/p>\n<p>Y t\u00fa, \u00bfc\u00f3mo clasificas a una aplicaci\u00f3n?<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ya se acabaron las vacaciones, es hora de volver a nuestros posts. Tengo bastante ideas para esta nueva temporada, pero voy a empezar con un &#8216;quiz&#8217;. Se te pide clasificar una aplicaci\u00f3n seg\u00fan su tama\u00f1o, el n\u00famero de l\u00edneas de c\u00f3digo (LOC) o el n\u00famero de objetos. \u00bfCu\u00e1l es tu estimaci\u00f3n de una peque\u00f1a aplicaci\u00f3n? [&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-163","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/163"}],"collection":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/comments?post=163"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/163\/revisions"}],"predecessor-version":[{"id":164,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/163\/revisions\/164"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=163"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}