{"id":1007,"date":"2014-01-28T17:06:57","date_gmt":"2014-01-28T16:06:57","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=1007"},"modified":"2014-02-23T16:06:10","modified_gmt":"2014-02-23T15:06:10","slug":"analisis-plsql-con-sonarqube-evaluar-la-calidad-1","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-evaluar-la-calidad-1\/","title":{"rendered":"An\u00e1lisis PL\/SQL con SonarQube \u2013 Evaluar la calidad (1\/3)"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1626\" alt=\"PLSQL_EvaluationQualit\u00e91\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_EvaluationQualit\u00e91.jpg\" width=\"370\" height=\"264\" \/><\/a>Un post de s\u00edntesis, para esta serie sobre el an\u00e1lisis de c\u00f3digo PL \/ SQL con SonarQube.<\/p>\n<p>Despu\u00e9s de <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-sonarqube-configuracion\/\" target=\"_blank\">configurar nuestro an\u00e1lisis<\/a> con Jenkins, lo lanzamos y encontramos 17 defectos bloqueantes (<a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-blockers\/\" target=\"_blank\">Blockers<\/a>), pero ninguna falta cr\u00edtica (<a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-criticals\/\" target=\"_blank\">Criticals<\/a>) con el perfil de calidad de SonarQube. De hecho, las 5 reglas Criticals eran desactivadas y tambi\u00e9n algunas otras normas de diferentes criticidades: 58 en un total de 132. <!--more--><\/p>\n<p>As\u00ed que hemos creado <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-el-quality-profile-plsql\/\" target=\"_blank\">nuestro propio Quality Profile<\/a> para activar todas estas reglas, ejecutado de nuevo un an\u00e1lisis y examinado las reglas que tenemos en las diferentes categor\u00edas Blockers, Criticals y <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-majors\/\" target=\"_blank\">Majors<\/a>.<\/p>\n<p>El objetivo de este trabajo es para m\u00ed construir una demo con c\u00f3digo PL\/SQL para presentar a un cliente los beneficios que se pueden conseguir con SonarQube. Por esta raz\u00f3n, yo decid\u00ed subir en Criticals o incluso en Blockers algunas reglas sobre la robustez, la seguridad y el rendimiento, y reducir las normas de legibilidad o de portabilidad del c\u00f3digo. S\u00f3lo porque quiero destacar las violaci\u00f3nes que pueden impactar al usuario final:<\/p>\n<ul>\n<li>una aplicaci\u00f3n que se detiene de repente,<\/li>\n<li>una transacci\u00f3n que no se ha completado, con una posible corrupci\u00f3n de datos,<\/li>\n<li>un error en un algoritmo que lleva a un error de l\u00f3gica o de c\u00e1lculo,<\/li>\n<li>un rendimiento menor,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>\u00bfA que parece ahora mi dashboard SonarQube? \u00bfCu\u00e1les son las informaciones \u00fatiles que puedo ense\u00f1ar en una presentaci\u00f3n? Aunque el cuadro de mando SonarQube est\u00e1 muy bien organizado, es f\u00e1cil no saber por d\u00f3nde empezar.<\/p>\n<p>No voy a explicar aqu\u00ed c\u00f3mo hacer una demo, y mucho menos c\u00f3mo voy a construir una auditor\u00eda de la calidad del c\u00f3digo. Se necesitar\u00eda m\u00e1s de un post, y probablemente ser\u00e1 el tema de una otra serie en el futuro. Pero en modo de s\u00edntesis de los articulos anteriores de esta serie, voy a presentar lo que hago para cualificar una nueva aplicaci\u00f3n.<\/p>\n<h2>El tama\u00f1o<\/h2>\n<p>Cuando encuentras a una persona, la primera cosa que se puede observar, es su talla. \u00bfEs grande, media, peque\u00f1a?<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Size.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1637\" alt=\"PLSQL_Size\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Size.jpg\" width=\"348\" height=\"103\" \/><\/a>Un primero widget me permite ver que tenemos aqu\u00ed 16 ficheros o programas de base de datos, que contienen 1 569 &#8216;functions&#8217; (objetos, componentes de tipo procedimiento, funci\u00f3n, trigger, etc.) representando 28 116 instrucciones (statements).<\/p>\n<p>Esta aplicaci\u00f3n cuento con un poco m\u00e1s de 95 KLoc (milles de Lines of Code) en un total de 147 KLoc : la diferencia est\u00e1 en las l\u00edneas de comentario (o las l\u00edneas blancas, o de c\u00f3digo en comentario).<\/p>\n<p>Con el widget \u2018Custom Measures\u2019, me he customizado mi propio \u2018panel\u2019 para ver todas las informaciones de tama\u00f1o y de comentario.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Wdiget1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1638\" alt=\"PLSQL_Wdiget1\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Wdiget1.jpg\" width=\"584\" height=\"143\" \/><\/a><\/p>\n<p>\u00bfQu\u00e9 podemos deducir ?<\/p>\n<p>Tenemos una aplicaci\u00f3n de tama\u00f1o entre medo y grande para esta tecnolog\u00eda PL\/SQL, con un porcentage de m\u00e1s del 25%, pues correcto (sin llevar a augurar de su calidad).<\/p>\n<p>El n\u00famero medio de l\u00edneas de c\u00f3digo por objeto (Funciones ) es inferior a 100: de nuevo, es acceptable. Contamos un promedio de 18 instrucciones (Statements) por objeto, as\u00ed que de nuevo no es enorme.<\/p>\n<p>Basandonos en estas cifras, se podr\u00eda pensar que una correcci\u00f3n o un cambio en estos componentes no ser\u00eda una carga excesiva.<\/p>\n<p>Excepto que todo este c\u00f3digo se encuentra en tan s\u00f3lo 16 archivos, es decir, 16 scripts o programas de base de datos. La granularidad de cada componente puede ser correcta, pero un promedio de 6 000 l\u00edneas de c\u00f3digo por archivo es enorme, y podemos imaginar que esto va a impactar en la capacidad de mantenimiento.<\/p>\n<p>A\u00f1adir o editar c\u00f3digo en un componente PL\/SQL de 100 l\u00edneas es relativamente f\u00e1cil. Pero cuando tienes que buscar estas 100 l\u00edneas o el c\u00f3digo de todos los dem\u00e1s componentes que se ver\u00e1n afectados por este cambio, en un programa de 6 000 l\u00edneas de c\u00f3digo, vas a necesitar tiempo y el riesgo de introducir un error durante esta correcci\u00f3n o esta evoluci\u00f3n tambi\u00e9n ser\u00e1 alto.<\/p>\n<p>Por lo tanto, el siguiente paso en el descubrimiento y la evaluaci\u00f3n de la calidad de esta aplicaci\u00f3n consiste en comprobar la granularidad de sus componentes.<\/p>\n<h2>Granularidad de los componentes<\/h2>\n<p>En esto, un nuevo widget introducido en la versi\u00f3n 4.1 de SonarQube representa un gran valor. El\u00a0Project File Bublle Chart muestra la distribuci\u00f3n de los diferentes archivos en dos ejes: el n\u00famero de l\u00edneas de Loc en el eje horizontal X, y el n\u00famero de violaci\u00f3nes de las buenas pr\u00e1cticas de programaci\u00f3n en el eje vertical Y. Tengas en cuenta que he elegido una escala logar\u00edtmica para el segundo eje Y. El tama\u00f1o de cada burbuja representa la deuda t\u00e9cnica calculada en n\u00famero de d\u00edas para cada componente. Todo esto es configurable .<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Bubble31.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1639\" alt=\"PLSQL_Bubble3\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Bubble31.jpg\" width=\"775\" height=\"407\" \/><\/a><\/p>\n<p>Apuntando a una burbuja, podemos ver sus caracter\u00edsticas. A la izquierda, el program &#8216;CreatePackage1.sql&#8217; contiene 6 119 l\u00edneas de c\u00f3digo, m\u00e1s de 4 000 defectos y una deuda t\u00e9cnica de 228 d\u00edas.<\/p>\n<p>El script &#8216;Create_Tables.sql&#8217; en el medio del gr\u00e1fico, contiene 2,5 veces m\u00e1s de l\u00edneas de c\u00f3digo (16 810 Loc), pero s\u00f3lo 400 defectos y entonces una deuda t\u00e9cnica muy baja (8 d\u00edas).<\/p>\n<p>Y en la parte superior derecha de este gr\u00e1fico, nos encontramos con el archivo &#8216;CreatePackageBody.sql&#8217; con casi 58 500 l\u00edneas de c\u00f3digo, cerca de 20.000 defectos y m\u00e1s de 1 400 d\u00edas de deuda t\u00e9cnica.<\/p>\n<p>Se puede pensar que el equipo del proyecto responsable de esta aplicaci\u00f3n es completamente irresponsable por dejar crecer este programa hasta este punto. De hecho, en absoluto. Tenemos aqu\u00ed un conjunto de scripts y programas de base de datos para una aplicaci\u00f3n cliente-servidor muy antigua (m\u00e1s de 20 a\u00f1os de edad ), con los tratamientos de l\u00f3gica de aplicaci\u00f3n deportados en la base de datos. Era eso o codificar estos tratamientos en las pantallas, con los lenguajes de aquella \u00e9poca, lo que no era del todo recomendable.<\/p>\n<p>Pero \u00bfpor qu\u00e9 implementar toda la l\u00f3gica de negocio en un \u00fanico archivo? Otra soluci\u00f3n ser\u00eda la de distribuir todos estos tratamientos en diferentes programas, pero eso complica la gesti\u00f3n de todos los enlaces entre ellos, y en diferentes versiones. En estos tiempos, no exist\u00edan herramientas de gesti\u00f3n de configuraci\u00f3n (SCM). Tambi\u00e9n es m\u00e1s complicado reconstruir la base de datos con varios programas que se deben ejecutar en un orden estricto, con las diferentes versiones correctas. Era frecuente ver el equipo de proyecto trabajando durantes semanas en cambiar los procedimientos, para descubrir que no se podia lanzar el programa A porque se necesitaba la presencia en la base de datos de un componente del programa B, y este no se pod\u00eda tampoco ejecutar sin que existe ya un componente del programa A. Doble enlace mortal.<\/p>\n<p>Una revisi\u00f3n rapida de los otros archivos nos permite verificar que estos programas son responsables de la creaci\u00f3n de vistas (Views), triggers, etc. y con pocas l\u00edneas de c\u00f3digo y entonces pocos defectos. Por ejemplo, el script de creaci\u00f3n de tablas presenta muy pocas violaci\u00f3nes en un alto n\u00famero de Loc porque no hay tratamientos.<\/p>\n<p>Las medidas de tama\u00f1o parec\u00edan indicar un c\u00f3digo no demasiado complejo hasta que el Bubble Chart nos indica todo lo contrario: m\u00e1s del 60 % del c\u00f3digo de la aplicaci\u00f3n se encuentra en un componente monstruoso con todos los tratamientos de l\u00f3gica de aplicaci\u00f3n.<\/p>\n<p>Es muy probable que los costes de mantenimiento de esta aplicaci\u00f3n se ver\u00e1n afectados por eso. Lo comprobaremos en el pr\u00f3ximo post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un post de s\u00edntesis, para esta serie sobre el an\u00e1lisis de c\u00f3digo PL \/ SQL con SonarQube. Despu\u00e9s de configurar nuestro an\u00e1lisis con Jenkins, lo lanzamos y encontramos 17 defectos bloqueantes (Blockers), pero ninguna falta cr\u00edtica (Criticals) con el perfil de calidad de SonarQube. De hecho, las 5 reglas Criticals eran desactivadas y tambi\u00e9n algunas [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-1007","post","type-post","status-publish","format-standard","hentry","category-sonarqube-plsql"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1007"}],"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=1007"}],"version-history":[{"count":22,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1007\/revisions"}],"predecessor-version":[{"id":1030,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/1007\/revisions\/1030"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=1007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=1007"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=1007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}