Aula 05 - Testes, TDD, DDD, Clean Code Flashcards

1
Q

O que é o JUnit?

A

Definição prática: Conjunto de classes em Java que você estende para criar um ambiente de testes automatizados.
1. Cada teste é implementado por meio de um objeto, então um executor testa todos.
2. Com ele, pode ser verificado se cada método de uma classe funciona
da forma esperada.

Definição conceitual: framework Open Source de teste de unidade para a linguagem de programação Java, criado por Erich Gamma e Kent Beck, com suporte à criação de testes automatizados na linguagem de programação Java.

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

O que é um workbench de testes?

A

Conjunto integrado de ferramentas para apoiar o processo de teste.

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

Quais tipos de ferramentas um workbench de testes pode incluir? Resuma cada um.

A

-Frameworks de Testes: apoiam a execução

-Gerenciador de Teste: gerencia a execução de testes

-Gerenciador de Dados de Teste: gera dados de teste para o programa ser testado

-Comparador de Arquivos: compara os resultados dos testes de programa com os resultados de testes anteriores e relata as diferenças entre elas

-Oráculo: gera previsões de resultados de teste esperados

-Gerador de Relatórios: fornece recursos de definição e de geração de relatórios.

-Analisador Dinâmico: adiciona código ao programa para contar o número de vezes em que cada declaração foi executada

-Simulador: simulam uma máquina real na qual o programa será executado

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

Julgue o item a seguir:

O JUnit é um método de testes de software do padrão xUnit voltado para sistemas desenvolvidos em linguagem Java

A

Correto. O JUnit é um framework de código aberto para automação de testes unitários desenvolvido para a linguagem Java. Este framework tem por base o xUnit, que é o nome dado a uma família de frameworks de testes para diversas plataformas

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

Julgue o item a seguir:

Os métodos de teste devem ser anotados pela anotação @Test

A

Correto.

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

Quais são as annotations do JUnit 5?

A

@Test
@ParameterizedTest
@RepeatedTest
@TestFactory
@TestTemplate
@TestClassOrder
@Nestedteste
@TestMethodOrder
@FixMethodOrder
@TestInstance
@DisplayName
@DisplayNameGeneration
@BeforeEach
@AfterEach
@BeforeAll
@AfterAll
@AfterAllstatic
@Nested
@Tag
@Disabled
@Timeout
@ExtendWith
@RegisterExtension
@TempDir
@EnabledIf
@DisabledIf
@EnabledOnOs/@DisabledOnOs
@EnabledIfSystemProperty/@DisabledIfSystemProperty
@DisabledIfEnvironmentVariable/@EnabledIfEnvironmentVariable

As definições de cada uma estão na página 9 do PDF, em formato tabela. (cai em prova)

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

Quais annotations se tornaram obsoletas no JUnit 4 e quais seus equivalentes no JUnit 5?

A

ANTIGO -> NOVO
@Before = @BeforeEach
@After = @AfterEach
@BeforeClass = @BeforeAll
@AfterClass = @AfterAll
@Ignore = @Disabled
@Category = @Tag
@RunWith = @ExtendWith
@Rule = @ExtendWith
@ClassRule = @RegisterExtension

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

Julgue o item a seguir:

Ao contrário das versões anteriores do JUnit, o JUnit 5 é composto por vários módulos diferentes de três subprojetos diferentes: Plataforma JUnit + JUnit Jupiter + JUnit Vintage

A

Correto.

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

Julgue o item a seguir:

A Plataforma JUnit serve como base para lançar estruturas de teste na JVM. Ele também define a TestEngineAPI para desenvolver uma estrutura de teste que é executada na plataforma. Além disso, a plataforma fornece um Console Launcher para iniciar a plataforma a partir da linha de comando e o JUnit Platform Suite Engine para executar um conjunto de testes personalizado usando um ou mais
mecanismos de teste na plataforma.

A

Correto. (E esses conceitos caem em prova)

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

Julgue o item a seguir:

JUnit Jupiter é a combinação do modelo de programação e do modelo de extensão para escrever testes e extensões no JUnit 5. O subprojeto Jupiter fornece um TestEngine para executar testes baseados em Jupiter na plataforma.

A

Correto.

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

Julgue o item a seguir:

JUnit Vintage fornece um TestEngine para executar testes baseados em JUnit 3 e JUnit 4 na plataforma. Requer que o JUnit 4.12 ou posterior esteja presente no caminho da classe ou no caminho do módulo.

