<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">



<title type="text">Antonio Calero</title>
<generator uri="https://github.com/mojombo/jekyll">Jekyll</generator>
<link rel="self" type="application/atom+xml" href="http://www.acalero.com/feed.xml" />
<link rel="alternate" type="text/html" href="http://www.acalero.com/" />
<updated>2016-10-24T21:44:44+00:00</updated>
<id>http://www.acalero.com/</id>
<author>
  <name></name>
  <uri>http://www.acalero.com/</uri>
  <email></email>
</author>


<entry>
  <title type="html"><![CDATA[Más allá de la deuda técnica. La deuda de la gestión]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/09/04/modelo-deuda-jira"/>
  <id>http://www.acalero.com/2016/09/04/modelo-deuda-jira</id>
  <published>2016-09-04T06:00:00+00:00</published>
  <updated>2016-09-04T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;h2 id=&quot;la-deuda-tcnica&quot;&gt;La deuda técnica&lt;/h2&gt;

&lt;p&gt;El concepto de deuda técnica fue introducido por Ward Cunningham en el año 1992 y viene a significar que las malas prácticas en el desarrollo de software provocan una situación de deuda que repercute en un sobrecoste no sólo en el proceso de mantenimiento del software de un sistema de información sino también en su propio funcionamiento.&lt;/p&gt;

&lt;p&gt;La &lt;a href=&quot;http://opinion.excentia.es/2012/03/la-deuda-tecnica-y-el-metodo-sqale.html&quot;&gt;deuda técnica&lt;/a&gt; se calcula detectando un conjunto de malas prácticas sobre diferentes características del software (estructura, complejidad, código duplicado, defectos potenciales, malas prácticas, …) y en función del coste que tiene solucionarlas. Esto permite obtener un ratio de deuda técnica viene a decirnos la calidad general de nuestro código y como de “sostenible” es a lo largo del tiempo. Algo así como los “intereses” que estamos pagando si hacemos las cosas mal.&lt;/p&gt;

&lt;p&gt;Herramientas como SonarQube han popularizado este concepto al permitir automatizar mediante análisis estático y de forma más o menos “objetiva” el cálculo de los valores asociados a la deuda. Sin embargo esto ha hecho que siempre hablemos de deuda referida a la calidad del código. ¿Qué pasa con todo lo que rodea al software que no sea código? Es evidente que también puede repercutir en la deuda general del proyecto… pero, ¿alguien alguna vez se ha parado a medirlo, o al menos lo ha intentado?&lt;/p&gt;

&lt;p&gt;Si es que mira que los técnicos somos raros (por no decir insultos), resulta que construimos modelos para evaluar nuestra propia deuda “técnica” pero nadie evalua la deuda de &lt;a href=&quot;http://www.acalero.com/2016/07/27/los-gestores-deberian-programar&quot;&gt;los que no saben programar&lt;/a&gt;, la deuda que no es técnica, la deuda de la gestión. ¿Acaso es menos importante?&lt;/p&gt;

&lt;h2 id=&quot;un-pequeo-paso-un-modelo-de-deuda-para-jira&quot;&gt;Un pequeño paso: un modelo de deuda para JIRA&lt;/h2&gt;

&lt;p&gt;Como todos los años por estas fechas, Atlassian celebra un concurso de desarrollo de plugins para motivar la creación y la innovación de productos en todo su ecosistema (el concurso se llama &lt;a href=&quot;http://codegeist.devpost.com/&quot;&gt;Codegeist&lt;/a&gt;, y cualquiera puede participar). Personalmente me encanta el concurso porque se presentan muchas ideas muy interesantes (algunas un poco locas) que de otra manera seguro que no se llegarían a desarrollar.&lt;/p&gt;

&lt;p&gt;El año pasado en &lt;strong&gt;excentia&lt;/strong&gt; ya participamos con una de esas ideas locas: representando los issues de JIRA en forma de ciudad en 3D (&lt;strong&gt;&lt;a href=&quot;https://marketplace.atlassian.com/1214149]&quot;&gt;3D Issues Map for JIRA&lt;/a&gt;&lt;/strong&gt;) y la verdad es que aunque de momento se haya quedado en algo experimental todos los comentarios fueron interesantes, y aprendimos mucho con la experiencia.&lt;/p&gt;

&lt;p&gt;Una vez más no podíamos faltar a la cita, así que siendo Atlassian Expert y evangelista de SonarQube, no se me ocurría mejor forma de participar que juntando ambas pasiones. El resultado ha sido construir &lt;a href=&quot;https://marketplace.atlassian.com/1215774&quot;&gt;un plugin para introducir el concepto de deuda en JIRA&lt;/a&gt; de forma similar a la deuda técnica de SonarQube. Y lo he presentado al concurso así que podéis ver todos los detalles en &lt;a href=&quot;http://devpost.com/software/debt-tracker-and-assessment-for-jira&quot;&gt;la página de producto del Codegeist&lt;/a&gt; (y si queréis votar pues adelante). Ha sido bautizado como:&lt;/p&gt;
&lt;p style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://marketplace.atlassian.com/1215774&quot;&gt;&lt;strong&gt;Debt Tracker and Assessment for JIRA&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/posts/2016-09-04-debt-tracker-screenshot-1.png&quot; alt=&quot;Debt Tracker&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;la-base-del-modelo&quot;&gt;La base del modelo&lt;/h3&gt;

&lt;p&gt;Si en SonarQube el núcleo es el análisis estático del código fuente, en JIRA el núcleo es el análisis estático de los issues. La idea es que de la misma forma que se buscan patrones de malas prácticas en las líneas de código se busquen patrones de malas prácticas en los issues de JIRA. Se trata de un motor de reglas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/posts/2016-09-04-debt-tracker-screenshot-2.png&quot; alt=&quot;Debt Tracker&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;la-evaluacin-del-modelo&quot;&gt;La evaluación del modelo&lt;/h3&gt;

&lt;p&gt;Siguiendo el modelo de &lt;a href=&quot;http://www.sqale.org/&quot;&gt;SQALE&lt;/a&gt; y adaptándolo para nuestro contexto tendremos &lt;strong&gt;para cada mala práctica un coste de remedio&lt;/strong&gt; asociado, que será al fin y al cabo la deuda que introduce esa mala práctica. La suma de todos los costes de las malas prácticas detectadas nos dará el valor de la deuda total de un proyecto (o de una issue en particular).&lt;/p&gt;

&lt;p&gt;A partir del valor de deuda total y haciendo una estimación de la máxima deuda posible para el proyecto calculamos el ratio de deuda. &lt;strong&gt;Este valor del ratio es el que nos permite conocer los intereses que estamos pagando por estar haciendo las cosas mal&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;la-calificacin-de-deuda&quot;&gt;La calificación de deuda&lt;/h3&gt;

&lt;p&gt;Por último, con este ratio, podemos clasificar el proyecto, y de esa forma otorgarle una &lt;strong&gt;calificación de deuda (rating)&lt;/strong&gt; que nos va a permitir compararlo frente a otros proyectos y conocer de forma sencilla como de sostenible es.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Todo esto es lo que se ha implementado en el plugin, y lo que nos va a permitir introducir un modelo de calidad para evaluar los proyectos de JIRA.&lt;/p&gt;

&lt;p&gt;Como en todos los modelos de este estilo, lo más importante son las reglas. Por eso el modelo debe ser configurable (y así se ha desarrollado) para que se puedan &lt;strong&gt;activar y desactivar las reglas&lt;/strong&gt; según el contexto de cada organización y el nivel de exigencia que requiera.&lt;/p&gt;

&lt;p&gt;En la primera versión ya se incluyen más de 10 reglas que espero que podamos ir aumentando. Si se te ocurre alguna regla no dudes en decírnoslo, y la incorporamos en la siguiente versión.&lt;/p&gt;

&lt;h3 id=&quot;en-resumen&quot;&gt;En resumen…&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;El modelo de deuda técnica casi siempre se ha aplicado al código fuente&lt;/li&gt;
  &lt;li&gt;La deuda puede estar en otras actividades que no sean código (por ejemplo, en la gestión de issues de JIRA)&lt;/li&gt;
  &lt;li&gt;Aprovechando el concurso Codegeist de Atlassian tenemos un plugin que introduce un nuevo modelo de deuda para JIRA&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Podéis probarlo gratis &lt;a href=&quot;https://marketplace.atlassian.com/1215774&quot;&gt;descargándolo del Marketplace&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://confluence.excentia.es/display/DEBTJIRA/Home&quot;&gt;Más información sobre el modelo y el plugin en &lt;strong&gt;excentia&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¿Qué os parece? ¿Conocíais algo parecido? ¡Espero vuestros comentarios!&lt;/p&gt;

  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/09/04/modelo-deuda-jira&quot;&gt;Más allá de la deuda técnica. La deuda de la gestión&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el September 04, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Errores comunes del análisis estático (parte II)]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/08/01/errores-comunes-analisis-estatico-II"/>
  <id>http://www.acalero.com/2016/08/01/errores-comunes-analisis-estatico-II</id>
  <published>2016-08-01T06:00:00+00:00</published>
  <updated>2016-08-01T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;Si aún no has leído &lt;a href=&quot;/2016/07/20/errores-comunes-analisis-estatico-I&quot;&gt;los cinco primeros errores más comunes&lt;/a&gt; puedes hacerlo ahora y así ponerte en contexto.&lt;/p&gt;

&lt;p&gt;A continuación te dejo con el resto de la recopilación:&lt;/p&gt;

&lt;h2 id=&quot;error-6-las-herramientas-no-se-complementan-con-otros-tipos-de-tests&quot;&gt;Error #6. Las herramientas no se complementan con otros tipos de tests&lt;/h2&gt;

&lt;p&gt;Aunque en los últimos años ha mejorado mucho hay cosas que el análisis estático no puede detectar: problemas de configuración, errores que solo se dan en tiempo de ejecución, …&lt;/p&gt;

&lt;p&gt;Por eso no basta solo con el análisis estático. Siempre tienes que proporcionar un buen conjunto de tests que aseguren otros aspectos de calidad (unitarios, integración, rendimiento, …). Estos tests pueden asegurar que el código cumple con ciertos requisitos de forma diferente a como lo hace el análisis estático.&lt;/p&gt;

&lt;p&gt;Es un error muy común pensar que solo usando análisis estático vas a poder solucionar todos tus problemas. Nada más lejos de la realidad. El análisis estático es potente, pero no tanto.&lt;/p&gt;

&lt;h2 id=&quot;error-7-la-configuracin-del-ide-es-la-de-por-defecto&quot;&gt;Error #7. La configuración del IDE es la de por defecto&lt;/h2&gt;

&lt;p&gt;No puedes dejar que cada desarrollador trabaje con un IDE con configuraciones que no estén alineadas con las herramientas de análisis estático.&lt;/p&gt;

&lt;p&gt;Hay que proporcionar las configuraciones adecuadas para cada IDE de forma que las inspecciones de código que se hagan en el IDE sean las mismas (o lo más parecidas posible) a las normativas definidas y al análisis estático. De nada sirve que la configuración del IDE indente con cuatro espacios y que luego la regla de análisis estático valide que sea con dos espacios. Tienes que revisar con mucho detalle todas las reglas existentes en el IDE y activar/desactivar las reglas que sean necesarias para alinearlas con los estándares definidos.&lt;/p&gt;

&lt;p&gt;Cada vez que se añada una regla nueva en el análisis estático habrá que revisar que los IDEs también la incluyen. En el caso de SonarQube esto es bastante sencillo al poder utilizar el plugin “SonarLint” que incluso permite sincronizarse con el servidor de SonarQube de forma automática.&lt;/p&gt;

&lt;h2 id=&quot;error-8-no-hay-difusin-no-hay-seguimiento-as-que-no-hay-mejora-continua&quot;&gt;Error #8. No hay difusión, no hay seguimiento, así que no hay mejora continua&lt;/h2&gt;

&lt;p&gt;Ya tienes todo montado y funcionando. Los desarrolladores están motivados y el ciclo de desarrollo incluye el análisis estático como un paso más. ¿Y ahora qué?&lt;/p&gt;

&lt;p&gt;Si poco a poco vas abandonando el proceso y no difundes las mejoras, no haces seguimiento, no pides feedback a los equipos, no actualizas las herramientas, no incluyes reglas nuevas, … el análisis estático acabará siendo ineficiente y no se producirá un ciclo de mejora continua. Dejará de aportar valor en poco tiempo.&lt;/p&gt;

&lt;p&gt;Es fundamental comunicar los cambios, revisar el proceso frecuentemente, revisar y proponer reglas, hablar con los equipos para ver si hay más cosas que se puedan incluir en el análisis estático, comprobar y comunicar los resultados (¿hay menos errores en producción o todo sigue igual?).&lt;/p&gt;

&lt;h2 id=&quot;error-9-las-quejas-sobre-los-falsos-positivos&quot;&gt;Error #9. Las quejas sobre los falsos positivos&lt;/h2&gt;

&lt;p&gt;Muy común. Una vez alguien detecta un falso positivo el análisis estático pierde todo su prestigio y “ya no vale”. Hay desarrolladores que están deseando que eso ocurra para quitarle valor.&lt;/p&gt;

&lt;p&gt;Y es que las herramientas no son perfectas (ni los humanos tampoco, a pesar de que algunos desarrolladores tengan el ego muy alto), eso es evidente, por tanto habrá casos en los que la herramienta no será lo suficientemente inteligente como para saber si ese trozo de código va a producir un error o no. Ante la duda, se marca como posible defecto y ya el desarrollador deberá tomar la decisión final.&lt;/p&gt;

&lt;p&gt;Por ejemplo, en SonarQube es muy fácil marcar falsos positivos, así que no debería haber quejas sino todo lo contrario. Incluso si alguna regla produce demasiados falsos positivos entonces habrá que revisarla en profundidad porque es probable que haya que desactivarla o activar otras alternativas.&lt;/p&gt;

&lt;h2 id=&quot;error-10-empezar-el-anlisis-esttico-con-demasiadas-reglas&quot;&gt;Error #10. Empezar el análisis estático con demasiadas reglas&lt;/h2&gt;

&lt;p&gt;Es preferible tener pocas reglas que puedas entender e ir corrigiendo a tener muchas reglas que no sabes ni porque están ahí y que no puedas corregir.&lt;/p&gt;

&lt;p&gt;Si no tienes tiempo suficiente para hacer un primer estudio de lo que quieres incorporar y las reglas que necesitas activar, prueba con un conjunto muy básico (aquellas que sean más graves) y empieza a sacar métricas del análisis estático. No te preocupes. Divide y vencerás. Empieza con lo mínimo y poco a poco trabaja en mejorarlo. Ese es el objetivo y ese ciclo de mejora continua es lo que más te va a ayudar.&lt;/p&gt;

&lt;p&gt;Añade reglas poco a poco evitando las más controvertidas e inconvenientes y será la mejor forma de asegurar la calidad de tu código.&lt;/p&gt;

&lt;p&gt;Puedes empezar incluso sin reglas. Te sorprendería ver cuanta información valiosa pueden aportar métricas como la complejidad ciclomática o el código duplicado (o repetido). Pero eso lo dejo para otro artículo.&lt;/p&gt;

&lt;h2 id=&quot;bola-extra-los-malvados-gestores&quot;&gt;Bola extra. Los malvados gestores&lt;/h2&gt;

&lt;p&gt;Efectivamente. No pensarías que es todo tan fácil, ¿verdad? Recuerda que aunque &lt;a href=&quot;2016/07/27/los-gestores-deberian-programar&quot;&gt;los gestores deberían programar&lt;/a&gt; no lo hacen, así que no saben nada de esto ni le van a dar importancia. Tienes que conseguir ganarte a los gestores para estar de tu parte o no vas a tener una forma de poder dedicar suficiente tiempo a preocuparte por el análisis estático.&lt;/p&gt;

&lt;p&gt;Esto es así porque no es algo a corto plazo sino más a medio o largo plazo y hay que invertir tiempo. Tienes que hacer entender a los gestores que el análisis estático tiene un gran retorno de inversión (o aliarte con alguno que piense así). Tienen que entender los requisitos, los objetivos y permitir que se dedique tiempo suficiente.&lt;/p&gt;

&lt;p&gt;Lo que pasará si no consigues alinearte con ellos es que dedicarás mucho esfuerzo que no servirá de nada.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Con esto completamos el segundo “pack” de errores comunes que deberías evitar en el uso de análisis estático.&lt;/p&gt;

&lt;h3 id=&quot;en-conclusin&quot;&gt;En conclusión…&lt;/h3&gt;

&lt;p&gt;El análisis estático no es simplemente instalar una herramienta y ya está. Requiere dedicación, colaboración, difusión y una serie de tareas adicionales que si no se tienen en cuenta te llevarán al fracaso. Así que ya sabes, como con todo en esta vida, cuando te embarques en esa difícil misión de implantar análisis estático, reflexiona y planifica bien todo lo que vas a hacer, porque de eso dependerá que el análisis estático sume todas sus ventajas a tu proceso de desarrollo.&lt;/p&gt;

&lt;p&gt;En resumen:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;No permitas que las versiones liberadas se salten los umbrales de calidad&lt;/li&gt;
  &lt;li&gt;Ten en cuenta la opinión de los desarrolladores a la hora de definir las reglas&lt;/li&gt;
  &lt;li&gt;Intenta utilizar el análisis estático desde el principio, y no solo cuando ya estas a punto de poner en producción el proyecto&lt;/li&gt;
  &lt;li&gt;Alinea tus normativas de desarrollo con el análisis estático&lt;/li&gt;
  &lt;li&gt;Utiliza reglas personalizadas para intentar cubrir los casos especiales de tu arquitectura&lt;/li&gt;
  &lt;li&gt;No te olvides de los tests (unitarios, integración, …), el análisis estático solo ve una parte de los posibles problemas potenciales&lt;/li&gt;
  &lt;li&gt;Sincroniza la configuración del IDE con el análisis estático, que en todos sitios se mida lo mismo&lt;/li&gt;
  &lt;li&gt;Difunde, difunde y difunde. Obten feedback y lleva el análisis estático a un ciclo de mejora continua (como todo lo demás)&lt;/li&gt;
  &lt;li&gt;Los falsos positivos se pueden (y deben) gestionar, que no te frenen con ellos&lt;/li&gt;
  &lt;li&gt;Keep It Small and Simple (KISS), hay muchas reglas que se pueden activar pero lo mejor es simplificar y empezar con pocas, que puedan resolverse&lt;/li&gt;
  &lt;li&gt;Busca el apoyo de la gestión/dirección, sin ellos no podrás tener éxito y harás un sobreesfuerzo que no servirá de nada&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esas son algunas de las cosas que tienes que tener en cuenta pero seguro que tú conoces más, así que deja un comentario y seguimos debatiendo.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;__________________________________________________&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
    &lt;a href=&quot;https://mikealdo.github.io/2016/04/29/10-biggest-mistakes-in-using-static-analysis.html&quot;&gt;
    &lt;span style=&quot;font-size: small;&quot;&gt;Adaptación del artículo original de &lt;strong&gt;Michael Davidek&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
    &lt;/a&gt;
&lt;/div&gt;

  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/08/01/errores-comunes-analisis-estatico-II&quot;&gt;Errores comunes del análisis estático (parte II)&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el August 01, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Los gestores (o jefes) deberían programar]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/07/27/los-gestores-deberian-programar"/>
  <id>http://www.acalero.com/2016/07/27/los-gestores-deberian-programar</id>
  <published>2016-07-27T06:00:00+00:00</published>
  <updated>2016-07-27T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;Que en España &lt;a href=&quot;http://www.bonillaware.com/la-falacia-del-programador-perdido&quot;&gt;no se valoren las habilidades técnicas es algo que todos sabemos&lt;/a&gt;, no nos vamos a engañar. Todo el mundo termina la carrera y su primer trabajo suele ser de programador. A partir de ahí la carrera profesional premia el ir abandonando esa habilidad y avanzar en otras para cambiar de puesto: analista, jefe de equipo, arquitecto, … así hasta llegar a ser el director de “algo”. Y claro, pues pasa lo que pasa y &lt;strong&gt;nos encontramos con la mayoría de proyectos de software suelen fracasar&lt;/strong&gt; (en tiempo, en presupuesto, …) y a veces el mercado nos dice que &lt;a href=&quot;https://www.enriquedans.com/2012/06/el-programador-perdido-en-mi-columna-de-expansion.html&quot;&gt;el problema es la falta de buenos programadores&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Y no sería mejor que los “jefes” continuarán programando? ¿No sería mejor que al menos una parte de su tiempo siguiese siendo “técnica”?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No paro de verlo en otros sectores donde lo normal es que la gente trabaje en lo que mejor preparado esté (y más experiencia tenga), y no al contrario.&lt;/p&gt;

&lt;p&gt;Por ejemplo, el jefe de urgencias de un hospital no está sentando en un despacho viendo como vienen y van los pacientes mientras que otros los atienden. Si bien es cierto que un porcentaje del trabajo es de coordinación y gestión, hay una parte que todavía le obliga a remangarse y atender a pacientes como médico que es. ¿A qué a nadie se le ocurre poner a coordinar un servicio de urgencias a un médico que nunca haya estado en urgencias?&lt;/p&gt;

&lt;p&gt;Y cuando vas a un restaurante… ¿a qué a nadie se le ocurre que un jefe de cocina (el chef) no sepa cocinar? Desde luego yo no iría a ese restaurante si fuese así… ¿Y quién tiene el prestigio del restaurante? Prácticamente siempre el chef.&lt;/p&gt;

&lt;p&gt;Esto es así en cualquier trabajo que requiera un mínimo de creatividad y de capacidad intelectual para solucionar problemas. Y el software tienen una complejidad que es muy alta, y no es diferente al resto.&lt;/p&gt;

&lt;h3 id=&quot;pero-por-qu-los-gestores-deberan-dedicar-un-porcentaje-de-su-tiempo-a-programar&quot;&gt;¿Pero por qué los gestores deberían dedicar un porcentaje de su tiempo a programar?&lt;/h3&gt;

&lt;p&gt;Si pierdes el contacto con el código &lt;strong&gt;pierdes la conexión con el equipo&lt;/strong&gt; y en consecuencia con el proyecto. Pero lo peor de todo es que perderás la habilidad que te ha llevado hasta tu puesto. Eso nunca puede ser bueno.&lt;/p&gt;

&lt;p&gt;Esta claro que los gestores deben concentrarse en las estrategias, la coordinación, la supervisión, etc. y tiene sentido que dediquen gran parte de tiempo a todo eso. ¿Pero acaso nuestra industria no es tecnológica? Si abandonas la tecnología (el desarrollo de software) la consecuencia en el resto de aspectos puede ser devastadora: &lt;strong&gt;malas decisiones, mala planificación o pérdida de liderazgo&lt;/strong&gt;, entre otras.&lt;/p&gt;

&lt;p&gt;Aquí van algunas razones de por qué deberías seguir dedicando algo de tiempo a programar:&lt;/p&gt;

&lt;h3 id=&quot;si-no-programas-te-equivocars-planificando&quot;&gt;Si no programas te equivocarás planificando&lt;/h3&gt;

&lt;p&gt;Por la propia naturaleza del software todos somos muy malos planificando así que imagina si además te alejas mucho de la codificación y las tareas técnicas.&lt;/p&gt;

&lt;p&gt;¿De verdad crees que puedes saber la complejidad de las cosas como para estimar el tiempo de resolverlas? Olvidate. Te vas a equivocar siempre. &lt;a href=&quot;http://www.javiergarzas.com/2014/11/tiene-realmente-sentido-estimar-y-si-deberiamos-estimar-el-software-el-movimiento-noestimates.html&quot;&gt;Estimar no es timar&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;si-no-programas-no-sabrs-gestionar-la-deuda-tcnica&quot;&gt;Si no programas no sabrás gestionar la deuda técnica&lt;/h3&gt;

&lt;p&gt;Si no programas, dime cómo vas a saber el impacto que tiene el hacer las cosas de una u otra manera. ¿Cómo vas a ser capaz de priorizar una nueva funcionalidad frente a refactorizar? ¿Cómo vas a debatir con tu equipo si algo que haces hoy puede ser peor o mejor a largo plazo?&lt;/p&gt;

&lt;p&gt;Al final, solo te centrarás en estar pendiente de que la planificación se cumpla, algo que por cierto ya sabes que nunca se cumple. Menudo problemón. Acabarás acumulando mucha deuda técnica.&lt;/p&gt;

&lt;h3 id=&quot;el-resultado-del-cdigo-es-tu-responsabilidad&quot;&gt;El resultado del código es tu responsabilidad&lt;/h3&gt;

&lt;p&gt;Cuando eres gestor debes liderar. No se trata de estar tomando todas las decisiones de tu equipo, o aprobándolas todas, se trata de tener el conocimiento y estar en contexto para poder &lt;strong&gt;facilitar&lt;/strong&gt; esas decisiones.&lt;/p&gt;

&lt;p&gt;Tu eres el responsable del resultado, y tu habilidad para poder elegir entre las diferentes opciones debe ser acorde a esa responsabilidad.&lt;/p&gt;

&lt;h3 id=&quot;el-equipo-te-respeta-si-eres-apasionado-con-el-cdigo&quot;&gt;El equipo te respeta si eres apasionado con el código&lt;/h3&gt;

&lt;p&gt;Si tu equipo tiene pasión por el desarrollar código entonces tu tienes que dar ejemplo y ser el primero en hacerlo.&lt;/p&gt;

&lt;p&gt;Ten en cuenta que los miembros de tu equipo te respetan, y lo harán mucho más si demuestras que lo que ellos hacen (programar) es algo que tú también haces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Un buen líder no se queda en un pedestal,&lt;/strong&gt; se baja de él y empuja para sacar el proyecto adelante como cualquier otro miembro del equipo.&lt;/p&gt;

&lt;h3 id=&quot;todo-va-muy-rpido-y-el-futuro-es-importante&quot;&gt;Todo va muy rápido y el futuro es importante&lt;/h3&gt;

&lt;p&gt;Deja de mantener tus habilidades técnicas y te quedarás fuera de juego en menos que canta un gallo. Nunca sabes lo que ocurrirá mañana, así que debes seguir “entrenándote” continuamente para lo que pueda pasar. &lt;strong&gt;Y esto es como hablar un idioma, si no se practica, se pierde.&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;en-definitiva&quot;&gt;En definitiva…&lt;/h3&gt;

&lt;p&gt;Es curioso como &lt;strong&gt;muchos gestores/jefes/managers hablan constantemente de la mejora continua&lt;/strong&gt;, de lo necesaria que es, de como ayuda a innovar, a crecer y a tantas cosas, pero siempre olvidándose de la mejora en habilidades técnicas. Es curioso como algunos incluso lo venden como un servicio para tu organización.&lt;/p&gt;

&lt;p&gt;Pero cuando rascas un poco, te das cuenta de que &lt;strong&gt;siguen usando el mismo Excel que hace 20 años para gestionar&lt;/strong&gt;, que nadie los saca de su metodología X para planificar, que no adoptan nuevas técnicas de gestión, que &lt;a href=&quot;http://www.javiergarzas.com/2012/06/diagramas-gantt.html&quot;&gt;siguen con sus diagramas de Gantt que nadie cumple&lt;/a&gt;, y tantas y tantas otras cosas.&lt;/p&gt;

&lt;p&gt;Y es curiosos como todos ellos les piden (o más bien exigen) a sus equipos que sepan todos los lenguajes de programación actuales, que sepan de las últimas tecnologías disponibles, que de un día para otro hagan magia con su código, que hagan demos de plataformas que no han probado, que cambien de tecnología cada año, y tantas y tantas otras barbaridades.&lt;/p&gt;

&lt;p&gt;Así que desde aquí, si me lees, te pido por favor que no permitamos que esto ocurra, que no nos convirtamos en simplemente gestores y nos olvidemos de la tecnología y demos esa parte por “hecha”, porque es la más importante de nuestros proyectos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.javiergarzas.com/2015/03/desconexion-de-los-directivos-espanoles-con-los-equipos-tecnicos.html&quot;&gt;Basta ya de gestores trogloditas&lt;/a&gt;&lt;/strong&gt;. Está en nuestras manos cambiarlo.&lt;/p&gt;


  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/07/27/los-gestores-deberian-programar&quot;&gt;Los gestores (o jefes) deberían programar&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el July 27, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Errores comunes del análisis estático (parte I)]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/07/20/errores-comunes-analisis-estatico-I"/>
  <id>http://www.acalero.com/2016/07/20/errores-comunes-analisis-estatico-I</id>
  <published>2016-07-20T06:00:00+00:00</published>
  <updated>2016-07-20T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;h2 id=&quot;error-1-que-los-defectos-potenciales-no-paren-el-build-o-saltarse-el-umbral-de-calidad&quot;&gt;Error #1. Que los defectos potenciales no paren el build (o saltarse el umbral de calidad)&lt;/h2&gt;

