Auditoría de código en un proyecto ya empezado

Cuando tienes que asumir la industrialización del desarrollo de un software ya empezado, uno de los problemas a los que tienes que enfrentarte, es que hacer con la auditoría de código, que normalmente no se cumple.

Uno de los objetivos de la industrialización es bajar la deuda técnica y uno de los parámetros tiene que ver con el cumplimiento de la auditoría de código.

Es muy complicado el llegar a los objetivos de cumplimiento de una atacada, salvo que se pueda hacer una intervención ex-profeso, cosa que no suele suceder, primero, porque normalmente suele haber cosas más importantes en las que invertir los, normalmente escasos, recursos del proyecto.

Yo lo que suelo pedir es que por lo menos la deuda técnica se vaya reduciendo. Es decir, no espero que se pare todo para cumplir la auditoría, pero si que por donde se vaya pasando se vaya haciendo el esfuerzo de adecuar el código. Que los indicadores de cumplimiento vayan subiendo.

En el peor de los casos por lo menos podrás decir que el equipo está haciendo el esfuerzo de mejorar la calidad.

Git a palo seco o edulcorado

Estoy usando, para una serie de proyectos personales, el Git como repositorio de código.

En uno de los proyectos estoy usando un git, por decirlo de alguna forma, a palo seco. Es decir sin ningún tipo de capa por encima, estilo GitHub, GitLab, Gitorious, etc. En el otro proyecto estoy usando GitHub, ya que es un proyecto público.

Como comenté el una entrada del proyecto MyCloudChest el motivo es que quiero que sea un repositorio privado y gratuito. Así que lo monté en mi RaspberryPi.

Para un proyecto personal es suficiente, ya que no tengo que gestionar muchos usuarios ni hay mucha concurrencia. Pero esta solución no es tan adecuada para un proyecto un poco más grande. Por lo menos comparado con las posibilidades que te proporcionan estos tipos de productos que complementan la funcionalidad de Git.

Estos productos, aparte de tener una administración mediante un web, que siempre es más agradable que la línea de comandos, proporcionan una serie de facilidades que me parecen muy interesantes.

Sobre todo la gestión de permisos en las ramas y la funcionalidad de merge o pull request. De tal forma que los programadores tienen que solicitar a un responsable que les acepte el cambio y lo incluya en la rama principal.

Que le pido a un control de versiones: Poca morralla

Es una de las cosas más molestas cuando tienes que pasar el código a otra persona fuera del repositorio es el tener que andar limpiando la cantidad de ficheritos o carpetas que incluye el repositorio para su gestión.

Así que una de las cosas que le pido a un sistema de control de versiones es que estos ficheros internos no estén dispersos por todas las carpetas.

En este aspecto, tanto el git como el Rational Team Concert son los mejores, ya que solo utilizan una carpeta en el raíz del proyecto.

Decálogo X: Que lo vise el jefe

El décimo punto del decálogo de la industrialización del software con respecto a los traspasos a la infraestructura del cliente es que: «No se traspasa ningún proyecto sin que hay sido aprobado por el responsable del proyecto».

Este es el punto más burocrático y se refiere a que el traspaso, que básicamente es una entrega de un producto, o de una parte de un producto, debe ser autorizada por el responsable de ese proyecto.

Si algo va mal a el le van a pedir cuentas, así que lo normal es que quiera tener un cierto control sobre ese paso.

Decálogo IX: Calidad, Calidad y Calidad

El noveno punto del decálogo de la industrialización del software con respecto a los traspasos a la infraestructura del cliente es que: «No se traspasa nada sin que haya pasado los controles de calidad».

Si no pasas los controles de calidad es que no has terminado. Y si no has terminado ¿porque traspasas?

El cliente te va a parar el traspaso en algún entorno posterior a los tuyos y vas a tener que volver a hacer el trabajo. O lo peor de todo, si el cliente no tiene un buen control de calidad, te lo van a poner en producción, y luego va a haber fuegos artificiales y según Murfy en el peor momento cuando te pille a contra pie.

Decálogo VIII: Toda la información en la tarea

El octavo punto del decálogo de la industrialización del software con respecto a los traspasos a la infraestructura del cliente es que: «Cada tarea recogida en el gestor de tareas debe contener toda la información para realizar el traspaso».

Como hemos comentado en otros puntos no siempre una tarea se pone en producción nada más terminada, que es cuando tienes fresco lo que has hecho. También hay que tener en cuenta que si algo va mal en un traspaso cuanta más información tengas recogida de forma accesible más fácil va a ser recordar que es lo que si hizo y porque.

