Engenharia de Software - 3 Flashcards

1
Q

Como funciona uma arquitetura por microsserviços? Qual tecnologia possibilitou que essa arquitetura fosse desenvolvida

A

A arquitetura divide o programa em pequenas partes chamadas módulos que são executados em processos independentes que não compartilham memória entre si. Em cada momento, somente um pequeno grupo desses módulos é executado de cada vez.

Essa arquitetura só é possível graças à computação em nuvem.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Cite 3 vantagens do uso de uma arquitetura em microsserviços.

A
  • Permitem a evolução mais rápida e independente de um sistema.
  • Permitem escalar um sistema mais facilmente de forma horizontal
  • Devido à independência entre os microsserviços, cada um deles pode ser implementado com tecnologias diferentes.
  • Um microsserviço falhar não implica no sistema inteiro falhar, apenas na função que aquele microsserviço cumpre. Falhas na arquitetura de microsserviços são parciais ao invés de totais.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Cite três desvantagens do uso de uma arquitetura em microsserviços.

A

Complexidade: Comunicação entre módulos que executam em um mesmo processo depende de protocolos de comunicação, o que leva a uma dependência de tecnologias de rede.

Latência: A dependência de tecnologias de rede também pode acarretar um tempo maior entre essas comunicações que pode afetar o desempenho do sistema.

Transações Distribuídas: Microsserviços que atuam simultaneamente em múltiplos bancos de dados podem ter dificuldade garantindo que essas transações ocorram de forma atômica (ou seja, ou ambas ocorrem ou nenhuma ocorre). Protocolos de transações distribuídas, como two-phase commit, podem ser necessários para garantir uma semântica de transações em operações que escrevem em mais de um banco de dados.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Qual problema é resolvido pela arquitetura em microsserviços?

A

Um sistema monolítico é ao mesmo tempo susceptível e sensível a mudanças. Uma mudança em uma classe A pode impactar todos os desenvolvedores que a usam e um pequeno bug na classe A pode causar uma falha total.

A arquitetura em microsserviços resolve esse problema separando os módulos tanto em desenvolvimento quanto na execução.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Como funciona a arquitetura em camadas? Dê exemplos de sistemas que utilizam essa arquitetura.

A

Uma arquitetura em camadas particiona a complexidade envolvida no desenvolvimento de um sistema em componentes menores (as camadas) enquanto disciplina as dependências entre essas camadas visto que a camada n somente pode usar serviços da camada n-1.

Exemplos de sistemas que usam inclui protocolos de rede.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Como funciona a arquitetura em três camadas?

A

É uma arquitetura (geralmente implementada de forma distribuída) que implementa as seguintes camadas:

  • Interface com o Usuário, também chamada de camada de apresentação, é responsável por toda interação com o usuário e executada geralmente em sua máquina.
  • Lógica de Negócio, também conhecida como camada de aplicação, implementa as regras de negócio do sistema, geralmente executada em um servidor.
  • Banco de Dados, que armazena os dados manipulados pelo sistema. Pode ser executada no mesmo servidor da Lógica de Negócio ou em um terceiro.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Como funciona a Arquitetura MVC?

A

A Arquitetura MVC define que as classes de um sistema devem ser organizadas em três grupos:

  • Visão: classes responsáveis pela apresentação da interface gráfica do sistema, incluindo janelas, botões, menus, barras de rolagem, etc.
  • Controladoras: classes que tratam e interpretam eventos gerados por dispositivos de entrada, como mouse e teclado e podem usar esses eventos para solicitar uma alteração no estado do Modelo ou da Visão.
  • Modelo: classes que armazenam os dados manipulados pela aplicação e que têm a ver com o domínio do sistema em construção.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Como funciona uma Arquitetura Orientada a Mensagens ?

A

Neste tipo de arquitetura, a comunicação entre clientes e servidores é mediada por um terceiro serviço que tem a única função de prover uma fila (também chamada de broker) de mensagens.

Os clientes (produtores) inserem mensagens na fila. E os servidores (consumidores) retiram mensagens da fila e processam a informação contida nelas. Com as filas de mensagens, a comunicação pelo lado do cliente torna-se assíncrona, pois uma vez que a informação seja colocada na fila, o cliente está liberado para continuar seu processamento.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Quais os maiores riscos de uma Arquitetura Orientada a Mensagens ?

A

Devido à dependência da fila de mensagens, é importante que esse serviço seja instalado em uma máquina estável e com alto poder de processamento. Também é importante que ela seja persistente para que os dados não sejam perdidos em uma queda de servidor.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Cite duas vantagens de uma Arquitetura Orientada a Mensagens.

A
  • Desacoplamento no espaço: visto que clientes exclusivamente produzem e servidores exclusivamente consomem, um não precisa conhecer o outro.
  • Desacoplamento no tempo: A fila de mensagens permite que a comunicação entre cliente e servidor ocorra mesmo quando um estiver indisponível.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Como funciona uma Arquitetura Publish/Subscribe? Por qual outro nome ela é conhecida?