&lt;p&gt;El análisis estático tiene que ayudarnos a prevenir defectos de forma temprana antes de que ese código llegue a los usuarios. Hay que ser capaz de sacar “tarjeta roja” cuando se detecten los problemas más graves.&lt;/p&gt;

&lt;p&gt;Limitar lo que detectan las herramientas a simples “advertencias” es uno de los mayores errores. Hacer eso provoca que los resultados acaben siendo ignorados por los desarrolladores. Si la versión sigue su ciclo independientemente de lo que el análisis estático detecta no hay de que preocuparse y finalmente se ignora.&lt;/p&gt;

&lt;p&gt;Así que si sigues una estrategia de publicar el código independientemente de los resultados del análisis estático estás cometiendo un grave error.&lt;/p&gt;

&lt;h2 id=&quot;error-2-las-reglas-las-definen-los-arquitectos-y-no-se-tiene-en-cuenta-a-los-desarrolladores&quot;&gt;Error #2. Las reglas las definen los arquitectos y no se tiene en cuenta a los desarrolladores&lt;/h2&gt;

&lt;p&gt;Cuando digo arquitectos me refiero a ese perfil que se supone experto pero que ya lleva unos años sin programar, llámalo arquitecto, analista, o de la forma que prefieras.&lt;/p&gt;

