{"id":604,"date":"2013-06-24T16:18:29","date_gmt":"2013-06-24T15:18:29","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=604"},"modified":"2013-06-28T15:54:36","modified_gmt":"2013-06-28T14:54:36","slug":"creacion-de-metricas-personalizadas-4","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas-4\/","title":{"rendered":"Creaci\u00f3n de metricas personalizadas (4)"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright  wp-image-962\" alt=\"M\u00e9triques personnalis\u00e9es\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/06\/NewMetric4.jpg\" width=\"333\" height=\"279\" \/><\/a><\/p>\n<p>\u00daltimo art\u00edculo de nuestra serie sobre la creaci\u00f3n de m\u00e9tricas personalizadas.<\/p>\n<p>Vamos a ver los diferentes costes asociados a la personalizaci\u00f3n de las m\u00e9tricas, que son generalmente mal identificados o completamente ignorados en un proyecto de adquisici\u00f3n de una herramienta de an\u00e1lisis de c\u00f3digo.<\/p>\n<p>Terminaremos con un resumen de todas las diferentes preguntas que hacer &#8211; o pedir a un cliente &#8211; para determinar si la creaci\u00f3n de m\u00e9tricas personalizadas es realmente un criterio para la elecci\u00f3n de una herramienta de este tipo. \u00a0<!--more--><\/p>\n<h2>Costes ocultos<\/h2>\n<h3>Coste de implantaci\u00f3n<\/h3>\n<p>Un cliente suele hacer la pregunta \u00ab\u00bfEs f\u00e1cil crear nuevas m\u00e9tricas con esta herramienta?\u00bb o \u00ab\u00bfCu\u00e1l es la dificultad?\u00bb, pero no \u00ab\u00bfCu\u00e1l es el coste de gestionar mis propias m\u00e9tricas?\u00bb. Sin embargo, hay diferentes costes de diferentes tipos.<\/p>\n<p>En primer lugar, hay un coste para la creaci\u00f3n de m\u00e9tricas. Obviamente, los editores de software no lo dicen, pero se centran en ocultarlos con una brillante demostraci\u00f3n de creaci\u00f3n de una nueva regla. Pero m\u00e1s a menudo ser\u00e1 <a href=\"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas\/\" target=\"_blank\">una m\u00e9trica sencilla<\/a> y no <a href=\"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas-2\/\" target=\"_blank\">una regla compleja<\/a>. Y como lo hemos visto en el tercer art\u00edculo de esta serie, dedicado a <a href=\"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas-3\/\" target=\"_blank\">la personalizaci\u00f3n de m\u00e9tricas por tecnolog\u00eda<\/a>, son estas reglas complejas que son las m\u00e1s \u00fatiles y las m\u00e1s numerosas.<\/p>\n<p>Pues, contrariamente a lo que a menudo se quiere creer, una nueva m\u00e9trica no se realiza con un chasqueo de dedos, sino que requiere un m\u00ednimo de reflexi\u00f3n, por no decir, de dise\u00f1o:<\/p>\n<ul>\n<li>\u00bfQuieres identificar en el c\u00f3digo una violaci\u00f3n a una buena pr\u00e1ctica de programaci\u00f3n?\n<ul>\n<li>\u00bfY en este caso, se trata de una instrucci\u00f3n identificada por una cadena \u00fanica o m\u00e1s bien un compuesto de sentencias del tipo\u00a0&#8216;IF &#8230; THEN &#8230; ELSE &#8230; ENDIF&#8217;?<\/li>\n<\/ul>\n<\/li>\n<li>\u00bfLo que piensas implementar es una regla de arquitectura (tipo framework), como lo hemosvisto en\u00a0<a href=\"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas-3\/\" target=\"_blank\">el tercero post de esta serie<\/a>?<\/li>\n<\/ul>\n<p>Incluso para una m\u00e9trica sencilla basada en una sentencia \u00fanica, se debe pensar en todas las posibles expresiones o formas de usarla. Por ejemplo, un <strong>catch()<\/strong> se puede escribir con un espacio o no antes del par\u00e9ntesis, y a veces, lo que parece un espacio es en realidad una tabulaci\u00f3n. Incluso se puede escribir en m\u00e1s de una l\u00ednea.<\/p>\n<p>Incluso para una m\u00e9trica sencilla, necesitamos pensarlo un poco para construir la expresi\u00f3n regular, la famosa RegExp y probablemente m\u00faltiples ensayos. Cr\u00e9ame, solamente en una demo funciona esto funciona la primera vez!<\/p>\n<p>As\u00ed que puedes imaginar que para una sentencia compuesta, se vuelve mucho m\u00e1s complicado. Y hay un mont\u00f3n de reglas que combinan varias instrucciones, tales como las reglas de estructuraci\u00f3n del c\u00f3digo, con declaraciones anidadas (un\u00a0IF dentro de un IF dentro de un IF, etc.),\u00a0o violaciones de las mejores pr\u00e1cticas de rendimiento con instrucciones peligrosas cuando se encuentran en un bucle (creaci\u00f3n de objetos por ejemplo).<\/p>\n<p>Y solamente hemos hablado de la identificaci\u00f3n del c\u00f3digo espec\u00edfico a una m\u00e9trica a trav\u00e9s de una expresi\u00f3n regular. Si tienes que navegar dentro de un \u00e1rbol de sintaxis, ser\u00e1 m\u00e1s complicado. Si tienes que programar una regla de arquitectura, ser\u00e1 m\u00e1s complicado. En la mayor\u00eda de los casos, siempre es m\u00e1s complicado.<\/p>\n<p>El desarrollo de una nueva m\u00e9trica no se termina siempre con la identificaci\u00f3n de instrucciones dentro de un archivo, tambi\u00e9n puede ser necesario programar el c\u00e1lculo de los resultados, la visualizaci\u00f3n de la m\u00e9trica en el cuadro de mando, o otro tipo de c\u00e1lculo requerido por el software. Una herramienta mide la calidad con el el porcentaje de violaciones en comparaci\u00f3n con todas las instrucciones del mismo tipo. Por ejemplo, un <strong>catch()<\/strong> vaci\u00f3 no es una buena pr\u00e1ctica. Si quieres implementar una m\u00e9trica de este tipo, necesitar\u00e1s medir cuantos <strong>catch()<\/strong> vac\u00edos se encuentran en todos los <strong>catch()<\/strong> de la aplicaci\u00f3n, para que la m\u00e9trica aparezca correctamente en el dashboard.<\/p>\n<p>Por \u00faltimo, todas las herramientas necesitan categorizar cualquier m\u00e9trica sobre un eje de gravedad &#8211; de Minor a Critical o Blocker. Algunas herramientas tambi\u00e9n requieren que se especifiquen par\u00e1metros adicionales, por ejemplo, donde se encuentra la regla en el modelo &#8216;calim\u00e9trico&#8217;, dependiendo de si afecta el mantenimiento, o el rendimiento, la fiabilidad, etc. Estos par\u00e1metros se pueden guardar en un fichero, o en la base de datos, pero hay que definirlos correctamente, con el ID correcto de la m\u00e9trica, no equivocarse, comprobar que se visualiza bien en la pantalla con el resultado esperado, etc.<\/p>\n<p>Lo que quiero decir es que la creaci\u00f3n de m\u00e9tricas personalizadas debe abordarse como un proyecto con:<\/p>\n<ul>\n<li>Una fase de dise\u00f1o: \u00bfcu\u00e1les son los par\u00e1metros que deseas desarrollar? \u00bfEst\u00e1n documentadas en un cuaderno de reglas o cualquier otro documento? \u00bfCu\u00e1les son los diferentes casos, las diferentes sintaxis posibles, la expresi\u00f3n regular correspondiente, etc.<\/li>\n<li>Una fase de desarrollo: escribir la RegExp\u00a0o la programaci\u00f3n de la navegaci\u00f3n en el \u00e1rbol de an\u00e1lisis, y un m\u00ednimo de pruebas unitarias.<\/li>\n<li>Una fase de control de calidad, con casos de pruebas que cubren todos los casos posibles identificados previamente, combinando varias instancias de la misma instrucci\u00f3n en el mismo programa, la verificaci\u00f3n de los resultados &#8211; contar las violaciones, comprobar e identificar posibles falsos positivos &#8211; y como aparece en el dashboard.<\/li>\n<\/ul>\n<h3>Costes de mantenimiento<\/h3>\n<p>El coste de desarrollo de reglas personalizadas puede llegar r\u00e1pidamente a varias decenas de d\u00edas-hombre. Pero hay otros costes posteriores.<\/p>\n<p>El primero, que es el m\u00e1s frecuente, pero que a menudo no se piensa: \u00bfqu\u00e9 pasar\u00e1 cuando se instalar\u00e1 una nueva versi\u00f3n del software de an\u00e1lisis de c\u00f3digo? Has hecho un desarrollo, que se guarda necesariamente en alg\u00fan lugar: unos archivos, un directorio, un repositorio, una base de datos, etc.<\/p>\n<p>Por ejemplo, la expresi\u00f3n regular se define en un archivo XML localizado en un directorio determinado, as\u00ed como en una tabla en la base de datos, con un procedimiento almacenado para calcular los resultados. Bueno, \u00bfqu\u00e9 sucede cuando se actualiza el software? La nueva versi\u00f3n guarda los archivos xml en el directorio o hay que reinstalarlos despu\u00e9s? \u00bfO hay que a\u00f1adir nuestras m\u00e9tricas en un fichero que viene con la nueva versi\u00f3n para poder usarlas con las nuevas m\u00e9tricas entregadas en la nueva versi\u00f3n?<\/p>\n<p>\u00bfDebes importar y volver a aplicar el procedimiento almacenado? \u00bfDebes importar tu propio modelo &#8216;cualim\u00e9trico&#8217; con la definici\u00f3n de tus propias reglas para que aparezcan en la interfaz de la nueva versi\u00f3n?<\/p>\n<p>Otro tipo de coste de mantenimiento: el software ha cambiado y tu desarrollo ya no funciona. S\u00ed, el modo de gesti\u00f3n de las m\u00e9tricas puede, y sin duda va a cambiar con el tiempo. Tendr\u00e1s que adaptar tu \u00abpaquete\u00bb de m\u00e9tricas\u00a0para adaptarlo. Coste de mantenimiento evolutivo.<\/p>\n<p>Tambi\u00e9n se puede ocurrir errores. Por ejemplo, debes especificar un n\u00famero o ID para cada una de tus m\u00e9tricas y, mala suerte, la nueva versi\u00f3n del software implementa nuevas m\u00e9tricas que utilizan estos identificadores. Tus reglas no aparecen en la nueva versi\u00f3n del cuadro de mando y debes averiguar por qu\u00e9, y luego hacer cambios con el fin de resolver este conflicto de IDs. Coste de mantenimiento correctivo.<\/p>\n<p>Esto significa que tendr\u00e1s que gestionar tus desarrollos en versiones. He visto clientes muy descontentos porque encontraban regresiones en sus m\u00e9tricas despu\u00e9s de instalar una nueva versi\u00f3n del software, cuando en realidad hab\u00edan instalado una versi\u00f3n anterior de sus normas en la que no todav\u00eda no estaban presentes esas m\u00e9tricas. Y en un tal caso, se necesita tiempo para investigar e identificar el origen de la llamada \u00abregresi\u00f3n\u00bb.<\/p>\n<p>Por \u00faltimo, para evitar esto, lo mejor es poner a prueba de manera sistem\u00e1tica y profunda la nueva versi\u00f3n con sus propias reglas. Esto significa definir y documentar y realizar algunos procedimientos de pruebas (adem\u00e1s de la documentaci\u00f3n del proceso de actualizaci\u00f3n del software, la gesti\u00f3n de versiones de tu \u00abpaquete\u00bb de normas, etc.).<\/p>\n<p>As\u00ed que, b\u00e1sicamente, he incluido en la misma categor\u00eda de costes de mantenimiento todo tipo de costes de actualizaci\u00f3n, correcciones y cambios, pruebas, documentaci\u00f3n, etc. Sin embargo, es importante identificarlos desde el principio pues, como se puede ver, no son ligeras.<\/p>\n<h2>Las preguntas<\/h2>\n<p>La creaci\u00f3n de m\u00e9tricas personalizadas s\u00f3lo se justifica si existe una necesidad real e bastante importante. Pues que sea f\u00e1cil crearlas no debe ser un criterio para la selecci\u00f3n de una herramienta de an\u00e1lisis de c\u00f3digo. A lo mejor, es solamente un &#8216;plus&#8217;.<\/p>\n<p>Si quieres comprar una bicicleta, y puedes permitirte una bicicleta de alta gama, con un cuadro en titanio, una horquilla en carbono, 15 velocidades y ruedas &#8216;tubeless&#8217;. Pero si solamente tienes la intenci\u00f3n de usarla para ir de compras, no ser\u00e1 lo m\u00e1s pr\u00e1ctico, y el precio ser\u00e1 muy superior a los beneficios que podr\u00e1s conseguir. A menos que tu intenci\u00f3n es hacerte feliz, por supuesto.<\/p>\n<p>Por desgracia, esto es a menudo el caso, y por lo tanto es dif\u00edcil hacer que alguien renuncia cuando ha decidido hacerse un regalo. Es nuestro trabajo como consultor de comprobar la existencia real de una necesidad y medir los costes ocultos. As\u00ed que las preguntas:<\/p>\n<ul>\n<li>\u00bfTiene usted normas de calidad y buenas pr\u00e1cticas que desea automatizar? Si no, yo no puedo imaginar realmente un caso que justifica crear sus propios indicadores.<\/li>\n<\/ul>\n<p>Muy a menudo, la repuesta ser\u00e1 &#8216;No pero &#8230;&#8217; seguida de un intento de justificarse con argumentos no muy precisos. Hay que defender su peque\u00f1o capricho. En este caso, le recuerdo que el 90% de los usuarios de una herramienta de an\u00e1lisis de c\u00f3digo usan las reglas existentes, y el 90% del 10% que desarrollan sus propias m\u00e9tricas las abandonan despu\u00e9s de dos a\u00f1os.<\/p>\n<ul>\n<li>\u00bfQu\u00e9 tipo de m\u00e9trica?<\/li>\n<\/ul>\n<p>Tuve un cliente que quer\u00eda absolutamente las m\u00e9tricas de Halstead. Estas medidas cuentan el n\u00famero de operandos y \/ o de operadores, tal como una medida de la complejidad. Otras veces, se requiere los \u00edndices de mantenimiento del SEI (combinaci\u00f3n de indicadores como el n\u00famero de l\u00edneas de c\u00f3digo, la complejidad ciclom\u00e1tica, la tasa de comentarios &#8230;).<\/p>\n<p>Estas m\u00e9tricas son obsoletas, por lo que la mayor\u00eda de las herramientas de an\u00e1lisis de c\u00f3digo no las ofrecen m\u00e1s. \u00bfPor qu\u00e9 invertir en la creaci\u00f3n de este tipo de m\u00e9tricas, mientras que las existentes son m\u00e1s relevantes? \u00bfPor qu\u00e9 a\u00f1adir carga en el uso de una herramienta, la lectura de un cuadro de mando y la interpretaci\u00f3n de los resultados con mediciones imprecisas?<\/p>\n<p style=\"font-size: 1rem\">Tambi\u00e9n est\u00e1n aquellos que no son satisfechos con la cat\u00e9gorias\u00a0de m\u00e9tricas &#8216;Critical&#8217; o &#8216;Blockers&#8217;, y desean crear una categor\u00eda especial para ellos, algo as\u00ed como\u00a0&#8216;super-extra-blockers&#8217;. Esto lo llamo yo el s\u00edndrome de Spinal Tap: <a style=\"line-height: 1.714285714;font-size: 1rem\" href=\"http:\/\/www.youtube.com\/watch?v=XuzpsO4ErOQ\" target=\"_blank\">This one goes to eleven<\/a>.<\/p>\n<ul>\n<li>\u00bfQu\u00e9 tecnolog\u00edas?<\/li>\n<\/ul>\n<p>Como visto en <a href=\"http:\/\/qualilogy.com\/es\/creacion-de-metricas-personalizadas-3\/\" target=\"_blank\">el post anterior<\/a>, es en el campo de las aplicaciones de SAP que se encontrar\u00e1 muy a menudo una necesidad real. En el mundo de las nuevas tecnolog\u00edas. J2EE, NET, etc. ya hay suficientes normas para no crear nuevas, salvo el caso particular de los frameworks propietarios.<\/p>\n<ul>\n<li>\u00bfQu\u00e9 porcentaje del portafolio de aplicaciones para esa tecnolog\u00eda?<\/li>\n<\/ul>\n<p>Siempre hay clientes que quieren m\u00e9tricas para lenguajes poco comunes o antiguos: PL1, Pacbase, Informix, Fortran, etc.\u00a0Incluso tienen a menudo\u00a0una lista de reglas que utilizan para realizar controles manuales. Pues si, es una necesidad real, pero las aplicaciones desarrolladas en esos idiomas rara vez representan m\u00e1s del 10% del portafolio de las aplicaciones, son por lo general bastante antiguas, probadas, no conocen tantos cambios, etc.<\/p>\n<ul>\n<li>\u00bfTiene una lista de reglas u otra documentaci\u00f3n de ellas?<\/li>\n<\/ul>\n<p>Si no es el caso, dudo mucho que estas normas se apliquen.<\/p>\n<p>Si tienes una necesidad real de m\u00e9tricas personalizadas, si debes elegir una herramienta de an\u00e1lisis de c\u00f3digo bas\u00e1ndote en este criterio de creaci\u00f3n y gesti\u00f3n de m\u00e9tricas personalizadas, entonces es muy importante identificar con precisi\u00f3n:<\/p>\n<ul>\n<li>\u00bfCu\u00e1les son los diferentes pasos necesarios para crear una m\u00e9trica?<\/li>\n<li>\u00bfQu\u00e9 la herramienta de an\u00e1lisis de c\u00f3digo sabe hacer de forma autom\u00e1tica?<\/li>\n<li>Lo que no sabe hacer: te toca a ti.<\/li>\n<li>\u00bfCu\u00e1les son las diferentes acciones que se deben realizar en caso de actualizaci\u00f3n de la versi\u00f3n del software?<\/li>\n<\/ul>\n<p>De los 3 o 4 softwares que has elegido en &#8216;short-list&#8217;, prepara una prueba, como un piloto con unos casos:<\/p>\n<ul>\n<li><span style=\"line-height: 1.714285714;font-size: 1rem\">Desarrollo de un indicador del tipo m\u00e9trica sencilla. Por ejemplo, poder introducir el coste del proyecto \u00a0o el n\u00famero de d\u00edas para realizar la \u00faltima versi\u00f3n o el n\u00famero de personas en el equipo del proyecto, y lo dividir por el n\u00famero de errores de tipo Blockers o Critical o Major.<\/span><\/li>\n<li><span style=\"line-height: 1.714285714;font-size: 1rem\">Desarrollo de una m\u00e9trica sencilla de tipo buena pr\u00e1ctica de programaci\u00f3n. Por ejemplo, identificar todas las instrucciones write() y writeln() &#8211; vamos a decir que ellas se proh\u00edban en favor de un sistema de mensajes desarrollado &#8216;en casa&#8217;. Prepara algunos archivos de prueba con casos bien retorcidos con espacios o saltos de l\u00ednea entre diferentes de estas instrucciones y sus par\u00e1metros.<\/span><\/li>\n<li><span style=\"line-height: 1.714285714;font-size: 1rem\">Desarrollo de una m\u00e9trica compleja: identificar las instrucciones anteriores write() y writeln() en un bucle. Una vez m\u00e1s, imagina unas pruebas muy complejas con bucles dentro de bucles en varias p\u00e1ginas, por ejemplo.<\/span><\/li>\n<li><span style=\"line-height: 1.714285714;font-size: 1rem\">Actualizaci\u00f3n de versi\u00f3n: pide a cada proveedor de software para un paquete con los ficheros resultantes del desarrollo de las tres reglas anteriores, con una documentaci\u00f3n de su instalaci\u00f3n o actualizaci\u00f3n. Haz una actualizaci\u00f3n de la versi\u00f3n (o volver a instalar la versi\u00f3n actual) con la documentaci\u00f3n para instalar el paquete, paso a paso, y medir la complejidad del procedimiento.<\/span><\/li>\n<\/ul>\n<p>La creaci\u00f3n de m\u00e9tricas personalizadas no es un criterio para la elecci\u00f3n de una herramienta de an\u00e1lisis de c\u00f3digo si no tienes una necesidad real. Si este es el caso, entonces tratar este criterio con el m\u00e1ximo profesionalismo e identificar los costes ocultos. No te conforma con una demostraci\u00f3n del proveedor, haz un piloto, pon a contribuci\u00f3n el editor del software. Si lo necesitas, pide asistencia de un consultor de Calidad especializado en estos temas y esas herramientas.<\/p>\n<p>Si quieres comprar una bicicleta de carreras, claro que la vas a probar. No vas a pedir al vendedor si es f\u00e1cil para pedalear o cambiar la rueda.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00daltimo art\u00edculo de nuestra serie sobre la creaci\u00f3n de m\u00e9tricas personalizadas. Vamos a ver los diferentes costes asociados a la personalizaci\u00f3n de las m\u00e9tricas, que son generalmente mal identificados o completamente ignorados en un proyecto de adquisici\u00f3n de una herramienta de an\u00e1lisis de c\u00f3digo. Terminaremos con un resumen de todas las diferentes preguntas que hacer [&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-604","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/604"}],"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=604"}],"version-history":[{"count":35,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/604\/revisions"}],"predecessor-version":[{"id":640,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/604\/revisions\/640"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=604"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=604"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}