{"id":87,"date":"2012-02-06T20:08:13","date_gmt":"2012-02-06T19:08:13","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=87"},"modified":"2013-01-07T09:11:36","modified_gmt":"2013-01-07T08:11:36","slug":"10-a-20-metricas","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/10-a-20-metricas\/","title":{"rendered":"10 a 20 m\u00e9tricas"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img decoding=\"async\" class=\"alignright  wp-image-1091\" title=\"Qual10metricas\" alt=\"\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/02\/Qual10metricas.jpg\" \/><\/a>Hemos visto en el post precedente &#8216;<a title=\"Permalink to Casos de uso \u2013 Encajar a la perfecci\u00f3n\" href=\"http:\/\/qualilogy.com\/es\/casos-de-uso-encajar-a-la-perfeccion\" target=\"_blank\" rel=\"bookmark\">Casos de uso \u2013 Encajar a la perfecci\u00f3n<\/a>&#8216; cuales casos de uso son aplicados m\u00e1s a menudo con una herramienta de an\u00e1lisis de c\u00f3digo, y permiten conseguir el beneficio m\u00e1s alto:<\/p>\n<ul>\n<li>Quality Gate con el fin de validar la entrega de una nueva versi\u00f3n de una aplicaci\u00f3n.<\/li>\n<li>Gesti\u00f3n de SLAs y benchmarking de proveedores.<\/li>\n<li>Proceso de Integraci\u00f3n \/ Mejora contin\u00faa de los equipos de desarrollo.<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p>Se recomienda combinar estos tres casos de uso para una mejor sinergia y optimizar los resultados. Sin embargo, su aplicaci\u00f3n depende de si est\u00e1s en un contexto de:<\/p>\n<ul>\n<li>Desarrollo interno: Integraci\u00f3n \/ Mejora Continua + Quality Gate.<\/li>\n<li>Outsourcing: Quality Gate+ SLA.<\/li>\n<\/ul>\n<p>\u00bfCu\u00e1les son los m\u00e9tricos m\u00e1s importantes para estos casos de uso?<\/p>\n<p>De hecho, el objetivo en Mejora Continua y SLAs debe quedar sencillo y realista.<br \/>\nRealista significa concretamente: alcanzable. Si pides a tus equipos de desarrollo un resultado perfecto con 50 best practices, esto no es realista. Nadie puede tener 50 medidas diferentes en la cabeza, no se puede conseguir un resultado perfecto en 50 buenas pr\u00e1cticas de programaci\u00f3n. Hasta si las conocen, hasta si saben que deben evitar nuevas violaciones de estas reglas de calidad, es imposible recordarlas todas y no puedes evitar la falta de atenci\u00f3n ocasional. Y si el objetivo no es alcanzable, el equipo se desanima r\u00e1pidamente y deja de prestar atenci\u00f3n y el proceso ser\u00e1 un fracaso.<\/p>\n<p>Establezced un objetivo alcanzable con un m\u00ednimo de 10 a 12 reglas, 15 como m\u00e1ximo.<\/p>\n<p>Sencillo significa concretamente: objetivamente medible. Por ejemplo, decides fijar una meta para alcanzar el 99,99% de calidad. Sin embargo, el 99,99% de qu\u00e9? El n\u00famero de l\u00edneas de c\u00f3digo? El n\u00famero de objetos incluidos? Imaginamos una regla (cl\u00e1sica) de gesti\u00f3n de excepciones que un &#8216;throw&#8217; Java no deber\u00eda estar vac\u00edo. Obviamente, s\u00f3lo se aplica a los m\u00e9todos que implementan una l\u00f3gica de negocio. Si una clase tiene 100 setters o getters sin ninguna l\u00f3gica de negocio, se aplica la regla? Si esta clase cuenta con 200 l\u00edneas de c\u00f3digo o m\u00e1s, vas a incluir estas l\u00edneas en tu c\u00e1lculo? No s\u00f3lo esto se vuelve complicado, pero adem\u00e1s, penalizar\u00e1 a los desarrolladores que tienen una clase con 20 m\u00e9todos que implementar\u00e1n un &#8216;throw&#8217;: basta con olvida uno para alcanzar el 5 % de error.<\/p>\n<p>El objetivo m\u00e1s sencillo y m\u00e1s f\u00e1cilmente medible es: 0 defecto. No se tolera ninguna negligencia, cualquiera sea el n\u00famero de l\u00edneas, los m\u00e9todos, clases, etc.<br \/>\nPues 10 o 12 m\u00e9tricas con una tolerancia 0.<\/p>\n<p>\u00bfY cu\u00e1les son las reglas m\u00e1s importantes para las cuales no aceptaremos ning\u00fan defecto? Las que constituyen un error cr\u00edtico en t\u00e9rminos de desarrollo, porque el impacto sobre el comportamiento de la aplicaci\u00f3n y para el usuario final ser\u00e1 cr\u00edtico. Una mala gesti\u00f3n de los errores puede acabar en una p\u00e1gina blanca para el usuario o una p\u00e1gina de error incomprensible, la interrupci\u00f3n del tratamiento, una transacci\u00f3n no finalizada, incluso una corrupci\u00f3n de datos.<\/p>\n<p>Lo mismo ocurre con la utilizaci\u00f3n de ciertas clases gen\u00e9ricas que no permiten especializar una excepci\u00f3n y comprender y trazar el error sobrevenido. Tambi\u00e9n, ciertas sintaxis que pueden revelarse peligrosas en materia de corrupci\u00f3n de datos y de seguridad.<\/p>\n<p>Cobol y ABAP no conocen el concepto de clases o m\u00e9todos, pero los principios siguen siendo los mismos: siempre utilizar un c\u00f3digo de retorno cuando se llama a una funci\u00f3n o un procesamiento de una base de datos, evitar las instrucciones que interrumpen el procesamiento como Break o Stop Run. Estas tecnolog\u00edas son tambi\u00e9n muy sensibles al rendimiento por lo que puedes a\u00f1adir todos los tratamientos costosos en el SQL y \/ o en bucles.<\/p>\n<p>Favoreceremos pues m\u00e9tricas tales como:<\/p>\n<ul>\n<li>Java : Empty Try block, Empty Finally block, Empty If statement, Empty While Statement, Illegal throws (java.lang.error, java.lang.RuntimeException), Equals HashCode, Array stored directly, \u2026<\/li>\n<li>Cobol, Abap : If without Endif, Others in Case, When Other in Evaluate, Break, Stop Run, Sort, Select *, Select Distinct, Group by, Select in Select, Cursor inside a loop, Open\/Close in a loop, \u2026<\/li>\n<\/ul>\n<p>Estas reglas tienen la ventaja de ser igualmente aceptables dentro de un SLA para un proveedor y un objetivo de 0 defecto es f\u00e1cilmente medible.<\/p>\n<p>Ahora \u00bfqu\u00e9 pasa con las reglas para aceptar o rechazar una versi\u00f3n de aplicaci\u00f3n en una Quality Gate? En primer lugar vamos a incluir las m\u00e9tricas anteriores, l\u00f3gicamente: si la regla de 0 defecto se aplica a nivel de los desarrolladores, no queremos encontrar estos defectos en la aplicaci\u00f3n, que el equipo sea interno o externo.<\/p>\n<p>Tambi\u00e9n se incluyen algunas medidas de mantenimiento, es decir, indicadores que miden la calidad del c\u00f3digo en t\u00e9rminos de costes de mantenimiento.<\/p>\n<p>Imaginemos una aplicaci\u00f3n J2EE con 500 clases con un promedio de 20 m\u00e9todos, es decir 1 000 m\u00e9todos en total. Suponemos que un c\u00f3digo Java de calidad pueda contar 7.5 % de objetos complejos y 2.5 % de objetos muy complejos, pues 750 m\u00e9todos complejos y 250 m\u00e9todos muy complejos en nuestro ejemplo. Este c\u00f3digo es el m\u00e1s costoso a evolucionar porque es dif\u00edcil de comprender, y tambi\u00e9n m\u00e1s peligroso ya que el riesgo de introducir un defecto en caso de modificaci\u00f3n es m\u00e1s elevado.<\/p>\n<p>Imaginemos ahora qu\u00e9 el equipo de proyecto a\u00f1ade 5 % de m\u00e9todos complejos y muy complejos a cada versi\u00f3n. Esta cifra es bastante limitada, esto representa s\u00f3lo una docena de m\u00e9todos muy complejos para los 250 existentes. A raz\u00f3n de 4 versiones al a\u00f1o, el total de las reglas m\u00e1s complejas habr\u00e1 aumentado m\u00e1s de 20 % y la complejidad de la aplicaci\u00f3n habr\u00e1 doblado en menos de 4 a\u00f1os. Sabiendo el impacto de esta complejidad sobre tus presupuestos, tus planificaciones y el n\u00famero de bugs para los usuarios, comprendemos r\u00e1pidamente por qu\u00e9 es recomendable vigilar toda deriva en este campo.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/02\/QualCC.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1092\" title=\"QualCC\" alt=\"\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/02\/QualCC.jpg\" width=\"406\" height=\"311\" \/><\/a><br \/>\nPodremos pues a\u00f1adir este tipo de m\u00e9tricas en un SLA y luego en un Quality Gate, y otras medidas que impactan la mantenibilidad tales como el % de c\u00f3digo duplicado, el % de c\u00f3digo en comentarios (Commented-out LOC), y si la herramienta sabe calcularlo, Technical Debt (habr\u00e1 que tomar en consideraci\u00f3n el aumento de la talla del c\u00f3digo para esta medida). Y el % de comentarios cuando el c\u00f3digo es desarrollado por un proveedor.<\/p>\n<p>Evidentemente, es aconsejado verificar estas m\u00e9tricas lo antes posible, lo que supone aplicarlas en un proceso de Integraci\u00f3n Continua. Sin embargo, no recomiendo pol\u00edtica &#8216;0 defecto&#8217; a este nivel: lo importante es llegar a Quality Gate sin ning\u00fan objeto nuevo complejo, no suprimirlos sistem\u00e1ticamente de todo &#8216;build&#8217;. Mejor dejar un margen de maniobra, para no decir autonom\u00eda, al equipo de proyecto en este campo. Sin embargo es importante sensibilizar sobre estas reglas, de las que sacan provecho.<\/p>\n<p>Tenga en cuenta que los errores que representan un riesgo para el usuario tambi\u00e9n pueden impactar fuertemente los costes de mantenimiento de la aplicaci\u00f3n. Una mala gesti\u00f3n de los errores significa un tiempo de detecci\u00f3n de bugs y de correcci\u00f3n bastante elevado.<\/p>\n<p>No pretendemos elegir las 10 a 20 m\u00e9tricas m\u00e1s importantes, sino dar un ejemplo para estos tres casos de uso. Puedes constituir tu propia lista seg\u00fan tus propios criterios: las tecnolog\u00edas utilizadas para tus aplicaciones, el nivel de madurez de sus equipos, la alineaci\u00f3n oficio\/TI (ver &#8216;<a title=\"Alignement IT \/ M\u00e9tier\" href=\"http:\/\/qualilogy.com\/es\/cual-es-la-primera-pregunta\" target=\"_blank\">\u00bfCual es la primera pregunta?<\/a>&#8216;), si el c\u00f3digo es desarrollado internamente o por un proveedor, etc.<\/p>\n<p>Las 10 a 20 m\u00e9tricas m\u00e1s importantes son las que te permitir\u00e1n mejorar la calidad de tus aplicaciones sacando el m\u00e1ximo de beneficios de estos tres casos de usos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hemos visto en el post precedente &#8216;Casos de uso \u2013 Encajar a la perfecci\u00f3n&#8216; cuales casos de uso son aplicados m\u00e1s a menudo con una herramienta de an\u00e1lisis de c\u00f3digo, y permiten conseguir el beneficio m\u00e1s alto: Quality Gate con el fin de validar la entrega de una nueva versi\u00f3n de una aplicaci\u00f3n. Gesti\u00f3n de [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,2],"tags":[],"class_list":["post-87","post","type-post","status-publish","format-standard","hentry","category-analisis-de-codigo","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/87"}],"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=87"}],"version-history":[{"count":4,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/87\/revisions"}],"predecessor-version":[{"id":195,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/87\/revisions\/195"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}