A

Correto.

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

Julgue o item a seguir:

Toda classe de teste é uma subclasse da classe TestCase que é declarada no pacote do JUnit.framework localizado no arquivo JUnit.jar

A

Correto

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

Qual a composição das classes de testes do JUnit?

A

(verificar)

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

Dentre as limitações do JUnit, está a dificuldade de aplicar um critério de teste e a necessidade de compilar as classes para funcionar.

A

Errado. O JUnit tem diversas limitações, herdadas das ferramentas de teste de unidade em geral, como aplicar um critério de teste, dificuldade de executar teste de GUI com eficiência, de escrever alguns testes para EJB, criar estatísticas de teste e escalabilidade de criação de casos de teste. O JUnit, porém, tem a capacidade de executar testes tanto em arquivos .java (não compilados) quanto em arquivos .class (classes compiladas Java, em bytecode).

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

O que é o Selenium?

A

Selenium é um projeto abrangente de várias ferramentas e bibliotecas para automação de navegadores da web.

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

Julgue o item a seguir:

O WebDriver não exige que sua API seja compilada com o código do aplicativo, portanto, você está testando o mesmo aplicativo que envia aos ambientes de produção.

A

Correto. O WebDriver usa APIs de automação de navegador disponibilizadas por fornecedores de navegador para controlar e executar testes. É como se um usuário real o estivesse operando.

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

Quais são as principais funcionalidades do Selenium?

A

Ele fornece extensões para emular a interação do usuário com navegadores, um servidor de distribuição para dimensionar a alocação do navegador e a infraestrutura para implementações da especificação W3C WebDriver que permite escrever código intercambiável para todos os principais navegadores da web.

18
Q

O que é o Apache JMeter?

A

É um software de código aberto 100% Java puro projetado para realizar teste de performance, carga e stress.

19
Q
A
20
Q

Recursos do JMeter

A
  • Capacidade de carregar e testar o desempenho de diversos tipos de
    aplicativos/servidores/protocolos:
  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
  • Webservices SOAP / REST
  • FTP
  • Banco de dados via JDBC
  • LDAP
  • Middleware orientado a mensagens (MOM) via JMS
  • Correio - SMTP(S), POP3(S) e IMAP(S)
  • Comandos nativos ou scripts de shell
  • TCP
  • Objetos Java
  • IDE de teste completo que permite a gravação rápida do plano de teste(de navegadores ou aplicativos nativos), construção e depuração de arquivos.
  • Modo CLI
  • Relatório HTML completo
  • Estrutura multi-threading completa
  • Núcleo altamente extensível com plugins e ferramentas como Maven, Gradle e Jenkins
21
Q

-Jest, Jasmine
-Mockito
-TestLink

A apostila cita essas ferramentas de teste, mas apenas conceitualmente porque não caiu em prova.

A

(verificar mais a respeito depois)

22
Q

O que é o TDD?

A

É uma técnica de desenvolvimento de software incremental onde o programador escreve casos de testes antes de cada nova funcionalidade que irá incrementar.

23
Q

Quais são as etapas do TDD?

A
  1. Escrever testes
  2. Executar os testes e esperar que falhem
  3. Codificar a funcionalidade
  4. Executar os testes e esperar que passem
  5. Refatorar o código
24
Q

Julgue o item a seguir:

Escrever testes com JUnit torna a inicialização da aplicação lenta, pois terá que executar todos os testes toda vez que rodar a aplicação.

A

Errado. Os testes são incorporados em um programa separado da aplicação principal e são executados a critério do desenvolvedor.
O TDD recomenda que o desenvolvedor execute todos os testes assim que uma nova funcionalidade for implementada e, com o JUnit, é possível executar centenas de testes separados em poucos segundos.

25
Q

Julgue o item a seguir:

Um dos benefícios mais importantes do desenvolvimento orientado a testes é que ele reduz os custos dos testes de regressão.

A

Correto. O teste de regressão é muito caro e muitas vezes impraticável quando um sistema é testado manualmente, pois os custos de tempo e esforço são muito altos. No entanto, os testes automatizados, que são fundamentais para o desenvolvimento test-first, reduzem drasticamente os custos dos testes de regressão.

26
Q

O que é o BDD?

A