&lt;p&gt;Para que el análisis estático sea efectivo es esencial que los desarrolladores formen parte del equipo que define las reglas a aplicar. Que los desarrolladores no colaboren y no afecten a las herramientas hará que las rechacen.&lt;/p&gt;

&lt;p&gt;Ellos son los que se tienen que preocupar de la calidad de su código todos los días así que tendrás que dejarles que forman parte del juego, o será imposible que sirva de algo.&lt;/p&gt;

&lt;h2 id=&quot;error-3-no-aplicar-los-estndares-desde-el-inicio&quot;&gt;Error #3. No aplicar los estándares desde el inicio&lt;/h2&gt;

&lt;p&gt;Una de las peores cosas que pueden ocurrir es de repente tener que resolver problemas que fueron introducidos hace mucho tiempo.&lt;/p&gt;

&lt;p&gt;Simple y llanamente porque no se habían configurado las herramientas y el ciclo de desarrollo no seguía los estándares.&lt;/p&gt;

&lt;p&gt;Para evitar esto puedes seguir una estrategia “fix the leak” y centrarte solo en el código nuevo o el que modificas, pero también es verdad que si usas el análisis estático desde el principio todo será más fácil.&lt;/p&gt;

&lt;h2 id=&quot;error-4-normativas-de-desarrollo-no-alineadas-con-el-anlisis-esttico&quot;&gt;Error #4. Normativas de desarrollo no alineadas con el análisis estático&lt;/h2&gt;

&lt;p&gt;¿Tienes normativas de desarrollo? Seguro que sí. ¿Y están mapeadas en tu herramienta de análisis estático? Seguro que no. Este error es también muy grave.&lt;/p&gt;

&lt;p&gt;En algún momento alguien dentro de la organización estableció una normativa de desarrollo y la escribió en un documento o wiki. Esa normativa se viene usando durante mucho tiempo y define como trabajar en los proyectos, que nomenclatura usar, la arquitectura de las aplicaciones, buenas prácticas, etc. Si después todo eso no se usa en el análisis estático entonces se estarán usando diferentes varas de medir.&lt;/p&gt;

&lt;p&gt;Para evitarlo debes configurar reglas que cubran esa normativa, pero no puedes olvidarte tampoco de actualizar la normativa para incluir toda la información necesaria sobre el análisis estático: herramientas utilizadas, como ejecutarlas, que reglas se usan, que prioridades, como solucionar algunas evidencias comunes, como abordar los proyectos ‘legacy’, …&lt;/p&gt;

&lt;p&gt;La relación entre las normativas y el análisis estático debe ser bidireccional y estar siempre actualizada.&lt;/p&gt;

&lt;h2 id=&quot;error-5-las-herramientas-no-usan-reglas-personalizadas&quot;&gt;Error #5. Las herramientas no usan reglas personalizadas&lt;/h2&gt;

&lt;p&gt;¿Estás seguro que no hay nada especial en la forma de desarrollar de tu organización? ¿No tienes una arquitectura personalizada que te gustaría supervisar que se cumple?&lt;/p&gt;

&lt;p&gt;Aunque muchas reglas son comunes para todos siempre hay algo que es específico y que debes controlar desde el principio. Crea tus propias reglas y personaliza aquellas que te lo permitan.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Y hasta aquí este primer “pack” de errores comunes que deberías evitar en el uso de análisis estático. En la siguiente entrega continuaremos con el resto. ¿Has cometido o estás cometiendo esos errores? ¿Estás de acuerdo con esta primera lista?&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;__________________________________________________&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
    &lt;a href=&quot;https://mikealdo.github.io/2016/04/29/10-biggest-mistakes-in-using-static-analysis.html&quot;&gt;
    &lt;span style=&quot;font-size: small;&quot;&gt;Adaptación del artículo original de &lt;strong&gt;Michael Davidek&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
    &lt;/a&gt;
&lt;/div&gt;

  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/07/20/errores-comunes-analisis-estatico-I&quot;&gt;Errores comunes del análisis estático (parte I)&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el July 20, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Nuevo modelo de calidad en SonarQube 5.5]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/05/10/sonarqube-modelo-calidad"/>
  <id>http://www.acalero.com/2016/05/10/sonarqube-modelo-calidad</id>
  <published>2016-05-10T06:00:00+00:00</published>
  <updated>2016-05-10T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;¿Y ahora qué? ¿Qué hacemos? ¿Preocupado? En realidad no es para tanto, la misma “filosofía” de SQALE sigue ahí, con la deuda técnica y la calificación de deuda, pero ahora con un enfoque diferente.&lt;/p&gt;

&lt;p&gt;Todos los cambios que han venido implementandose desde la versión 5.2 de &lt;strong&gt;SonarQube&lt;/strong&gt; tenían como objetivo llegar a este punto. &lt;strong&gt;Las mejoras en los analizadores han permitido empezar a detectar con mayor precisión los defectos potenciales y las vulnerabilidades&lt;/strong&gt;, así que es el momento de que tengan la importancia que se merecen.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img src=&quot;http://www.acalero.com/img/posts/2016-05-09-sonarqube-modelo-calidad.png&quot; alt=&quot;Los tres pilares del modelo de calidad&quot; /&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;Los tres pilares del nuevo modelo de calidad&lt;/div&gt;
&lt;hr /&gt;

&lt;h1 id=&quot;por-qu-un-nuevo-modelo&quot;&gt;¿Por qué un nuevo modelo?&lt;/h1&gt;

&lt;p&gt;Cuando se analiza la calidad del código con SonarQube uno de los problemas que más me encuentro en las organizaciones es &lt;em&gt;“¿por dónde empezamos? ¿cuáles son las evidencias que hay que resolver primero?”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Hasta ahora la respuesta siempre iba orientada a resolver las evidencias según su severidad: debes definir el perfil de calidad que quieres aplicar (conjunto de reglas y sus severidades), y después si una evidencia es bloqueante pues está claro que habrá que resolverla primero, ¿verdad?&lt;/p&gt;

&lt;p&gt;Esto que parece tan sencillo provoca que se den situaciones un poco más complicadas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Todas las evidencias bloqueantes detectan defectos reales?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La respuesta es no. Según quién crea el perfil de calidad puede darle más importancia a unas cosas que a otras. Por ejemplo, la falta de cobertura en una clase puede ser tratada como una evidencia bloqueante, pero eso no quiere decir que el código de esa clase tenga defectos. Lo mismo para el código duplicado o la complejidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Y al contrario? ¿Puede haber evidencias de poca severidad que detecten “bugs” o “vulnerabilidades” en producción?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si, podría haberlas. Conozco muchos casos en los que la regla de inyección de código en las consultas de base de datos no es ni bloqueante ni crítica, por ejemplo. Incluso las reglas que detectan problemas de &lt;em&gt;Null Pointer&lt;/em&gt; a veces se configuran sin las severidades máximas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Tener una calificación A de deuda garantiza un código libre de bugs?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La respuesta es no. Y este es quizás el argumento más razonable a la hora de cambiar el modelo. Podíamos encontrarnos proyectos con una deuda muy baja, con la que obtienen una calificación de A, pero con un bug que provocase un &lt;em&gt;ClassCastException&lt;/em&gt; en el código más crítico. Esto no tenía ningún sentido y tiene que reflejarse de algún modo.&lt;/p&gt;

&lt;p&gt;Así que en mi opinión esto es precisamente lo que estaba ocurriendo y lo que debe aclarar el nuevo modelo:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Era muy difícil diferenciar cuando una evidencia estaba causando un problema de verdad de cuando se trataba simplemente de una normativa por política de desarrollo, o de una buena práctica.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por eso el nuevo enfoque y separar en tres elementos diferentes las evidencias: bugs, vulnerabilidades y todo lo demás (code smells, hediondez del código o código que huele mal).&lt;/p&gt;

&lt;h1 id=&quot;los-tres-ejes-del-nuevo-modelo&quot;&gt;Los tres ejes del nuevo modelo&lt;/h1&gt;

&lt;p&gt;Efectivamente, dado que las evidencias se clasifican ahora en tres grupos, pues el nuevo modelo incluye tres características a las que deben asociarse:&lt;/p&gt;

&lt;h3 id=&quot;fiabilidad&quot;&gt;&lt;strong&gt;Fiabilidad&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Incluye las evidencias de tipo &lt;strong&gt;bug&lt;/strong&gt;. Un &lt;strong&gt;bug&lt;/strong&gt; representa algo que está mal en el código. Si el software aún no se ha roto, se romperá, y probablemente en el peor momento. Todos los &lt;strong&gt;bugs&lt;/strong&gt; tienen que solucionarse sí o sí. ¿Cuando? Ayer.&lt;/p&gt;

