Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

4 
Análise de cobertura de teste e refatoração 
 
Olá, estudante! 
Nesta semana, continuaremos os estudos da disciplina Gerência e Qualidade de Software, avançando em seu 
objetivo de “conhecer e aplicar os conceitos práticos relacionados à qualidade de software e as diferentes 
métricas para a sua avaliação”. 
Para isso, nesta semana, continuaremos com o tema teste de software, porém com uma abordagem diferente, 
em que trataremos da análise de cobertura de teste, ainda com uma visão prática do assunto. Além disso, 
também trataremos do tema refatoração de software, com base em exemplos. 
Boa semana de estudo! 
Objetivos de aprendizagem 
Ao final dessa semana, você deverá ser capaz de: 
• Conhecer a análise de cobertura de teste via o uso de ferramenta; 
• Conhecer os principais tipos de refatoração de software. 
 
Revisitando Conhecimentos 
Esta videoaula apresenta uma visão geral dos princípios-chave da refatoração e algumas das questões que 
precisam ser consideradas ao usá-la. 
Engenharia de Software – Refatoração de software 
Uma alteração feita na estrutura interna do software para torna-lo mais fácil de ser entendido e menos 
custoso de ser modificado sem alterar seu comportamento observável. 
POR QUE REFATORAR? 
Melhorar o projeto do software. 
Torna o software mais fácil de entender. 
Ajuda a encontrar defeitos/ falhas. 
Ajuda a programar mais rapidamente. 
 
BENEFÍCIO DA REFATORAÇÃO 
Permite pensar em um projeto inicial que não representa a melhor solução, mas sim uma solução razoável. 
À medida que a solução é construída e o problema é melhor compreendido, uma solução melhor, diferente 
da original, pode ser percebida. 
QUANDO REFATORAR? 
Algo a ser feito o tempo todo, em pequenas quantidades. 
“Três vezes e você refatora!” 
Quando acrescentar funções. 
Quando precisar consertar um defeito. 
Quando estiver revisando o código. 
 
LIMITAÇÕES DA REFATORAÇÃO 
 
Difícil refatorar banco de dados. 
Difícil refatorar interfaces de objetos. 
Pode diminuir o desempenho do software. 
 
CATÁLOGO DE REFATORAÇÃO 
Compondo métodos 
Movendo recursos entre objetos 
Organizando dados 
Simplificando expressões condicionais 
Tornando as chamadas de métodos mais simples 
Lidando em generalização 
Refatorações grandes 
 
 Compondo métodos: 
1. Extrair método 
2. Internalizar método 
3. Internalizar variável temporária 
4. Substituir variável temporária por consulta 
5. Introduzir variável explicativa 
6. Dividir variável temporária 
7. Remover atribuições e a parâmetros 
8. Substituir método por objeto método 
9. Substituir o algoritmo 
 
Movendo recursos entre objetos: 
1. Mover método 
2. Mover campo 
3. Extrair classe 
4. Internalizar classe 
5. Ocultar delegação 
6. Remover intermediário 
7. Introduzir método externo 
8. Introduzir extensão local 
 
Organizando dados: 
1. Autoencapsular campo 
2. Substituir atributo por objeto 
3. Mudar de valor para referência 
4. Mudar de referência para valor 
5. Substituir valor por objeto 
6. Duplicar dados observados 
7. Transformar associação unidirecional em bidirecional 
8. Transformar associação bidirecional em unidirecional 
9. Substituir números mágicos por constantes simbólicas 
10. Encapsular campo 
 
Simplificando expressões condicionais: 
1. Decompor condicional 
2. Consolidar expressão condicional 
3. Consolidar fragmentos condicionais duplicados 
4. Remover flag de controle 
5. Substituir condição aninhada por cláusulas guarda 
6. Substituir comando condicional por polimorfismo 
7. Introduzir objeto nulo 
8. Introduzir asserção 
 
