{"id":577,"date":"2013-06-15T11:45:57","date_gmt":"2013-06-15T10:45:57","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=577"},"modified":"2013-06-16T14:08:37","modified_gmt":"2013-06-16T13:08:37","slug":"creacion-de-metricas-personalizadas-3","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas-3\/","title":{"rendered":"Creaci\u00f3n de metricas personalizadas (3)"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-927\" alt=\"NewMetric3\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/06\/NewMetric3.jpg\" width=\"250\" height=\"350\" \/><\/a><\/p>\n<p>Tercer art\u00edculo de nuestra serie sobre la creaci\u00f3n de m\u00e9tricas personalizadas, y por qu\u00e9 la capacidad de definir sus propias m\u00e9tricas en una herramienta de an\u00e1lisis de c\u00f3digo no es el factor importante que muchos piensan.<\/p>\n<p>Ya vimos en <a title=\"Creaci\u00f3n de m\u00e9tricas personalizadas\" href=\"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas\/\" target=\"_blank\">el primer art\u00edculo<\/a> que las m\u00e9tricas m\u00e1s f\u00e1ciles de crear no eran las m\u00e1s numerosas y en <a title=\"Creaci\u00f3n de m\u00e9tricas personalizadas\" href=\"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas-2\/\" target=\"_blank\">el segundo en esta serie<\/a> que las m\u00e9tricas m\u00e1s importantes e interesantes son tambi\u00e9n las m\u00e1s complejas de implementar, a veces (o a menudo) imposibles.<\/p>\n<p>En este post, vamos a ver este tema de la personalizaci\u00f3n en t\u00e9rminos de tecnolog\u00eda de aplicaci\u00f3n, antes de un art\u00edculo final donde podremos resumir todo e identificar todas las preguntas correctas.\u00a0<!--more--><\/p>\n<h1>M\u00e9tricas personalizadas\u00a0y tecnolog\u00edas<\/h1>\n<p>Cuando se me pregunta si es posible crear m\u00e9tricas con una herramienta de an\u00e1lisis de c\u00f3digo, mi repuesta es \u00ab\u00bfPor qu\u00e9?\u00bb. En la mayor\u00eda de los casos, no tengo respuestas muy precisas, lo que obviamente no es una buena se\u00f1al en cuanto a la existencia de una necesidad real.<\/p>\n<p>La pregunta m\u00e1s espec\u00edfica es en realidad: \u00ab\u00bfPara qu\u00e9 tecnolog\u00edas?\u00bb.<\/p>\n<h2>Java<\/h2>\n<p>Java es el lenguaje m\u00e1s utilizado en las empresas y en la mayor\u00eda de las aplicaciones. Las buenas pr\u00e1cticas de programaci\u00f3n son bien conocidas, y m\u00e1s que bien estandarizadas. Claro, hay puristas que debaten si el uso de una tal instrucci\u00f3n en particular constituye una violaci\u00f3n de las buenas pr\u00e1cticas, pero seamos serios, todos est\u00e1n de acuerdo en la m\u00e9tricas m\u00e1s importantes.<\/p>\n<p>Las reglas correspondientes existen ya desde a\u00f1os, en muchas herramientas, y se integran f\u00e1cilmente (SonarQube sabe c\u00f3mo trabajar con FindBugs, PMD, Checkstyle por ejemplo). De hecho, hay muchas herramientas que incorporan tantas reglas que puedes especializar tu modelo qualim\u00e9trico de acuerdo a tus prioridades:<\/p>\n<ul>\n<li>Aplicaciones nuevas y cr\u00edticas: quieres ir a la caza de errores posibles para ofrecer aplicaciones robustas y eficientes, y reducir los problemas de los usuarios.<\/li>\n<li>Aplicaciones viejas y probadas: algunos problemas y retrasos en la nueva versi\u00f3n no son deseable, pero tu prioridad es controlar los costes de mantenimiento y el presupuesto. Eliges las buenas pr\u00e1cticas de programaci\u00f3n que afectan al mantenimiento de las aplicaciones.<\/li>\n<\/ul>\n<p>Por lo tanto, entiendes que, en mi opini\u00f3n, no hay ninguna raz\u00f3n para establecer tus propias normas de Java, a menos que quieres divertirte, por supuesto, y jugar al gur\u00fa.<\/p>\n<h2>Otras nuevas tecnolog\u00edas<\/h2>\n<p>Para otras nuevas tecnolog\u00edas, quiero decir lenguajes distintos del Java como C++, C# o ,NET, etc. Debo decir que yo no soy un experto en ellos, pero a\u00fan analic\u00e9 algunas aplicaciones de este tipo (no son mis favoritas, la verdad), y s\u00e9 que la mayor\u00eda de las normas de calidad de esas aplicaciones son bastante cerca de las que encontramos en Java. Es decir, un IF es un IF y un bucle es un bucle, por lo que vamos a encontrar las mismas buenas pr\u00e1cticas para la estructuraci\u00f3n de c\u00f3digo, por ejemplo. Luego, claro que siempre hay en todos los lenguajes instrucciones espec\u00edficas que se recomienda no utilizar.<\/p>\n<p>Tambi\u00e9n creo que la oferta en t\u00e9rminos de herramientas y &#8216;repositorio&#8217; de normas de calidad es cada vez m\u00e1s importante para estas tecnolog\u00edas. As\u00ed que los principios antes mencionados con respecto a la personalizaci\u00f3n de las normas para Java son aplicables aqu\u00ed: no reinventar la rueda.<\/p>\n<h2>Frameworks<\/h2>\n<p>De hecho, existe s\u00f3lo un caso aceptable en mi opini\u00f3n: los frameworks propietarios. Imaginamos que trabajas en una arquitectura SOA con un middleware desarrollado y mantenido por la empresa, que encapsula consultas a tratamientos Cobol Mainframe o a cualquier ERP. Evidentemente, es deseable que todos utilizan el framework y que nadie desarrolla su tratamiento sin respetar esa arquitectura.<\/p>\n<p>Cuando se cambia un programa llamado en la capa SOA y los par\u00e1metros de esas llamadas, se modifica el framework &#8211; las APIs para este programa &#8211; para que las aplicaciones sigan funcionando. Pero si alguien ha hecho un peque\u00f1o programa en su rinc\u00f3n, habr\u00e1 que identificarlo y cambiarlo (o volver a escribirlo utilizando el framework). Suponiendo que recordamos de la existencia de este programa, y que se encuentra tambi\u00e9n al autor. Sino, ser\u00e1 mas caro cambiarlo.<\/p>\n<p>Otros casos no tan inusuales: es incre\u00edble la cantidad de empresas que han desarrollado su propia versi\u00f3n de Struts o Hibernate. De acuerdo, la mayor\u00eda son empresas de servicios que han utilizado estos frameworks propietarios en el desarrollo de aplicaciones para sus clientes, asegur\u00e1ndose as\u00ed contratos de mantenimiento de estas aplicaciones por toda la vida. He visto portafolios de aplicaciones Java con hasta 3 o 4 frameworks propietarios diferentes.<\/p>\n<p>As\u00ed pues, en este caso, es aceptable asumir el coste de la personalizaci\u00f3n de m\u00e9trica para asegurarse de que se utiliza el framework. Tambi\u00e9n es necesario que estas reglas sean posibles de implementar. \u00bfC\u00f3mo identificar un tratamiento que no utiliza las instrucciones u objetos de un framework? En el mejor de los casos, se debe identificar todas las instrucciones que tendr\u00e1n acceso a la capa SOA, en nuestro ejemplo anterior, o a la capa de datos para un framework tipo Hibernate. Y que estas instrucciones se encuentran en el c\u00f3digo del desarrollador, y no del framework o de alg\u00fan objeto del framework instanciado por el desarrollador.<\/p>\n<p>Es terriblemente complicado, y hay que trabajar en el \u00e1rbol sint\u00e1ctico (Abstract Tree Metric) y con herramientas y habilidades bastante avanzadas. El coste de crear y mantener esas reglas ser\u00e1 bastante alto.<\/p>\n<p>Incluso el coste de utilizaci\u00f3n de estos indicadores personalizados puede ser importante en el caso de falsos positivos, bastante probable. Me acuerdo de una m\u00e9trica que verificaba que cada p\u00e1gina JSP o HTML estaba asociada a una p\u00e1gina de error. Pero la relaci\u00f3n con esta p\u00e1gina no siempre es sencilla, y a veces pasa por un objeto Struts, a veces por un componente espec\u00edfico de control de errores, etc. Lo primero que yo hac\u00eda siempre era de comprobar esta m\u00e9trica. Por supuesto, si se anuncia a un equipo J2EE que mal maneja lo errores, mientras que el error es tuya &#8230; Mal momento de gran soledad.<\/p>\n<h2>L4G<\/h2>\n<p>Sin detallar lo que llamo un L4G (lenguaje de cuarta generaci\u00f3n), digamos las tecnolog\u00edas de tipo Cliente-Servidor que florecieron en los a\u00f1os 80 y 90: SQLWindows, PowerBuilder, Delphi, NS\/DK (en Francia), etc.<\/p>\n<p>Todav\u00eda hay algunas aplicaciones con estos lenguajes, y frecuentemente se piensa hacer una migraci\u00f3n a otra tecnolog\u00eda, pero nunca se hace. Despu\u00e9s de todo, si funciona &#8230;<\/p>\n<p>No hay muchas herramientas de an\u00e1lisis de c\u00f3digo que cubren estos lenguajes porque no hay bastante demandas de los clientes para que un editor de software toma la pena realizar una inversi\u00f3n, a menos que un cliente sea dispuesto en pagar por el desarrollo. Pues, estos clientes ya tienen suficientes problemas para revisar las reglas m\u00e1s b\u00e1sicas y entonces la personalizaci\u00f3n de nuevas reglas no es una prioridad.<\/p>\n<p>La \u00fanica puede estar en un lenguaje como Oracle Forms que todav\u00eda est\u00e1 bastante utilizado.. Depende un poco de qu\u00e9 parte del mundo hablamos, siempre me sorprende c\u00f3mo algunas herramientas son muy utilizadas en algunos pa\u00edses y no en absoluto en otras regiones. Pero todav\u00eda hay un mont\u00f3n de grandes portafolios y aplicaciones cr\u00edticas en Oracle Forms. Sin embargo, sus due\u00f1os tambi\u00e9n suelen conformarse con tener buenos indicadores antes de pensar en el desarrollo de nuevas reglas.<\/p>\n<h2>Cobol<\/h2>\n<p>COBOL es uno de los lenguajes m\u00e1s normalizados con Java. Eso tiene sentido, teniendo en cuenta que Sun, al origen de la plataforma Java, e IBM, un proveedor l\u00edder de hardware y software en el mundo mainframe, siempre han proporcionado publicaciones sobre la calidad del c\u00f3digo. Pues las reglas en esta \u00e1rea son bien conocidas y estandarizadas. En el peor de los casos, una regla Cobol no se aplica, y se puede desactivar en la herramienta de an\u00e1lisis de c\u00f3digo. Hemos encontrado unos ejemplos anteriormente en este post: &#8216;<a href=\"http:\/\/qualilogy.com\/es\/tu-proprio-modelo-de-calidad\/\">Tu proprio modelo de calidad<\/a>&#8216;.<\/p>\n<p>A m\u00ed me pas\u00f3 una o dos veces encontrar una empresa que hab\u00eda desarrollado una norma espec\u00edfica que no correspond\u00eda a una norma existente. Por ejemplo: sabemos que un programa Cobol comporta diferentes secciones y par\u00e1grafos, equivalente a procedimientos o funciones reutilizables en el programa mismo. Un cliente hab\u00eda hecho una regla seg\u00fan la cual no era posible llamar a un tratamiento (un par\u00e1grafo) si no hab\u00eda sido declarado y programmado previamente (antes de la llamada). La regla se justifica, y es posible implementarla con una expresi\u00f3n regular. Y el cliente insisti\u00f3, as\u00ed que &#8230;<\/p>\n<h3>SAP<\/h3>\n<p>A diferencia del caso anterior, SAP nunca ha sido un especialista en calidad del c\u00f3digo. La prioridad es vender nuevas versiones, no estabilizar el c\u00f3digo ABAP existente. Incluso sucedi\u00f3 que SAP recomienda el uso de instrucciones que representan un riesgo para el rendimiento o la fiabilidad de la aplicaci\u00f3n.<\/p>\n<p>As\u00ed que muchas, si no todas las empresas con aplicaciones ABAP tienen una lista de buenas pr\u00e1cticas de programaci\u00f3n. A menudo nos encontramos con los principales est\u00e1ndares existentes, pero no siempre en la misma forma. Por ejemplo, una norma estipula usar y probar siempre\u00a0el c\u00f3digo de retorno despu\u00e9s de una llamada a otro tratamiento. Pero a veces, esta regla puede definirse en una empresa con m\u00e1s precisi\u00f3n respecto al valor del c\u00f3digo de retorno, que debe corresponder a, por ejemplo: 0 = sin error, 1 = error de este tipo, &#8230; X = errror de tipo X, &#8230; En tal caso, es probable que se necesita desarrollar una m\u00e9trica m\u00e1s avanzadas que la que ya existe, que no s\u00f3lo verifica la presencia de un c\u00f3digo de retorno, sino tambi\u00e9n su valor.<\/p>\n<p>Tambi\u00e9n conocer\u00e1s normas en la herramienta de an\u00e1lisis de c\u00f3digo que el cliente no tiene en su libro de reglas, y tendr\u00e1s que consultar si presentan inter\u00e9s para \u00e9l. A menudo si las interesan, pero no siempre hasta modificar su lista de normas. Esto es normal: va a tener que explicar a todos sus proveedores que no trabajan bien desde hace a\u00f1os\u00a0sin que nadie lo sepa. Y tambi\u00e9n es en el mundo ABAP mundo que encontrar\u00e1s las reglas m\u00e1s complejas o imposibles de automatizar.<\/p>\n<p>As\u00ed que en resumen:<\/p>\n<ul>\n<li>Java y nuevas tecnolog\u00edas: a menos que quieras jugar al qu\u00edmico loco inventando tus propias recetas, es dif\u00edcil justificar la necesidad de nuevas m\u00e9tricas, excepto si &#8230;<\/li>\n<li>Frameworks: pero cuidado, los costes de desarrollo, mantenimiento e incluso de uso de m\u00e9tricas personalizadas para un framework propietario ser\u00e1n altos, muy altos.<\/li>\n<li>Otros lenguajes tipo L4G: poca o ninguna demanda.<\/li>\n<li>Cobol: lo mismo, pero a menudo tendr\u00e1s que realizar un trabajo de personalizaci\u00f3n del modelo cualim\u00e9trico.<\/li>\n<li>SAP ABAP es probablemente el \u00fanico lenguaje para el que la personalizaci\u00f3n de m\u00e9tricas puede justificarse. Pero, no todas reglas se pueden automatizar y son las m\u00e1s complejas de implementar.<\/li>\n<\/ul>\n<p>La creaci\u00f3n de nuevas m\u00e9tricas es a menudo de mayor coste de lo que pensamos. El pr\u00f3ximo post nos permitir\u00e1 identificar cu\u00e1les son los costes ocultos y resumir todas las preguntas que se debe hacer con el fin de evaluar mejor la necesidad real y el retorno de la inversi\u00f3n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tercer art\u00edculo de nuestra serie sobre la creaci\u00f3n de m\u00e9tricas personalizadas, y por qu\u00e9 la capacidad de definir sus propias m\u00e9tricas en una herramienta de an\u00e1lisis de c\u00f3digo no es el factor importante que muchos piensan. Ya vimos en el primer art\u00edculo que las m\u00e9tricas m\u00e1s f\u00e1ciles de crear no eran las m\u00e1s numerosas y [&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-577","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/577"}],"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=577"}],"version-history":[{"count":25,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/577\/revisions"}],"predecessor-version":[{"id":579,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/577\/revisions\/579"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=577"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}