&lt;h3 id=&quot;seguridad&quot;&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Incluye las evidencias de tipo &lt;strong&gt;vulnerabilidad&lt;/strong&gt;, que representan una potencial puerta trasera para atacantes. El caso de las evidencias de seguridad es un poco más especial que el resto, porque la casuística es mucho mayor y los matices también. Por ejemplo, no podemos saber si una evidencia está afectando a datos sensibles o no. Por eso aquí se van a encontrar todas las evidencias que tengan una mínima sospecha de afectar a la seguridad. Es responsabilidad de una persona eliminar los falsos positivos y centrarse en resolver los casos reales.&lt;/p&gt;

&lt;h3 id=&quot;mantenibilidad&quot;&gt;&lt;strong&gt;Mantenibilidad&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Incluye las evidencias de tipo &lt;strong&gt;code smells&lt;/strong&gt;, que al final son todas esas malas prácticas que a la larga van a provocar que cada vez sea más difícil hacer cambios en el código. En el peor de los casos, todos estos &lt;strong&gt;malos olores&lt;/strong&gt; van a hacer que los desarrolladores se confundan, lo que terminará introduciendo nuevos bugs.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img src=&quot;http://www.acalero.com/img/posts/2016-05-09-tres-ejes-sonarqube.png&quot; alt=&quot;Fiabilidad, Seguridad y Mantenibilidad&quot; /&gt;
&lt;/div&gt;

&lt;h1 id=&quot;y-las-nuevas-calificaciones&quot;&gt;¿Y las nuevas calificaciones?&lt;/h1&gt;

&lt;p&gt;Pues resulta que para cada una de las características se calcula la calificación de una forma diferente. Si, como lo lees. A mí esto es lo que menos me ha gustado, y pienso que será un problema de cara a transmitirlo a los equipos. Pero es verdad que una vez te mentalizas y sabes que son diferentes pues ya no es tanto problema:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Para la &lt;strong&gt;mantenibilidad&lt;/strong&gt; se mantiene el mismo cálculo que existía en versiones anteriores usando el modelo SQALE y el ratio de deuda técnica. La calificación SQALE ahora es la calificación de mantenibilidad.&lt;/li&gt;
  &lt;li&gt;Para la &lt;strong&gt;fiabilidad&lt;/strong&gt; y la &lt;strong&gt;seguridad&lt;/strong&gt; se ha introducido una nueva fórmula: la calificación dependerá de la severidad más alta de los bugs o vulnerabilidades detectadas.
    &lt;ul&gt;
      &lt;li&gt;si existe al menos una bloqueante, la calificación será E&lt;/li&gt;
      &lt;li&gt;si existe al menos una crítica, la calificación será D&lt;/li&gt;
      &lt;li&gt;si existe al menos una mayor, la calificación será C&lt;/li&gt;
      &lt;li&gt;si existe al menos una menor, la calificación será B&lt;/li&gt;
      &lt;li&gt;si no existe ningún bug o vulnerabilidad, la calificación es A&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se sigue manteniendo el esfuerzo de resolución de la evidencia en todos los casos, sean bugs, vulnerabilidades o &lt;em&gt;code smells&lt;/em&gt;, lo que permite conocer una estimación (que puede ser más o menos precisa) de lo que costaría resolver los problemas.&lt;/p&gt;

&lt;p&gt;Tiene todo el sentido del mundo y como decía al principio, los bugs y vulnerabilidades ahora tienen más importancia. Ahora tu proyecto puede estar muy bien y tener una calificación de A en mantenibilidad, pero si se han detectado bugs en el código, esto se verá reflejado.&lt;/p&gt;

&lt;h1 id=&quot;en-resumen&quot;&gt;En resumen…&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Las evidencias (&lt;em&gt;issues&lt;/em&gt;) se categorizan ahora en tres tipos: &lt;strong&gt;bugs, vulnerabilidades y &lt;em&gt;code smells&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Desaparecen las características de calidad del modelo SQALE&lt;/strong&gt;, que se sustituyen por fiabilidad, seguridad y mantenibilidad, que se corresponden con el tipo de evidencia que incluyen.&lt;/li&gt;
  &lt;li&gt;La calificación de mantenibilidad es ahora lo que antes era la calificación de deuda, calculado en base al ratio de deuda.&lt;/li&gt;
  &lt;li&gt;La calificación de fiabilidad y seguridad se calculan teniendo en cuenta la severidad más alta de las evidencias detectadas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¿Qué te parece? ¿Conocías el nuevo modelo o te has llevado una sorpresa? ¿Crees que este nuevo enfoque ayudará a mejorar aún más tu código?&lt;/p&gt;

  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/05/10/sonarqube-modelo-calidad&quot;&gt;Nuevo modelo de calidad en SonarQube 5.5&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el May 10, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Aprovecha las herramientas de análisis estático]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/03/07/aprovecha-analisis-estatico"/>
  <id>http://www.acalero.com/2016/03/07/aprovecha-analisis-estatico</id>
  <published>2016-03-07T06:00:00+00:00</published>
  <updated>2016-03-07T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;El &lt;a href=&quot;http://shop.oreilly.com/product/9780596809492.do&quot;&gt;libro de Kevlin Henney&lt;/a&gt; tiene la suerte de contar con contribuciones de grandes expertos, incluyendo a Uncle Bob, por ejemplo. Aunque el libro es de 2010 sigue siendo una de las mejores referencias para las buenas prácticas en el desarrollo de software&lt;/p&gt;

&lt;p&gt;Hoy quería centrarme en la número 79 y recordar que las herramientas están ahí para ayudarte, no estas solo y no puedes saberlo todo.&lt;/p&gt;

&lt;p&gt;Remontándonos a la época donde el lenguaje C era el nuevo lenguaje de moda, los recursos de cpu y de almacenamiento eran algo de lujo. Los primeros compiladores estaban diseñados con esto en mente, para que se redujese el número de veces que se parseaba el código. Esto hacía que el compilador solo comprobase un subconjunto de todos los bugs posibles que se podían detectar en tiempo de compilación.&lt;/p&gt;

&lt;p&gt;Para compensar esta situación, &lt;strong&gt;Stephen Johnson&lt;/strong&gt; escribió una herramienta que se llamaba &lt;strong&gt;&lt;a href=&quot;https://es.wikipedia.org/wiki/Lint&quot;&gt;lint&lt;/a&gt;&lt;/strong&gt; (esto ya si que os sonará de algo, verdad… ¿de dónde pensabáis que venía &lt;a href=&quot;https://www.pylint.org/&quot;&gt;pylint&lt;/a&gt;, &lt;a href=&quot;http://www.jslint.com/help.html&quot;&gt;jslint&lt;/a&gt;, &lt;a href=&quot;http://www.sonarlint.org/&quot;&gt;sonarlint&lt;/a&gt;, …?). Esta herramienta implementaba parte del análisis estático que había sido eliminada de su hermano mayor -el compilador de C-. Sin embargo, en aquella época, las herramientas de análisis estático se ganaron la reputación de detectar demasiados falsos positivos y de únicamente centrarse en convenciones de nombres que no siempre eran necesarias.&lt;/p&gt;

&lt;p&gt;Pero hoy en día el abanico actual de lenguajes, compiladores y analizadores estáticos es muy diferente. La memoria y la CPU no son el factor determinante, por lo que los compiladores deberían poder incluir muchas más comprobaciones. Casi todos los lenguajes disponen de una herramienta que comprueba evidencias de estilo, buenas prácticas y a veces hasta errores que son muy difícil de detectar, como por ejemplo referencias a nulo. La mayoría de herramientas, como &lt;a href=&quot;http://www.splint.org/&quot;&gt;splint&lt;/a&gt; para C o &lt;a href=&quot;https://www.pylint.org/&quot;&gt;pylint&lt;/a&gt; para Python, son configurables, lo que significa que puedes elegir que errores o advertencias quieres detectar a través de ficheros de configuración, desde la línea de comandos, o en tu entorno de desarrollo favorito.&lt;/p&gt;

&lt;p&gt;Y si todo lo demás no es suficiente, y al final te encuentras solo en la búsqueda de errores o tienes una normativa de desarrollo que tu compilador o tu herramienta favorita no controla, pues siempre puedes pensar en construir tu propio analizador estático. No es tan difícil. La mayoría de lenguajes ya exponen su arbol sintáctico (AST) y sus herramientas de compilación como librerías estándar. Puede parecer una locura pero no lo es. Utilizando reglas &lt;a href=&quot;https://es.wikipedia.org/wiki/XPath&quot;&gt;XPath&lt;/a&gt; o kits de desarrollo como &lt;a href=&quot;http://docs.sonarqube.org/display/DEV/SSLR&quot;&gt;SSLR de SonarQube&lt;/a&gt; puedes construir tu propio conjunto de buenas prácticas y utilizarlos en diferentes herramientas para ayudarte.&lt;/p&gt;

&lt;p&gt;Así que no seas insconciente, benefíciate de todas las ventajas de las herramientas de análisis estático porque no estas solo ahí fuera.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;__________________________________________________&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
    &lt;a href=&quot;http://programmer.97things.oreilly.com/wiki/index.php/Sarah_Mount&quot;&gt;
    &lt;span style=&quot;font-size: small;&quot;&gt;Contribución original de Sarah Mount para el libro &lt;strong&gt;97 cosas que todo programador debería saber&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
    &lt;/a&gt;
&lt;/div&gt;


  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/03/07/aprovecha-analisis-estatico&quot;&gt;Aprovecha las herramientas de análisis estático&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el March 07, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Los principios de la inspección continua]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/03/03/principios-inspeccion-continua"/>
  <id>http://www.acalero.com/2016/03/03/principios-inspeccion-continua</id>
  <published>2016-03-03T06:00:00+00:00</published>
  <updated>2016-03-03T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;Aprovechemos para recordar uno a uno los diez principios de la inspección continua:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;1&lt;/strong&gt;&lt;/span&gt; Todas las partes interesadas en el proceso de desarrollo -y no sólo los desarrolladores o administradores- deben tener &lt;strong&gt;acceso inmediato a datos significativos sobre la calidad del software&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;2&lt;/strong&gt;&lt;/span&gt; La gestión de la calidad del software debe ser preocupación de todos, desde el inicio del desarrollo, pero finalmente es &lt;strong&gt;responsabilidad de todo el equipo de desarrollo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;3&lt;/strong&gt;&lt;/span&gt; La calidad de software debe ser parte del proceso de desarrollo, lo que significa que &lt;strong&gt;las normas de calidad son uno de los requisitos imprescindibles para poder declarar que un software está completo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;4&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;Los requisitos de calidad de software deben ser objetivos&lt;/strong&gt; y no permitir una aprobación/desaprobación de pase subjetivo (decisión errónea).&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;5&lt;/strong&gt;&lt;/span&gt; En la medida de lo posible, &lt;strong&gt;los requisitos de calidad de software deben ser comunes a todos los productos de software&lt;/strong&gt;, independientemente de sus características específicas.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;6&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;Los datos de calidad de software deben estar al día&lt;/strong&gt;, es decir, medidos en la última versión del código.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;7&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;Los productos de software deben ser inspeccionados de forma continua&lt;/strong&gt;, para que se encuentren errores rápidamente, cuando son fáciles de corregir. Los desarrolladores deben ser capaces de detectar nuevos defectos de calidad tan pronto como se introducen, es decir, dentro de su herramienta de desarrollo mientras escriben código, similar a los correctores ortográficos.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;8&lt;/strong&gt;&lt;/span&gt; Ya sea de manera proactiva o reactiva, &lt;strong&gt;los interesados deberán recibir una alerta cuando se introducen nuevos defectos de calidad&lt;/strong&gt;, ya sea mediante el envío de correo electrónico, rompiendo la compilación o por otros métodos. La inyección de nuevas evidencias debe ser continua, permitiendo a los equipos la tomar decisiones rápidas sobre la calidad.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;9&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;Los datos de calidad de software deben estar disponibles tanto en valores absolutos (en todo el código) y diferencial (nuevo código solamente)&lt;/strong&gt; para que el equipo de desarrollo pueda estar en control total del flujo de entrada de evidencias.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;10&lt;/strong&gt;&lt;/span&gt; Todas las nuevas evidencias y las evidencias más críticas existentes deben tener asignadas un camino claro con un calendario para su resolución.&lt;/p&gt;

&lt;p&gt;El paradigma de inspección continua es muy eficaz, y se ha demostrado que funciona en el mundo real gracias a &lt;a href=&quot;http://www.acalero.com/2014-11-28/que-es-sonarqube&quot;&gt;herramientas como SonarQube&lt;/a&gt;, que se han convertido en estándar de facto para implementar el paradigma.&lt;/p&gt;

