{"id":75,"date":"2012-01-05T18:13:00","date_gmt":"2012-01-05T17:13:00","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=75"},"modified":"2013-01-04T18:13:30","modified_gmt":"2013-01-04T17:13:30","slug":"city-model","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/city-model\/","title":{"rendered":"City Model"},"content":{"rendered":"<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-796\" title=\"City1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City1.jpg\" alt=\"\" width=\"339\" height=\"224\" \/><\/a>Tuve un buen regalo de Navidad.<\/p>\n<p>Un plugin Sonar, desarrollado por <a title=\"eXcentia\" href=\"http:\/\/www.excentia.es\/\" target=\"_blank\">eXcentia<\/a>, una empresa de la hermosa ciudad de Valencia, que conoces si te interesan los eventos deportivos como la Copa Am\u00e9rica, F\u00f3rmula 1 y Moto GP, pero tambi\u00e9n  conocida por su especialidad gastron\u00f3mica: <a title=\"Paella\" href=\"http:\/\/es.wikipedia.org\/wiki\/Paella\" target=\"_blank\">la paella<\/a>. <!--more--><\/p>\n<p>Este add-on para Sonar utiliza la libreria WebGL y es una del framework QAlitaX de eXcentia. Proporciona una representaci\u00f3n 3D de una aplicaci\u00f3n en forma de una ciudad modelada a partir de las m\u00e9tricas Sonar. Encontrar\u00e1s este plugin <a title=\"eXcentia City Model\" href=\"https:\/\/servicios.excentia.es\/confluence\/display\/QAX\/QAlitaX+City+Model\" target=\"_blank\">aqu\u00ec<\/a> en el sitio de eXcentia, disponible para Java.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/city11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-830\" title=\"city1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/city11.png\" alt=\"\" width=\"342\" height=\"250\" \/><\/a>Tenemos aqu\u00ed un ejemplo que describe a la perfecci\u00f3n c\u00f3mo funciona:<\/p>\n<ul>\n<li>Los paquetes Java se representan como barrios.<\/li>\n<li>Las clases se representan como edificios.<\/li>\n<\/ul>\n<p>Para cada clase:<\/p>\n<ul>\n<li>La altura del edificio representa el n\u00famero de l\u00edneas de c\u00f3digo.<\/li>\n<li>La anchura del edificio representa el n\u00famero de m\u00e9todos de clase.<\/li>\n<li>El color representa la complejidad, de muy poco verde hasta muy rojo.<\/li>\n<\/ul>\n<p>Bueno. \u00bfDivertido no? No s\u00f3lo es lo bastante entretenido, pero es especialmente \u00fatil.<\/p>\n<p>Por lo general, cuando se hace una auditor\u00eda de calidad de una aplicaci\u00f3n, no tiene mucha informaci\u00f3n. No es que no quieren darnos informaci\u00f3n, sino simplemente porque es rara o inexistente. \u00bfPor qu\u00e9 crees que se pide una evaluaci\u00f3n?<\/p>\n<p>Cuando tengo que hacer una auditoria de una aplicaci\u00f3n, la primera cosa que quiero saber es: \u00bfqu\u00e9 tipo de software es? Antes de empezar, quiero calificar si se trata de un monstruo enorme que necesitar\u00e1 varias horas de an\u00e1lisis, o una lata de gusanos, con un mont\u00f3n de trozos de c\u00f3digo muy complicado y con llamadas din\u00e1micas.<\/p>\n<p>Anteriormente, yo tomaba un poco de tiempo para revisar el c\u00f3digo y tomando notas:<\/p>\n<ul>\n<li>\u00bfCu\u00e1ntos directorios, para tener una idea de cu\u00e1ntos paquetes y su organizaci\u00f3n?<\/li>\n<li>\u00bfCu\u00e1ntos archivos y cuales directorios con muchos archivos, para identificar los paquetes con m\u00e1s clases y entonces m\u00e1s funcionalidades.<\/li>\n<\/ul>\n<p>Ahora, gracias a este plugin Sonar, puedo conseguir esta informaci\u00f3n sin esta fase previa a la investigaci\u00f3n.<\/p>\n<p>Si consideramos una aplicaci\u00f3n con tres directorios principales: common, cliente y server. Puedo analizar solamente la primera carpeta y, en lugar de navegar en diferentes directorios, apuntar a cada \u00e1rea con el fin de tener una idea de la cantidad de paquetes y clases en cada paquete. En el siguiente ejemplo, podemos ver un paquete con una sola clase, de peque\u00f1o tama\u00f1o y baja complejidad. Nos lo confirma Sonar: s\u00f3lo 5 m\u00e9todos en unas pocas l\u00edneas de c\u00f3digo y complejidad casi cero.<a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CitySmallDistrict1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-799\" title=\"CitySmallDistrict\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CitySmallDistrict1.jpg\" alt=\"\" width=\"568\" height=\"534\" \/><\/a>Tambi\u00e9n puedo identificar un componente inusual como este, con un gran n\u00famero de getters y setters que representan a varios cientos de l\u00edneas de c\u00f3digo, pero sin complejidad. Por lo tanto un componente que constituye una estructura de datos importante, pero sin ning\u00fan tratamiento especial, f\u00e1cil de comprender y evolucionar. Nota para el equipo de control de calidad: pruebas s\u00f3lo en los valores.<a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/Citysmallclass1Metrics.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-800\" title=\"Citysmallclass1Metrics\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/Citysmallclass1Metrics.jpg\" alt=\"\" width=\"630\" height=\"448\" \/><\/a>La torre grande atr\u00e1s: n\u00famero de l\u00edneas de c\u00f3digo alto, otra estructura de datos importante con un gran n\u00famero de descriptores de acceso, pero tambi\u00e9n compleja y &#8230; algunos defectos importantes o cr\u00edticos. Esta clase se va directamente al plan de remediaci\u00f3n: dos fallos cr\u00edticos que podr\u00edan afectar la seguridad de la aplicaci\u00f3n, un gran n\u00famero de atributos &#8216;private&#8217; a cambiar por constantes y varios m\u00e9todos a refundir para disminuir la complejidad y por lo tanto mejorar la legibilidad del c\u00f3digo y la capacidad de evoluci\u00f3n.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBiglClass1Metrics.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-801\" title=\"CityBiglClass1Metrics\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBiglClass1Metrics.jpg\" alt=\"\" width=\"566\" height=\"202\" \/><\/a><\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-804\" title=\"City2\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2.jpg\" alt=\"\" width=\"352\" height=\"254\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Pensabas que esta clase era enorme? Echa un vistazo a esto. He a\u00f1adido la carpeta\u00bbcliente\u00bb a mi an\u00e1lisis Sonar (de hecho, Jenkins, ver nuestro <a title=\"Analyse Sonar avec Jenkins\" href=\"http:\/\/qualilogy.com\/es\/analisis-de-codigo-cobol-con-sonar-y-jenkins\" target=\"_blank\">post anterior<\/a>) y no es un peque\u00f1o distrito.<\/p>\n<p>Mira el &#8216;barrio&#8217; a la izquierda, el paquete &#8216;common&#8217;, c\u00f3mo se ve ahora muy peque\u00f1o.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2Up1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-806\" title=\"City2Up\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/City2Up1.jpg\" alt=\"\" width=\"333\" height=\"247\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Una vista por arriba me permite visualizar la estructura interna del paquete &#8216;cliente&#8217;, el n\u00famero y tama\u00f1o de sus clases, y identificar algunos de los componentes que investigar m\u00e1s tarde.<\/p>\n<p>\u00bfSe me olvid\u00f3 mencionar que se puede pivotar la representaci\u00f3n en cualquier direcci\u00f3n?<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityWE30.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-807\" title=\"CityWE30\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityWE30.jpg\" alt=\"\" width=\"317\" height=\"252\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Y ahora, toda la aplicaci\u00f3n.<\/p>\n<p>He a\u00f1adido la parte &#8216;server&#8217; con el fin de obtener una visi\u00f3n completa.<\/p>\n<p>Puedes imaginar en qu\u00e9 direcci\u00f3n investigar, \u00bfverdad? Este \u00faltimo barrio, m\u00e1s grande, m\u00e1s gordo, m\u00e1s alto.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBig3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-809\" title=\"CityBig3\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/CityBig3.jpg\" alt=\"\" width=\"415\" height=\"269\" \/><\/a><\/p>\n<p>E inmediatamente se puede identificar algunas clases interesantes.<\/p>\n<p>&nbsp;<\/p>\n<p>Esta gran torre roja es el componente l\u00f3gico de la flecha verde fino &#8216;Form&#8217; de la clase de l\u00f3gica. Tengo curiosidad por ver lo que se esconde detr\u00e1s de esta entidad l\u00f3gica.<\/p>\n<p>Un vistazo al c\u00f3digo fuente: este componente maneja todos los datos y el procesamiento para el usuario final. Vaya clase. Casi 8 000 l\u00edneas de c\u00f3digo y:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/ClassBig1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-816\" title=\"ClassBig1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2011\/12\/ClassBig1.jpg\" alt=\"\" width=\"408\" height=\"169\" \/><\/a><\/p>\n<ul>\n<li>Liderando el top 5 de la complejidad: m\u00e1s de 1 200 puntos de CC.<\/li>\n<li>En cabeza por el c\u00f3digo duplicado.<\/li>\n<li>Y lo m\u00e1s de defectos, incluyendo cuatro bloqueantes.<\/li>\n<\/ul>\n<p>Tenemos a nuestro campe\u00f3n.<\/p>\n<p>El plugin City Model no s\u00f3lo es muy divertido, es tambi\u00e9n muy \u00fatil.<\/p>\n<p>Sonar hace un an\u00e1lisis de las 150 000 l\u00edneas de c\u00f3digo en menos de 10 minutos. Muy r\u00e1pido.<\/p>\n<p>En lugar de gastar un par de horas para navegar por los diferentes directorios y tomar notas, puedo hacer un an\u00e1lisis incremental y explorar una representaci\u00f3n en 3D del c\u00f3digo fuente.<\/p>\n<p>De inmediato se puede identificar las distintas partes para investigar la densidad de cada paquete, la granularidad de los componentes, especialmente los relacionados con la auditor\u00eda. Por supuesto, a continuaci\u00f3n, buscamos en la lista de defectos para realizar una evaluaci\u00f3n m\u00e1s precisa.<\/p>\n<p>El plugin Model City me da una visi\u00f3n general muy \u00fatil de la aplicaci\u00f3n y me ahorra tiempo y precisi\u00f3n en esa auditoria.<\/p>\n<p>Buen trabajo EXcentia. Un hermoso regalo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tuve un buen regalo de Navidad. Un plugin Sonar, desarrollado por eXcentia, una empresa de la hermosa ciudad de Valencia, que conoces si te interesan los eventos deportivos como la Copa Am\u00e9rica, F\u00f3rmula 1 y Moto GP, pero tambi\u00e9n conocida por su especialidad gastron\u00f3mica: la paella.<\/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-75","post","type-post","status-publish","format-standard","hentry","category-sonar-360"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/75"}],"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=75"}],"version-history":[{"count":1,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/75\/revisions"}],"predecessor-version":[{"id":76,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/75\/revisions\/76"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}