É uma técnica de desenvolvimento Ágil que combina elementos do TDD e DDD, onde desenvolvedores usam sua língua nativa em combinação com uma linguagem ubíqua que lhes permite concentrar nas razões pelas quais o código deve ser criado, e não em detalhes técnicos.

É uma maneira para que as equipes de software trabalharem que fecha a lacuna entre “pessoas de negócios” e “pessoas técnicas” por:
* Incentivar a colaboração entre as funções para construir um entendimento compartilhado do problema a ser resolvido;
* Trabalhar em iterações rápidas e pequenas para aumentar o feedback e o fluxo de valor;
* Produzir documentação do sistema que é verificada automaticamente em relação ao comportamento do sistema

27
Q

Quais são as principais práticas do BDD?

A

− Envolver as partes interessadas no processo através de Outside-in Development.
− Usar exemplos para descrever o comportamento de uma aplicação ou unidades de código.
− Automatizar os exemplos para prover um feedback rápido e testes de regressão.
− Usar o verbo deve (should) ao descrever o comportamento de software para ajudar a esclarecer
responsabilidades e permitir que funcionalidades sejam questionadas.
− Usar dublês de teste (mocks, stubs, fakes, dummies, spies) para auxiliar na colaboração entre módulos e códigos que ainda não foram escritos.
(retirado de uma questão da FCC)

28
Q

Quais são as etapas essenciais do BDD?

A
  • Primeiro, faça uma pequena mudança futura no sistema – uma história de usuário – e fale sobre exemplos concretos da nova funcionalidade para explorar, descobrir e concordar com os detalhes do que se espera que seja feito.
  • Em seguida, documente esses exemplos de uma maneira que possa ser automatizada e verifique se há concordância.
  • Por fim, implemente o comportamento descrito por cada exemplo documentado, começando com um teste automatizado para orientar o desenvolvimento do código.
29
Q

Qual a diferença entre BDD e TDD?

A

O BDD é uma evolução do desenvolvimento orientado a testes (TDD), mas com uma distinção importante — é outside-in.

O TDD garante que os desenvolvedores estejam escrevendo testes automatizados para seu código, eles estão pensando nisso de dois ângulos diferentes. A fraqueza do TDD é que os desenvolvedores estão testando se o código funciona da maneira que pretendem, em vez de testar se o código faz o que seus requisitos dizem que deve fazer.

Já no BDD, A maioria das estruturas de teste gera saída em formato legível por humanos. Isso proporciona uma redução drástica em uma importante fonte de erros – má interpretação dos requisitos. À medida que revisam os documentos de requisitos, eles escrevem testes “vazios”, definindo o conjunto completo de testes que esperam realizar – uma declaração explícita de sua
compreensão dos requisitos. Quando o BA revisa este resultado do teste, ele pode confirmar que os requisitos foram comunicados de forma eficaz.

30
Q

O que é o ATDD?

A

Análogo ao desenvolvimento orientado a testes, TDD, o Desenvolvimento Orientado a Testes de Aceitação (ATDD) envolve membros da equipe com diferentes perspectivas (cliente, desenvolvimento, teste) colaborando para escrever testes de aceitação antes da implementação da funcionalidade correspondente.

31
Q

Qual a diferença entre TDD e ATDD?

A

O desenvolvimento orientado a testes está relacionado, mas é diferente do desenvolvimento orientado a testes de aceitação (ATDD). TDD é principalmente uma ferramenta do desenvolvedor para ajudar a criar uma unidade de código bem escrita (função, classe ou módulo) que executa corretamente um conjunto de operações. ATDD é uma ferramenta de comunicação entre o cliente,
desenvolvedor e testador para garantir que os requisitos estejam bem definidos. TDD requer automação de teste. ATDD não, embora a automação ajude nos testes de regressão. Testes usados em TDD geralmente podem ser derivados de testes ATDD, uma vez que as unidades de código implementam alguma parte de um requisito. Os testes ATDD devem ser legíveis pelo cliente. Testes TDD não precisam ser.

32
Q

Julgue o item a seguir:

O Desenvolvimento Orientado a Testes de Aceitação (ATDD) é uma técnica de teste automática.

A

Errado. ATDD não é uma técnica de teste automática, mas sim uma convenção precisa de gerenciamento de requisitos e desenvolvimento de software

33
Q

Quais as etapas do ATDD?

A

