{"id":106,"date":"2012-03-26T21:04:02","date_gmt":"2012-03-26T20:04:02","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=106"},"modified":"2013-01-04T21:04:54","modified_gmt":"2013-01-04T20:04:54","slug":"ciudad-critica","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/ciudad-critica\/","title":{"rendered":"Ciudad cr\u00edtica"},"content":{"rendered":"<p>Segu\u00ed jugando con el plugin City Model para Sonar de eXcentia.<\/p>\n<p>Para quienes se perdieron los anteriores episodios, los puedes encontrar aqu\u00ed: <a title=\"City Model\" href=\"http:\/\/qualilogy.com\/es\/city-model\" target=\"_blank\">City Model<\/a>, <a title=\"City Model - Nouvelle version\" href=\"http:\/\/qualilogy.com\/es\/city-model-nueva-version\" target=\"_blank\">City Model \u2013 Nueva versi\u00f3n<\/a>, <a href=\"http:\/\/qualilogy.com\/es\/la-metrica-abc\" target=\"_blank\">La m\u00e9trica ABC.<\/a><\/p>\n<p>Este plugin es muy divertido. Y todo el mundo me dice que es fant\u00e1stica la representaci\u00f3n visual del c\u00f3digo en forma de una ciudad. Ir r\u00e1pidamente a lo m\u00e1s importante es precioso cuando se debe evaluar peri\u00f3dicamente la calidad de una aplicaci\u00f3n.<\/p>\n<p><!--more--><\/p>\n<p>As\u00ed que pens\u00e9 a unos casos sencillos pero bastante usuales donde su uso ser\u00e1 de gran valor. Esto tambi\u00e9n me dar\u00e1 la oportunidad de demostrar lo f\u00e1cil que es de configurar con diferentes m\u00e9tricas o formulas.<\/p>\n<h3><strong>Ciudad cr\u00edtica<\/strong><\/h3>\n<p>Un cliente me pide una auditor\u00eda de dos de sus aplicaciones. Le hago diferentes preguntas para conocer el \u201cpor qu\u00e9\u201d de esta auditor\u00eda. Puede haber varias razones, y necesito saber un poco m\u00e1s con el fin de responder con precisi\u00f3n a su petici\u00f3n.<\/p>\n<p>Por ejemplo: el quiere externalizar esas dos aplicaciones bastante viejas, y antes de realizar un RFP, le gustar\u00eda saber cu\u00e1l es el nivel de calidad. De hecho, es una buena idea, que le permitir\u00e1 apreciar mejor las ofertas que se presenten y precisar los costes de mantenimiento. En la actualidad, muchos proveedores est\u00e1n dispuestos a hacer cualquier cosa para conseguir un contrato. Una estimaci\u00f3n de la deuda t\u00e9cnica de estas aplicaciones le permitir\u00e1 rechazar las ofertas &#8216;low cost&#8217;, poco realistas.<\/p>\n<p>Otro caso: se le pide a un jefe de un centro de desarrollo que se encarga de una aplicaci\u00f3n. Bastante complicada a primera vista: cientos de miles de l\u00edneas de c\u00f3digo .NET, frameworks propiet\u00e1rios, sin documentaci\u00f3n, etc.. Hay de que ser un poco sospechoso. Le gustar\u00eda tener un poco de visibilidad respecto a la calidad de esta aplicaci\u00f3n y el esfuerzo para recuperar este c\u00f3digo, antes de aceptarla. O conseguir alguna informaci\u00f3n que le permite rechazarla.<\/p>\n<p>De hecho, este cliente utiliza una de esos proveedores &#8216;low cost&#8217; y resulta un poco fastidioso: retrasos en planificaci\u00f3n, presupuestos en aumento con discusiones dif\u00edciles, muchos errores y los usuarios descontentos, algunas situaciones de crisis, degradaci\u00f3n de la imagen de TI, etc. Bueno, el est\u00e1 buscando algunos motivos para poder explicar a su proveedor de que ya, basta.<\/p>\n<p>Pues ahora, s\u00e9 c\u00f3mo ir a lo m\u00e1s importante. Violaciones cr\u00edticas. Mu\u00e9strele algunos buenos defectos bien horrorosos.<\/p>\n<p>Puse en marcha un an\u00e1lisis de c\u00f3digo con Sonar desde Jenkins. Muy sencillo: <a href=\"http:\/\/qualilogy.com\/es\/sonar-jenkins-plugin\" target=\"_blank\">Sonar \u2013 Jenkins plugin<\/a>. Y muy rapido.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_SonarAdmin_Login.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1417\" title=\"Qual_SonarAdmin_Login\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_SonarAdmin_Login.jpg\" alt=\"\" width=\"137\" height=\"33\" \/><\/a>Luego me conect\u00e9 como Admin en mi dashboard Sonar preferido:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModelTop_Add.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1418\" title=\"Qual_Sonar_CityModelTop_Add\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModelTop_Add.jpg\" alt=\"\" width=\"281\" height=\"94\" \/><\/a>Entr\u00e9 en la configuraci\u00f3n de los widgets para a\u00f1adir un widget City Model Top de eXcentia.<\/p>\n<p>Con los siguientes par\u00e1metros:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModelTop_params.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1420\" title=\"Qual_Sonar_CityModelTop_params\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModelTop_params.jpg\" alt=\"\" width=\"583\" height=\"177\" \/><\/a><\/p>\n<ul>\n<li>title: Blocker<\/li>\n<li>topListLength: 5. Quiero ver \u00fanicamente las 5 primeras violaciones de tipo &#8216;bloqueantes&#8217;.<\/li>\n<li>formula: {blocker_violations}.<\/li>\n<\/ul>\n<p>La f\u00f3rmula corresponde al top 5 de los componentes con m\u00e1s violaciones de tipo &#8216;Blocker&#8217;. Las que no se quiere ver en ninguna aplicaci\u00f3n. Las que presentan m\u00e1s riesgos para los usuarios. Las que demuestran que el outsourcer produce un c\u00f3digo de la peor calidad que sea.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel_Add.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1422\" title=\"Qual_Sonar_CityModel_Add\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel_Add.jpg\" alt=\"\" width=\"282\" height=\"94\" \/><\/a> Luego voy a a\u00f1adir el widget City Model y a modificar sus par\u00e1metros. El primer campo &#8216;heightExp&#8217; contiene una f\u00f3rmula para definir la altura de cada edificio seg\u00fan la talla de cada clase en n\u00famero de l\u00edneas de c\u00f3digo (Lines Of Code o LOC).<\/p>\n<p>Esta medida utiliza una funci\u00f3n logar\u00edtmica con el fin de evitar un crecimiento demasiado r\u00e1pido y pues una diferencia de talla que har\u00eda que ciertos &#8216;rascacielos&#8217; sal\u00edan del campo visual y que otros edificios parecen min\u00fasculos. Voy a modificarla con una otra m\u00e9trica: el n\u00famero de &#8216;violaciones&#8217; de buenas pr\u00e1cticas, es decir el n\u00famero de defectos encontrados en el c\u00f3digo:<\/p>\n<address>Math.pow(Math.E &#8211; 0.25, Math.log({violations}))<\/address>\n<address> <\/address>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel_params.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1435\" title=\"Qual_Sonar_CityModel_params\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel_params.jpg\" alt=\"\" width=\"583\" height=\"178\" \/><\/a>Los otros par\u00e1metros son los siguientes:<\/p>\n<ul>\n<li>title: Blocker.<\/li>\n<li>colorExp: num2col({blocker_violations}, 0, 1).<\/li>\n<li>widthExp: {functions}.<\/li>\n<\/ul>\n<p>Quiero que los edificios aparezcan en rojo cuando existe por lo menos una violaci\u00f3n cr\u00edtica, de tipo &#8216;Blocker&#8217;. Pues la f\u00f3rmula &#8216;colorExp&#8217; admite s\u00f3lo un intervalo muy estrecho de valores: verde para 0 &#8216;blocker&#8217; y rojo desde que existe por lo menos un defecto bloqueante, medido por la m\u00e9trica {blocker_violations}.<\/p>\n<p>Una vez guardados estos valores,  he aqu\u00ed lo que se parece a mi &#8216;Ciudad cr\u00edtica&#8217;:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1437\" title=\"Qual_Sonar_CityModel1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel1.jpg\" alt=\"\" width=\"583\" height=\"463\" \/><\/a><\/p>\n<p>No olivdes que puedes hacer zoom en esta representaci\u00f3n o girar horizontalmente o verticalmente, lo cual nos permitir\u00e1 identificar los &#8216;Blockers&#8217; de una o m\u00e1s clases.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1438\" title=\"Qual_Sonar_CityModel2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel2.jpg\" alt=\"\" width=\"367\" height=\"363\" \/><\/a>Esta gran torre verde a la derecha tiene muchos defectos, pero nada cr\u00edtico. Otras clases, incluso con un mayor n\u00famero de m\u00e9todos, tienen al menos una violaci\u00f3n bloqueante.<\/p>\n<p>Estos defectos deben ser corregidos obligatoriamente antes de que la aplicaci\u00f3n sea sometida a pruebas o instalada en el entorno de producci\u00f3n.<\/p>\n<p>Navegando en esta representaci\u00f3n 3D, podemos encontrar clases que de otro modo ser\u00edan indetectables de por sus peque\u00f1as dimensiones, en n\u00famero de l\u00edneas de c\u00f3digo o de m\u00e9todos o de complejidad, pero que cuentan sin embargo un bug de tipo &#8216;Blocker&#8217;.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel31.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1443\" title=\"Qual_Sonar_CityModel3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel31.jpg\" alt=\"\" width=\"564\" height=\"425\" \/><\/a><\/p>\n<p>Podemos ver en la parte inferior izquierda tres clases peque\u00f1as, con s\u00f3lo dos m\u00e9todos y por lo menos un fallo bloqueante.<\/p>\n<p>Ahora tambi\u00e9n queremos identificar las clases con un alto n\u00famero de defectos cr\u00edticos o mayores. Estas son las reglas elegidas con el cliente:<\/p>\n<ol>\n<li>Una clase es de color rojo si tiene al menos una violaci\u00f3n &#8216;Blocker&#8217;.<\/li>\n<li>Una clase es de color rojo si tiene al menos cuatro violaciones &#8216;Critical&#8217;. De lo contrario, el color va de verde a rojo en funci\u00f3n de una escala de 1 a 4 de estas violaciones.<\/li>\n<li>Si la clase no tiene ni defecto bloqueante ni cr\u00edtico, su color se define de acuerdo con el n\u00famero de defectos &#8216;Major&#8217; en una escala de 1 a 100.<\/li>\n<\/ol>\n<p>Entonces, en una escala de 1 a 100:<\/p>\n<ul>\n<li>Una violaci\u00f3n bloqueante = 100.<\/li>\n<li>4 defectos cr\u00edticos = 100, 3 defectos cr\u00edticos = 75, 2 defectos cr\u00edticos y 1 defecto cr\u00edtico = 25.<\/li>\n<li>Los defectos &#8216;Major&#8217; se miden sin factor multiplicativo.<\/li>\n<\/ul>\n<p>Y \u00faltima regla, el color del edificio se define de acuerdo con el m\u00e1s alto de estos valores. Por ejemplo:<\/p>\n<ul>\n<li>Una clase con 30 violaciones &#8216;Major&#8217; sin bloqueante o cr\u00edtica tendr\u00e1 un color (de verde a rojo) igual a 30 en una escala de 1 a 100.<\/li>\n<li>Una clase con 2 defectos cr\u00edticos sin &#8216;Blocker&#8217; o &#8216;Major&#8217; tendr\u00e1 un color igual a 50 o 2 violaciones &#8216;Critical&#8217; x 25.<\/li>\n<li>Una clase con 2 defectos cr\u00edticos y 30 violaciones mayores tendr\u00e1 un valor de 50 (el m\u00e1s alto de los dos valores).<\/li>\n<li>Una clase con 2 defectos cr\u00edticos y 60 violaciones mayores tendr\u00e1 un valor de 60.<\/li>\n<\/ul>\n<p>Y aqu\u00ed est\u00e1 la f\u00f3rmula correspondiente a estas reglas:<\/p>\n<address>num2col(Math.max(({blocker_violations}*100), ({critical_violations}*25), {major_violations}), 0, 100)<\/address>\n<address> <\/address>\n<p>El resultado:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel41.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1448\" title=\"Qual_Sonar_CityModel4\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel41.jpg\" alt=\"\" width=\"557\" height=\"372\" \/><\/a><\/p>\n<p>He personalizado mi dashboard con 3 listas City Model Top que corresponden a estos tres tipos de defecto:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel5.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1449\" title=\"Qual_Sonar_CityModel5\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/03\/Qual_Sonar_CityModel5.jpg\" alt=\"\" width=\"1173\" height=\"465\" \/><\/a><\/p>\n<p>Algunas clases con &#8216;Blockers&#8217; tienen tambi\u00e9n un alto n\u00famero de defectos &#8216;Major&#8217;.<\/p>\n<h3><strong>Conclusi\u00f3n<\/strong><\/h3>\n<div id=\"gt-res-content\">\n<p dir=\"ltr\">En conclusi\u00f3n, un proveedor podr\u00eda tomar ventaja de estos plugins. Por ejemplo, debe responder a un RFP:<\/p>\n<ul>\n<li>Conseguir una cita con este cliente potencial y invitarle a preparar algunos extractos de la aplicaci\u00f3n que desea subcontratar, si es posible con la mayor\u00eda de defectos posible.<\/li>\n<li>Analizar este c\u00f3digo en vivo durante la reuni\u00f3n y ense\u00f1ar los resultados. Puedes jugar con los par\u00e1metros segun los top 10 de cada categor\u00eda o si deseas una ciudad m\u00e1s o menos roja.<\/li>\n<li>Se puede estimar con el cliente una carga de correcci\u00f3n de estos defectos o de refactoring de estas clases.<\/li>\n<li>Puedes pedir al cliente si estos extractos son representativos de su c\u00f3digo y luego evaluar el esfuerzo global de mantenimiento, para hacer una oferta m\u00e1s ajustada.<\/li>\n<\/ul>\n<p dir=\"ltr\">\n<\/div>\n<p>El cliente ser\u00e1 sin duda satisfecho. Por otra parte, los datos conseguidos son una base de informaci\u00f3n objetiva que permiten evitar la t\u00edpica confrontaci\u00f3n \u00abcliente-proveedor\u00bb en favor de un di\u00e1logo m\u00e1s constructivo y realista. El cliente se acordar\u00e1 de esto a la hora de elegir el proveedor a quien confiar\u00e1 sus aplicaciones.<\/p>\n<p>Otro ejemplo, puede usar estos plugins como Quality Gate:<\/p>\n<ul>\n<li>An\u00e1lizar peri\u00f3dicamente el c\u00f3digo con estos plugins.<\/li>\n<li>Corregir inmediatamente cualquier clase en rojo.<\/li>\n<li>Realizar un an\u00e1lisis final antes de entregar una nueva versi\u00f3n de la aplicaci\u00f3n o de sus m\u00f3dulos y ense\u00f1ar al cliente el dashboard Sonar con la ciudad correspondiente.<\/li>\n<li>Puede permitirse algunos defectos, en caso de emergencia, pero planificando corregirlos m\u00e1s tarde.<\/li>\n<\/ul>\n<p>En cualquier caso, te recomiendo utilizar estos plugins Sonar antes de que tu cliente les descubre. O que se los presente.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Segu\u00ed jugando con el plugin City Model para Sonar de eXcentia. Para quienes se perdieron los anteriores episodios, los puedes encontrar aqu\u00ed: City Model, City Model \u2013 Nueva versi\u00f3n, La m\u00e9trica ABC. Este plugin es muy divertido. Y todo el mundo me dice que es fant\u00e1stica la representaci\u00f3n visual del c\u00f3digo en forma de una [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-106","post","type-post","status-publish","format-standard","hentry","category-sonar-360"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/106"}],"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=106"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/106\/revisions"}],"predecessor-version":[{"id":107,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/106\/revisions\/107"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=106"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}