&lt;p&gt;Por mi experiencia puedo asegurar que el modelo de inspección continua se utiliza con éxito para gestionar la calidad del software interno en proyectos de todos los tamaños. En todos los casos, la inspección continua ha ayudado a mejorar significativamente la calidad y la estabilidad del software, que por lo general, suponen un ahorro muy importante que de otro modo se gastaría en el análisis de causa raíz y la gestión de crisis.&lt;/p&gt;


  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/03/03/principios-inspeccion-continua&quot;&gt;Los principios de la inspección continua&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el March 03, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Los retos de la gestión de la calidad del código]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/03/01/retos-calidad-software"/>
  <id>http://www.acalero.com/2016/03/01/retos-calidad-software</id>
  <published>2016-03-01T06:00:00+00:00</published>
  <updated>2016-03-01T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;Por su naturaleza, las auditorías puntuales pueden provocar perturbaciones en el ciclo de desarrollo, ya que dan lugar a cambios en el software “completado”. En el mejor de los casos, este método de control de calidad ocasionará retrasos y repetir trabajo. En el peor de los casos, conduce a la liberación de software de mala calidad. En cualquier caso, &lt;strong&gt;el enfoque tradicional fomenta la percepción de que la construcción de software de calidad es demasiado complejo y caro&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Se necesita hacer hincapié en la calidad en todo el ciclo de desarrollo, con bucles de retroalimentación más cortos, para asegurar una rápida resolución de los problemas internos de calidad; en definitiva, un modelo que se base en la calidad desde el principio, en lugar de considerarse después de haber cometido los errores, &lt;strong&gt;un modelo proactivo en lugar de reactivo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Las auditorías puntuales se ejecutan, por diseño, a intervalos específicos y no de forma continua. Este enfoque de la gestión de la calidad del código tiene cuatro grandes tipos de deficiencias o retos a superar:&lt;/p&gt;

&lt;h3 id=&quot;demasiado-poco-demasiado-tarde&quot;&gt;Demasiado poco, demasiado tarde&lt;/h3&gt;

&lt;p&gt;Las auditorías puntuales identifican dos tipos de mejoras: &lt;strong&gt;cambios cosméticos y cambios estructurales&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mientras que los cambios cosméticos requieren modificaciones menores, los cambios estructurales pueden incluir importantes reingenierías de software.&lt;/p&gt;

&lt;p&gt;Si bien pueden ser necesarios estos cambios, los planes de acción resultantes de las auditorías puntuales se definen demasiado tarde en el proceso; de manera que o la fecha de lanzamiento de una versión software necesita ser ampliada, para incluir esta reingeniería del software, o peor todavía, el software llegará a producción con un nivel bajo de calidad, y por lo tanto con baja mantenibilidad y capacidad de adaptación cuando surjan nuevos requisitos.&lt;/p&gt;

&lt;h3 id=&quot;el-rechazo-de-los-desarrolladores&quot;&gt;El rechazo de los desarrolladores&lt;/h3&gt;

&lt;p&gt;Los desarrolladores tienden a rechazar los planes de acción generados a partir de auditorías puntuales, ya que:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Se generan fuera del equipo&lt;/strong&gt;, y lo normal es que sean vistos como una nueva restricción en el trabajo diario&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Son subjetivos&lt;/strong&gt;; evidencias que se suelen basan en el juicio de los auditores, más que en medidas objetivas&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Se pierde el contexto e historia de la información&lt;/strong&gt;, y por lo tanto se consideran irrelevantes&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Están invalidados por los cambios constantes&lt;/strong&gt;, el código está vivo y evoluciona tan rápido que la auditoría se hizo sobre código antiguo, provocando que esos datos rápidamente queden obsoletos&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;No involucra&lt;/strong&gt; a los desarrolladores y otras partes interesadas en el proceso de revisión y auditoría&lt;/li&gt;
  &lt;li&gt;Intervienen &lt;strong&gt;demasiado tarde en el proceso&lt;/strong&gt;; para cuando una característica es auditada, los desarrolladores necesitan “reaprender” el código para hacer frente a una evidencia&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;falta-de-propiedad-de-los-procesos&quot;&gt;Falta de propiedad de los procesos&lt;/h3&gt;

&lt;p&gt;Hay una clara falta de apropiación del proceso de calidad dentro de la organización.&lt;/p&gt;

&lt;p&gt;Los auditores no pueden poseer el proceso, debido a que ni son propietarios del código ni tienen control sobre la resolución de los problemas. Del mismo modo, el modelo de command-and-control de los auditores evita que el equipo de desarrollo sea dueño del proceso, ya que no está involucrado en las auditorias o revisiones.&lt;/p&gt;

&lt;p&gt;Así que, &lt;em&gt;jaque mate&lt;/em&gt;, al final tienes dos grupos inconexos que son ambos responsables de calidad, mientras que en realidad ninguno de ellos es responsable.&lt;/p&gt;

&lt;h3 id=&quot;heterogeneidad-de-los-requerimientos&quot;&gt;Heterogeneidad de los requerimientos&lt;/h3&gt;

&lt;p&gt;Los enfoques tradicionales miden el software en valores absolutos, como por ejemplo el número total de problemas encontrados con un umbral de calidad específico. Esto fuerza a los evaluadores a medir cada aplicación contra diferentes requisitos, en función de su origen.&lt;/p&gt;

&lt;p&gt;Por ejemplo, ¿un proyecto &lt;em&gt;legacy&lt;/em&gt; se hace con el mismo estándar de alta calidad que se espera de un proyecto nuevo? ¿el desarrollo interno podría ser juzgado de manera diferente que el código subcontratado? Todo esto se debe al hecho de que se debe autorizar el software para pasarlo a producción, y para ello hay que tener requisitos que definan los criterios.&lt;/p&gt;

&lt;p&gt;Es muy poco práctico que cada proyecto deba alcanzar los mismos valores absolutos para los umbrales de calidad antes de su puesta en producción. El uso de este tipo de valores absolutos implica que sea casi imposible de conseguir requisitos comunes para todas las aplicaciones, y por lo tanto difícil de adoptar buenas prácticas en todos los ámbitos.&lt;/p&gt;

&lt;h2 id=&quot;la-inspeccin-continua-al-rescate&quot;&gt;La inspección continua al rescate&lt;/h2&gt;

&lt;p&gt;Todos esos retos clave en la gestión de la calidad del código se combinan, a menudo, para crear una percepción de que &lt;em&gt;“la creación de software de calidad es cara”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Para ser eficaz bajo el enfoque tradicional la gestión de calidad llega demasiado tarde en el proceso y altera el ciclo de desarrollo, causando retrasos inesperados, repitiendo trabajo no planificado o perdiendo características funcionales. Para agravar el problema, los equipos de desarrollo frenan o rechazan las evaluaciones de calidad, las ven como algo que reduce la productividad y la colaboración del equipo.&lt;/p&gt;

&lt;p&gt;Además, las empresas no obtienen mejoras a largo plazo en la calidad general, debido a que el enfoque tradicional no tiene en cuenta la necesidad de educar a los desarrolladores. Como resultado, los mismos o similares problemas de calidad surgen repetidamente durante el ciclo de vida del proyecto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La inspección continua es un paradigma en la gestión de la calidad del código diseñado para hacer que la calidad del código forme parte integral del ciclo de vida de desarrollo de software&lt;/strong&gt;. Es un proceso holístico, plenamente efectivo, que aumenta tanto la calidad del software interno de un proyecto como la visibilidad de la calidad del software para todos los interesados.&lt;/p&gt;

&lt;p&gt;La clave del concepto de la inspección continua es &lt;strong&gt;detectar problemas a tiempo&lt;/strong&gt;, cuando resolverlos sigue siendo barato y fácil. Bajo este modelo, &lt;em&gt;las auditorías de código automatizadas se realizan sobre una base diaria y se colocan a disposición de la organización&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Los miembros del equipo son alertados tan pronto como se encuentren nuevas evidencias para que puedan abordarse lo antes posible, mientras que el código está todavía fresco en la mente de los desarrolladores. La puntualidad de estas alertas tiene el beneficio añadido de que &lt;em&gt;educa a los programadores respecto a los malos hábitos y los conduce a codificar según los buenos&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La inspección continua goza de mayor aprobación entre los equipos de desarrollo debido a su naturaleza de colaboración, que conduce a un sentimiento de verdadera propiedad del código, y ayuda a los equipos a ofrecer un mejor software.&lt;/strong&gt; Con sus pequeños ciclos, con identificaciones rápidas y tratamiento de estas evidencias, se ha demostrado que aumentan la eficiencia de los equipos de desarrollo y aumentar la longevidad de las aplicaciones, mediante el fomento del desarrollo de código de mayor calidad.&lt;/p&gt;

&lt;p&gt;La inspección continua de código es un elemento clave de apoyo para los &lt;a href=&quot;http://www.acalero.com/2016/02/25/jardineros-del-software&quot;&gt;&lt;strong&gt;jardineros del software&lt;/strong&gt;&lt;/a&gt; y es una de las mejores formas de mantener “sano” y “limpio” nuestro código.&lt;/p&gt;

&lt;p&gt;¿Y tú? ¿Llevas a cabo un proceso de inspección continua?&lt;/p&gt;


  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/03/01/retos-calidad-software&quot;&gt;Los retos de la gestión de la calidad del código&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el March 01, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Jardineros del Software]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2016/02/25/jardineros-del-software"/>
  <id>http://www.acalero.com/2016/02/25/jardineros-del-software</id>
  <published>2016-02-25T06:00:00+00:00</published>
  <updated>2016-02-25T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;blockquote&gt;
  &lt;p&gt;No eres un ingeniero de software. No construyes rascacielos. No construyes puentes. &lt;strong&gt;Cultivas jardines&lt;/strong&gt;. Eres un jardinero del software. &lt;em&gt;&lt;a href=&quot;http://www.chrisaitchison.com/2011/05/03/you-are-not-a-software-engineer/&quot;&gt;Chris Aitchison&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;¿Conocías la metáfora y su manifiesto? Recientemente me he cruzado con ella a través de twitter (gracias a &lt;a href=&quot;https://twitter.com/softwaregarden&quot;&gt;Patroklos&lt;/a&gt;) y la verdad es que la comparto completamente y por eso me decidí a firmar el manifiesto. Tiene ciertas similitudes con la artesanía del software (&lt;a href=&quot;http://manifesto.softwarecraftsmanship.org/#/es&quot;&gt;Manifesto for Software Craftsmanship&lt;/a&gt;) pero añadiendo el componente de ser algo vivo y en constante cambio.&lt;/p&gt;

&lt;p&gt;Así que me he animado y he aprovechado para traducir el manifiesto y así compartirlo con todos vosotros. Os dejo un enlace al final por si alguien también quiere firmarlo. Espero vuestros comentarios :)&lt;/p&gt;

&lt;hr /&gt;

&lt;h4 id=&quot;como-jardineros-del-software-creemos-e-impulsamos-los-siguientes-principios&quot;&gt;Como jardineros del software creemos e impulsamos los siguientes principios:&lt;/h4&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;1&lt;/strong&gt;&lt;/span&gt; Tratamos a los sistemas de software como &lt;em&gt;jardines&lt;/em&gt; y el código como sus &lt;em&gt;flores&lt;/em&gt; y &lt;em&gt;plantas&lt;/em&gt;. Aunque no estamos en desacuerdo con entender el software como un artefacto artesanal, creemos que &lt;strong&gt;el software es &lt;em&gt;un “ser” que vive y respira&lt;/em&gt;, no es solo un objeto, creado utilizando los mejores materiales.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;2&lt;/strong&gt;&lt;/span&gt; Estamos constantemente tutelando a jovenes desarrolladores y &lt;strong&gt;&lt;em&gt;compartimos nuestro conocimiento&lt;/em&gt;&lt;/strong&gt; en cada oportunidad. Los desarrolladores jóvenes son como las plantas que necesitan regarse para llegar a florecer. Somos el agua, el sol, la tierra, el fertilizante para cada (joven) profesional del software.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;3&lt;/strong&gt;&lt;/span&gt; El desarrollo de software es mucho más que picar código. Conocemos las prácticas y las aplicamos eficazmente. Hacemos uso de las &lt;em&gt;herramientas&lt;/em&gt; más productivas y nuestro conjunto de habilidades incluye tanto habilidades técnicas como transversales. También entendemos que &lt;strong&gt;nuestra &lt;em&gt;actitud general&lt;/em&gt; es lo que nos define como jardineros del software&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;4&lt;/strong&gt;&lt;/span&gt;  &lt;strong&gt;Nos preocupamos por nuestro código&lt;/strong&gt; y esta preocupación la mostramos continuamente, día tras día, en cada momento en cada línea de código que escribimos.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;5&lt;/strong&gt;&lt;/span&gt; No solo somos capaces de responder al cambio sino que &lt;strong&gt;estamos preparados para la reformulación constante -interna y externa- del entorno&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;fa-stack fa-md&quot;&gt;&lt;i class=&quot;fa fa-circle-o fa-stack-2x&quot;&gt;&lt;/i&gt;&lt;strong class=&quot;fa-stack-1x fa-stack-text&quot;&gt;6&lt;/strong&gt;&lt;/span&gt; Tratamos a los clientes como las personas que pasean por nuestro jardín y huelen el ároma de nuestras plantas y flores. Dicho esto, &lt;strong&gt;nos comprometemos con ellos desde el primer día, para asegurarnos de que se cumplan todas sus necesidades, requerimientos y expectativas.&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;col-lg-8 col-lg-offset-2 text-center&quot;&gt;
    &lt;a href=&quot;http://softwaregarden.io/sign-the-software-gardener-manifesto&quot; class=&quot;btn btn-lg btn-outline&quot;&gt;
        &lt;i class=&quot;fa fa-pencil&quot;&gt;&lt;/i&gt; Firma el manifiesto
    &lt;/a&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;div class=&quot;col-lg-8 col-lg-offset-2 text-center&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;

  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2016/02/25/jardineros-del-software&quot;&gt;Jardineros del Software&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el February 25, 2016.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[¿Por qué tenemos que visualizar el software?]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2015/03/02/por-que-tenemos-que-visualizar-el"/>
  <id>http://www.acalero.com/2015/03/02/por-que-tenemos-que-visualizar-el</id>
  <published>2015-03-02T06:00:00+00:00</published>
  <updated>2015-03-02T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;El informe nos ofrece cifras de los proyectos de software, de su éxito, de su fracaso, o
  de proyectos cuestionados (es decir, que han costado más de lo inicialmente
  previsto, económica o temporalmente, o que no alcanzan los requisitos y se
  quedan a mitad).