−Discutir (Discuss): discussão colaborativa com a equipe visando elicitar os critérios de aceitação.
− Refinar (Distill): refinamento dos critérios de aceitação em um conjunto concreto de cenários/exemplos de uso descrevendo o comportamento esperado da aplicação em uma linguagem comum a todos os membros da equipe.
− Desenvolver (Develop): transformação dos testes de aceitação (descrevendo o comportamento esperado do software) em testes/especificação automatizados.

34
Q

O que é DDD?

A

Design Orientado ao Domínio (Domain-Driven Design – DDD) é uma abordagem de desenvolvimento em que o software, incluindo o código-fonte, será reflexo da modelagem de abstrações de problemas e regras de negócios reais, os denominados domínios.

35
Q

Julgue o item a seguir:

A respeito do DDD, para ter um software que atenda perfeitamente a um determinado domínio, é desnecessário que se estabeleça, em primeiro lugar, uma Linguagem Ubíqua.

A

Errado. Para ter um software que atenda perfeitamente a um determinado domínio, é necessário que se estabeleça, em primeiro lugar, uma Linguagem Ubíqua, ou Linguagem comum, com termos bem definidos, que fazem parte do domínio do negócio e que são usados por todas as pessoas que fazem parte do processo de desenvolvimento de software.

36
Q

A apostila cita conceitos de Naked Objects, mas não aprofunda e portanto ficou muito difícil de entender

A

(verificar melhor depois)

37
Q

Questão conceitual sobre DDD:
(CESPE – Ministério da EconomiaI– 2020)
Acerca de DDD (domain driven design), julgue o item a seguir:

O bounded contexto é um limite conceitual do modelo, sendo considerado um delimitador de domínio.

A

Correto. Um bounded contexto é uma parte definida do software onde determinados termos, definições e regras se aplicam de maneira consistente, explicou Eric Evans em sua palestra na DDD Europe no
início de 2019.

38
Q

Questão conceitual sobre DDD:
(CESPE – STJ– 2018) Julgue o próximo item, relativo a model-view- controller (MVC), proxy reverso e representational state transfer (REST):

O domain-driven design é parte das práticas do princípio lean da engenharia ágil voltada a arquiteturas que devem ser conduzidas por requisitos técnicos subjacentes do sistema, e não por planejamento especulativo para um futuro que pode mudar.

A

Perfeita definição! De fato, O foco principal do DDD deve ser o domínio e domínios complexos devem estar baseados em um modelo. Ademais, o DDD procura reforçar conceitos e boas práticas relacionadas à OO como alinhamento do código com o negócio; favorecer reutilização; mínimo de acoplamento; independência da tecnologia

39
Q

Questão conceitual sobre DDD:
(ESAF – ESAF– 2015) O Domain-Driven Design – DDD utiliza o conceito de divisão do sistema em camadas. As camadas desse modelo são:

a) aplicação, apresentação, sessão, transporte, rede, enlace e física.
b) de apresentação, de negócio e de dados.
c) do modelo, da visualização e de controle.
d) domínio de usuário, domínio de negócio e domínio de dados.
e) interface com usuário, aplicação, domínio e infraestrutura

A

Gab: Letra E

40
Q

Questão conceitual sobre DDD:
(CESPE – STJ– 2015) Acerca de arquitetura de software e Domain-Driven Design, julgue o seguinte item.

Domain-Driven Design pode ser aplicada ao processo de concepção arquitetural de um sistema de software, sendo que domain, em um software, designa o campo de ação, conhecimento e influência.

A

Perfeito! Domain ou domínio, em um software, designa o campo de ação, conhecimento e influência.

41
Q

Questão conceitual sobre DDD:
(CESPE – MPOG– 2013) Com relação às metodologias ágeis de desenvolvimento, julgue os itens a seguir.

De acordo com os padrões de DDD (domain-driven design), ao se escrever um novo sistema para também interagir com um sistema legado (considerado um código de difícil manutenção), cria-se uma camada entre os dois sistemas denominada camada anticorrupção.

A

Correto, a Camada Anti-corrupção ocorre quando temos um sistema legado, com código muito bagunçado e uma interface complexa, e estamos escrevendo um sistema novo com o código razoavelmente bem feito, criamos uma camada entre esses dois sistemas. O nosso sistema novo e bem-feito falará com essa camada, que possui uma interface bem-feita