Tornando as chamadas de métodos mais simples 
1. Renomear método 
2. Acrescentar parâmetro 
3. Remover parâmetro 
4. Separar a pesquisa do modificador 
5. Parametrizar método 
6. Substituir parâmetro por métodos explícitos 
7. Preservar o objeto inteiro 
8. Substituir parâmetro por método 
9. Introduzir objeto parâmetro 
10. Remover método de gravação 
 
Lidando com generalização 
1. Subir campo na hierarquia 
2. Subir método na hierarquia 
3. Subir o corpo do construtor na hierarquia 
4. Descer método na hierarquia 
5. Descer campo na hierarquia 
6. Extrair subclasse 
7. Extrair superclasse 
8. Extrair interface 
9. Condensar hierarquia 
10. Criar um método padrão 
11. Substituir herança por delegação 
12. Substituir delegação por herança 
 
Refatorações grandes: 
1. Desembaraçar herança 
2. Converter projeto procedural em objetos 
3. Separar o domínio de apresentação 
4. Extrair hierarquia 
Orientação de estudos 
 
Nesta semana, há três videoaulas, sendo duas de demonstrações básicas do uso de duas ferramentas de 
análise de cobertura de teste – Coverage.py e JaCoCo – e uma com exemplos práticos de refatoração de 
código. Você pode assistir a elas nessa ordem. 
Há também materiais-base e materiais de apoio para ajudar você a usar as duas ferramentas, já que o 
objetivo é que você adquira uma visão prática delas e para aprender sobre outros exemplos de refatoração. 
 
Cobertura de testes – Coverage.py 
 
 PERGUNTA 1 
Qual foi o IDE usado para fazer a demonstração da ferramenta Coverage.py? 
o Pydev. 
o VS Code. 
 
o Atom. 
o Jupyter. 
o PyCharm. 
Você acertou! Essa é a alternativa correta. A demonstração da ferramenta Coverage.py foi realizada dentro da IDE 
PyCharm, embora a execução da ferramenta em si tenha sido realizada dentro do terminal da IDE. 
 
Cobertura de testes – JaCoCo 
 
PERGUNTA 1 
A ferramenta JaCoCo possibilita análise de cobertura de teste para qual linguagem de programação? 
o C#. 
o Java. 
o Ruby. 
o JavaScript. 
o PHP. 
 
Você acertou! Essa é a alternativa correta. Como o próprio nome da ferramenta já indica, JaCoCo (Java Code 
Coverage) possibilita análise de cobertura de teste para a linguagem de programação Java. 
 
Refatoração 
O QUE É REFATORAÇÃO 
Uma alteração feita na estrutura interna do software para torná-lo mais fácil de ser entendido e menos 
custoso de ser modificado, sem alterar seu comportamento observável. 
BENEFÍCIOS DA REFATORAÇÃO 
• Melhora o projeto do software. 
• Torna o software mais fácil de entender. 
• Ajuda a encontrar defeitos/falhas. 
• Ajuda a programar mais rapidamente. 
TIPOS DE REFATORAÇÃO 
• Compondo métodos 
• Movendo recursos entre objetos 
• Organizando dados 
• Simplificando expressões condicionais 
• Tornando as chamas de métodos mais simples 
• Lidando com generalização 
• Refatorações grandes 
EXEMPLO –COMPONDO MÉTODOS 
 
EXEMPLO –ORGANIZANDO DADOS 
 
EXEMPLO –SIMPLIFICANDO EXPRESSÕES CONDICIONAIS 
 
EXEMPLO –SIMPLIFICANDO EXPRESSÕES CONDICIONAIS 
 
EXEMPLO –TORNANDO MAIS SIMPLES AS CHAMADAS DE MÉTODOS 
 
EXEMPLO –LIDANDO COM GENERALIZAÇÃO 
 
 
PERGUNTA 1 
Qual é o primeiro exemplo de refatoração apresentado na videoaula? 
 
