Arquitetura de Aplicações e Metodologias: Da Nuvem ao Código (FGV 2024)

Capa do artigo Arquitetura de Aplicações e Metodologias: Da Nuvem ao Código (FGV 2024), sobre Outros Tópicos de Desenvolvimento de Sistemas, no blog do Acertei: fundo azul-marinho com o título em destaque
Ficha da questão
BancaFGV
Ano2024
ÓrgãoPref BH – Prefeitura Municipal de Belo Horizonte
Prova2ª Etapa – Prova Discursiva, questão 49
DisciplinaDesenvolvimento de Softwares
AssuntoOutros Tópicos de Desenvolvimento de Sistemas
NívelSUPERIOR
Infográfico de estudo TDD versus BDD em Desenvolvimento de Sistemas, resumindo Outros Tópicos de Desenvolvimento de Sistemas para concurso público: painéis com a definição, a comparação cobrada pela banca e a pegadinha mais frequente.
A distinção entre código e comportamento cobrada pela FGV

Seja bem-vindo, futuro servidor! Os temas de arquitetura de aplicações, modelos de computação em nuvem e ciclos de desenvolvimento de software são pilares fundamentais da tecnologia da informação e, por isso, figurinhas carimbadas em concursos públicos de alto nível. A capacidade de diferenciar modelos como PaaS, IaaS e SaaS, compreender as implicações do acoplamento em arquiteturas e conhecer metodologias como TDD e BDD é crucial. A questão da FGV para a Prefeitura de BH em 2024 que analisaremos é um excelente exemplo de como a banca pode, em uma única questão, testar um vasto leque de conhecimentos. Usaremos cada afirmativa como um trampolim para aprofundar o conhecimento e garantir que você não seja pego de surpresa.

Desvendando a Nuvem: Modelos de Serviço e a Controvérsia do PaaS

A primeira afirmativa da questão aborda o modelo de Plataforma como Serviço (PaaS) e sua relação com tecnologias como Docker e Kubernetes. Vamos analisar e expandir.

O item da questão afirmava: “( ) O modelo de cloud computing do tipo Plataforma como Serviço (PAAS, Platform-as-a-Service) oferece ambiente compartilhado de desenvolvimento de software que fornece, às equipes de desenvolvimento e operações, acesso a todas as ferramentas de que necessitam, a partir de qualquer local com uma conexão à Internet, sendo frequente o emprego das tecnologias Docker e Kubernetes.”

A banca considerou esta afirmativa como VERDADEIRA. Vamos entender o porquê.

Plataforma como Serviço (PaaS)

PaaS é um modelo de computação em nuvem que fornece aos desenvolvedores uma plataforma para construir, implantar e gerenciar aplicações sem se preocuparem com a complexidade da infraestrutura subjacente (hardware, sistemas operacionais, redes, armazenamento). O provedor de nuvem gerencia tudo isso, e o desenvolvedor foca no código e nos dados da aplicação. Pense no PaaS como um “ambiente de execução” pronto para uso.

A Relação com Docker e Kubernetes

Aqui reside o ponto que gera mais dúvidas. Tradicionalmente, Docker (plataforma de contêineres) e Kubernetes (orquestrador de contêineres) são fortemente associados ao modelo IaaS (Infraestrutura como Serviço), onde o usuário tem mais controle, ou a um modelo intermediário chamado CaaS (Containers as a Service). No entanto, muitas plataformas PaaS modernas, como Heroku, Google App Engine e Red Hat OpenShift, foram reconstruídas ou projetadas sobre uma base de contêineres e Kubernetes. Para o desenvolvedor que usa a PaaS, a complexidade do Kubernetes é abstraída, mas a tecnologia está lá, garantindo escalabilidade, resiliência e portabilidade. Portanto, o emprego de Docker e Kubernetes tornou-se, de fato, “frequente” na implementação de ambientes PaaS.

Arquiteturas de Aplicação: O X da Questão do Acoplamento

A segunda afirmativa tratava da classificação de arquiteturas pelo nível de acoplamento, um erro clássico em provas.

O item da questão afirmava: “( ) Quanto ao nível de acoplamento, podemos diferenciar as arquiteturas de aplicação como monolíticas e em N camadas (levemente acopladas), microsserviços (fortemente acopladas); e, orientadas a eventos ou serviços (desacopladas).”

A banca considerou esta afirmativa como FALSA. A análise é direta: os conceitos de acoplamento estão deliberadamente trocados.

  • Arquitetura Monolítica: É caracterizada pelo alto acoplamento. Todos os componentes da aplicação (interface, regras de negócio, acesso a dados) são desenvolvidos e implantados como uma única unidade. Uma alteração em uma pequena parte pode exigir que toda a aplicação seja testada e reimplantada.
  • Arquitetura de Microsserviços: O princípio fundamental é o baixo acoplamento (ou desacoplamento). A aplicação é dividida em pequenos serviços independentes, cada um com sua própria responsabilidade e, muitas vezes, seu próprio banco de dados. Eles se comunicam por APIs bem definidas.
  • Arquitetura Orientada a Eventos (EDA) e a Serviços (SOA): São inerentemente desacopladas. Na EDA, os componentes reagem a eventos, sem conhecerem diretamente quem os produziu. Em SOA, serviços são disponibilizados na rede para serem consumidos por outras aplicações, promovendo reuso e baixo acoplamento.
  • Arquitetura em N Camadas: O nível de acoplamento pode variar, mas é geralmente menor que no monolito e maior que em microsserviços. As camadas (apresentação, negócio, dados) são separadas logicamente, mas frequentemente implantadas juntas, o que as torna moderadamente acopladas.

