{"id":1741,"date":"2015-12-18T08:21:58","date_gmt":"2015-12-18T07:21:58","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=1741"},"modified":"2015-12-18T12:13:46","modified_gmt":"2015-12-18T11:13:46","slug":"evaluacion-de-un-portafolio-de-aplicaciones-con-el-plugin-3d-city","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/evaluacion-de-un-portafolio-de-aplicaciones-con-el-plugin-3d-city\/","title":{"rendered":"Evaluaci\u00f3n de un portafolio de aplicaciones con el plugin 3D City"},"content":{"rendered":"<p><a href=\"https:\/\/500px.com\/vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-2522\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/Qualilogy_TechnicalDebt_Portfolio.jpg\" alt=\"Qualilogy_TechnicalDebt_Portfolio\" width=\"294\" height=\"442\" \/><\/a>Hemos visto la semana pasada <a href=\"http:\/\/qualilogy.com\/es\/software-quality-maturity-model-technical-debt\/\" target=\"_blank\">los diferentes niveles de madurez en la calidad del software<\/a> y como la medici\u00f3n de la deuda t\u00e9cnica nos ayuda a progresar a trav\u00e9s de estos diferentes niveles, para una gesti\u00f3n proactiva e optimizada de la calidad de las aplicaciones.<\/p>\n<p>En esta ocasi\u00f3n, habl\u00e9 de utilizar la deuda t\u00e9cnica en la presentaci\u00f3n de un portafolio de aplicaciones. Entonces me pregunt\u00e9 como ser\u00eda una representaci\u00f3n 3D de una cartera de este tipo, con el plugin &#8216;3D City Model&#8217; de eXcentia (1).<\/p>\n<p>Ya lo he presentado en unos art\u00edculos anteriores: <a href=\"http:\/\/qualilogy.com\/es\/city-model\/\" target=\"_blank\">City Model<\/a>, <a href=\"http:\/\/qualilogy.com\/es\/city-model-nueva-version\/\" target=\"_blank\">City Model \u2013 Nueva versi\u00f3n<\/a>, <a href=\"http:\/\/qualilogy.com\/es\/ciudad-critica\/\" target=\"_blank\">Ciudad cr\u00edtica<\/a>, donde vimos c\u00f3mo crear nuestras propias f\u00f3rmulas para jugar con el modelo 3D, y finalmente <a href=\"http:\/\/qualilogy.com\/es\/la-metrica-abc\/\" target=\"_blank\">La m\u00e9trica ABC<\/a> para investigar la m\u00e9trica del mismo nombre. <!--more--><\/p>\n<h2>Representaci\u00f3n 3D de un portafolio<\/h2>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_Portfolio_List.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2529\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_Portfolio_List.jpg\" alt=\"SonarQube_Portfolio_List\" width=\"187\" height=\"165\" \/><\/a>Tengo una instancia SonarQube con una cartera de varias aplicaciones, con 5,7 millones de l\u00edneas de c\u00f3digo (MLOC) Cobol, 485.000 l\u00edneas de c\u00f3digo (KLoc) ABAP (aplicaciones SAP) y 205 KLocs de J2EE. Tambi\u00e9n, he creado cuatro portafolios &#8216;Cobol&#8217;, &#8216;J2EE&#8217;, &#8216;SAP&#8217;, &#8216;y un &#8216;Global&#8217; que re\u00fane a los tres anteriores, con la ayuda del\u00a0 <a href=\"http:\/\/www.sonarsource.com\/products\/plugins\/governance\/portfolio-management\/\" target=\"_blank\">plugin &#8216;Views&#8217; de SonarSource<\/a> que puede agregar m\u00faltiples proyectos o an\u00e1lisis de c\u00f3digo en una sola vista o &#8216;Views&#8217; con el fin de consolidar diferentes m\u00e9tricas y mediciones en diferentes ejes: de negocios, tecnolog\u00eda, etc. Entonces, en diferentes portafolios.<\/p>\n<p>Por desgracia, el plugin 3D City no funciona con &#8216;Views&#8217;, aunque eXcentia planea desarrollar esta funcionalidad en el futuro. Pero, afortunadamente, el plugin viene con un widget que me pareci\u00f3 bastante interesante para lo que yo quer\u00eda hacer.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_Configure_Widget.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2532\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_Configure_Widget.jpg\" alt=\"SonarQube_Configure_Widget\" width=\"125\" height=\"52\" \/><\/a>Pues empiezo una sesi\u00f3n como administrador para configurar los widgets de mi dashboard y a continuaci\u00f3n, seleccionar el men\u00fa &#8216;3D Code Metrics&#8217; para mostrar unicamente los widgets de este plugin, y seleccionar el widget &#8216;Filtered Megalopolis&#8217;:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DMegapolis_SelectWidget.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2538\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DMegapolis_SelectWidget.jpg\" alt=\"SonarQube_3DMegapolis_SelectWidget\" width=\"668\" height=\"192\" \/><\/a><\/p>\n<p>Voy a configurarlo con un t\u00edtulo para este gr\u00e1fico, y en el combo-box &#8216;Project filter&#8217;, voy a elegir Projects&#8217;. Cualquier otro filtro basado en &#8216;Views&#8217; no permite visualizar el modelo 3D, as\u00ed que utilizo este widget para ver mi portafolio global, con todas sus aplicaciones.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DMegapolis_Configure.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2539\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DMegapolis_Configure.jpg\" alt=\"SonarQube_3DMegapolis_Configure\" width=\"580\" height=\"300\" \/><\/a><\/p>\n<p>Puedes utilizar diferentes filtros, lo que deber\u00eda permitir agregar proyectos en diferentes ejes. Por ejemplo, puedo crear un filtro con todos los an\u00e1lisis cuyo nombre comienza con &#8216;Cobol&#8217; y entonces agrupar todos los proyectos Cobol, al igual que una cartera espec\u00edfica para estas aplicaciones.<\/p>\n<p>No insistir\u00e9 m\u00e1s en la configuraci\u00f3n del widget, os dejo descubrirlo (los articulos antes mencionados os ayudar\u00e1n), as\u00ed que voy a volver en el dashboard para trabajar con esta representaci\u00f3n.<\/p>\n<p>Puedes cliquear en el gr\u00e1fico para mover tu &#8216;Ciudad&#8217; en todas las direcciones, y tambi\u00e9n utilizar la rueda del rat\u00f3n para cambiar su tama\u00f1o, es decir, su visi\u00f3n general. Tambi\u00e9n puedes hacer clic en cualquier edificio para conseguir informaci\u00f3n sobre la aplicaci\u00f3n que representa.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_CobolProject.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2542\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_CobolProject.jpg\" alt=\"SonarQube_3DCity_CobolProject\" width=\"520\" height=\"500\" \/><\/a><\/p>\n<p>Aqu\u00ed, podemos ver nuestra aplicaci\u00f3n m\u00e1s importante, &#8216;Billing&#8217; en Cobol, con 2,5 millones de lineas de c\u00f3digo (MLoc) en 116 019 funciones (p\u00e1rrafos o secciones en Cobol, m\u00e9todos Java, funciones para lenguajes L4G) y una Complejidad Ciclom\u00e1tica (CC ) de 434 218 puntos. Ah, eso es Cobol, muy grande eh? Aqu\u00ed hay mucho trabajo.<\/p>\n<p>Pero lo que sobre todo me llama la atenci\u00f3n son las dos barras rojas al pie de esas gigantescas aplicaciones Cobol.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_Abap1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2543\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_Abap1.jpg\" alt=\"SonarQube_3DCity_Abap1\" width=\"660\" height=\"346\" \/><\/a><\/p>\n<p>Tenemos dos aplicaciones Abap:<\/p>\n<ul>\n<li>CO_OT1 con casi 350 KLoc y m\u00e1s de 54 000 puntos de CC.<\/li>\n<li>CO_OT2 con menos de 100 KLoc y m\u00e1s de 14 000 puntos de CC.<\/li>\n<\/ul>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_LabMode.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2544\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_LabMode.jpg\" alt=\"SonarQube_3DCity_LabMode\" width=\"647\" height=\"86\" \/><\/a><\/p>\n<p>Haciendo click en lo que parece un tubo de ensayo o un frasco en el men\u00fa del gr\u00e1fico, puedo escoger diferentes valores para diferentes dimensiones de mi ciudad en 3D. Puedo ver que el color representa la complejidad por funci\u00f3n, por lo que proporcionalmente, los objetos Abap de estas dos aplicaciones muy rojas son mucho m\u00e1s complejos que en otras aplicaciones.<\/p>\n<p>Solamente con una primera observaci\u00f3n de esta representaci\u00f3n en 3D de la cartera global de aplicaciones, puedo identificar dos aplicaciones SAP con una mantenabilidad y una capacidad de pruebas (testabilidad) por debajo de las gigantescas aplicaciones Cobol!<\/p>\n<p>Por cierto, el color es el criterio que vamos a utilizar lo m\u00e1s a menudo.<\/p>\n<p>Por ejemplo, en el siguiente gr\u00e1fico, he seleccionado la deuda t\u00e9cnica de &#8216;Blockers&#8217;, es decir, el coste de remediaci\u00f3n de los defectos m\u00e1s problem\u00e1ticos (violaciones de buenas pr\u00e1cticas de programaci\u00f3n &#8216;bloqueantes&#8217;).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_TDBlockers.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2546\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_TDBlockers.jpg\" alt=\"SonarQube_3DCity_TDBlockers\" width=\"586\" height=\"368\" \/><\/a><\/p>\n<p>Vemos que la aplicaci\u00f3n CO_OT2 es ahora verde, es decir sin &#8216;Issue&#8217; de tipo &#8216;Blockers&#8217;, mientras que nuestra primera aplicaci\u00f3n CO_OT1 tiene una\u00a0 deuda t\u00e9cnica &#8216;bloqueante&#8217; de 2 100 minutos (4 d\u00edas y 3 horas).<\/p>\n<p>\u00bfQu\u00e9 otra caracter\u00edstica, posiblemente defectuosa, podemos identificar?<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_DuplicatedLines.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2547\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_DuplicatedLines.jpg\" alt=\"SonarQube_3DCity_DuplicatedLines\" width=\"583\" height=\"346\" \/><\/a><\/p>\n<p>Aqu\u00ed he puesto el porcentaje de lineas duplicadas, com\u00fanmente llamado el c\u00f3digo &#8216;Copiar\/Pegar&#8217;. Cuanto m\u00e1s se duplican bloques de c\u00f3digo, m\u00e1s dif\u00edcil su mantenimiento porque tienes que reproducir cualquier cambio en cada bloque de c\u00f3digo &#8216;Copiado\/Pegado&#8217;, y el riesgo de error ser\u00e1 alto si se olvida uno. En una aplicaci\u00f3n tan dif\u00edcil de testar, eso es jugar con el presupuesto de mantenimiento y la satisfacci\u00f3n \u2013 o insatisfacci\u00f3n \u2013 de los usuarios.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_Comment.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2554\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_3DCity_Comment.jpg\" alt=\"SonarQube_3DCity_Comment\" width=\"494\" height=\"393\" \/><\/a><\/p>\n<p>Este gr\u00e1fico nos permite comprobar que el nivel de comentarios es correcto, lo que no es raro en las aplicaciones de tipo Legacy. El Cobol tambi\u00e9n es verde. A diferencia de los bloques rojos representando aplicaciones J2EE. Se ha puesto de moda no comentar m\u00e1s en Java.<\/p>\n<h2>Evaluaci\u00f3n<\/h2>\n<p>Pues ahora yo s\u00e9 que tengo dos aplicaciones SAP con una complejidad (por funci\u00f3n) m\u00e1s elevada que en cualquier otra aplicaci\u00f3n en el portafolio. Qui\u00e9n dice aplicaci\u00f3n compleja dice aplicaci\u00f3n dif\u00edcil de probar. Con m\u00e1s de 50 000 puntos de CC, CO_OT1 requiere definir planes de pruebas con la mayor antelaci\u00f3n posible en el proyecto (idealmente antes de la fase de desarrollo) y pruebas automatizadas con herramientas de testing, en particular para evitar regresiones, especialmente en un c\u00f3digo con tantas duplicaciones. Adem\u00e1s, un c\u00f3digo complejo significa una mantenabilidad reducida, pues costes de evoluci\u00f3n m\u00e1s importantes, y tambi\u00e9n un mayor riesgo de introducir defectos en el c\u00f3digo durante estas evoluciones, y por lo tanto errores para el usuario final. Esto incrementa la necesidad de invertir en las pruebas.<\/p>\n<p class=\"coding-rules-detail-header\"><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_IssueBlockers.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2555\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_IssueBlockers.jpg\" alt=\"SonarQube_IssueBlockers\" width=\"319\" height=\"402\" \/><\/a>Adem\u00e1s, esta aplicaci\u00f3n tiene una deuda t\u00e9cnica sobre los defectos de tipo &#8216;Blockers&#8217;, no muy importante, pero cuando voy a la pagina &#8216;Issue&#8217; de esta aplicaci\u00f3n, veo 40 violaciones en dos reglas &#8216;System C functions should not be used&#8217; et &#8216;Internal source code processing statements should not be used&#8217;.<\/p>\n<p class=\"coding-rules-detail-header\">En ambos casos, son instrucciones reservadas por SAP, y pueden cambiar o desaparecer de una versi\u00f3n a otra. Esto es tambi\u00e9n uno de los principales problemas de un upgrade de versi\u00f3n SAP, de la m\u00e1s costoso que existen.<\/p>\n<p>De hecho, encontrar estos 40 defectos &#8216;bloqueadores&#8217; en esta aplicaci\u00f3n CO_OT1 unicamente y no en las otras aplicaciones Abap me lleva a creer que este equipo de proyecto \u2013 o este outsourcer \u2013 no conoce esta regla fundamental. Un punto que comprobar, y tal vez pensar en un training.<\/p>\n<p>Por \u00faltimo, la alta tasa de c\u00f3digo duplicado compromete la mantenibilidad y la fiabilidad de la aplicaci\u00f3n. Un motivo m\u00e1s para considerar una refactorizaci\u00f3n, con el objetivo de acercar la deuda t\u00e9cnica a un nivel aceptable. Dicho esto, la documentaci\u00f3n de c\u00f3digo \u2013 el nivel de comentarios \u2013 es decente y deber\u00eda facilitar (relativamente) esta operaci\u00f3n.<\/p>\n<h2 class=\"coding-rules-detail-header\">Conclusi\u00f3n<\/h2>\n<p>Obviamente, yo podr\u00eda proceder a la evaluaci\u00f3n de mi portafolio y obtener la misma informaci\u00f3n de otra manera, por ejemplo con el uso de esta p\u00e1gina &#8216;Compare&#8217; en SonarQube.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_Compare.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2556\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2015\/12\/SonarQube_Compare.jpg\" alt=\"SonarQube_Compare\" width=\"500\" height=\"313\" \/><\/a><\/p>\n<p>Probablemente la utilizar\u00e9 para reunir en una misma tabla m\u00e9tricas y medidas que he identificado previamente con el plugin &#8216;3D City&#8217;. Sin embargo, eso necesitar\u00eda configurar esta p\u00e1gina con todos los proyectos y con un n\u00famero mucho mayor de m\u00e9tricas para identificar problemas potenciales en las diversas \u00e1reas de mis aplicaciones. La ventaja del modelo de &#8216;Ciudad 3D&#8217; es:<\/p>\n<ul>\n<li>Identificaci\u00f3n inmediata de las aplicaciones problem\u00e1ticas.<\/li>\n<li>Una visualizaci\u00f3n m\u00e1s eficaz que una navegaci\u00f3n en largas tablas con muchos mas n\u00fameros.<\/li>\n<li>La elecci\u00f3n de las m\u00e9tricas m\u00e1s \u00fatiles en una auditor\u00eda de portafolio.<\/li>\n<li>Entonces, un diagn\u00f3stico m\u00e1s r\u00e1pido y f\u00e1cil.<\/li>\n<\/ul>\n<p>Luego, puedo hacer un &#8216;zoom&#8217; en las aplicaciones que he identificado y trabajar planes de acci\u00f3n que me permitan hacer frente a estos problemas, y cuantificar con mayor precisi\u00f3n los costes de remediaci\u00f3n asociados con la deuda t\u00e9cnica.<\/p>\n<p>Simple, eficaz y tambi\u00e9n divertido, este plugin &#8216;3D City&#8217; es imprescindible. Sencillamente, a los clientes les encanta.<\/p>\n<p>&nbsp;<\/p>\n<p>(1) Si quieres hacer lo mismo, puedes descargar una versi\u00f3n de prueba del plugin (dos semanas) aqu\u00ed: <a href=\"http:\/\/www.excentia.es\/es\/plugins\/city-model\/descargar\" target=\"_blank\">http:\/\/www.excentia.es\/es\/plugins\/city-model\/descargar<\/a>, o para versiones anteriores de SonarQube: <a href=\"http:\/\/www.excentia.es\/es\/plugins\/city-model\/versiones\" target=\"_blank\">http:\/\/www.excentia.es\/es\/plugins\/city-model\/versiones<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hemos visto la semana pasada los diferentes niveles de madurez en la calidad del software y como la medici\u00f3n de la deuda t\u00e9cnica nos ayuda a progresar a trav\u00e9s de estos diferentes niveles, para una gesti\u00f3n proactiva e optimizada de la calidad de las aplicaciones. En esta ocasi\u00f3n, habl\u00e9 de utilizar la deuda t\u00e9cnica en [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1741","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1741"}],"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=1741"}],"version-history":[{"count":3,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1741\/revisions"}],"predecessor-version":[{"id":1782,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1741\/revisions\/1782"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=1741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=1741"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=1741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}