o Subir campo na hierarquia. 
o Renomear método. 
o Decompor condicional. 
o Extrair método. 
o Extrair classe. 
Você acertou! Essa é a alternativa correta. “Extrair método” é o primeiro exemplo de refatoração apresentado na 
videoaula. 
 
PERGUNTA 1 
Questão relacionada a: 
Texto-base 1: Improve Code Quality Using Test Coverage e Texto-base 2: Measuring the Coverage of your 
Tests 
Para que serve a ferramenta JaCoCo e Coverage.py? 
o Para realizar integração contínua automatizado. 
o Para realizar compilação e integração automatizadas. 
o Para realizar análise de cobertura de código durante teste de unidade. 
 
o Para realizar teste de sistema/aceitação automatizado. 
o Para realizar teste de unidade automatizado. 
 
Você acertou! Essa é a alternativa correta. JaCoCo e Coverage.py são ferramentas usadas para realizar análise de 
cobertura de código durante teste de unidade para código implementado em Java e Python, respectivamente. 
 
PERGUNTA 1 
Questão referente a Texto-base 3: Refatoração: Aperfeiçoando o projeto de código existente (Leia o capítulo 6, 
páginas97-123) | M. Fowler 
Qual alternativa abaixo apresenta um exemplo de refatoração do tipo “compondo métodos”? 
o Externalizar método. 
o Substituir consulta por variável temporária. 
o Extrair métodos. 
o Internalizar variável permanente. 
o Remover variável explicativa. 
 
Você acertou! Essa é a alternativa correta. “Extrair métodos” é o primeiro exemplo de refatoração do tipo “compondo 
métodos”, e todas as demais alternativas apresentam exemplos com nomes trocados. 
 
ATIVIDADE AVALIATIVA 
 
PERGUNTA 1 
Qual refatoração possui o objetivo de “extrair uma expressão, cujo resultado está sendo armazenado em uma 
variável temporária, para um método e substituir todas as referências à variável temporária pela expressão, para que 
este novo método possa então ser usado em outros métodos”? 
 
o Substituir variável temporária por consulta. 
o Remover atribuições a parâmetros. 
o Extrair método. 
o Dividir variável temporária. 
 
o Introduzir variável explicativa. 
PERGUNTA 2 
Qual refatoração possui o objetivo de “criar uma variável temporária separada para cada atribuição quando você tem 
uma variável temporária que mais de uma vez recebe uma atribuição, mas não é uma variável de laço nem um 
acumulador temporário”? 
o Extrair método. 
 
o Dividir variável temporária. 
o Substituir variável temporária por consulta. 
o Introduzir variável explicativa. 
 
o Remover atribuições a parâmetros. 
 
PERGUNTA 3 
Que tipo de análise de cobertura pode ser realizada com a ferramenta Coverage.py? 
 
o statement (comando), function (função), branch (ramo), condition (condição). 
o apenas statement (comando), branch (ramo). 
o apenas statement (comando), branch (ramo), condition (condição). 
o apenas statement (comando), function (função), branch (ramo). 
o apenas function (função), condition (condição). 
 
PERGUNTA 4 
Sobre limiares (thresholds) dos valores de cobertura de teste, é correto afirmar que: 
o com Gradle, é possível informar classes a serem excluídas da verificação dos limiares. 
o limiares são fixados a 90% de cobertura. 
o counter significa o tipo de cobertura, sendo line e branch, tanto para Maven quanto para Gradle. 
o apenas um limiar deve ser informado para todos os tipos de cobertura, por 
exemplo, statement e branch. 
o esse limiar significa o valor máximo de cobertura esperado que um teste deve obter. 
 
PERGUNTA 5 
Qual é o objetivo da refatoração “extrair método”? 
o Transformar um fragmento de código que pode ser agrupado em um método cujo nome explique o 
seu propósito. 
o Usar uma variável temporária no lugar de uma atribuição a um parâmetro. 
o Substituir o corpo de um método por novo algoritmo que seja mais claro. 
o Colocar o corpo de um método cujo nome é tão claro quanto seu corpo dentro do corpo do que o 
chama e remover o método. 
o Colocar o resultado de uma expressão complicada, ou partes da expressão, em uma variável 
temporária cujo nome explique o seu propósito. 
 
