Estaba yo pensando… ¿Por donde empiezo?
Bueno, trataré de empezar por el principio.
La idea es que voy a reflejar en una serie de posts la experiencia que he ido adquiriendo a lo largo de estos años que llevo trabajando.
He ocupado distintos puestos en distintas empresas, prácticamente todos alrededor de la ingeniería de telecontrol en el área de la energía eléctrica.
He trabajado unas veces en el entorno del transporte de energía, otras veces en el entorno de la distribución, pero casi siempre en la ingeniería de desarrollo software y hardware de los equipos de telecontrol.
Estos son los equipos que hacen posible que una instalación de una compañía eléctrica, desde una subestación de 400 Kv hasta un centro de transformación de distribución, funcionen desatendidos de manera segura y telecontrolados desde un despacho de la compañía correspondiente.
Además, soy aficionado a esto. Me gusta que las cosas funcionen solas. Así que, en mi tiempo libre, en mi casa, sigo dedicándole tiempo a esto. A ver, esto no quiere decir que en mi casa vaya a hacerme el porting de una librería 61850 a una Raspberry Pi, esto ya lo hago en la oficina con nuestros equipos. Lo que quiero decir es que en casa aprovecho estos conocimientos que he adquirido para desarrollar otras soluciones aplicables en el ámbito doméstico o en algún otro sector. Seguramente acabaré escribiendo sobre alguno de estos ejemplos.
En fin, que voy a tratar de darle un poco de visibilidad a mis aptitudes en este entorno por si a algún lector le parecen interesantes y pudiéramos llegar a colaborar de alguna manera…
Y como la mayor parte del contenido va a estar dedicado a la ingeniería software creo que lo mejor es dedicarle este primer post a las herramientas de desarrollo software que uso habitualmente.
Con el tiempo he aprendido que el uso de estas herramientas es fundamental para limitar o reducir el riesgo del desarrollo software. Además, en un segundo nivel, alrededor de estas herramientas debería haber una colección de procedimientos que nos aclaren como debemos usarlas. Y después, debería haber un compromiso de los integrantes del equipo de desarrollo para seguir estos procedimientos.
Son las siguientes:
- GitLab
- Youtrack
- Artifactory
- MediaWiki
GitLab.
Plataforma web para la gestión de todo el ciclo de vida del desarrollo software de un equipo.

Integra en una única herramienta funciones que antes solían hacerse con varias como Git (repositorio de código fuente), Gerrit (revisión de código), TeamCity o Jenkins (integración continua).
- Git: Integra un servidor git para el control de código fuente: trazabilidad de cambios, ramas, tags…
- Revisión de código: Permite la revisión de código por otro programador, incluir comentarios, rechazar la subida al repositorio, revisión iterativa, etc.
- Integración continua Permite la configuración de “runners” en los que se compila el commit subido a las ramas de git. También se permite la ejecución de tests unitarios y test de integración, funcionales, etc. Se pueden configurar distintos runners en Linux y Windows.
GitLab es muy flexible y no impone una manera de hacer las cosas. Para homogeneizar el desarrollo de distintos proyectos se deben elaborar distintos procedimientos comunes para hacer, al menos:
- Estructura de directorios del repositorio.
- Gestión de ramas del repositorio.
- Versionado de artefactos.
- Proceso de construcción de artefactos.
- Generación de versiones liberadas. Repositorio de artefactos.
Distintas opciones de uso, se puede instalar en una Raspberry Pi (mi opción domestica) o en un servidor “on premises” o en la nube. Libre de gastos, si uno se mantiene su propia instalación.
Youtrack
Es una herramienta de gestión de issues. Permite hacer la gestión de un proyecto de desarrollo software según distintas metodologías. Una de ellas scrum.
Entre otras cosas:
- Facilita el desarrollo colaborativo entre los distintos miembros del equipo.
- Gestión de issues (bugs, task, etc)
- Permite la gestión de un backlog, agile boards asociadas a sprints.
- Planificación, gestión de tiempos …
- Comentarios en md, con enlaces, documentos adjuntos, etc.
- Métricas.
Al igual que con GitLab es muy conveniente que en algún sitio esté descrito cómo se va a usar.
También tiene distintas opciones de instalación y es de libre distribución hasta 10 usuarios.
Artifactory
Básicamente, es un repositorio de artefactos. Es decir, el servidor donde se guardan, de manera ordenada, los paquetes de ficheros que constituyen una distribución de la aplicación.
Esta herramienta, a poco que la aplicación software tenga un mínimo de complejidad, cobra mucha importancia. Se trata de mantener las distintas versiones de los ejecutables bien gestionadas para garantizar la integridad y la trazabilidad del software.
Artifactory, incluso en su versión gratuita, ofrece un api REST para bajar y subir ficheros. Este interface se puede usar desde los scripts de integración continua de los distintos repositorios de GitLab.
De esta manera, la compilación de las versiones liberadas y su registro en el repositorio de artefactos se hace de manera automática y libre de los errores de la intervención humana…
Además, si se desarrolla un herramienta de fabricación de equipos, esta puede obtener los ejecutables de artifactory y desplegarlos en el equipo. De nuevo, sin intervención humana…
MediaWiki
Y esta sería opcional, pero muy conveniente. Es la herramienta que soporta la Wikipedia.
Se puede instalar en un servidor local sin coste.
Sirve para compartir información de manera informal, de una manera más ágil que un sistema de gestión documental.
Esto no sustituye a la gestión documental de la empresa, que debe soportar manuales de ingeniería, de instalación, de configuración, de uso, pero si sirve para compartir detalles de implementación, notas de aplicación o información informal que pueden intercambiar los distintos actores involucrados en el desarrollo de un producto.