Skip to main content

Los profesionales del software son famosos por inventar nombres atractivos para cosas de sentido común. «Ingeniería de plataformas» es un ejemplo reciente, que combina principios consolidados con la innovación de los marcos nativos de 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, sentando así las bases para mejorar la productividad de los equipos. Las industrias más maduras ya lo saben desde hace décadas.

¿Qué es la ingeniería de plataformas?

La ingeniería de plataformas es la práctica de diseñar, crear y gestionar la infraestructura de software y los sistemas fundamentales para aplicaciones y servicios. Incluye la gestión de infraestructuras físicas y basadas en la nube, la automatización de procesos, la integración de diversas herramientas, la garantía de la seguridad y el cumplimiento normativo, la supervisión del rendimiento y el mantenimiento de una alta disponibilidad y recuperación ante desastres.

Continue Reading for Free

Create a free account to finish this article, plus get ongoing access to timely insights and practical resources.

Este campo es crucial para garantizar entornos técnicos sólidos, escalables y seguros que permitan desarrollar e implementar aplicaciones de forma eficiente.

La ingeniería de plataformas representa la evolución de los esfuerzos aislados hacia un ecosistema armonizado, mejorando la experiencia de los desarrolladores y la eficiencia operativa.

Mejora tu bandeja de entrada con más sabiduría sobre liderazgo tecnológico para ofrecer mejores programas y sistemas.

El cambio de la excelencia individual a la competencia colectiva

Al principio, un desarrollador individual, o «artesano del software», puede superar a un colectivo gracias a su conjunto de herramientas personalizado. Sin embargo, las exigencias de una empresa de software en proceso de expansión pronto dan prioridad al arte del trabajo en equipo: comunicación, colaboración y puesta en común estratégica 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 sirven como base común, permitiendo a los desarrolladores innovar mediante la integración y la ampliación de módulos ya existentes.

La función de un equipo de ingeniería de plataformas es crear una plataforma interna para desarrolladores (IDP) que trascienda las limitaciones del desarrollo de aplicaciones tradicional mediante la incorporación de marcos como Kubernetes, fomentando un entorno de autoservicio que dote de autonomía a los desarrolladores.

El principio del artesano también se aplica a las pruebas: un probador exploratorio competente y capaz de automatizar probablemente sea el profesional de control de calidad más eficaz que se pueda encontrar. Sin embargo, el desafío reside en la escalabilidad. La automatización de pruebas suele existir en silos, donde cada persona crea soluciones utilizando herramientas como Selenium a su manera. La marcha o promoción de estas personas suele provocar que sus sucesores tengan que renovar por completo los sistemas existentes, ya que pueden adoptar un enfoque diferente para utilizar las herramientas. 

Plataformas de pruebas compartidas: fomento de la colaboración

Por otro lado, una plataforma de pruebas compartida permitiría una colaboración productiva entre probadores profesionales, usuarios empresariales y desarrolladores. Una plataforma de este tipo, como Pruebas robóticas de Copado, no solo facilitaría el intercambio y la reutilización de pruebas, datos y resultados, sino que también promovería la transparencia en la evaluación de la calidad. Con la infraestructura como código (otro nombre atractivo para algo de sentido común), los entornos de prueba pueden implementarse de forma eficiente en la nube, proporcionando 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 teniendo en cuenta la carga cognitiva y el impacto en los usuarios. Aquí entran en juego los principios de la ingeniería de fiabilidad del sitio (SRE), que garantizan la fiabilidad de los sistemas y que los equipos de operaciones dispongan de sólidas herramientas de alertas como Puppet, así como de soluciones de supervisión para mantener la observabilidad.

Desafíos de la ingeniería de plataformas

A pesar de sus aparentes beneficios, la ingeniería de plataformas no está exenta de desafíos. Requiere una gestión meticulosa y una evolución continua. Muchas empresas de productos competentes tienen dificultades para desarrollar una plataforma común para sus productos, por lo que no es realista esperar que los departamentos de TI posean estas capacidades de forma inherente. Por eso, las plataformas de aplicaciones amplias y de alto nivel, como Salesforce, y las plataformas para desarrolladores, como Git o Azure DevOps, están ganando terreno. Lo mismo está ocurriendo con las plataformas de pruebas, aunque algo más lentamente.

Dado que las aplicaciones se construyen ensamblando componentes de una plataforma compartida, la calidad y solidez de esta plataforma se vuelven fundamentales. Cualquier problema en la plataforma puede afectar potencialmente a todas las aplicaciones creadas sobre ella. Por lo tanto, la plataforma y las aplicaciones deben evolucionar simultáneamente, manteniendo siempre la plataforma la ventaja para garantizar la estabilidad.

Las pruebas de la plataforma deben separarse de las pruebas de las aplicaciones, tanto si estás realizando pruebas en producción como si no. Las primeras tienden a ser más técnicas y se centran en las pruebas unitarias, las API, la escalabilidad y el rendimiento, mientras que las segundas se basan más en los procesos empresariales y, por naturaleza, son pruebas de extremo a extremo.