PERGUNTA 6 
Marque a alternativa que contém uma afirmação correta em relação ao uso de JaCoCo. 
o Pode ser usado em conjunto com Maven e com Gradle. 
o Precisa ser necessariamente usado em conjunto com a ferramenta Quarkus CLI. 
 
o Não pode ser usado para testes de integração. 
o Deve ser usado apenas para testes de sistema/aceitação. 
o Não pode ter valores limiares de cobertura atribuídos. 
 
PERGUNTA 7 
Marque a alternativa que apresenta apenas tipos de itens apresentados no relatório de cobertura da ferramenta 
Coverage.py. 
o o statements (comandos), missing (ausentes), included (incluídas), total (total). 
 
o o statements (comandos), lacking (faltantes), excluded (excluídas), total (total). 
 
o o statements (comandos), lacking (faltantes), included (incluídas), total (total). 
 
o o statements (comandos), missing (ausentes), excluded (excluídas), partial (parcial). 
 
o o statements (comandos), lacking (faltantes), included (incluídas), partial (parcial). 
 
PERGUNTA 8 
O que é cobertura de condição (condition coverage)? 
o o o Medida que informa se cada ramificação de uma instrução de controle foi executada. 
o o o Medida que informa se cada subexpressão booleana em um programa foi avaliada como 
verdadeira e falsa durante a execução de um conjunto de testes. 
o o o Medida que informa quantas linhas de código foram executadas pelo conjunto de testes e quantas 
linhas de código não foram executadas. 
o o o Medida que informa quantas variáveis definidas foram usadas. 
o o o Medida que informa quais funções foram chamadas e quais funções não foram chamadas. 
Aprofundando o tema 
Para aprofundar o tema, recomendo que você acesse o material a seguir: 
Material de apoio 1: The Ultimate List of Code Coverage Tools: 25 Code Coverage 
Tools for C, C++, Java, .NET, and More 
Material de apoio 2: Increase Test Coverage 
Material de apoio 3: An Intro to coverage.py 
Material de apoio 4: Intro to JaCoCo 
Material de apoio 5: JaCoCo Code Coverage of a Java Application from Remote Test 
Execution 
Material de apoio 6: JaCoCo Code Coverage with Maven 
Material de apoio 7: Refatoração: aperfeiçoando o projeto de código existente (Leia o 
capítulo 7, páginas 124-147) | M. Fowler 
Material de apoio 8: Refatoração: aperfeiçoando o projeto de código existente (Leia o 
capítulo 8, páginas 148-202) | M. Fowler 
Material de apoio 9: Refatoração: aperfeiçoando o projeto de código existente (Leia o 
capítulo 9, páginas 203-230) | M. Fowler 
Material de apoio 10: Refatoração: aperfeiçoando o projeto de código existente (Leia 
o capítulo 10, páginas 231-271) | M. Fowler 
Material de apoio 11: Refatoração: aperfeiçoando o projeto de código existente (Leia 
o capítulo 11, páginas 272-303) | M. Fowler 
 
https://stackify.com/code-coverage-tools/
https://stackify.com/code-coverage-tools/
https://devguide.python.org/testing/coverage/index.html
https://www.blog.pythonlibrary.org/2016/07/20/an-intro-to-coverage-py/
https://www.baeldung.com/jacoco
https://towardsdev.com/code-coverage-of-your-java-rest-application-using-jacoco-9c809a380711
https://towardsdev.com/code-coverage-of-your-java-rest-application-using-jacoco-9c809a380711
https://howtodoinjava.com/junit5/jacoco-test-coverage/
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/123
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/123
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/147
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/147
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/202
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/202
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/230
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/230
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/271
https://integrada.minhabiblioteca.com.br/reader/books/9788577804153/pageid/271

Mais conteúdos dessa disciplina