&lt;br&gt;&lt;br&gt;
La tendencia dice que vamos a peor. Afortunadamente han mejorado los
  proyectos con éxito pero aún así sigue siendo insuficiente.&lt;/p&gt;
&lt;h2&gt;
  &lt;b&gt;¿Y todo esto por qué?&lt;/b&gt;
&lt;/h2&gt;
&lt;p&gt;
  &lt;i&gt;&lt;b&gt;Porque el software es intangible, físicamente no tiene forma ni
      volumen.&lt;/b&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;Entender el software requiere un gran esfuerzo&lt;/b&gt;&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Porque el tamaño del software hace que sea difícil de leer y
    estructurar.&lt;/li&gt;
  &lt;li&gt;Porque la complejidad es muy alta y con el software intentamos
    resolver problemas difíciles.&lt;/li&gt;
  &lt;li&gt;Porque el software evoluciona… Cambia muy rápido, se adapta, y lo que
    entendíamos hoy mañana ya no sirve…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Muy bien, y entonces ¿qué podemos hacer para entender el software?&lt;/p&gt;
&lt;h3&gt;
  &lt;b&gt;TENEMOS QUE VERLO&lt;/b&gt;
&lt;/h3&gt;
&lt;p&gt;Tenemos que ser capaces de entender el software “viéndolo”. Parecerá un
  ejemplo &quot;cutre&quot; pero ¿cómo ayudó a Neo en The Matrix el llegar a “ver el
  código”?
&lt;p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;http://2.bp.blogspot.com/-MAd9WkZTUZk/VOnkJpQcOBI/AAAAAAAAAs4/vWmoQeV4yhg/s1600/neo-code.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img
    border=&quot;0&quot;
    src=&quot;http://2.bp.blogspot.com/-MAd9WkZTUZk/VOnkJpQcOBI/AAAAAAAAAs4/vWmoQeV4yhg/s1600/neo-code.png&quot;
    height=&quot;388&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;br&gt;Ver el código le permitió ENTENDER, y así resolver los problemas más
  rápidamente.
&lt;/p&gt;
&lt;h3&gt;
  &lt;b style=&quot;text-align: center;&quot;&gt;VER ES ENTENDER.&lt;/b&gt;
&lt;/h3&gt;
&lt;p&gt;
  Hagamos un poco de historia y repasemos grandes acontecimientos...&amp;nbsp;&lt;i&gt;Londres,
    1854. Epidemia de cólera.&amp;nbsp;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;Dos tendencias, los contagionistas, pensaban que se transmitía por el
  contacto, y la teoria miasmática, transmitido por el viento, por los miasmas:
  vapores tóxicos emitidos por descomposición que transportaban de un lugar a
  otro el cólera.&lt;/p&gt;
&lt;p&gt;
  En medio de todo eso llegó&amp;nbsp;&lt;b&gt;John Snow&amp;nbsp;&lt;/b&gt;(si, si, y no tiene nada
  que ver con&amp;nbsp;&lt;i&gt;Juego de Tronos&lt;/i&gt;), y convencido de que debía haber
  otras causas, comenzó a realizar un estudio de cada caso, así que cogió su
  libretita y fue a visitar a todos los enfermos, y fue apuntando las zonas
  donde vivían y donde se desplazaban.
&lt;/p&gt;
&lt;p&gt;Hizo un mapa y detectó que se concentraba la mayor parte de los
  fallecidos cerca de un pozo de agua.&lt;/p&gt;
&lt;p&gt;Con ese mapa resolvió uno de los mayores problemas de la época, y se
  convirtió así en el padre de la epidemiología moderna.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una sola imagen bastó para detectar donde estaba el problema:&lt;/p&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;
  class=&quot;tr-caption-container&quot;
  style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a
        href=&quot;http://2.bp.blogspot.com/-toVQn8s74Js/VOnkhG4gN4I/AAAAAAAAAtA/WdvbzCEZbHo/s1600/colera.png&quot;
        imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img
          border=&quot;0&quot;
          src=&quot;http://2.bp.blogspot.com/-toVQn8s74Js/VOnkhG4gN4I/AAAAAAAAAtA/WdvbzCEZbHo/s1600/colera.png&quot;
          height=&quot;312&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 12.8000001907349px;&quot;&gt;Mapa de
        casos de cólera de John Snow&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;
  &lt;b&gt;Una imagen vale más que mil palabras&lt;/b&gt;
&lt;/h3&gt;
&lt;p&gt;Pero cuidado, que algunos se lo toman al pie de la letra y se construyen
  UMLs o Gantts pensando que ayuda a ver mejor el estado y resulta que en esas
  “imágenes” hay más de mil palabras. No vale poner palabras y hacer lineas de
  un lado a otro ;-)&lt;/p&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;
  class=&quot;tr-caption-container&quot;
  style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a
        href=&quot;http://3.bp.blogspot.com/-3g5YnkM3IaU/VOnlQw1T09I/AAAAAAAAAtI/M_TywvNGOvo/s1600/esto-no-vale.png&quot;
        imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img
          border=&quot;0&quot;
          src=&quot;http://3.bp.blogspot.com/-3g5YnkM3IaU/VOnlQw1T09I/AAAAAAAAAtI/M_TywvNGOvo/s1600/esto-no-vale.png&quot;
          height=&quot;180&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 12.8000001907349px;&quot;&gt;Así no,
        estas imágenes no siempre valen para ayudar&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
  &lt;br&gt;Así que aquí es donde viene la visualización al rescate:
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;http://3.bp.blogspot.com/-cY13BLXdbK8/VOnl34t_0fI/AAAAAAAAAtQ/-KLqha1eAtg/s1600/software-visualization.png&quot;
    imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img
    border=&quot;0&quot;
    src=&quot;http://3.bp.blogspot.com/-cY13BLXdbK8/VOnl34t_0fI/AAAAAAAAAtQ/-KLqha1eAtg/s1600/software-visualization.png&quot;
    height=&quot;136&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;br&gt;Y todo esto tiene sentido, ¿no conocéis los principios de Gestalt?
  ¿Proximidad, cierre, conectividad, semejanza? Nuestro cerebro procesa la
  información teniendo en cuenta toda esa información y nos permite extraer
  conclusiones simplemente al verlo.
&lt;/p&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;
  class=&quot;tr-caption-container&quot;
  style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a
        href=&quot;http://3.bp.blogspot.com/-ELmbx-ffz8U/VOnmh1PVWBI/AAAAAAAAAtY/oKi83MYEAEA/s1600/gestalt.png&quot;
        imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img
          border=&quot;0&quot;
          src=&quot;http://3.bp.blogspot.com/-ELmbx-ffz8U/VOnmh1PVWBI/AAAAAAAAAtY/oKi83MYEAEA/s1600/gestalt.png&quot;
          height=&quot;280&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 12.8000001907349px;&quot;&gt;¿Cuántos
        grupos ves en cada imagen?&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La mente configura a través de ciertas leyes los elementos que llegan a
  ella a través de los canales sensoriales (percepción) o de la memoria
  (pensamiento, inteligencia y resolución de problemas). La forma, orientación,
  longitud de línea, curvatura, grosor de línea, marcas, tamaño, ... nos
  ayudarán a detectar visualmente elementos diferenciadores en las imágenes.&lt;/p&gt;
&lt;p&gt;
  &lt;b&gt;Más del 70% de los estímulos externos que percibe el organismo
    provienen de la función visual.&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;Muy bien, ¿pero entonces? ¿qué visualizamos del software para entenderlo?
  Pues evidentemente el código fuente. ¿Os suena el coloreado de sintaxis?
  ¡guau! Una aplicación de los principios de Gestalt sobre el código ;-)&lt;/p&gt;
&lt;p&gt;¿Y qué más podríamos visualizar? Métricas, muchas métricas, hoy día ya
  tenemos métricas para dar y tomar…&lt;/p&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;
  style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center;&quot;&gt;&lt;a
        href=&quot;http://1.bp.blogspot.com/-GZi5yAwoRUc/VO2O1_eusZI/AAAAAAAAAtw/piIiFj-rVrw/s1600/estructura.png&quot;
        style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img
          border=&quot;0&quot;
          src=&quot;http://1.bp.blogspot.com/-GZi5yAwoRUc/VO2O1_eusZI/AAAAAAAAAtw/piIiFj-rVrw/s1600/estructura.png&quot;
          height=&quot;171&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;tr-caption&quot;
        style=&quot;font-size: 12.8000001907349px; text-align: center;&quot;&gt;Visualización
        de estructura del código&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pero todo esto es complejo y tenemos que abstraernos un poco:
&lt;ul&gt;
  &lt;li&gt;podemos ver la&amp;nbsp;&lt;b&gt;estructura&lt;/b&gt;, con diagramas de paquetes o
    clases, por ejemplo, esto ayuda un poco a entender la arquitectura de un
    proyecto, ¿verdad?
  &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
  &lt;li&gt;podemos usar las&amp;nbsp;&lt;b&gt;vistas polimétricas&lt;/b&gt;… Cada nodo es un
    elemento software, y cada línea es una relación entre esos dos elementos. El
    tamaño de cada nodo se puede representar con diferentes métricas (alto y
    ancho) según lo que nos interese ver. El color puede ser otra métrica.
    &amp;nbsp;Lo interesante es que podemos ver esas jerarquías o relaciones y
    también evaluar tamaño y complejidad.&lt;/li&gt;
&lt;/ul&gt;
    &lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;
      class=&quot;tr-caption-container&quot;   style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;text-align: center;&quot;&gt;&lt;a
            href=&quot;http://4.bp.blogspot.com/-mmxI2fjFABQ/VO2Pe9AiLMI/AAAAAAAAAuA/FAATR5YL9VQ/s1600/vistas-polime%CC%81tricas.png&quot;
            style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img
              border=&quot;0&quot;
              src=&quot;http://4.bp.blogspot.com/-mmxI2fjFABQ/VO2Pe9AiLMI/AAAAAAAAAuA/FAATR5YL9VQ/s1600/vistas-polime%CC%81tricas.png&quot;
              height=&quot;145&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td class=&quot;tr-caption&quot;
            style=&quot;font-size: 12.8000001907349px; text-align: center;&quot;&gt;Vistas
            polimétricas&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
