Page 29 - REVISTA 2016
P. 29

Los entornos de desarrollo modernos, tales como Visual Studio o Eclipse (por nombrar algunos populares) ayu-
            dan muchísimo con varios de estos problemas, al punto que si no se cumplen algunas restricciones el código no
            compila. De todos modos, hay muchas cosas más que las podemos analizar con herramientas específicas para
            analizar la calidad del código. Hoy en día, la herramienta más popular para este fin es SonarQube, pero existen
            varias como PMD y CheckStyle. Estas herramientas realizan un estudio estático del código y de caja blanca, o sea,
            analizan el código sin ejecutarlo. Dentro de las verificaciones que realizan, verifican los defectos comunes que
            mencionamos antes, como el código duplicado o la complejidad ciclomática. Algo bien interesante, es que So-
            narQube es capaz de indicar cuál es la deuda técnica, sumando cuántos minutos nos llevaría resolver cada issue
            detectado.
            Si bien SonarQube me puede decir dónde está la deuda técnica, es importante también saber cómo pagarla. Ahí
            lo fundamental es no tocar cualquier código, no alcanza con ordenar los issues por severidad. Es necesario cruzar
            la información de los issues y su severidad con la cantidad de commits que hay en cada clase. De esta forma, va-
            mos a poder enfocar nuestro esfuerzo a mejorar la mantenibilidad de aquellas clases que son modificadas más a
            menudo. En cambio, si se observan problemas de mantenibilidad de clases que no se tocan nunca y que funcio-
            nan adecuadamente, es mejor no atacarlos. Parafraseando a una frase popular relacionada al fútbol: código que
            funciona, no se toca.



               Si no perdemos de vista que estamos buscando armar un entorno de integración continua, es claro que
               vamos a necesitar que el código esté accesible en un repositorio bien organizado, y que se realicen diver-
               sos chequeos de calidad sobre el código, como por ejemplo la verificación con SonarQube.



            Los entornos e infraestructura



               Por lo general todos suelen estar de acuerdo que lo mejor es tener distintos ambientes, por lo menos 3:
               uno para desarrollo, donde se compila y se prueba en forma local cada modificación, uno para los testers,
               para que prueben las versiones “cerradas” prontas para probar, y luego el de producción, donde está el
               código que usan los usuarios. A nadie se le ocurre pasar de desarrollo a producción sin pasar por testing,
               ¿cierto? Lamentablemente hay muchos equipos que ni siquiera tienen tres ambientes y realizan estas
               prácticas, con las claras consecuencias negativas que puede acarrear, como “en mi máquina anda” pero al
               usuario no le funciona.




            Agreguemos la complicación de que tal vez tenemos distintas pruebas a realizar con distintas configuraciones,
            parametrizaciones, etc. Entonces para esto tenemos más de un ambiente de pruebas, o tenemos un ambiente y
            muchos backups de base de datos, uno para cada conjunto, de la complejidad extra que agrega esto es que hay
            que realizar un mantenimiento específico a cada backup (por ejemplo, cada vez que hay cambios en el sistema
            en los que se modifica la base de datos, será necesario impactar a cada backup con esos cambios). Pero si uno
            de estos elementos no está en sintonía con el resto, probablemente las pruebas fallarán y no estaremos siendo
            eficientes con nuestros esfuerzos. Es importante que cada vez que una prueba reporta un fallo, es porque hay un
            bug, y no generemos falsas alarmas. Es así que vemos la necesidad de tener varios ambientes y gestionarlos en
            forma apropiada. O sea, evitar problemas del tipo “¿estás seguro que estás probando sobre la última versión?”.
            También es fundamental contar con todos los entornos que los testers necesitan, y eso puede incluir dar acceso
            a sistemas operativos diversos, con distintas configuraciones, diferentes versiones de browsers, o incluso tener
            disponible el acceso a diversos dispositivos mobile, ya que con la alta variedad de dispositivos existentes es nece-
            sario probar las apps en un conjunto variado de estos.

            Para resolver todos los problemas a nivel de ambientes y entornos se suele contar con perfiles especiales dentro
            del equipo, y algo que está muy “de moda” últimamente, es contar con DevOps. Básicamente es alguien que
            conjuga la visión de operaciones (gestión de infraestructura y entornos), la de desarrollo y negocio. Teniendo
            vinculadas estas áreas será posible resolver más rápido y eficiente todas las necesidades del equipo con foco en
            el cliente y el usuario final.



                                                                               Reflexiones sobre Ingeniería  31
   24   25   26   27   28   29   30   31   32   33   34