{"id":533,"date":"2013-05-28T16:41:48","date_gmt":"2013-05-28T15:41:48","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=533"},"modified":"2013-06-01T09:50:52","modified_gmt":"2013-06-01T08:50:52","slug":"creacion-de-metricas-personalizadas","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas\/","title":{"rendered":"Creaci\u00f3n de metricas personalizadas"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-877\" alt=\"Cr\u00e9ation de m\u00e9triques personnalis\u00e9es\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/05\/NewMetrics1.jpg\" width=\"374\" height=\"249\" \/><\/a>Un consultor de Calidad me pregunta si \u00ab\u00bfEs posible crear sus propias metricas con Sonar?\u00bb y \u00ab\u00bfC\u00faal es la facilidad de introducir nuevas reglas?\u00bb.<\/p>\n<p>S\u00e9 que el est\u00e1 trabajando con un cliente que busca una herramienta de an\u00e1lisis de c\u00f3digo. Y este es el criterio t\u00edpico que se encuentra tradicionalmente en todas las especificaciones cuando se trata de elegir una herramienta de este tipo.<\/p>\n<p>Se ha convertido en una norma universalmente aceptada, incluso hasta el punto de que algunos proveedores de software hacen demostraciones pre-ventas creando una nueva regla en tiempo real. No que sea cr\u00edtico, pero si que gusta. \u00bfTe imaginas un vendedor de coches abrir el cap\u00f3 de un veh\u00edculo en marcha para ajustar el carburador o rellenar el tanque? Ser\u00eda espectacular, pero \u00bfqu\u00e9 inter\u00e9s? <!--more--><\/p>\n<p>Ya he dicho lo peligroso que es este criterio en este post\u00a0<a title=\"8 criterios de elecci\u00f3n de una herramienta de an\u00e1lisis de c\u00f3digo\" href=\"http:\/\/qualilogy.com\/es\/8-criterios-de-eleccion-de-una-herramienta-de-analisis-de-codigo-12\/\" target=\"_blank\">8 criterios de elecci\u00f3n de una herramienta de an\u00e1lisis de c\u00f3digo<\/a>. Pero no hab\u00eda realmente desarrollado las razones por las que creo que la inclusi\u00f3n de este criterio en la elecci\u00f3n de una herramienta puede ser un error.<\/p>\n<p>La cuesti\u00f3n de este consultor (y amigo) es una oportunidad para presentar algunos argumentos a favor de esta tesis, pero sobre todo para:<\/p>\n<ul>\n<li>Ayudar a los que quieren escoger una herramienta a entender c\u00f3mo utilizar este criterio.<\/li>\n<li>Ayudar a los consultores de Calidad a hacer las preguntas necesarias para una mejor definici\u00f3n y evaluaci\u00f3n de este criterio, en funci\u00f3n del cliente, de su contexto, sus tecnolog\u00edas, los objetivos, etc..<\/li>\n<\/ul>\n<p>En resumen, si hay que usar este criterio, tratar de hacerlo inteligentemente y con el conocimiento que nos permitir\u00e1 obtener el mayor beneficio.<\/p>\n<p>Primero voy a presentar los diferentes tipos de m\u00e9tricas &#8216;custom&#8217; y luego vamos a ver c\u00f3mo utilizarlas, en qu\u00e9 tecnolog\u00edas y con cual coste.<\/p>\n<h2>Los diferentes tipos de m\u00e9tricas<\/h2>\n<p>Hay todo tipo de m\u00e9tricas, algunas simples, otras m\u00e1s complejas y algunas imposibles. Nota preliminar para los puristas de la Calidad y de la sem\u00e1ntica: en aras de la simplicidad, se reunir\u00e1n en el mismo t\u00e9rmino de \u00abm\u00e9tricas\u00bb diferentes nociones de \u00abreglas\u00bb, \u00abindicadores\u00bb, \u00abdiagn\u00f3stico\u00bb, etc. Muchas gracias por no formalizarse del vocabulario utilizado. Esto es mi blog, no el Diccionario de la Academia Francesa.<\/p>\n<h3>M\u00e9tricas simples, tipo indicador<\/h3>\n<p>Supongamos que quieres medir el n\u00famero de errores cr\u00edticos o \u00abBlockers\u00bb con el tama\u00f1o del c\u00f3digo. Una aplicaci\u00f3n de 50.000 l\u00edneas de c\u00f3digo cuenta con 500 defectos cr\u00edticos: el valor de este indicador, en este ejemplo, ser\u00e1 de una violaci\u00f3n cr\u00edtica por cada 100 l\u00edneas de c\u00f3digo.<\/p>\n<p>En este caso, no hay que hablar de m\u00e9trica sino de indicador porque este resultado no se consigue directamente del an\u00e1lisis del c\u00f3digo, pero de la comparaci\u00f3n de dos valores calculados por el an\u00e1lisis. De hecho, no hace falta que la herramienta pueda crear m\u00e9tricas, simplemente necesitamos tener acceso a los resultados del an\u00e1lisis, por lo general por una consulta en la base de datos donde se almacenan estos resultados, o el uso de un servicio web en el caso de Sonar.<\/p>\n<h3>Buenas pr\u00e1cticas de programaci\u00f3n<\/h3>\n<p><a href=\"http:\/\/qualilogy.com\/es\/wp-content\/uploads\/sites\/4\/2013\/05\/DblCm.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-thumbnail wp-image-543\" alt=\"DblCm\" src=\"http:\/\/qualilogy.com\/es\/wp-content\/uploads\/sites\/4\/2013\/05\/DblCm-150x150.jpg\" width=\"150\" height=\"150\" \/><\/a>Estas m\u00e9tricas miden el uso de sintaxis que violan las buenas pr\u00e1cticas de programaci\u00f3n. En todos los lenguajes de desarrollos, algunas instrucciones est\u00e1n prohibidas porque representan un riesgo para el correcto funcionamiento de la aplicaci\u00f3n, su rendimiento, la facilidad de mantenimiento y la legibilidad del c\u00f3digo, etc. El objetivo de estas m\u00e9tricas es de identificar las sintaxis incorrectas para contar el n\u00famero de ocurrencias.<\/p>\n<p>Esta suele ser la m\u00e9trica que se asigna al criterio de \u201ccreaci\u00f3n de nuevas reglas\u201d, y el caso m\u00e1s utilizado en una demostraci\u00f3n. Es relativamente sencillo de realizar este tipo de m\u00e9trica porque se trata de encontrar una cadena de texto correspondiente a la instrucci\u00f3n prohibida: por ejemplo, \u00abcatch (Throwable)\u00bb en Java, que no cumple con una buena gesti\u00f3n de errores. O \u00abBREAK\u00bb en ABAP que brutalmente interrumpe el programa o su equivalente \u00abSTOP &#8230; RUN\u00bb en Cobol. Un programador puede utilizar estas instrucciones para depuraci\u00f3n del c\u00f3digo, y luego olvidarse de eliminarlas, con el riesgo de que esta instrucci\u00f3n se ejecuta en un entorno de producci\u00f3n. No conozco ning\u00fan \u00abBlockers\u00bb m\u00e1s bloqueante.<\/p>\n<p>La b\u00fasqueda de una cadena de texto no es muy complicado, pero vamos a considerar todos los casos:<\/p>\n<ul>\n<li><strong>\u2018catch(Throwable xxx)<\/strong>\u2019<\/li>\n<li><strong>\u2018catch (Throwable xxx)\u2019<\/strong>, con un espacio antes del par\u00e9ntesis o m\u00e1s espacios o una tabulaci\u00f3n<\/li>\n<li>incluso : <strong>\u2018catch<\/strong><br \/>\n<strong> (Throwable xxx)\u2019<\/strong> con un salto de l\u00ednea antes del par\u00e9ntesis.<\/li>\n<\/ul>\n<p>El desarrollo de una tal m\u00e9trica requiere el uso de expresiones regulares &#8211; las famosas RegExp &#8211; que no voy a detallar aqu\u00ed, ya que nunca he sido un experto en ellas.<\/p>\n<p>S\u00f3lo quiero decir que incluso una m\u00e9trica sencilla basada en una \u00fanica instrucci\u00f3n o una sencilla cadena necesitar\u00e1 un m\u00ednimo de reflexi\u00f3n, si no de dise\u00f1o para identificar a todos los casos posibles, y el control de sintaxis RegExp y un ciclo de pruebas para garantizar que todos los casos est\u00e1n cubiertos.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/es\/wp-content\/uploads\/sites\/4\/2013\/05\/MetreRuban.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-545\" alt=\"MetreRuban\" src=\"http:\/\/qualilogy.com\/es\/wp-content\/uploads\/sites\/4\/2013\/05\/MetreRuban-300x252.jpg\" width=\"204\" height=\"172\" srcset=\"http:\/\/qualilogy.com\/es\/wp-content\/uploads\/sites\/4\/2013\/05\/MetreRuban-300x252.jpg 300w, http:\/\/qualilogy.com\/es\/wp-content\/uploads\/sites\/4\/2013\/05\/MetreRuban-624x525.jpg 624w, http:\/\/qualilogy.com\/es\/wp-content\/uploads\/sites\/4\/2013\/05\/MetreRuban.jpg 630w\" sizes=\"(max-width: 204px) 100vw, 204px\" \/><\/a>La mayor\u00eda, si no todas las herramientas de an\u00e1lisis de c\u00f3digo permiten la creaci\u00f3n de m\u00e9tricas de este tipo. Con mayor o menor facilidad por supuesto, pero la facilidad \u00abpara introducir una nueva m\u00e9trica\u00bb no es, de hecho, el criterio m\u00e0s importante porque vamos a pasar la mayor parte del tiempo en el desarrollo y las pruebas de expresiones regulares.<\/p>\n<p>Mi consejo es simplemente identificar las herramientas que realmente ofrecen un proceso poco sencillo para crear nuevas reglas:<\/p>\n<ul>\n<li>Uso de archivos XML para definir reglas personalizadas y manejar expresiones regulares, archivos necesariamente ubicados en un directorio espec\u00edfico (por lo general no mencionado en la documentaci\u00f3n) para que el software les tenga en cuenta.<\/li>\n<li>Normas de gesti\u00f3n de IDs no automatizadas: cada regla debe tener un identificador \u00fanico (un n\u00famero de regla). Hay que administrar los indices de sus propias reglas, y puedes estar seguro de que encontrar\u00e1s conflictos de identificadores, a veces hasta con los IDs del software cuando se a\u00f1aden nuevas reglas.<\/li>\n<li>Programaci\u00f3n de tratamientos en la base de datos para contar el n\u00famero de violaci\u00f3nes de las reglas que hemos establecido.<\/li>\n<li>Gesti\u00f3n no automatizada de la m\u00e9trica en la pantalla o el dashboard: algunas herramientas agrupan m\u00e9tricas por categor\u00eda, peso, y hasta por diferentes factores. Entonces, tienes que especificar en qu\u00e9 categor\u00eda o qu\u00e9 grupo de m\u00e9tricas deseas que aparezca la m\u00e9trica.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n en el pr\u00f3ximo post, hablaremos de m\u00e9tricas complejas o imposibles.<\/p>\n<p>Hasta luego.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un consultor de Calidad me pregunta si \u00ab\u00bfEs posible crear sus propias metricas con Sonar?\u00bb y \u00ab\u00bfC\u00faal es la facilidad de introducir nuevas reglas?\u00bb. S\u00e9 que el est\u00e1 trabajando con un cliente que busca una herramienta de an\u00e1lisis de c\u00f3digo. Y este es el criterio t\u00edpico que se encuentra tradicionalmente en todas las especificaciones cuando [&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-533","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/533"}],"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=533"}],"version-history":[{"count":22,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/533\/revisions"}],"predecessor-version":[{"id":535,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/533\/revisions\/535"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=533"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}