{"id":984,"date":"2014-01-20T22:25:24","date_gmt":"2014-01-20T21:25:24","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=984"},"modified":"2014-01-21T16:39:50","modified_gmt":"2014-01-21T15:39:50","slug":"analisis-plsql-con-sonarqube-majors","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-majors\/","title":{"rendered":"An\u00e1lisis PL\/SQL con SonarQube \u2013 Majors"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1589\" alt=\"PLSQL_Majors\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Majors2.jpg\" width=\"375\" height=\"249\" \/><\/a>Continuamos esta serie en el an\u00e1lisis de c\u00f3digo PL\/SQL con hoy las normas de tipo Majors.<\/p>\n<p>Vimos antes c\u00f3mo <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-sonarqube-organizacion\/\" target=\"_blank\">organizar nuestro entorno<\/a> y <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-sonarqube-configuracion\/\" target=\"_blank\">configurar nuestro an\u00e1lisis de c\u00f3digo con Jenkins y SonarQube<\/a>.<\/p>\n<p>Hemos creado <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-el-quality-profile-plsql\/\" target=\"_blank\">nuestro propio Quallity Profile<\/a> y revisado las reglas de tipo <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-blockers\/\" target=\"_blank\">Blockers<\/a> y <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-criticals\/\" target=\"_blank\">Criticals<\/a>, todas orientadas a Robustez (fiabilidad) y Seguridad.<\/p>\n<p><!--more--><\/p>\n<h2>La reglas de tipo Major<\/h2>\n<p>Si vamos a los Majors, comenzamos a tener reglas que afectan el mantenimiento.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Majors10.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1595\" alt=\"Majors10\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Majors10.jpg\" width=\"722\" height=\"170\" \/><\/a><\/p>\n<p>Voy a pasar a Minors una serie de buenas pr\u00e1cticas relativas a la legibilidad o la portabilidad del c\u00f3digo, porque no quiero que sea una prioridad. Y pasar a Criticals ciertas reglas Majors que tratan de robustez, rendimiento y seguridad.<\/p>\n<p>\u00bfPor qu\u00e9? Porque estos defectos afectan al usuario. Un error que interrumpe la aplicaci\u00f3n o la deja en un estado inestable, con una posible corrupci\u00f3n de datos, o con tiempos de procesamiento demasiado largos afectan al usuario, mientras que los defectos en la legibilidad o la capacidad de comprender el c\u00f3digo aumentan el trabajo &#8211; y por lo tanto tiempos y costes de mantenimiento &#8211; pero sin consecuencias directas para el usuario. Quiero poner este tipo de buenas pr\u00e1cticas en el segundo plano &#8211; en Majors o Minors.<\/p>\n<p>Esto es por supuesto una decisi\u00f3n personal en el contexto de este an\u00e1lisis, y lograr una &#8216;demo&#8217; que me permitir\u00e1 mostrar a un cliente c\u00f3mo usar y qu\u00e9 beneficios se pueden conseguir con SonarQube. No voy a hacer caso omiso de los defectos que afectan a los costes de mantenimiento, pero no quiero que aparezcan en primera l\u00ednea, prefiero centrarme en violaci\u00f3nes que supongan un riesgo para el usuario final.<\/p>\n<p>Adem\u00e1s, la mayor parte del c\u00f3digo utilizado para realizar este an\u00e1lisis es bastante antiguo y de una \u00e9poca en que estas buenas pr\u00e1cticas de programaci\u00f3n no estaban conocidas. Los desarrolladores que actualmente mantienen este c\u00f3digo no son los responsables de estos defectos, a pesar de que tienen un gran peso en la deuda t\u00e9cnica .<\/p>\n<h2>Deuda t\u00e9cnica y SQALE<\/h2>\n<p>Si entramos en la p\u00e1gina Squale, la siguiente pir\u00e1mide muestra que la robustez (Reliabililty &#8211; 163 d\u00edas), el rendimiento (Efficiency &#8211; 192,5 d\u00edas) y la seguridad (Security &#8211; 40 d\u00edas) representan un total de 395,6 d\u00edas de deuda t\u00e9cnica (costes de remediaci\u00f3n de los defectos) o 14,7% de un total de 2 677,2 d\u00edas.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Sqale1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1597\" alt=\"PLSQL_Sqale1\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Sqale1.jpg\" width=\"582\" height=\"249\" \/><\/a><\/p>\n<p>El siguiente diagrama demuestra la importancia que representa el mantenimiento, con 3\/4 de la deuda t\u00e9cnica. Volveremos en un futuro post con este diagrama SQALE Sunburst, y com\u00f3 utilizarlo. Pero podemos ver (segundo c\u00edrculo), como la legibilidad (Readibility) y la comprensibilidad del c\u00f3digo (Understandability) son los dos factores constitutivos de la mantenibilidad. Todas las reglas acerca de la Mantenabilidad (tercer c\u00edrculo, exterior) caen dentro de estos 2 grupos.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_SqaleSunburst1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1598\" alt=\"PLSQL_SqaleSunburst1\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_SqaleSunburst1.jpg\" width=\"581\" height=\"603\" \/><\/a><\/p>\n<p>La flecha indica que en t\u00e9rminos de Cambiabilidad (Changeability), se necesitan 165,6 d\u00edas de trabajo para asignar un alias a cada columna de las tablas, con el fin de facilitar la comprensi\u00f3n y los desarrollos futuros. Esto es m\u00e1s de un a\u00f1o-hombre, y yo no creo que es realmente el m\u00e1s cr\u00edtico. O al menos no como un defecto que impacta al usuario.<\/p>\n<p>De hecho, son m\u00e1s de 15 a\u00f1os-hombre para eliminar la deuda t\u00e9cnica debida a la mantenibilidad, aunque no sabemos si esta aplicaci\u00f3n sigue con muchas evoluciones o cual es su duraci\u00f3n futura de vida.<\/p>\n<p>Entonces, voy a bajar una serie de buenas pr\u00e1cticas relativas a la legibilidad o la portabilidad en Minors, porque no quiero que sea una prioridad. Y a mover Majors relativas a la robustez, el rendimiento o la seguridad a Cr\u00edticals.<\/p>\n<p>Sin entrar en demasiados detalles, las reglas que suben en Criticals son las siguientes:<\/p>\n<ul>\n<li>EXCEPTION &#8211; Catch all exceptions with WHEN OTHERS<\/li>\n<li>GOTO &#8211; Avoid use of GOTO statements<\/li>\n<li>IF &#8211; Avoid nested if statements. Esta regla se refiere a la mantenabilidad, pero me parece lo suficientemente grave como para justificar su promoci\u00f3n a Criticals. Tambi\u00e9n puede afectar, en cierta medida, la robustez de la aplicaci\u00f3n, ya que favorece el riesgo de errores de l\u00f3gica.<\/li>\n<li>LOOP &#8211; Avoid simple loops of the form LOOP &#8230; END LOOP<\/li>\n<li>LOOP &#8211; Avoid using EXIT from within a FOR or WHILE loop<\/li>\n<li>RETURN &#8211; Avoid using RETURN from within a loop<\/li>\n<li>SQL &#8211; Avoid nested subqueries (queries in the WHERE clause)<\/li>\n<\/ul>\n<p>Voy a pasar en Blockers las siguientes reglas:<\/p>\n<ul>\n<li>SQL &#8211; Avoid using the GROUP BY clause<\/li>\n<li>SQL \u2013 Avoid using UNION (celle-ci est de type Info).<\/li>\n<li>SQL &#8211; Do not join on more than X tables<\/li>\n<li>SQL &#8211; SELECT * should not be used<\/li>\n<\/ul>\n<p>porque impactan el rendimiento de manera significativa. Tambi\u00e9n son reglas SQL que se aplican a todas las tecnolog\u00edas (Cobol, ABAP, etc.). De hecho, estas reglas no tienen defectos en esta aplicaci\u00f3n, as\u00ed que son conocidas por los desarrolladores.<\/p>\n<p>No ser\u00e1 el caso para otros lenguajes, especialmente en ABAP: el conocimiento de las mejores pr\u00e1cticas de SQL no es un punto fuerte de los equipos de proyectos SAP.<\/p>\n<p>Las reglas principales que bajamos a Minors:<\/p>\n<ul>\n<li>FORMAT &#8211; Do not use more that one statement per line<\/li>\n<li>LITERALS &#8211; Avoid using magic numbers<\/li>\n<li>LITERAL &#8211; Avoid new-line or control characters in string literals<\/li>\n<li>SQL &#8211; Columns should be aliased<\/li>\n<li>SQL &#8211; Introduce column aliases using the AS keyword<\/li>\n<li>SQL &#8211; Prefer EXECUTE IMMEDIATE to DBMS_SQL&#8217;s package procedure calls<\/li>\n<li>SQL &#8211; Tables should be aliased<\/li>\n<li>SQL &#8211; Use standard ANSI syntax instead of old syntax for join queries<\/li>\n<\/ul>\n<p>Nota: yo suelo hacer este estudio para cada nuevo cliente, sobre la base de sus propias reglas. El plug-in SQALE de SonarQube es una gran ayuda para hacer esto. Despu\u00e9s de esta asignaci\u00f3n, en nuestro propio perfil de calidad, la asignaci\u00f3n de las normas de acuerdo a su criticidad ahora parece m\u00e1s equilibrada:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Sqale_Rules.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1602\" alt=\"Sqale_Rules\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Sqale_Rules.jpg\" width=\"582\" height=\"177\" \/><\/a><\/p>\n<p>El n\u00famero de Blockers no ha cambiado: las reglas que hemos pasado en esta categor\u00eda son claramente conocidas y respetadas por el equipo de proyecto.<\/p>\n<p>La deuda t\u00e9cnica atribuible a Criticals se ha incrementado, pero queda relativamente limitada: debe ser posible corregir estos defectos durante el ciclo de vida del proyecto, o con un proyecto espec\u00edfico de remediaci\u00f3n que no requiere una gran inversi\u00f3n.<\/p>\n<p>El n\u00famero de Majors ha disminuido con algunas reglas que han pasado a Criticals o que fueron rebajadas a Minors. La mayor parte de estas normas Majors est\u00e1n dirigidas a mantenibilidad, y un cliente puede decidir tomar en cuenta la totalidad o cualquier parte de esta deuda t\u00e9cnica, de acuerdo con su propia orientaci\u00f3n TI:<\/p>\n<ul>\n<li>Evitar errores para los usuarios de esta aplicaci\u00f3n.<\/li>\n<li>Reducir los costes de mantenimiento, en funci\u00f3n de la duraci\u00f3n de vida de la aplicaci\u00f3n, de la frecuencia de cambios, de los presupuestos, etc.<\/li>\n<\/ul>\n<p>El plugin SQALE proporciona una ayuda muy interesante para la adaptaci\u00f3n de un Quality Profile,\u00a0 basandose en las necesidades del cliente. Se debe entender que el Perfil de Calidad ofrecido por defecto con SonarQube para cada tecnolog\u00eda es una base de trabajo y no un conjunto de normas gravadas en el m\u00e1rmol. Es el papel del consultor de Calidad de calificar la orientaci\u00f3n TI de cada cliente, para realizar un Quality Profile espec\u00edfico a sus necesidades, de modo que se puede construir un plan de acci\u00f3n realista, que permite una gesti\u00f3n optimal de la deuda t\u00e9cnica.<\/p>\n<p>Probablemente tendremos la oportunidad de realizar en el futuro un post, y probablemente m\u00e1s de uno, para este plugin SQALE.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuamos esta serie en el an\u00e1lisis de c\u00f3digo PL\/SQL con hoy las normas de tipo Majors. Vimos antes c\u00f3mo organizar nuestro entorno y configurar nuestro an\u00e1lisis de c\u00f3digo con Jenkins y SonarQube. Hemos creado nuestro propio Quallity Profile y revisado las reglas de tipo Blockers y Criticals, todas orientadas a Robustez (fiabilidad) y Seguridad.<\/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-984","post","type-post","status-publish","format-standard","hentry","category-sonarqube-plsql"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/984"}],"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=984"}],"version-history":[{"count":22,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/984\/revisions"}],"predecessor-version":[{"id":1006,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/984\/revisions\/1006"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=984"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}