A

Em arquiteturas publish/subscribe, as mensagens são chamadas de eventos. Os componentes da arquitetura são chamados de publicadores (publishers) e assinantes (subscribers) de eventos. Publicadores produzem eventos e os publicam no serviço de publish/subscribe e quando um evento é publicado, os seus assinantes são notificados.

Arquiteturas Publish/Subscribe também são, por vezes, chamadas de Arquiteturas Orientadas a Eventos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Quais as diferenças entre a Arquitetura Publish/Subscribe a Arquitetura Orientada a Mensagens?

A

As diferenças entre a Publish Subscribe e a Orientada a Mensagens é que em publish/subscribe, um evento gera notificações em todos os seus assinantes enquanto na orientada a mensagens, cada mensagem é sempre consumida por um único servidor.

Em publish/subscribe, os assinantes são notificados assincronamente; quando o evento de interesse ocorre, eles são notificados por meio da execução de um determinado método. Por outro lado, quando se usa uma fila de mensagens, os servidores — isto é, os consumidores das mensagens — têm que puxar (pull) as mensagens da fila.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Quais são os 5 princípios que devem ser seguidos pelos testes de unidade? Qual acrônimo eles formam?

A

Os princípios FIRST:

  • Rápidos (Fast): Testes são executados com frequência e por isso devem levar na ordem de milissegundos para serem executados.
  • Independentes: A ordem de execução dos testes não pode influenciar seus resultados.
  • Determinísticos (Repeatable): Testes de unidade devem ter sempre o mesmo resultado, não importa quantas vezes for executado. Testes com resultados não-determinísticos são chamados de Testes Flaky (ou Testes Erráticos) e uma das principais responsáveis por esse comportamento é a concorrência.
  • Auto-verificáveis (Self-checking): O resultado de um teste de unidades deve ser facilmente verificável.
  • Escritos o quanto antes (Timely), se possível antes mesmo do código que vai ser testado.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Dê três exemplos de test smells

A

Teste Obscuro: é um teste longo, complexo e difícil de entender.

Um Teste com Lógica Condicional inclui código que pode ou não ser executado. Isso é considerado um smell porque prejudica o entendimento do teste.

Duplicação de Código em Testes ocorre, como o próprio nome sugere, quando temos código repetido em diversos métodos de teste.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

O que são testes caixa-preta e testes caixa-branca? Que outra nomenclatura eles possuem?

A

Testes caixa-preta (também chamados de testes funcionais) leva em conta apenas o que o método é e o que ele faz. Testes caixa-branca (também chamados de testes estruturais) verificam também como ele faz.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Qual a diferença entre testes alfa e testes beta?

A

Testes alfa são testes de aceitação manuais realizados com alguns usuários, mas em um ambiente controlado, como a própria máquina do desenvolvedor.

Se o sistema for aprovado nos testes alfa, pode-se realizar um teste beta com um grupo maior de usuários e não mais em um ambiente controlado.

17
Q

Cite três exemplos de Testes de Requisitos Não-Funcionais.

A
  • Testes de Desempenho : verificam o comportamento de um sistema com alguma carga (por exemplo, grande quantidade de usuários acessando simultaneamente o sistema).
  • Testes de Usabilidade são usados para avaliar a interface do sistema e, normalmente, envolvem a observação de usuários reais usando o sistema.
  • Testes de Falhas simulam eventos anormais em um sistema como a queda de algum serviço.
18
Q

Cite e explique de forma sucinta três refactorings descritos por Martin Fowler.

A
  • Extração de Método: remover um trecho grande de código de um método e transformá-lo em outro método.
  • Inline de Método: mover um método pequeno para dentro de outro método.
  • Movimentação de Método: mover um método de uma classe A para uma classe B.
  • Extração de Classes: Remover métodos e atributos de uma classe A e usá-los para criar uma classe B
  • Renomeação: Dar um nome mais significativo a um identificador.
19
Q

Cite e explique de forma sucinta três dos principais code smells.

A
  • Código duplicado: quando dois trechos são idênticos e possuem o mesmo significado semântico, fazendo com que qualquer alteração em um precise ser replicada no outro.
  • Métodos Longos: Quando um método possui mais de 20 linhas.
  • Classes Longas: Classes com muitos atributos com baixa coesão entre eles.
  • Feature Envy: Quando uma classe A acessa mais métodos e atributos de outra classe B do que de si própria.
  • Métodos com Muitos Parâmetros: Quando um método possui mais parâmetros que o necessário.
  • Variáveis Globais: Variáveis declaradas no Escopo Global
  • Obsessão por Tipos Primitivos: Quando se usa tipos primitivos mesmo quando uma classe funcionaria melhor (exemplo, definir CPF como string ao invés de uma classe que possa validá-lo).
  • Classes de Dados: Classes que possuem só dados e nenhum método para manipulá-los.