Los profesionales del software son conocidos por inventar nombres llamativos para conceptos de sentido común. “Ingeniería de plataformas” es un ejemplo reciente, que combina principios ya establecidos con la innovación de los marcos nativos en la nube.
En esencia, la ingeniería de plataformas consiste en unificar el desarrollo de software mediante la adopción de un conjunto de herramientas gestionado y coherente, preparando así el terreno para aumentar la productividad del equipo. Industrias más maduras llevan décadas conociendo esto.
¿Qué es la Ingeniería de Plataformas?
La ingeniería de plataformas es la práctica de diseñar, construir y gestionar la infraestructura y sistemas fundamentales de software para aplicaciones y servicios. Incluye la gestión de infraestructura física y basada en la nube, la automatización de procesos, la integración de diversas herramientas, la garantía de seguridad y cumplimiento, la monitorización del rendimiento y el mantenimiento de alta disponibilidad y recuperación ante desastres.
Este campo es crucial para garantizar entornos técnicos robustos, escalables y seguros que permitan un desarrollo y despliegue de aplicaciones eficiente.
La ingeniería de plataformas marca la evolución de los esfuerzos aislados a un ecosistema armonizado, mejorando la experiencia del desarrollador y la eficiencia operativa.
El cambio de la excelencia individual a la competencia colectiva
Un desarrollador individual, o "artesano del software", puede inicialmente destacar frente a un colectivo gracias a su conjunto de herramientas personalizado. Sin embargo, las demandas de una empresa de software en crecimiento pronto priorizan el arte del trabajo en equipo: comunicación, colaboración y el intercambio estratégico de herramientas y procesos.
La ingeniería de plataformas es una respuesta sofisticada a estos dilemas de escalabilidad. Consiste en seleccionar y gestionar un conjunto de aplicaciones y herramientas que sirvan como base común, permitiendo a los desarrolladores innovar integrando y construyendo sobre módulos existentes.
El papel del equipo de ingeniería de plataformas es crear una Plataforma Interna de Desarrollo (IDP) que trascienda las limitaciones del desarrollo tradicional de aplicaciones incorporando marcos como Kubernetes, fomentando un entorno de autoservicio que empodera a los desarrolladores.
El principio artesano se aplica también a las pruebas: un tester exploratorio competente y capaz de automatización probablemente sea el profesional de QA más eficaz que se pueda encontrar. Sin embargo, el reto está en la escalabilidad. La automatización de pruebas a menudo existe en silos, con individuos creando soluciones con herramientas como Selenium a su manera única. La marcha o promoción de estas personas suele llevar a que sus sucesores, con un enfoque diferente sobre el uso de las herramientas, realicen una revisión total de los sistemas existentes.
Plataformas de pruebas compartidas: fomentando la colaboración
Una plataforma de pruebas compartida, por otro lado, permitiría una colaboración productiva entre testers profesionales, usuarios de negocio y desarrolladores. Dicho entorno, como Robot Testing de Copado, no solo facilitaría la compartición y reutilización de pruebas, datos y resultados, sino que también promovería la transparencia en la evaluación de la calidad. Con infraestructura como código (otro nombre llamativo para algo de sentido común), los entornos de prueba pueden desplegarse eficazmente en la nube, ofreciendo acceso bajo demanda y transparencia a todas las partes interesadas.
En la era de los microservicios, la funcionalidad de los componentes individuales, orquestados por plataformas como Docker y Kubernetes, debe examinarse en cuanto a carga cognitiva e impacto en el usuario. Aquí entran en juego los principios de Site Reliability Engineering (SRE), asegurando que los sistemas sean fiables y que los equipos de operaciones cuenten con potentes herramientas de alertas como Puppet y soluciones de monitorización para mantener la observabilidad.
Retos de la ingeniería de plataformas
A pesar de sus beneficios evidentes, la creación de plataformas no está exenta de retos. Requiere una gestión meticulosa y una evolución continua. Muchas empresas de producto competentes tienen dificultades para desarrollar una plataforma común para sus productos, lo que hace poco realista esperar que los departamentos de TI posean estas capacidades de manera innata. Por ello, plataformas de aplicaciones generales de alto nivel, como Salesforce, y plataformas para desarrolladores, como Git o Azure DevOps, están ganando terreno. En el ámbito de las plataformas de testing sucede lo mismo, aunque de forma algo más lenta.
Como las aplicaciones se componen ensamblando componentes de una plataforma compartida, la calidad y robustez de dicha plataforma se convierten en aspectos fundamentales. Cualquier problema con la plataforma puede afectar potencialmente a todas las aplicaciones construidas sobre ella. Por tanto, la plataforma y las aplicaciones deben evolucionar conjuntamente, manteniendo siempre la plataforma un paso delante para garantizar la estabilidad.
Las pruebas de la plataforma deben diferenciarse de las pruebas de las aplicaciones, estén probando en producción o no. Las primeras suelen ser más técnicas, centradas en pruebas unitarias, APIs, escalabilidad y rendimiento, mientras que las segundas son más de negocio, pruebas de extremo a extremo por naturaleza.
Mantener la calidad a lo largo del ciclo de vida de la plataforma
A medida que las organizaciones adoptan enfoques nativos en la nube, la robustez de su plataforma es fundamental. Cualquier problema dentro de la plataforma podría tener implicaciones generalizadas, por lo que una clara separación entre las pruebas de la plataforma y las pruebas de la aplicación es crucial. Esta separación permite un enfoque dirigido a la escalabilidad y el rendimiento, centrándose el primero en los aspectos técnicos como las APIs y el segundo en la funcionalidad para el usuario final.
Software y herramientas de ingeniería de plataformas explicados
En la ingeniería de plataformas, diversas herramientas de software gestionan y optimizan los procesos involucrados en la construcción, despliegue y mantenimiento de infraestructuras y aplicaciones.
Considere una herramienta como Postman. Inicialmente desarrollada como un proyecto paralelo para simplificar el flujo de trabajo con APIs en desarrollo y pruebas, Postman es una excelente herramienta para testers individuales. Sin embargo, cuando se integra en un flujo de trabajo de Integración continua/entrega continua (CI/CD), sus capacidades se amplifican, sirviendo a un propósito más amplio dentro de una plataforma en la nube. Permite pruebas rápidas y sencillas de APIs, proporcionando retroalimentación inmediata al usuario.
A medida que el equipo crece, las limitaciones de Postman se hacen evidentes. Aunque es excelente para pruebas manuales y exploratorias, queda corta en entornos colaborativos donde se requieren pruebas automatizadas, repetibles y escalables. A medida que la operación de software se amplía, elementos como la comunicación, el intercambio y la reutilización se vuelven cruciales, a menudo eclipsando el rendimiento de un individuo.
Otras herramientas clave para la ingeniería de plataformas incluyen:
- Herramientas de contenerización
- Docker: Para crear, desplegar y ejecutar aplicaciones en contenedores.
- Kubernetes: Una plataforma de orquestación de contenedores para automatizar el despliegue, escalado y operaciones de contenedores de aplicaciones a través de clústeres de hosts.
- Herramientas de Infraestructura como Código (IaC):
- Terraform: Utilizada para construir, modificar y versionar infraestructuras de forma segura y eficiente.
- Ansible: Una herramienta de código abierto para aprovisionamiento de software, gestión de la configuración y despliegue de aplicaciones.
- Puppet: Otra popular herramienta de gestión de la configuración.
- Herramientas de integración continua/despliegue continuo (CI/CD):
- Jenkins: Un servidor de automatización de código abierto utilizado para automatizar partes del desarrollo de software.
- GitLab CI/CD: Ofrece una forma simplificada de automatizar etapas del ciclo de vida del desarrollo de aplicaciones.
- CircleCI: Ofrece integración y entrega continua para ayudar a los equipos de desarrollo a lanzar código rápidamente.
- Herramientas de monitorización y observabilidad:
- Prometheus: Un sistema de monitorización de código abierto con una base de datos de series temporales.
- Grafana: Para visualizar y monitorear métricas.
- Elasticsearch, Logstash y Kibana (ELK Stack): Populares para el registro y visualización de datos.
- Proveedores de servicios en la nube:
- Amazon Web Services (AWS): Ofrece una amplia gama de servicios en la nube.
- Microsoft Azure: Ofrece servicios de computación en la nube.
- Google Cloud Platform (GCP): Proporciona un conjunto de servicios de computación en la nube.
- Sistemas de control de versiones:
- Git: Un sistema de control de versiones distribuido para el seguimiento de cambios en el código fuente.
- GitHub: Una plataforma para alojar y gestionar repositorios Git.
- Herramientas de seguridad y cumplimiento:
- HashiCorp Vault: Para proteger, almacenar y controlar el acceso a tokens, contraseñas, certificados, claves API y otros secretos.
- SonarQube: Evalúa la calidad del código e identifica vulnerabilidades.
- Herramientas de malla de servicios:
- Istio: Una plataforma abierta para conectar, gestionar y asegurar microservicios.
- Linkerd: Proporciona observabilidad, fiabilidad y seguridad a los microservicios.
- Frameworks serverless:
- AWS Lambda: Permite ejecutar código sin aprovisionar ni gestionar servidores.
- Serverless Framework: Simplifica la construcción de aplicaciones con arquitecturas serverless.
- Gestión de bases de datos:
- MongoDB: Una base de datos NoSQL popular.
- PostgreSQL: Una base de datos relacional avanzada y de código abierto.
La promesa de la ingeniería de plataformas
Si bien la ingeniería de plataformas promete una mayor productividad para los desarrolladores, alcanzar este potencial no es tan sencillo como parece. La plataforma debe ser gestionada meticulosamente, probada para garantizar su estabilidad y no debe convertirse en un cuello de botella. Este objetivo ambicioso requiere un esfuerzo concertado por parte de los equipos DevOps, desde el ingeniero DevOps hasta el equipo de producto. Una implementación exitosa depende de una orquestación fluida, la eficiencia de los pipelines y el compromiso con la integración y despliegue continuos. Prácticas de prueba efectivas y un conjunto de herramientas orientadas a la automatización son requisitos previos para una ingeniería de plataformas exitosa.
¿Te interesa más información sobre IA y Pruebas de Software? Suscríbete al boletín de QA Lead para enterarte de las últimas tendencias.