&lt;ul&gt;
  &lt;li&gt;podemos usar los&amp;nbsp;&lt;b&gt;mapas de distribución&lt;/b&gt;. Cada rectangulo
    pequeño es una clase, que esta agrupados en paquetes (rectangulos grandes),
    y el color de cada clase viene determinado por el concepto predominante (o
    funcionalidad principal de las clases, o lo que me interese conocer).
  &lt;/li&gt;
  &lt;/ul&gt;
  &lt;ul&gt;
  &lt;li&gt;podemos usar&amp;nbsp;&lt;b&gt;mapas de paquetes&lt;/b&gt;… Muestra quien “posee”
    cada clase y sus jerarquías.
  &lt;/li&gt;
  &lt;/ul&gt;
  &lt;ul&gt;
  &lt;li&gt;¿y quién no ha usado alguna vez un&amp;nbsp;&lt;b&gt;treemap&lt;/b&gt;&amp;nbsp;(o mapa
    de árbol)? El resultado final es una visualización muy intuitiva y dinámica
    de un plano dividido en áreas proporcionales a los datos que representan,
    jerarquizado por tamaños y código de color, y optimizando el espacio.
    &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot;
  style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;text-align: center;&quot;&gt;&lt;a
            href=&quot;http://4.bp.blogspot.com/-dWl8G-IcxI8/VO2P6WW6O9I/AAAAAAAAAuI/RVhbq0ZYgHY/s1600/formacircular.png&quot;
            imageanchor=&quot;1&quot;
            style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img
              border=&quot;0&quot;
              src=&quot;http://4.bp.blogspot.com/-dWl8G-IcxI8/VO2P6WW6O9I/AAAAAAAAAuI/RVhbq0ZYgHY/s1600/formacircular.png&quot;
              width=&quot;299&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td class=&quot;tr-caption&quot;
            style=&quot;font-size: 12.8000001907349px; text-align: center;&quot;&gt;Forma
            circular&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
  &lt;/ul&gt;
  &lt;ul&gt;
  &lt;li&gt;otra forma es representar nuestros elementos de software&amp;nbsp;&lt;b&gt;en
      forma circular&lt;/b&gt;, y dibujando líneas entre ellos con las dependencias
    (rojo=invocado, verde=invocador). En el ejemplo las unidades 16 y 18 son las
    que más veces se invocan pero es difícil saber desde donde. Demasiado ruido
    en la imagen. Aunque esta forma de representación evoluciono para intentar
    ser más limpia.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
  &lt;li&gt;incluso tenemos&amp;nbsp;&lt;b&gt;diagramas de arco&lt;/b&gt;&amp;nbsp;para detectar
    código duplicado… complicado pero visual…
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  &lt;b&gt;¿Pero es todo esto suficiente?&lt;/b&gt;
&lt;/h2&gt;
&lt;p&gt;
  Un día comiendo en restaurante japonés, con grandes amigos, &lt;a
    href=&quot;https://twitter.com/pacofraggle&quot;&gt;Paco&lt;/a&gt;, &lt;a
    href=&quot;https://twitter.com/carfilse&quot;&gt;Carlos&lt;/a&gt;&amp;nbsp;y &lt;a
    href=&quot;https://twitter.com/humoib&quot;&gt;Hugo&lt;/a&gt;&amp;nbsp;la conversación fue
  volviéndose cada vez más &quot;friki&quot; (de cuatro informáticos no puede salir nada
  bueno). Uno de los problemas que teníamos en &lt;a href=&quot;http://www.excentia.es/&quot;&gt;excentia&lt;/a&gt;&amp;nbsp;era
  como poder trasladar la complejidad del mundo del software a todo el mundo,
  sin necesidad de entender métricas ni ver números ni ser expertos en
  calidad.&amp;nbsp;&lt;b&gt;Hacer tangible lo intangible&lt;/b&gt;.&lt;br /&gt; &lt;br /&gt;Y recuerdo
  perfectamente ese momento, en el que Carlos estaba de reformas en su casa del
  pueblo hablándonos de las &quot;chapuzas&quot; de los obreros, cuando nos dimos cuenta
  de que quizás lo más visual sería representar el software como una ciudad,
  como casas, como edificios. Y es ahí donde surgió la idea de &lt;a
    href=&quot;http://www.excentia.es/plugins/city-model/descargar.html&quot;
    style=&quot;font-weight: bold;&quot;&gt;City Model&lt;/a&gt;&amp;nbsp;y&amp;nbsp;empezamos a crear la
  metáfora de la ciudad para representar el código, el nacimiento de un producto
  que hoy día puedes descargar directamente en cualquier instancia de &lt;a
    href=&quot;/2014/11/28/que-es-sonarqube&quot;&gt;SonarQube&lt;/a&gt;,&amp;nbsp;pero
  todos estos detalles ya los dejo para el siguiente artículo ;-)&amp;nbsp;
&lt;/p&gt;
  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2015/03/02/por-que-tenemos-que-visualizar-el&quot;&gt;¿Por qué tenemos que visualizar el software?&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el March 02, 2015.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[¿Qué es SonarQube?]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2014/11/28/que-es-sonarqube"/>
  <id>http://www.acalero.com/2014/11/28/que-es-sonarqube</id>
  <published>2014-11-28T08:00:00+00:00</published>
  <updated>2014-11-28T08:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;  
&lt;span class=&quot;s1&quot;&gt;Durante los dos días que pase en Madrid en &lt;a
    href=&quot;http://calidaddelproductosoftware.com/2014/&quot;&gt;las jornadas de
      calidad de producto software&lt;/a&gt; mucha gente hablaba de&amp;nbsp;&lt;a
    href=&quot;http://www.sonarqube.org/&quot;&gt;&lt;b&gt;SonarQube&lt;/b&gt;&lt;/a&gt;, de cómo lo
    utilizaban, lo comparaban con otras herramientas, se cuestionaban su coste,
    ... pero es sorprendente como mucha gente no sabe en realidad qué es&amp;nbsp;&lt;a
    href=&quot;http://www.sonarqube.org/&quot;&gt;&lt;b&gt;SonarQube&lt;/b&gt;&lt;/a&gt;&amp;nbsp;y uno se&amp;nbsp;da
    cuenta de eso cuando te encuentras con comentarios como que “&lt;i&gt;solo
      sirve para Java&lt;/i&gt;”, que &quot;&lt;i&gt;solo integra herramientas como PMD,
      Findbugs, Checkstyle&lt;/i&gt;&quot;, &quot;&lt;i&gt;que necesita Maven para hacer análisis&lt;/i&gt;&quot;,
    que &quot;&lt;i&gt;no se integra con IDEs&lt;/i&gt;&quot;, ...
  &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;  
  &lt;span class=&quot;s1&quot;&gt;Así que, siguiendo los pasos de &lt;a
    href=&quot;https://twitter.com/ppapapetrou76&quot;&gt;Patroklos&lt;/a&gt; con su &lt;a
    href=&quot;http://softwaregarden.io/sonarqube/&quot;&gt;artículo original&lt;/a&gt;, he
    decidido trasladar sus principios aquí, he añadido algunos más, y espero que
    sirva para aclarar todos esos conceptos.&amp;nbsp;
  &lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;  
  &lt;span class=&quot;s1&quot;&gt;Para eso vamos a definir &lt;b&gt;qué es SonarQube
      definiendo lo que NO es:&lt;/b&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;  
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO es una
        herramienta de construcción&lt;/b&gt;. Hay muchas herramientas disponibles ahí
      fuera que ya hacen las cosas tremendamente bien, como pueden ser: Maven,
      Ant, Gradle, etc. SonarQube &amp;nbsp;espera que antes de analizar un
      proyecto, el proyecto haya sido compilado y construido con tu herramienta
      favorita. SonarQube no es intrusivo en el proceso de desarrollo, no tienes
      que cambiar tu forma de construir tus proyectos.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO es
        (solamente) una herramienta de análisis estático de código&lt;/b&gt;. SonarQube no
      sustituye a Findbugs o a CPPCheck o cualquier otra herramienta similar.
      Todo lo contrario, SonarQube, además de ofrecer su propio motor de
      análisis estático de código, permite integrarlo con todas esas
      herramientas externas. La consecuencia es que puedes obtener de forma
      homogénea, y agrupada todas las evidencias detectadas por esa gran
      variedad de herramientas de análisis estático y dinámico. Todo integrado
      en un único cuadro de mandos.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO es una
        herramienta de cobertura de código&lt;/b&gt;, claramente no lo es. Igual que
      antes, se integra con las herramientas más populares de cobertura de
      código como JaCoCo, Cobertura, PHPUnit, NCover, … pero no calcula la
      cobertura de código de forma propia. Simplemente lee los informes de
      pruebas pre-generados y los muestra en un cuadro de mando más usable y
      conveniente. Una vez más, SonarQube, no es intrusivo en el proceso de
      desarrollo, si ya estás haciendo pruebas unitarias, basta con que le digas
      donde están los resultados.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO es una
        herramienta de formateo de código&lt;/b&gt;. Nunca modificará una sola línea de
      código de tu proyecto. Lo que si que puede hacer es revisar el estilo para
      ver si cumple con ciertas convenciones de código, puedes utilizar tus
      reglas de Checkstyle, CPPCheck, ScalaStyle, … o implementar las tuyas
      propias.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO es solo otra
        herramienta de revisión manual de código&lt;/b&gt;. Por supuesto que ofrece un
      mecanismo que facilita la revisión de código, pero no solo eso. Esta muy
      ligado al mecanismo de detección de evidencias de incumplimiento de buenas
      prácticas, por lo que cada revisión de código puede asociarse fácilmente a
      la parte concreta del código problemático y al desarrollador que lo ha
      escrito.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO solo gestiona
        la calidad del código Java&lt;/b&gt;. Esa época se acabo hace mucho tiempo. Por
      defecto, en su versión “community” puedes analizar código en los lenguajes
      más populares de hoy en día: Java, C#.NET, JavaScript, PHP, … y si
      necesitas más, existen otros plugins opensource y comerciales para cubrir
      hasta más de 20 lenguajes de desarrollo. No dejes que te engañen,
      SonarQube ya es independiente de la tecnología de desarrollo y no está
      ligado a Java.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO necesita
        Maven para analizar tu proyecto&lt;/b&gt;. Hace ya mucho tiempo que se desacopló
      de Maven, aunque por supuesto, puedes seguir usándolo. La realidad es que
      SonarQube dispone de un analizador autónomo (sonar-runner) que se encarga
      de llevar a cabo todo el análisis independientemente de tu tecnología y de
      tus herramientas de construcción. SonarQube nunca te va a pedir que
      cambies absolutamente nada en tu proceso de desarrollo, simplemente debes
      añadir un paso más para la inspección de código y empezar a medir.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO solo usa
        reglas para validar la calidad&lt;/b&gt;. Además de las reglas, calcula muchas
      métricas referentes al código fuente (complejidad, código duplicado, deuda
      técnica, ...) y permite extender la funcionalidad para crear tus propias
      métricas y tus propios modelos de calidad.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;br /&gt;
&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
  &lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;SonarQube NO solo permite
        ver la calidad desde la aplicación web&lt;/b&gt;. Por supuesto que cualquiera que
      quiera conocer todos los detalles de la calidad de su producto puede
      acceder vía web a la herramienta, ¿pero qué pasa con los desarrolladores?
      Los desarrolladores siempre están trabajando con su IDE favorito y no les
      gusta cambiar. SonarQube provee de extensiones para los principales IDEs
      (Eclipse, IntelliJ, VisualStudio) de forma que los desarrolladores no
      tengan que salir de su entorno favorito para saber si están haciendo las
      cosas con los niveles de calidad adecuados. Es más, los desarrolladores
      pueden incluso ejecutar análisis locales para así revisar las evidencias
      antes de subir el código al control de versiones.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  
  &lt;span class=&quot;s1&quot;&gt;Así que después de todo esto, &lt;b&gt;¿qué podemos
      decir que es SonarQube?&lt;/b&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;  
  &lt;blockquote class=&quot;tr_bq&quot;&gt;
    &lt;span class=&quot;s1&quot; style=&quot;font-size: large;&quot;&gt;&lt;i&gt;SonarQube es una
        plataforma de gestión de la calidad del código que permite a los equipos
        de desarrollo gestionar, hacer seguimiento y mejorar la calidad de su
        código fuente.&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&amp;nbsp;
  &lt;/blockquote&gt;
  &lt;blockquote class=&quot;tr_bq&quot;&gt;
    &lt;span class=&quot;s1&quot; style=&quot;font-size: large;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span
      class=&quot;s1&quot; style=&quot;font-size: large;&quot;&gt;&lt;i&gt;Es una herramienta que
        mantiene datos históricos de una gran variedad de métricas y proporciona
        tendencias de los indicadores de referencia para no cometer los pecados
        capitales del desarrollo de software.&lt;/i&gt;&lt;/span&gt;
  &lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;  
  &lt;br /&gt;Espero que con este artículo queden resueltas muchas de las dudas que
  han surgido durante las jornadas de calidad de producto software... y si
  todavía quedan algunas, por favor, planteadlas que seguro que podemos
  encontrar respuesta entre todos :-)&lt;br /&gt;
&lt;/p&gt;
  &lt;div style=&quot;text-align: center;&quot;&gt;__________________________________________________&lt;/div&gt;
  &lt;div style=&quot;text-align: center;&quot;&gt;
    &lt;a href=&quot;http://softwaregarden.io/sonarqube/&quot;&gt;&lt;span
      style=&quot;font-size: x-small;&quot;&gt;Artículo basado en el original de
        Patroklos Papapetrou&lt;/span&gt;&lt;/a&gt;
  &lt;/div&gt;

  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2014/11/28/que-es-sonarqube&quot;&gt;¿Qué es SonarQube?&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el November 28, 2014.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Imagina la vida como un juego...]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2014/09/01/imagina-la-vida-como-un-juego"/>
  <id>http://www.acalero.com/2014/09/01/imagina-la-vida-como-un-juego</id>
  <published>2014-09-01T06:00:00+00:00</published>
  <updated>2014-09-01T06:00:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;
&lt;i&gt;Pronto entenderás que el &lt;b&gt;trabajo&lt;/b&gt; es una bola de goma. Si la
  sueltas, rebotará en el suelo y volverá a subir. Pero las otras cuatro bolas -
  &lt;b&gt;familia, salud, amigos y espíritu&lt;/b&gt; - están hechas de cristal. Si se cae
  alguna de ellas, se fracturarán de forma irrevocable, con pequeños agujeros,
  picados, o incluso roturas más grandes. Nunca volverán a ser iguales una vez
  se hayan caído.