Es por ello que en el gestor de tareas en cada tarea hay que recoger la información necesaria para poder reconstruir la tarea.

He tenido compañeros muy diligentes que se apuntaban en la libretita todos los ficheros que iban cambiando y todo lo que iban haciendo. Me parece genial esa actitud, pero lo que les decía a esos compañeros es que si en vez de hacerlo en su libretita, que solo la conoce la persona, si lo haces, exactamente el mismo trabajo, en el gestor de tareas queda recogido para cualquiera que tenga que continuar esa tarea.

Estuve en un proyecto en el que en un periodo de tiempo muy corto tuvimos dos bajas médicas inesperadas de una cierta duración, que nos hizo un roto muy grande, ya que el equipo no era muy amplio, así que una baja de una persona suponía una perdida grande.

Si no llega a ser porque teníamos todo recogido en el gestor de tareas y otra persona pudo retomar el trabajo, ciertamente con dificultades, pero muchas menos de las que hubiese tenido si no lo hubiésemos tenido todo recogido.

Decálogo VII: Traspasos parciales

El séptimo punto del decálogo de la industrialización del software con respecto a los traspasos a la infraestructura del cliente es que: «Se debe poder realizar traspasos parciales de un proyecto».

A veces pasa,que una vez preparado un traspaso, alguna tarea no funciona bien y hay que quitarla. Aunque no debiera de suceder en muchas ocasiones, porque significaría que algo no funciona en nuestro proceso, a veces pasa y hay que estar preparado.

Hay que estar preparado para este tipo de contingencias y tener definido cual es el procedimiento que se va a seguir. Quitar el código de la tarea de la etiqueta del repositorio, ya que esa tarea no va a ir y actualizar el estado de la tarea en el gestor de tareas.

Decálogo VI: Automatización

El sexto punto del decálogo de la industrialización del software con respecto a los traspasos a la infraestructura del cliente es que: «Los traspasos entre entornos deben estar automatizados completamente o realizarse lanzando un script o similar, nunca manualmente moviendo ficheros».

Todas las reglas anteriores están bien, pero tenemos que tener un mecanismo que nos asegure que hacemos las cosas bien, es decir que si queremos reproducir el traspaso no vamos a hacerlo en las mismas condiciones. Si dejamos pasos manuales es posible que alguien con prisas o que no conozca bien el procedimiento no lo realice bien y por ejemplo traspase ficheros de su ordenador, sin que estén en el repositorio.

Aparte de tener la seguridad de que hacemos las cosas bien también nos interesa el que el  proceso sea lo más rápido posible.

Es por ello que debemos buscarnos automatismos. Bien desde sencillos scripts de shell (en caso de Linux) hasta herramientas como AntHillPro o Jenkins

Decálogo V: Todas las tareas deben estar recogidas en el gestor de tareas

El quinto punto del decálogo de la industrialización del software con respecto a los traspasos a la infraestructura del cliente es que: «Todas las tareas deben estar recogidas en el gestor de tareas».

El motivo de este punto es el saber en cada traspaso que es lo que se ha enviado, para ello debemos tener recogido en el gestor de tareas todas aquellas tareas que se traspasan, o que deben ser realizadas para poner el producto.

Esto nos permitirá saber en caso de problema todo lo que realizamos para poner ese desarrollo en producción.

Hay proyectos en los que nada más se termina una incidencia se pone en producción, pero hay otros proyectos en los que esto no es así. Yo he estado en alguno. Nunca entendí el motivo de no poner algo hecho en producción hasta bastante después de haberlo terminado (y hablo de meses).

Industrialización del Software: Manual del paracaidista III

Ya vamos avanzando en poner orden y tomar el control de la situación. Con los dos pasos anteriores ya debieras de tener lo más importante controlado. Que la aplicación haga lo que tiene que hacer.

Ahora, a mi modo de ver, debieras de empezar a mirar un poco los temas internos. Para mi lo primero a controlar es el código. Por eso es lo primero en el decálogo.

Es vital que tengas el control del código fuente, sino vas a tener problemas. Créeme, he estado en sitios en los que se ha perdido código y no es una situación agradable.

Debieras de organizar el repositorio de tal forma que te permita automatizar la compilación. Aunque no lo hagas al principio de todo, en algún momento querrás optimizar el proceso productivo y la automatización es esencial. Además el automatizar te garantizará que lo que tienes en el repositorio es lo correcto, y que están todos los ficheros que necesitas.

En este punto casi se podría seguir el orden del decálogo. Siempre adecuando las prioridades a lo que en el proyecto en el que estés veas que es más sangrante.