Mantener la calidad durante todo el ciclo de vida de la plataforma

A medida que las organizaciones adoptan enfoques nativos de la nube, la solidez de su plataforma es primordial. Cualquier problema dentro de la plataforma podría tener implicaciones generalizadas, por lo que es crucial establecer una delimitación clara entre las pruebas de la plataforma y las pruebas de las aplicaciones. Esta separación permite adoptar un enfoque específico para la escalabilidad y el rendimiento: las primeras se centran en los aspectos técnicos, como las API, y las segundas, en la funcionalidad para el usuario final.

Explicación del software y las herramientas de ingeniería de plataformas


En la ingeniería de plataformas, diversas herramientas de software gestionan y agilizan los procesos relacionados con la creación, implementación y mantenimiento de la infraestructura y las aplicaciones.

Considera una herramienta como Postman. Desarrollado inicialmente como un proyecto paralelo para simplificar el flujo de trabajo de las API durante el desarrollo y las pruebas, Postman es una herramienta excelente para los evaluadores individuales. Sin embargo, cuando se integra en un flujo de trabajo de integración continua/entrega continua (CI/CD), sus capacidades se amplían, ya que desempeña una función más amplia dentro de una plataforma en la nube. Permite realizar rápidamente pruebas de las API de forma sencilla y proporciona comentarios inmediatos al usuario.

A medida que el equipo crece, las limitaciones de Postman se hacen evidentes. Aunque es excelente para las pruebas manuales y la exploración, se queda corto en entornos colaborativos en los que se necesitan pruebas automatizadas, repetibles y escalables. A medida que una operación de software se amplía, elementos como la comunicación, el uso compartido y la reutilización se vuelven cruciales y, a menudo, eclipsan el rendimiento de una persona.

Otras herramientas clave para la ingeniería de plataformas son:

  • Herramientas de contenerización
    • Docker: para crear, implementar y ejecutar aplicaciones en contenedores.
    • Kubernetes: una plataforma de orquestación de contenedores para automatizar la implementación, el escalado y las operaciones de los contenedores de aplicaciones en clústeres de hosts.
  • Herramientas de infraestructura como código (IaC):
    • Terraform: se utiliza para crear, modificar y versionar la infraestructura de forma segura y eficiente.
    • Ansible: una herramienta de código abierto para el aprovisionamiento de software, la gestión de la configuración y la implementación de aplicaciones.
    • Puppet: otra herramienta popular de gestión de la configuración.
  • Herramientas de integración continua/implementación continua (CI/CD):
    • Jenkins: un servidor de automatización de código abierto utilizado para automatizar partes del desarrollo de software.
    • GitLab CI/CD: proporciona una forma simplificada de automatizar las etapas del ciclo de vida del desarrollo de aplicaciones.
    • CircleCI: ofrece integración y entrega continuas para ayudar a los equipos de desarrollo a publicar código rápidamente.
  • Herramientas de supervisión y observabilidad:
    • Prometheus: un sistema de supervisión de código abierto con una base de datos de series temporales.
    • Grafana: para visualizar y supervisar métricas.
    • Elasticsearch, Logstash y Kibana (pila ELK): populares para registrar y visualizar datos.
  • Proveedores de servicios en la nube:
    • Amazon Web Services (AWS): proporciona una amplia variedad 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 realizar un seguimiento de los cambios en el código fuente.
    • GitHub: una plataforma para alojar y gestionar repositorios de Git.
  • Herramientas de seguridad y cumplimiento:
    • HashiCorp Vault: para proteger, almacenar y controlar el acceso a tokens, contraseñas, certificados, claves de 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 proteger microservicios.
    • Linkerd: Proporciona observabilidad, fiabilidad y seguridad a los microservicios.
  • Frameworks sin servidor:
    • AWS Lambda: Permite ejecutar código sin aprovisionar ni gestionar servidores.
    • Marco sin servidor: Simplifica la creación de aplicaciones con arquitecturas sin servidor.
  • 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

Aunque la ingeniería de plataformas promete mejorar la productividad de los desarrolladores, hacer realidad este potencial es más fácil de decir que de hacer. La plataforma debe gestionarse meticulosamente, probarse para garantizar su estabilidad y no debe convertirse en un cuello de botella. Este ambicioso objetivo requiere un esfuerzo coordinado entre los equipos de DevOps, desde el ingeniero de DevOps hasta el equipo de producto. Una implementación exitosa depende de una orquestación fluida, de la eficiencia de las canalizaciones y del compromiso con la integración continua y la entrega continua. Unas prácticas de pruebas eficaces y un conjunto de herramientas orientado a la automatización son requisitos previos para una ingeniería de plataformas exitosa.

¿Te interesa obtener más información sobre la IA y las pruebas de software? Suscríbete al boletín de QA Lead para conocer las últimas tendencias.