Os profissionais de software são conhecidos por serem particularmente bons a inventar nomes interessantes para coisas que são senso comum. “Engenharia de plataformas” é um exemplo recente, que combina princípios estabelecidos com a inovação das estruturas nativas da nuvem.
No seu âmago, a engenharia de plataformas consiste em unificar o desenvolvimento de software através da adoção de um conjunto de ferramentas gerido e consistente, criando assim as condições para aumentar a produtividade das equipas. As indústrias mais maduras já sabem isto há décadas.
O que é a engenharia de plataformas?
A engenharia de plataformas é a prática de conceber, criar e gerir a infraestrutura de software e os sistemas fundamentais para aplicações e serviços. Inclui a gestão de infraestruturas físicas e baseadas na nuvem, a automatização de processos, a integração de várias ferramentas, a garantia da segurança e da conformidade, a monitorização do desempenho e a manutenção de uma elevada disponibilidade e da recuperação após catástrofes.
Este domínio é crucial para garantir ambientes técnicos robustos, escaláveis e seguros, que permitem um desenvolvimento e uma implementação eficientes das aplicações.
A engenharia de plataformas representa a evolução de esforços isolados para um ecossistema harmonizado, melhorando a experiência dos programadores e a eficiência operacional.
Have an account? Log In
A transição da excelência individual para a competência coletiva
Um programador individual, ou “artesão de software”, pode inicialmente superar uma equipa com o seu conjunto de ferramentas personalizado. No entanto, as exigências de uma empresa de software em expansão acabam por dar prioridade à arte do trabalho em equipa — comunicação, colaboração e partilha estratégica de ferramentas e processos.
A engenharia de plataformas é uma resposta sofisticada a estes desafios de escalabilidade. Envolve a seleção e gestão de um conjunto de aplicações e ferramentas que servem de base comum, permitindo aos programadores inovar através da integração e da criação sobre módulos preexistentes.
A função de uma equipa de engenharia de plataformas é criar uma Plataforma Interna para Programadores (IDP) que ultrapasse as limitações do desenvolvimento tradicional de aplicações através da incorporação de estruturas como o Kubernetes, promovendo um ambiente de autosserviço que capacita os programadores.
O princípio do artesão também se aplica aos testes: um testador exploratório competente e capaz de automatizar é provavelmente o profissional de garantia de qualidade mais eficaz que se pode encontrar. No entanto, o desafio reside na escalabilidade. A automatização de testes existe frequentemente em silos, com indivíduos a criarem soluções utilizando ferramentas como o Selenium à sua maneira. A saída ou promoção dessas pessoas conduz muitas vezes a uma reformulação completa dos sistemas existentes pelos seus sucessores, que podem ter uma abordagem diferente à utilização das ferramentas.
Plataformas de testes partilhadas: promover a colaboração
Por outro lado, uma plataforma de testes partilhada permitiria uma colaboração produtiva entre testadores profissionais, utilizadores empresariais e programadores. Uma plataforma deste tipo, como o Robot Testing da Copado, não só facilitaria a partilha e a reutilização de testes, dados e resultados, como também promoveria a transparência na avaliação da qualidade. Com a infraestrutura como código (outro nome interessante para algo que é senso comum), os ambientes de teste podem ser implementados eficientemente na nuvem, proporcionando acesso a pedido e transparência a todas as partes interessadas.
Na era dos microsserviços, a funcionalidade dos componentes individuais, orquestrados por plataformas como o Docker e o Kubernetes, deve ser analisada quanto à carga cognitiva e ao impacto no utilizador. Aqui entram em ação os princípios da engenharia da fiabilidade dos sites (SRE), garantindo que os sistemas são fiáveis e que as equipas de operações dispõem de ferramentas robustas de alertas, como o Puppet, e de soluções de monitorização para manter a observabilidade.
Desafios da engenharia de plataformas
Apesar dos seus benefícios evidentes, a engenharia de plataformas não está isenta de desafios. Requer uma gestão meticulosa e uma evolução contínua. Muitas empresas de produtos competentes têm dificuldades em desenvolver uma plataforma comum para os seus produtos, tornando irrealista esperar que os departamentos de TI possuam estas capacidades inerentemente. É por isso que as plataformas de aplicações amplas e de alto nível, como o Salesforce, e as plataformas para programadores, como o Git ou o Azure DevOps, estão a ganhar terreno. O mesmo está a acontecer com as plataformas de testes, mas um pouco mais lentamente.
Uma vez que as aplicações são construídas através da montagem de componentes de uma plataforma partilhada, a qualidade e a robustez dessa plataforma tornam-se fundamentais. Qualquer problema na plataforma pode afetar potencialmente todas as aplicações nela baseadas. Por isso, a plataforma e as aplicações têm de evoluir em simultâneo, mantendo a plataforma sempre a liderança para garantir a estabilidade.
Os testes da plataforma devem ser separados dos testes das aplicações, quer esteja a testar em produção ou não. Os primeiros tendem a ser mais técnicos, com foco em testes unitários, APIs, escalabilidade e desempenho, enquanto os segundos são, por natureza, testes de processos empresariais de ponta a ponta.
Manter a qualidade ao longo do ciclo de vida da plataforma
À medida que as organizações adotam abordagens nativas da nuvem, a robustez da sua plataforma torna-se fundamental. Qualquer problema na plataforma pode ter implicações generalizadas, razão pela qual é crucial estabelecer uma distinção clara entre os testes da plataforma e os testes das aplicações. Esta separação permite uma abordagem direcionada à escalabilidade e ao desempenho, com os primeiros a concentrarem-se nos aspetos técnicos, como as APIs, e os segundos na funcionalidade para o utilizador final.
More Articles
Software e ferramentas de engenharia de plataformas explicados
Na engenharia de plataformas, várias ferramentas de software gerem e simplificam os processos envolvidos na criação, implementação e manutenção de infraestruturas e aplicações.
Considere uma ferramenta como o Postman. Inicialmente desenvolvido como um projeto paralelo para simplificar o fluxo de trabalho das APIs durante o desenvolvimento e os testes, o Postman é uma excelente ferramenta para testadores individuais. No entanto, quando integrado num fluxo de trabalho de Integração Contínua/Entrega Contínua (CI/CD), as suas capacidades são ampliadas, servindo um propósito mais abrangente numa plataforma de nuvem. Permite testar APIs de forma rápida e simples, fornecendo feedback imediato ao utilizador.
À medida que a equipa cresce, as limitações do Postman tornam-se evidentes. Embora seja excelente para testes manuais e exploração, fica aquém em ambientes colaborativos onde são necessários testes automatizados, repetíveis e escaláveis. À medida que uma operação de software se expande, elementos como a comunicação, a partilha e a reutilização tornam-se cruciais, muitas vezes sobrepondo-se ao desempenho de um indivíduo.
Outras ferramentas fundamentais para a engenharia de plataformas incluem:
- Ferramentas de contentorização
- Docker: Para criar, implementar e executar aplicações em contentores.
- Kubernetes: Uma plataforma de orquestração de contentores para automatizar a implementação, o dimensionamento e as operações de contentores de aplicações em clusters de anfitriões.
- Ferramentas de Infraestrutura como Código (IaC):
- Terraform: Utilizado para criar, alterar e versionar infraestruturas de forma segura e eficiente.
- Ansible: Uma ferramenta de código aberto para aprovisionamento de software, gestão de configurações e implementação de aplicações.
- Puppet: Outra ferramenta popular de gestão de configurações.
- Ferramentas de Integração Contínua/Implementação Contínua (CI/CD):
- Jenkins: Um servidor de automatização de código aberto utilizado para automatizar partes do desenvolvimento de software.
- GitLab CI/CD: Fornece uma forma simplificada de automatizar etapas do ciclo de vida do desenvolvimento de aplicações.
- CircleCI: Oferece integração e entrega contínuas para ajudar as equipas de desenvolvimento a lançar código rapidamente.
- Ferramentas de monitorização e observabilidade:
- Prometheus: Um sistema de monitorização de código aberto com uma base de dados de séries temporais.
- Grafana: Para visualizar e monitorizar métricas.
- Elasticsearch, Logstash e Kibana (ELK Stack): Populares para registar e visualizar dados.
- Fornecedores de serviços de nuvem:
- Amazon Web Services (AWS): Fornece uma vasta gama de serviços de nuvem.
- Microsoft Azure: Disponibiliza serviços de computação em nuvem.
- Google Cloud Platform (GCP): Fornece um conjunto de serviços de computação em nuvem.
- Sistemas de controlo de versões:
- Git: Um sistema distribuído de controlo de versões para acompanhar alterações no código-fonte.
- GitHub: Uma plataforma para alojar e gerir repositórios Git.
- Ferramentas de segurança e conformidade:
- HashiCorp Vault: Para proteger, armazenar e controlar o acesso a tokens, palavras-passe, certificados, chaves de API e outros segredos.
- SonarQube: Avalia a qualidade do código e identifica vulnerabilidades.
- Ferramentas de malha de serviços:
- Istio: Uma plataforma aberta para ligar, gerir e proteger microsserviços.
- Linkerd: Fornece observabilidade, fiabilidade e segurança aos microsserviços.
- Estruturas sem servidor:
- AWS Lambda: Permite executar código sem aprovisionar ou gerir servidores.
- Serverless Framework: Simplifica a criação de aplicações com arquiteturas sem servidor.
- Gestão de bases de dados:
- MongoDB: Uma base de dados NoSQL popular.
- PostgreSQL: Uma base de dados relacional de código aberto avançada.
A promessa da Engenharia de plataformas
Embora a Engenharia de plataformas prometa aumentar a produtividade dos programadores, concretizar este potencial é mais fácil de dizer do que de fazer. A plataforma deve ser gerida meticulosamente, testada quanto à estabilidade e não deve tornar-se um estrangulamento. Este objetivo ambicioso exige um esforço concertado por parte das equipas de DevOps, desde o engenheiro de DevOps até à equipa de produto. Uma implementação bem-sucedida depende de uma orquestração harmoniosa, da eficiência dos pipelines e de um compromisso com a integração contínua e a implementação contínua. Práticas de teste eficazes e um conjunto de ferramentas orientado para a automatização são pré-requisitos para uma Engenharia de plataformas bem-sucedida.
Tem interesse em obter mais informações sobre IA e testes de software? Subscreva o boletim informativo do QA Lead para conhecer todas as tendências mais recentes.