Ciclo de Vida de Desenvolvimento (SDLC): TDD vs. BDD

A terceira afirmativa diferenciava duas importantes metodologias de desenvolvimento guiado por testes.

O item da questão afirmava: “( ) No ciclo de vida do desenvolvimento de software (SDLC, Software Development Lifecycle) podem ser aplicadas as metodologias TDD (Test Driven Development), quando o foco está em uma linguagem mais técnica e no objetivo de testar alguma funcionalidade, e o BDD (Behavior Driven Development), quando o foco está em uma linguagem mais próxima da linguagem natural e no objetivo de realização de testes de comportamento.”

A banca considerou esta afirmativa como VERDADEIRA, e a descrição é precisa e didática.

Test Driven Development (TDD)

O Desenvolvimento Guiado por Testes (TDD) é uma prática de desenvolvimento focada no desenvolvedor. O ciclo é conhecido como “Red-Green-Refactor”:

  1. Red (Vermelho): Escrever um teste automatizado (geralmente um teste de unidade) para uma nova funcionalidade que ainda não existe. O teste, obviamente, falha.
  2. Green (Verde): Escrever a quantidade mínima de código necessária para fazer o teste passar.
  3. Refactor (Refatorar): Melhorar a estrutura do código escrito sem alterar seu comportamento (os testes devem continuar passando).

A linguagem é técnica (código) e o objetivo é garantir a correção de pequenas unidades de funcionalidade.

Behavior Driven Development (BDD)

O Desenvolvimento Guiado por Comportamento (BDD) evoluiu do TDD. Ele amplia o foco do teste de uma unidade técnica para o comportamento do sistema sob a ótica do usuário ou do negócio. A principal característica do BDD é o uso de uma linguagem ubíqua, próxima da linguagem natural, que pode ser entendida por desenvolvedores, analistas de qualidade (QAs) e gerentes de produto (POs). Frequentemente, utiliza-se a sintaxe Gherkin (Given-When-Then / Dado-Quando-Então).

  • Given (Dado): Um contexto inicial.
  • When (Quando): Uma ação é executada.
  • Then (Então): O resultado esperado (o comportamento) é verificado.

Dominar esses três pilares — modelos de nuvem, acoplamento de arquiteturas e metodologias de desenvolvimento — é um passo gigante rumo à sua aprovação na área de TI.

Mapa da Aprovação: Resumo Esquematizado

Modelos de Serviço em Nuvem

ModeloO que VOCÊ GerenciaO que o PROVEDOR GerenciaAnalogia
IaaS (Infra as a Service)Aplicações, Dados, Runtime, Middleware, S.O.Virtualização, Servidores, Storage, RedeAlugar um terreno vazio.
PaaS (Platform as a Service)Aplicações, DadosRuntime, Middleware, S.O., Virtualização, Servidores, Storage, RedeAlugar uma oficina com todas as ferramentas.
SaaS (Software as a Service)Nada (apenas usa o software)TudoUsar um carro por aplicativo.

Arquiteturas de Aplicação vs. Acoplamento

ArquiteturaNível de AcoplamentoCaracterística Principal
MonolíticaForteAplicação como uma única unidade implantável.
MicrosserviçosFraco / DesacopladoAplicação como um conjunto de serviços pequenos e independentes.
Orientada a Eventos (EDA)DesacopladoComunicação assíncrona baseada na produção e consumo de eventos.

Metodologias de Desenvolvimento: TDD vs. BDD

MetodologiaFoco PrincipalLinguagemPúblico-Alvo
TDDImplementação correta da unidade de código.Técnica (código de teste).Desenvolvedores.
BDDValidação do comportamento do sistema.Natural (ex: Given-When-Then).Equipe multidisciplinar (Devs, QAs, POs).

Teste Seus Conhecimentos: Questões de Fixação

Referências:

  1. Kubernetes vs. Docker – Atlassian
  2. Kubernetes vs Docker – Microsoft Azure
  3. Kubernetes vs. Docker: qual a relação entre os dois? – Supero
  4. Monolítico x microsserviços — Diferença entre arquiteturas – AWS
  5. Do monolito aos microsserviços com arquitetura orientada a eventos – Speaker Deck
  6. Qual é a diferença entre TDD e BDD? – Alura
  7. Saiba qual é a diferença entre TDD e BDD – Locaweb
Resolva questões comentadas como esta no aplicativo do Acertei.Começar agora, no navegadorBaixar o appSem instalar nada: o Acertei abre direto no navegador.

Leia também

Política de Privacidade | Termos de Uso | Preferências de cookies
Rolar para cima