{"id":79,"date":"2012-01-16T18:17:59","date_gmt":"2012-01-16T17:17:59","guid":{"rendered":"http:\/\/dev.qualilogy.com\/es\/?p=79"},"modified":"2013-01-04T18:24:36","modified_gmt":"2013-01-04T17:24:36","slug":"8-criterios-de-eleccion-de-una-herramienta-de-analisis-de-codigo-12","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/8-criterios-de-eleccion-de-una-herramienta-de-analisis-de-codigo-12\/","title":{"rendered":"8 criterios de elecci\u00f3n de una herramienta de an\u00e1lisis de c\u00f3digo (1\/2)"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-948\" title=\"Qual8Criteria1\" src=\"http:\/\/qualilogy.com\/wp-content\/uploads\/2012\/01\/Qual8Criteria1.jpg\" alt=\"\" width=\"244\" height=\"339\" \/><\/a>Siempre me sorprenden los comparativos de herramientas de an\u00e1lisis de la calidad de c\u00f3digo que pretenden definir los criterios para dicha elecci\u00f3n, cuando la \u00fanica respuesta exacta a esta cuesti\u00f3n es que &#8216;esto depende&#8217;.<\/p>\n<p>Si deseas comprar un coche, por supuesto efectuar\u00e1s tu elecci\u00f3n seg\u00fan unos criterios que van a depender del uso futuro del veh\u00edculo. Un cup\u00e9 descapotable o un coche deportivo son unos objetos por cierto muy atractivos pero poco pr\u00e1cticos si se trata de transportar una familia numerosa, ir a la playa con tu plancha de surf o ayudar a mudar tu vieja t\u00eda.<\/p>\n<p>Lo mismo ocurre con la selecci\u00f3n de una plataforma de an\u00e1lisis de la calidad de las aplicaciones.<\/p>\n<p><!--more--><br \/>\nEste post no tiene por objeto definir los ocho m\u00e1s importantes criterios de elecci\u00f3n de un software de an\u00e1lisis de c\u00f3digo, si no los cuatro criterios que se encuentran lo m\u00e1s y (en el pr\u00f3ximo post) tres otros criterios que no encuentro tanto. S\u00ed, lo s\u00e9, la cuenta no es buena. De hecho, el \u00faltimo criterio, el costo del software, ser\u00e1 tratado por separado.<\/p>\n<h3><span style=\"text-decoration: underline\">Numero de tecnolog\u00edas analizadas<\/span><\/h3>\n<p>Casi siempre es el primer criterio de selecci\u00f3n. No entiendo por qu\u00e9 una herramienta capaz de cubrir 20 lenguajes ser\u00eda superior al que analiza solamente 5, si los dos pueden analizar el c\u00f3digo de tus aplicaciones. Hoy en d\u00eda, el 50% de las aplicaciones son de tipo J2EE y un otro 25% de tipo Legacy (Cobol Mainframe \/ SAP). Var\u00eda m\u00e1s o menos dependiendo del pa\u00eds: algunos continentes son m\u00e1s Microsoft que otros, con una tasa mayor de C++ y de .Net. Tambi\u00e9n var\u00eda seg\u00fan los sectores: bancos y compa\u00f1\u00edas de seguros dejan de funcionar si ma\u00f1ana Cobol desaparece.<\/p>\n<p>Los editores de software lo saben bien: de manera que van a centrar sus esfuerzos en las tecnolog\u00edas las m\u00e1s encontradas entre sus clientes y no van a invertir en Powerbuilder o Delphi.<br \/>\nA menos que tu empresa sea en las m\u00e1s grandes y\/o m\u00e1s viejas del sector, que haya acumulado estratos de todas las tecnolog\u00edas en el curso de los a\u00f1os, o que haya fusionado con otras empresas, o haya cambiado a menudo de estrategias de desarrollo, es probable que tengas m\u00e1s de 75 % del portafolio de aplicaciones en 2 o 3 tecnolog\u00edas diferentes. Y mucho probablemente J2EE \/ Cobol \/ SAP. Y muy ciertamente la parte m\u00e1s cr\u00edtica, para el coraz\u00f3n de negocios de la empresa.<\/p>\n<p>Saca de tu lista de selecci\u00f3n las herramientas que no cubren tus aplicaciones. Para las que se quedan, verifica en detalle &#8211; con un piloto por ejemplo &#8211; la calidad de los an\u00e1lisis realizados. El numero de otras tecnolog\u00edas constituye una simple informaci\u00f3n, no un criterio de elecci\u00f3n.<\/p>\n<h3><span style=\"text-decoration: underline\">Numero de m\u00e9tricas<\/span><\/h3>\n<p>As\u00ed como para el punto anterior, centrete en la calidad y el valor de las m\u00e9tricas propuestas m\u00e1s bien que en su n\u00famero. Es bueno tener 20 reglas de nomenclatura para todo tipo de objetos que tienen las aplicaciones, pero esto no vale una m\u00e9trica que sepa identificar un defecto grave de programaci\u00f3n con un riesgo alto de ver la aplicaci\u00f3n pararse o provocar una corrupci\u00f3n de datos.<\/p>\n<p>Identifica las 10 o 20 m\u00e9tricas m\u00e1s importantes para:<\/p>\n<ul>\n<li>Validar la entrega de una aplicaci\u00f3n (Quality Gate).<\/li>\n<li>Comprobar los SLAs de los proveedores.<\/li>\n<li>Los procesos de Integraci\u00f3n \/ Mejora continua de los equipos de desarrollo.<\/li>\n<\/ul>\n<p>El n\u00famero de m\u00e9tricas desempe\u00f1ar\u00e1 un papel s\u00f3lo en dos casos muy precisos:<\/p>\n<ul>\n<li>El c\u00e1lculo de la deuda t\u00e9cnica (tendremos la oportunidad de verlo).<\/li>\n<li>La auditor\u00eda de la calidad de una aplicaci\u00f3n que se va a &#8216;adquirir&#8217; (por que vas a recuperar el mantenimiento por ejemplo) o con el fin de identificar un problema concreto (de rendimiento por ejemplo).<\/li>\n<\/ul>\n<p>Pero incluso en este caso, es raro encontrar exactamente el error en cuesti\u00f3n o un defecto espec\u00edfico usando una m\u00e9trica particular. Adem\u00e1s, este caso corresponde a un contexto de consultor\u00eda y no de adquisici\u00f3n de una herramienta de software.<\/p>\n<div id=\"gt-res-content\">\n<p dir=\"ltr\">Crea una lista de las mejores pr\u00e1cticas necesarias para tus aplicaciones: son est\u00e1ndares en el mercado y, normalmente, la mayor\u00eda de las herramientas deben integrarlas. Si no, es que el producto es, probablemente, todav\u00eda un poco joven para esta tecnolog\u00eda.<\/p>\n<p>Identifica luego las m\u00e9tricas interesante pero no esencial, con arreglo a los casos de uso que deseas colocar. El resto es \u00abnice to have\u00bb.<\/p>\n<h3><span style=\"text-decoration: underline\">Capacidad de crear nuevas m\u00e9tricas<\/span><\/h3>\n<p dir=\"ltr\">Advertencia: criterio peligroso.<br \/>\nUn principio b\u00e1sico en inform\u00e1tica: si est\u00e1 disponible, se va a utilizar. Si es posible hacerlo, se har\u00e1. Incluso si no se necesita.<\/p>\n<p>\u00bfTe acuerdas de esa caja de \u00abpeque\u00f1o qu\u00edmico\u00bb que te dieron en Navidad, con pretexto de qu\u00e9 se trataba de un juguete educativo destinado \u00e1 despertar tus instintos cient\u00edficos?<br \/>\n\u00bfQui\u00e9n habr\u00eda imaginado que acabar\u00edas jugando al cient\u00edfico loco en busca de la mezcla m\u00e1s explosiva de sustancias de colores diferentes?<\/p>\n<p>El mismo s\u00edndrome se encuentra a veces, entre algunos arquitectos o responsables de Calidad que reconstruyen la norma ISO 9216 con su propio modelo y sus propias m\u00e9tricas. He visto a menudo tales intentos abandonados al cabo de 2 o 3 a\u00f1os, simplemente porque el beneficio de esta customizaci\u00f3n es inferior a los costes de desarrollo y de mantenimiento. En el mundo Open Source, es posible que tus nuevas m\u00e9tricas sean incorporadas por la comunidad en una versi\u00f3n de la herramienta. En el mundo propietario, olvidalo. Deber\u00e1s llevar tu propio modelo solo, en cada upgrade de software.<\/p>\n<p>Son pocos los casos en que se justifica la necesidad de nuevas m\u00e9tricas, principalmente cuando no existen est\u00e1ndares bien definidos en el mercado. Esto puede ocurrir para unas pocas tecnolog\u00edas raras. De lo contrario, es que el editor del software no integr\u00f3 las reglas que correspond\u00edan a las buenas pr\u00e1cticas. O lo apartas de la lista, o trabajas con \u00e9l para incorporar estas normas en una versi\u00f3n futura.<\/p>\n<p>En todos los casos, hay que medir bien el coste del desarrollo y del mantenimiento de nuevas m\u00e9tricas y aseg\u00fararse de que las necesitas. Keep It Simple, no juegas al alquimista.<\/p>\n<\/div>\n<h3><span style=\"text-decoration: underline\">Enlaces entre componentes<\/span><\/h3>\n<p>Ciertos compradores de una herramienta de an\u00e1lisis de c\u00f3digo presentan una actitud muy curiosa: tratan de atrapar a los que les proponen una soluci\u00f3n. \u00abVeamos si saben encontrar las llamadas din\u00e1micas entre las capas de mi framework propietario\u00bb. \u00abNo digamos nada: \u00bfser\u00e1n capaces de identificar los enlaces entre estos componentes?\u00bb.<\/p>\n<p>Si tienes una necesidad particular, si las aplicaciones utilizan un mecanismo espec\u00edfico, expongalo claramente. Muchas empresas de servicios han creado su propia versi\u00f3n de frameworks Struts o Hibernate y sus clientes son ahora atados con componentes absolutamente no est\u00e1ndares. En ciertas aplicaciones Cobol, los programas, los JCLs y hasta a veces las transacciones CICS no se llaman directamente, sino a trav\u00e9s de una tabla de codificaci\u00f3n de estos enlaces.<\/p>\n<div id=\"gt-res-content\">\n<p dir=\"ltr\">La mayor\u00eda de las m\u00e9tricas identifican violaci\u00f3nes de buenas pr\u00e1cticas de programaci\u00f3n. Buscan las sintaxis incorrectas o incompletas o la estructuraci\u00f3n incorrecta de diversas instrucciones. Las buenas pr\u00e1cticas de arquitectura no se apoyan en una sintaxis particular sino en los enlaces entre los diferentes componentes dentro de diferentes capas de la aplicaci\u00f3n.<\/p>\n<p dir=\"ltr\">Veo principalmente dos intereses \u00e1 una herramienta de an\u00e1lisis de c\u00f3digo que sabe descubrir estos enlaces:<\/p>\n<ul>\n<li>Realizar an\u00e1lisis de impacto: salimos all\u00ed del campo de la calidad de c\u00f3digo para entrar en el dominio de las herramientas de documentaci\u00f3n o de ayuda a la migraci\u00f3n.<\/li>\n<li>Verificar el respeto de las reglas de uso de frameworks, propietarios o no.<\/li>\n<\/ul>\n<p dir=\"ltr\">Creo que este segundo punto tiene un inter\u00e9s, por ejemplo, cuando se centraliza en algunos componentes el acceso a la capa de datos, o cuando todos los objetos de la capa de presentaci\u00f3n utilizan un componente \u00fanico para acceder a la capa de l\u00f3gica de negocio. Entonces es bueno ser capaz de identificar los objetos que no respetan estas reglas. Porque la pr\u00f3xima modificaci\u00f3n en una de estas capas corre peligro de no funcionar con estos objetos.<\/p>\n<p dir=\"ltr\">En cambio, esta funcionalidad se necesita s\u00f3lo para las arquitecturas 3-tiers, pues J2EE y .Net. Adem\u00e1s, en caso de frameworks y de buenas pr\u00e1cticas propietarios, se debe contar con un coste de customizaci\u00f3n.<\/p>\n<p>Tambi\u00e9n, estas m\u00e9tricas son las que presentan el n\u00famero m\u00e1s grande de false-positivos y necesitan m\u00e1s validaciones. Es (relativamente) f\u00e1cil verificar que una sintaxis particular es respetada o no, pues las m\u00e9tricas que corresponden a las buenas pr\u00e1cticas de programaci\u00f3n son generalmente fiables. Una m\u00e9trica que verifica las llamadas entre ciertos tipos de objetos o ciertas nomenclaturas de componentes ser\u00e1 mucho m\u00e1s sensible al contexto aplicativo y puede necesitar una comprobaci\u00f3n sistem\u00e1tica de los enlaces despu\u00e9s de cada an\u00e1lisis. Con un coste m\u00e1s importante de puesta en ejecuci\u00f3n.<\/p>\n<p>Por fin, probablemente encontrar\u00e1s una proporci\u00f3n de 1 a 10 entre estos diferentes tipos de reglas, es decir que las m\u00e9tricas de buenas practicas de arquitectura representar\u00e1n no m\u00e1s de 10 % del conjunto de las reglas en la herramienta. Y no todas ser\u00e1n cr\u00edticas.<\/p>\n<p>Pues una vez m\u00e1s, verifique bien la adecuaci\u00f3n, y el coste, y la necesidad. La herramienta m\u00e1s completa no es siempre la que conviene mejor.<\/p>\n<p>No hay necesidad de comprar un Hummer para ir de compras en la ciudad: cuando te das cuenta del esfuerzo de maniobra y del tiempo perdido a procurar parqueo, corres peligro de dejarlo muy pronto al garaje.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Siempre me sorprenden los comparativos de herramientas de an\u00e1lisis de la calidad de c\u00f3digo que pretenden definir los criterios para dicha elecci\u00f3n, cuando la \u00fanica respuesta exacta a esta cuesti\u00f3n es que &#8216;esto depende&#8217;. Si deseas comprar un coche, por supuesto efectuar\u00e1s tu elecci\u00f3n seg\u00fan unos criterios que van a depender del uso futuro del [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-79","post","type-post","status-publish","format-standard","hentry","category-calidad-de-aplicaciones"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/79"}],"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=79"}],"version-history":[{"count":2,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/79\/revisions"}],"predecessor-version":[{"id":83,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/79\/revisions\/83"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}