&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Tienes que entender eso y luchar y esforzarte para que no ocurra.&lt;/i&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;
  &lt;i&gt;&lt;b&gt;Bryan Dyson - CEO de Coca-Cola&lt;/b&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
Me cruce con este discurso el otro día y
  gustó mucho porque es una filosofía que a mucha gente le cuesta entender...
&lt;/p&gt;
&lt;p&gt;
Trabaja eficientemente durante las horas de
  oficina e intenta salir del trabajo a la hora que corresponda. Tienes que
  proporcionar tiempo a tu familia, tus amigos y a descansar correctamente
  cuerpo y mente. Si no es así poco a poco se irán fracturando y no podrás
  recuperar ese tiempo perdido jamás.
  &lt;/p&gt;
&lt;p&gt;
  &lt;i&gt;El valor solo tiene valor si su valor es valorado.&lt;/i&gt;
&lt;/p&gt;
  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2014/09/01/imagina-la-vida-como-un-juego&quot;&gt;Imagina la vida como un juego...&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el September 01, 2014.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[Jugando podemos conseguir un mundo mejor]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2014/02/19/jugando-podemos-conseguir-un-mundo-mejor"/>
  <id>http://www.acalero.com/2014/02/19/jugando-podemos-conseguir-un-mundo-mejor</id>
  <published>2014-02-19T07:49:00+00:00</published>
  <updated>2014-02-19T07:49:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;
  Estaba el otro día preparando una presentación para un evento de calidad de
  software (&lt;a href=&quot;http://www.expoqa.com/&quot;&gt;expoQA&lt;/a&gt;) y me encontré esta
  maravillosa charla de &lt;a href=&quot;http://en.wikipedia.org/wiki/Jane_McGonigal&quot;&gt;Jane
    McGonigal&lt;/a&gt; en un &lt;b&gt;TED&lt;/b&gt; que me inspiró muchísimo.
&lt;/p&gt;
&lt;p&gt;
  &lt;a
    href=&quot;http://janemcgonigal.files.wordpress.com/2010/12/realityisbrokenpaperbackcover.jpg?w=604&quot;
    style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img
    border=&quot;0&quot;
    src=&quot;http://janemcgonigal.files.wordpress.com/2010/12/realityisbrokenpaperbackcover.jpg?w=604&quot;
    height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;Para quién no la conozca, &lt;a
    href=&quot;http://janemcgonigal.com/&quot;&gt;Jane McGonigal&lt;/a&gt; es una diseñadora de
  videojuegos que aboga por el uso de la tecnología para canalizar actitudes y
  colaboraciones en el mundo real. Jane ha escrito un libro muy interesante: &quot;&lt;i&gt;&lt;a
    href=&quot;http://www.amazon.com/Reality-Is-Broken-Better-Change/dp/0143120611/ref=sr_1_1?ie=UTF8&amp;amp;qid=1348714325&amp;amp;sr=8-1&amp;amp;keywords=reality+is+broken&quot;&gt;Reality
      is Broken&lt;/a&gt;&lt;/i&gt;&quot;, por qué los videojuegos nos hacen mejores y cómo nos pueden
  ayudar a cambiar el mundo.&lt;br /&gt;
  &lt;br /&gt;Como fanático de los videojuegos me encuentro en una lucha constante
  para que los demás entiendan que &lt;b&gt;los videojuegos, en la mayoría de
    casos, son positivos&lt;/b&gt;. Evidentemente, como el resto de las cosas de la vida,
  todo en exceso es malo, así que no entremos en esa discusión.
&lt;/p&gt;
&lt;p&gt;
Me quedo con algunos datos interesantes que dan que
  pensar:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;i&gt;El joven promedio hoy de un país con marcada cultura de juegos &lt;b&gt;habrá
      pasado 10.000 horas jugando online a los 21 años&lt;/b&gt;. Para los chicos de
    EE.UU. 10.080 horas es el tiempo exacto que pasarán en la escuela desde
    quinto grado hasta la graduación de secundaria si tienen asistencia
    perfecta.
  &lt;/i&gt;&amp;nbsp;
&lt;/blockquote&gt;
&lt;blockquote&gt;
  &lt;i&gt;&lt;b&gt;Nadie quiere cambiar el modo de vida sólo porque es bueno para
      el mundo&lt;/b&gt;, o porque se supone que debemos hacerlo. Pero si uno los sumerge
    en una aventura épica y les dice: &quot;Nos quedamos sin petróleo&quot;. Esta es una
    historia asombrosa y una aventura para que te sumes. &lt;b&gt;Desafiarte a ti
      mismo a sobrevivir en ese mundo&lt;/b&gt;. Muchos jugadores han conservado los
    hábitos aprendidos en este juego.&amp;nbsp;&lt;/i&gt;
&lt;/blockquote&gt;
&lt;p&gt;
¿Impresionante, verdad? Pasamos casi el mismo tiempo jugando que en el
colegio... ¡Canalicemos entonces todo eso para conseguir mejorar la realidad!
&lt;/p&gt;
&lt;p&gt;
Aquí os dejo la fantástica charla:
&lt;/p&gt;
&lt;p&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; mozallowfullscreen=&quot;&quot;
  scrolling=&quot;no&quot;
  src=&quot;http://embed.ted.com/talks/lang/es/jane_mcgonigal_gaming_can_make_a_better_world.html&quot;
  webkitallowfullscreen=&quot;&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/p&gt;
  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2014/02/19/jugando-podemos-conseguir-un-mundo-mejor&quot;&gt;Jugando podemos conseguir un mundo mejor&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el February 19, 2014.&lt;/p&gt;</content>
</entry>


<entry>
  <title type="html"><![CDATA[¿Qué es la calidad de software?]]></title>
  <link rel="alternate" type="text/html" href="http://www.acalero.com/2014/01/22/que-es-calidad-de-software"/>
  <id>http://www.acalero.com/2014/01/22/que-es-calidad-de-software</id>
  <published>2014-01-22T08:32:00+00:00</published>
  <updated>2014-01-22T08:32:00+00:00</updated>
  <author>
    <name>Antonio Calero</name>
    <uri>http://www.acalero.com</uri>
    <email>ancamon1@gmail.com</email>
  </author>
  
  <content type="html">
  
    &lt;p&gt;No hay mejor manera de estrenar el blog que la de ponernos en contexto respecto a lo que entendemos con &quot;calidad de software&quot;. &lt;/p&gt;
&lt;p&gt;Según el &lt;a href=&quot;http://lema.rae.es/drae/?val=calidad&quot;&gt;Diccionario de la Real Academia de la Lengua Española&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;b&gt;calidad&lt;/b&gt; es la propiedad o conjunto de propiedades inherentes a
    algo, que permiten juzgar su valor.&amp;nbsp;&lt;span class=&quot;h&quot;
    style=&quot;color: purple;&quot;&gt;&lt;i&gt;Esta tela es de buena calidad.&lt;/i&gt;&lt;/span&gt;
    
 &lt;/blockquote&gt;
&lt;p&gt;
Esto, para casi todas las cosas generales de la vida, lo entiende todo el mundo,
pero ¿y en el mundo del software?
&lt;/p&gt;
&lt;p&gt;
Por ejemplo, si hablamos de la
&lt;b&gt;calidad de un coche&lt;/b&gt;
o automóvil, todo el mundo tiene muy claro cuales son las propiedades que tienen
que conocer para juzgar si es mejor o peor que otro: la potencia, la seguridad,
la capacidad del maletero, el consumo de gasolina, ...
&lt;/p&gt;
&lt;p&gt;
Si hablamos de la
&lt;b&gt;calidad de un teléfono móvil o de una tablet&lt;/b&gt;
, también todo el mundo tiene claro cuales son esas propiedades o
características a evaluar: el tamaño, el sistema operativo, la capacidad de
almacenamiento, el peso, el procesador, ...
&lt;/p&gt;
&lt;p&gt;
Sin embargo a veces puede ocurrir que no todos tengamos claro como evaluar esas
propiedades de las cosas, en cuyo caso siempre se suele buscar a alguien (el
primo al que le encantan los coches, el familiar que sabe de tecnología, el
vecino informático ...) que es quién ayuda a determinar esos valores para juzgar
y tomar decisiones.
&lt;/p&gt;
&lt;p&gt;
Todo esto que se aplica para tantas cosas en el día a día parece que con el
software se nos olvida.
&lt;/p&gt;
&lt;p&gt;
Pues bien,
&lt;b&gt; la calidad de software no es más que esa propiedad o conjunto de
  propiedades que nos permiten juzgar el valor de un determinado sistema
  informático, aplicación, programa &lt;/b&gt;
o como cada uno lo llame.
&lt;/p&gt;
&lt;p&gt;
Y esto no es nada nuevo, ya hace mucho tiempo que se
  conocen cuales son estas propiedades y se han estado utilizando para evaluar
  la calidad del software desde sus inicios.
&lt;/p&gt;
&lt;p&gt;
  En el año 1977 se definió el &lt;b&gt;triángulo de calidad de McCall&lt;/b&gt; (revisión
  de producto, operaciones y transición del producto), o en el año 1978, se
  definió el &lt;b&gt;árbol de características de Boehm&lt;/b&gt;, que definía varios
  niveles en los que se iban desglosando características del software.
  Posteriormente en 1992 basándose en el trabajo anterior se definió el &lt;b&gt;modelo
    FURPS&lt;/b&gt; (utilizado por Rational, ahora IBM), y así muchos otros modelos a lo
  largo de la historia.
&lt;/p&gt;
&lt;p&gt;
  Hoy día, el modelo de características que más utilizamos es el que define la
  norma internacional &lt;b&gt;&lt;a
    href=&quot;http://es.wikipedia.org/wiki/ISO/IEC_25000&quot;&gt;ISO-25000&lt;/a&gt;&lt;/b&gt; (que une las
  normas ISO-9126 y la ISO-14598 que definían los atributos de calidad del
  software y su evaluación).&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
  Según la norma&lt;b&gt; ISO-25000&lt;/b&gt;, la calidad del software viene determinada por
  las siguientes ocho características o propiedades:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Funcionalidad&lt;/i&gt;&lt;/b&gt;: grado en que un producto o sistema
    provee las funciones que cumplen las necesidades implícitas y explícitas
    cuando se usa bajo condiciones específicas&amp;nbsp;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Rendimiento&lt;/i&gt;&lt;/b&gt;: rendimiento relativo a la cantidad de
    recursos utilizados bajo condiciones indicadas&amp;nbsp;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Compatibilidad&lt;/i&gt;&lt;/b&gt;: grado en que un producto, sistema o
    componente se puede intercambiar información con otros productos, sistemas o
    componentes y/o realizar sus funciones requeridas, mientras comparten el
    mismo hardware o entorno de software&amp;nbsp;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Facilidad de uso (usabilidad)&lt;/i&gt;&lt;/b&gt;: grado en que un producto
    o sistema puede ser utilizado por usuarios específicos para alcanzar las
    metas especificadas con efectividad, eficiencia y satisfacción en un
    contexto de uso específico&amp;nbsp;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Fiabilidad&lt;/i&gt;&lt;/b&gt;: grado en que un sistema, producto o
    componente realiza funciones que se especifican en determinadas condiciones
    durante un período determinado de tiempo&amp;nbsp;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Seguridad&lt;/i&gt;&lt;/b&gt;: grado en que un producto o sistema protege
    la información y los datos para que las personas u otros productos o
    sistemas tengan el grado de acceso a los datos adecuado a sus tipos y
    niveles de autorización&amp;nbsp;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Mantenibilidad&lt;/i&gt;&lt;/b&gt;: grado de eficacia y eficiencia con que
    un producto o sistema puede ser modificado por los responsables
    previstos&amp;nbsp;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;&lt;i&gt;Portabilidad&lt;/i&gt;&lt;/b&gt;: grado de eficacia y eficiencia con que un
    sistema, producto o componente puede ser transferido de un hardware,
    software del entorno de uso a otro&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Estas características se dividen a su vez en diferentes subcaracterísticas más
específicas que permiten indagar más profundamente en qué aspectos de calidad
hay que evaluar en cada caso.
&lt;/p&gt;
&lt;p&gt;
Además, la norma también específica que estas características se han de evaluar
en diferentes escenarios ya que en función de esos escenarios la calidad que se
está evaluando es diferente:
&lt;b&gt;calidad interna, calidad externa y calidad en uso&lt;/b&gt;
. Pero eso lo dejamos para siguientes post ;-)
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Y tú, ¿qué definición de calidad de software utilizas? ¿qué
  características consideras que hay que evaluar para determinar si un software
  tiene más calidad que otro?&lt;/i&gt;
&lt;/p&gt;
  
  &lt;p&gt;&lt;a href=&quot;http://www.acalero.com/2014/01/22/que-es-calidad-de-software&quot;&gt;¿Qué es la calidad de software?&lt;/a&gt; fue publicado inicialmente por Antonio Calero at &lt;a href=&quot;http://www.acalero.com&quot;&gt;Antonio Calero&lt;/a&gt; el January 22, 2014.&lt;/p&gt;</content>
</entry>

</feed>
