Geral

Gerência e Qualidade de Software

Semana 1 8

#1

Leia o cenário a seguir:
Durante o desenvolvimento de uma aplicação colaborativa, os desenvolvedores A e B estão trabalhando em branches distintas, feature-a e feature-b, respectivamente. O desenvolvedor A realiza alterações no arquivo config.py, enquanto o desenvolvedor B faz modificações no mesmo arquivo, mas em um trecho diferente de código. Quando ambos tentam realizar o git merge de suas branches na branch main, ocorre um conflito, pois ambos alteraram a mesma linha de código no arquivo config.py.
Com relação a este contexto e sobre o conteúdo estudado, avalie as asserções a seguir e a relação proposta entre elas:
I. Quando um conflito é detectado após um comando git merge, o desenvolvedor deve realizar o comando git reset --hard para voltar ao estado anterior ao merge e recomeçar o processo de resolução do conflito.
PORQUE
II. O comando git diff pode ser utilizado durante a resolução de um conflito para visualizar as diferenças entre a versão atual do arquivo e a versão que será integrada, permitindo que o desenvolvedor veja claramente as modificações feitas por outros colaboradores.
A respeito dessas asserções, assinale a alternativa correta:

A

A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.

B

As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.

C

As asserções I e II são falsas.

D

A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.

E

As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

#2

Qual comando da ferramenta Git é usado para copiar os commits mais recentes do repositório local para o repositório remoto? 

A

Clone. 

B

Commit. 

C

Add.

D

Push. 

E

Pull. 

#3

Qual comando da ferramenta Git é usado para criar snapshots (ou fotografias) dos arquivos de um sistema e armazená-las no sistema de controle de versões? 

A

Clone. 

B

Add. 

C

Commit. 

D

Push. 

E

Pull. 

#4

Um desenvolvedor está trabalhando em uma aplicação que contém duas branches principais: main e feature/login. Ele está desenvolvendo uma nova funcionalidade na branch feature/login e, durante esse processo, percebeu que algumas alterações não foram devidamente confirmadas antes de trocar para a branch main. Após realizar algumas correções na branch main, ele decide voltar para a branch feature/login e retomar seu trabalho. Porém, ao tentar realizar o git merge feature/login de volta para a branch main, ele se depara com um conflito. Ele também nota que a branch feature/login está com alguns arquivos que não deveriam ser parte do commit, e ele precisa removê-los da área de stage.
Com base neste cenário, sobre a sequência correta de comandos para resolver os problemas e retomar o desenvolvimento da maneira mais adequada, analise as afirmativas a seguir:
  1. Retornar para a branch feature/login para corrigir a área de stage e retirar os arquivos indesejados.
  2. Utilizar o comando git restore --staged <arquivo> para remover os arquivos da área de stage.
  3.  Após limpar a área de stage, retornar à branch main utilizando git checkout main.
  4. Com a branch main ativa, executar git merge feature/login para integrar as alterações.

Está correto o que se afirma em:

A

I, II, III e IV.

B

I, II e III, apenas.

C

I e III, apenas.

D

II e IV, apenas.

E

III e IV, apenas.

#5

Qual é o nome do comando que representa uma solicitação para que um desenvolvedor revise e, se for o caso, realize o merge de um branch que outro desenvolvedor criou?

A
pull request
B
push order
C
merge request
D
add order
E
clone suggestion
#6

Durante a validação de uma função criada para automatizar uma rotina comum no sistema, foram definidos alguns testes com base em diferentes combinações de entrada. O trecho de código abaixo representa a lógica usada para atualizar o status de um pedido: def processar_pedido(pedido): if pedido["pago"]: if pedido["estoque"] > 0: pedido["status"] = "Confirmado" else: pedido["status"] = "Aguardando Estoque" else: pedido["status"] = "Pagamento Pendente" Foram aplicados os seguintes testes: • Teste 1: ("pago": True, "estoque": 5) • Teste 2: ("pago": True, "estoque":0} Com base nesses testes e no código apresentado, avalie as afirmativas a seguir: I. A linha pedido["status"] = "Pagamento Pendente" não foi executada em nenhum dos testes. II. O bloco if pedido["pago"]: foi testado tanto com o resultado verdadeiro quanto falso. III. A cobertura de declaração ainda não é total, pois nem todas as instruções foram executadas. IV. A adição de um teste com ("pago": False) permitiria alcançar 100% de statement coverage. Está correto o que se afirma em:

A
II, III e IV, apenas.
B
I, II, III e IV.
C
III e IV, apenas.
D
I, III e IV, apenas.
E
I, II e III, apenas.
#7

Durante o desenvolvimento de um projeto colaborativo em equipe, Mariana foi encarregada de iniciar o controle de versão utilizando o Git. No terminal, ela criou o repositório com o comando [Preencher 1], adicionou os arquivos necessários com o comando [Preencher 2] e, por fim, registrou as mudanças com o comando [Preencher 3]. Ao concluir, comunicou a equipe que o projeto já estava versionado e pronto para receber contribuições por meio de push e pull. Neste contexto, identifique os termos de [preencher 1], [preencher 2] e [preencher 3] que são substituídos por:

A
1-git status, 2-git init, 3 - git pull
B
1-git init; 2-git add; 3- git commit
C
1-git commit, 2-git status; 3- git add
D
1-git push; 2- git pull; 3- git status
E
1-git add, 2-git commit, 3 - git push
#8

Durante o desenvolvimento de um sistema para uma pequena empresa de logística, a equipe identificou que o cálculo de prazo de entrega estava implementado de formas diferentes em diversos pontos do código. Algumas variações causavam resultados inconsistentes. Para resolver isso, o time decidiu aplicar refatoração: extraiu a lógica repetida para uma única função reutilizável, reorganizou os arquivos por responsabilidade e criou testes automatizados. Com relação a este contexto e sobre o conteúdo estudado, analise as asserções a seguir e a relação proposta entre elas: I. A decisão de centralizar a lógica de cálculo de prazo em uma única função refatorada melhora a qualidade do sistema, pois evita comportamentos divergentes e facilita futuras atualizações, PORQUE II. ao aplicar refatoração com base na identificação de código duplicado em pontos críticos, a equipe melhora a previsibilidade do sistema e reduz o tempo necessário para localizar e corrigir erros. A respeito dessas asserções, assinale a alternativa correta:

A
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
B
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
C
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
D
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
E
As asserções I e III são falsas.

Semana 2 10

#1

Qual é o objetivo do arquivo CMakeLists.txt? 

A

Conter os scripts de integração da aplicação a serem executados pela ferramenta cmake. 

B

Conter o roteiro de teste para criação de scripts de teste a serem executados pela ferramenta cmake. 

C

Conter o roteiro usado pela ferramenta cmake para criar os scripts de compilação da aplicação. 

D

Conter os scripts de compilação da aplicação a serem executados pela ferramenta cmake.

E

Conter scripts de teste automatizados para serem executados pela ferramenta cmake. 

#2

Qual alternativa a seguir mostra apenas diretórios usados pela estrutura padrão de projetos criado pela ferramenta Maven?

A

“src/main/java”, “src/main/resources”, “src/test/java”, “src/pom” e “target”. 

B

“src/main/java”, “src/test/java”, “src/main/resources”, “src/pom” e “target”.

C

“src/main/java”, “src/test/java”, “src/main/resources”, “src/test/resources” e “target”. 

D

“src/test/java”, “src/main/resources”, “src/test/resources”, “src/pom” e “target”. 

E

“src/main/java”, “src/test/java”, “src/test/resources”, “src/pom” e “target”. 

#3

Leia o trecho a seguir:
No desenvolvimento de aplicações Java, é comum recorrer a ferramentas que auxiliam na automação da configuração do projeto e no gerenciamento de bibliotecas externas. Uma das soluções mais utilizadas para isso é o Maven, que facilita a inclusão automática de dependências, padroniza a estrutura dos projetos, permite a realização de builds e oferece suporte ao controle de versões.
Com base no uso do Maven no contexto de desenvolvimento de projetos Java, observe as afirmativas a seguir:
  1. O Maven permite automatizar o processo de build de aplicações, definindo fases como compilação, teste e empacotamento.
  2. Com o Maven, todas as dependências de um projeto precisam ser adicionadas manualmente ao diretório de bibliotecas da aplicação.
  3. A configuração principal de um projeto Maven é feita no arquivo pom.xml, que define dependências, plugins e outras configurações.

Está correto o que se afirma em:

A

II e III, apenas.

B

I e III, apenas.

C

I, II e III.

D

I, apenas.

E

I e II, apenas.

#4

Qual o nome do arquivo que contém as configurações básicas para o projeto Gradle a serem usadas na compilação automática?

A

compile.build. 

B

compile.gradle. 

C

build.gradle. 

D

gradle.compile.

E

gradle.build.

#5

Qual é o comando usado para criar e inicializar um novo build do Gradle? 

A

grade build.

B

gradle init.

C

grade begin.

D

grade create.

E

grade start. 

#6

Durante o desenvolvimento de projetos em Java, especialmente em ambientes colaborativos, é fundamental contar com ferramentas que automatizem o processo de construção e gerenciem dependências. O Gradle é uma dessas ferramentas modernas que se destaca por sua flexibilidade e desempenho. Ele utiliza uma abordagem baseada em [preencher 1] para definir e organizar tarefas de construção, permitindo automações personalizadas. Além disso, o Gradle possui integração nativa com repositórios [preencher 2], facilitando a resolução automática de bibliotecas externas e otimizando o fluxo de trabalho. Neste contexto, identifique os termos de [preencher 1] e [preencher 2] que são substituídos por:

A
1-bibliotecas; 2 - temporários
B
1-interface gráfica: 2 - de código-fonte
C
1-scripts; 2 - remotos
D
1-arquivos XML; 2 - internos da IDE
E
1-linha de comando: 2 - privados
#7

Durante a configuração de um projeto C++ com múltiplos arquivos-fonte e diretórios, o uso de CMake tornou-se essencial para automatizar a geração do projeto e controlar o processo de compilação de forma eficiente. O desenvolvedor deseja compilar um executável principal, organizar os arquivos em subdiretórios e incluir bibliotecas externas de forma modular, mantendo clareza e reutilização no projeto. Considerando práticas reais de uso do CMake nesse contexto, analise as afirmativas a seguir: I. O comando add_subdirectory() permite incluir subdiretórios que contenham seus próprios arquivos CMakeLists.txt, possibilitando a organização modular de bibliotecas ou partes da aplicação. II. A instrução target_include_directories() pode ser usada para especificar diretórios de cabeçalhos para um alvo específico, evitando que os includes precisem ser definidos globalmente. III. A função find_package() permite localizar bibliotecas externas instaladas no sistema, mas seu uso depende da existência de módulos de configuração apropriados para cada biblioteca. IV. O comando add_executable() deve ser utilizado apenas dentro de subdiretórios, e não no diretório principal do projeto, onde apenas configurações globais devem ser declaradas. Está correto o que se afirma em:

A
I, III e IV, apenas
B
I, II e IV, apenas
C
I, II e III, apenas
D
I e III, apenas
E
I, II, III e IV
#8

Durante o desenvolvimento de projetos em linguagens como Java, torna-se fundamental adotar práticas que facilitem o gerenciamento de dependências externas, além de organizar e automatizar tarefas recorrentes, como compilação, empacotamento e execução de testes. Para isso, é comum a utilização de ferramentas que padronizam o ciclo de construção do software e centralizam a configuração desses processos. Com base nisso, assinale a alternativa que identifica a principal função do Maven em um projeto Java:

A
Gerar o código-fonte automaticamente a partir de uma interface gráfica
B
Compilar o projeto apenas quando um novo branch é criado
C
Criar arquivos JAR com interface gráfica incorporada ao código-fonte
D
Gerenciar dependências e automatizar o processo de compilação, testes e empacotamento
E
Realizar o controle de acesso de usuários no ambiente de desenvolvimento
#9

Durante a configuração de um projeto corporativo Java com múltiplos módulos, a equipe de desenvolvimento percebeu que o tempo de build estava excessivamente alto e que cada alteração em um módulo disparava a recompilação completa de todos os módulos dependentes, mesmo sem necessidade. O projeto usava Gradle, mas não havia uma configuração otimizada para builds incrementais. Com relação a este contexto e sobre o conteúdo estudado, avalie as asserções a seguir e a relação proposta entre elas: I. A estrutura modular de um projeto Gradle, quando mal configurada, pode causar recompilações desnecessárias, impactando diretamente a performance do build. PORQUE II. A ausência de declaração explícita de dependências entre módulos impede que o Gradle execute builds incrementais com eficiência, pois ele não consegue identificar o que mudou de fato. A respeito dessas asserções, assinale a alternativa correta:

A
As asserções I e II são falsas
B
As asserções I e II são proposições verdadeiras, e a Il é uma justificativa da I
C
A asserção I é uma proposição falsa, e a Il é uma proposição verdadeira
D
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I
E
A asserção I é uma proposição verdadeira, e a Il é uma proposição falsa
#10

Joana está desenvolvendo um sistema em C++ que será utilizado em diferentes sistemas operacionais. Para facilitar a portabilidade e automatizar a criação dos arquivos de compilação, ela decide usar o CMake. No diretório raiz do projeto, ela cria um arquivo chamado CMakeLists.txt e, a partir dele, gera os arquivos de build para diferentes ambientes, utilizando, em seguida, comandos específicos para compilação e execução. Com base na situação descrita e nos conhecimentos sobre o funcionamento do CMake, observe as afirmativas abaixo: I. O uso do CMakeLists.txt permite que Joana defina quais arquivos-fonte serão incluídos na compilação, bem como o nome do executável resultante. II. A execução do comando make após o CMake é possível porque o CMake gerou um Makefile compatível com o sistema da Joana. III. O CMake substitui o compilador, realizando a compilação do projeto de forma independente, sem precisar do make ou do gcc. Está correto o que se afirma em:

A
I e II, apenas
B
II e III, apenas
C
I e III, apenas
D
I, II e III
E
I, apenas

Semana 4 12

#1

Leia o cenário abaixo:
Em um sistema de software, o desenvolvedor deseja garantir que todas as declarações do código estejam sendo testadas adequadamente. A ideia é identificar trechos de código que não estão sendo testados, para garantir que todo o comportamento esperado do sistema seja validado.
Com relação à aplicação da cobertura de declaração em testes automatizados, observe as afirmativas a seguir:
  1. A cobertura de declaração assegura que todas as linhas de código foram executadas, mas não garante que a lógica do código foi testada corretamente.
  2. A cobertura de declaração é suficiente para garantir que todas as possíveis condições e caminhos lógicos do código foram testados.
  3. Para garantir uma validação completa do comportamento do código, a cobertura de declaração deve ser complementada com a cobertura de ramo e de caminho, que avaliam a lógica e os diferentes cenários do código.

Está correto o que se afirma em:

A

I, II e III.

B

I e II, apenas.

C

I e III, apenas.

D

II e III, apenas.

E

I, apenas.

#2

Em um processo de desenvolvimento de software, é importante medir a cobertura dos testes para garantir que o código foi devidamente validado. A cobertura de testes refere-se à medida em que as linhas de código, condições ou caminhos foram executados durante a execução dos testes. Diferentes tipos de cobertura de testes podem ser utilizados, como cobertura de declaração, de ramo, de caminho e de condição.
Com base nesse conceito, observe e associe os tipos de cobertura de testes às suas respectivas descrições. 
Tipos de cobertura de testesDescrições
I. Cobertura de DeclaraçãoA. Mede a execução de todas as linhas de código, sem considerar as condições lógicas ou ramificações.
II. Cobertura de RamoB. Avalia a execução de todos os caminhos possíveis no código, levando em consideração as várias combinações de decisões e ramificações.
III. Cobertura de CaminhoC. Mede a execução de todos os ramos de uma estrutura de decisão, como instruções if e switch, considerando se todas as possibilidades foram verificadas.
IV. Cobertura de CondiçãoD. Verifica se todas as condições dentro das expressões lógicas foram avaliadas para todos os seus valores possíveis (verdadeiro ou falso).

Assinale a alternativa que apresenta a associação correta:

A

I-B; II-D; III-C; IV-A.

B

I-A; II-C; III-B; IV-D.

C

I-A; II-C; III-D; IV-B.

D

I-D; II-B; III-A; IV-C.

E

I-C; II-A; III-B; IV-D.

#3

Que tipo de análise de cobertura pode ser realizada com a ferramenta Coverage.py?

A

apenas statement(comando), branch (ramo). 

B

apenas statement (comando), branch (ramo), condition (condição).

C

apenas statement(comando), function (função), branch (ramo). 

D

apenas function (função), condition (condição).

E

statement (comando), function(função), branch(ramo), condition(condição). 

#4

Qual é o objetivo da refatoração “extrair método”? 

A

Usar uma variável temporária no lugar de uma atribuição a um parâmetro. 

B

Transformar um fragmento de código que pode ser agrupado em um método cujo nome explique o seu propósito.

C

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. 

D

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.

E

Substituir o corpo de um método por novo algoritmo que seja mais claro. 

#5

Em um sistema de software, o desenvolvedor está buscando melhorar a legibilidade do código e reduzir a duplicação de código em várias funções semelhantes. Para isso, ele decide aplicar o conceito de refatoração, tornando o código mais limpo, fácil de manter e entender.
Sobre a situação em destaque, assinale a alternativa que reconhece uma abordagem adequada de refatoração:

A

O desenvolvedor poderia adicionar comentários em todas as linhas de código, explicando o que cada uma faz, sem alterar a estrutura do código.

B

O desenvolvedor poderia agrupar as funções semelhantes em uma única função, melhorando a clareza e a reutilização do código, mantendo a funcionalidade.

C

O desenvolvedor poderia remover todas as funções repetidas sem analisar o impacto no comportamento do sistema, para reduzir o tamanho do código.

D

O desenvolvedor poderia renomear as variáveis para palavras mais complicadas, para aumentar a complexidade e o nível de sofisticação do código.

E

O desenvolvedor poderia manter as funções como estão, pois a complexidade do código não impacta seu funcionamento ou a lógica geral.

#6

Marque a alternativa que contém uma afirmação correta em relação ao uso de JaCoCo. 

A

Não pode ser usado para testes de integração.

B

Não pode ter valores limiares de cobertura atribuídos. 

C

Pode ser usado em conjunto com Maven e com Gradle. 

D

Deve ser usado apenas para testes de sistema/aceitação. 

E

Precisa ser necessariamente usado em conjunto com a ferramenta Quarkus CLI.

#7

Sobre limiares (thresholds) dos valores de cobertura de teste, é correto afirmar que:

A

apenas um limiar deve ser informado para todos os tipos de cobertura, por exemplo, statemente branch. 

B

limiares são fixados a 90% de cobertura. 

C

countersignifica o tipo de cobertura, sendo line e branch, tanto para Maven quanto para Gradle. 

D

com Gradle, é possível informar classes a serem excluídas da verificação dos limiares.

E

esse limiar significa o valor máximo de cobertura esperado que um teste deve obter.

#8

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”? 

 

A

Remover atribuições a parâmetros. 

B

Substituir variável temporária por consulta. 

C

Introduzir variável explicativa. 

D

Dividir variável temporária.

E

Extrair método. 

#9

O que é cobertura de condição (condition coverage)? 

A

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. 

B

Medida que informa quantas linhas de código foram executadas pelo conjunto de testes e quantas linhas de código não foram executadas. 

C

Medida que informa se cada ramificação de uma instrução de controle foi executada. 

D

Medida que informa quantas variáveis definidas foram usadas. 

E

Medida que informa quais funções foram chamadas e quais funções não foram chamadas. 

#10

Uma equipe de desenvolvedores está utilizando o Coverage.py para medir a cobertura de testes de seu código. O objetivo é garantir que o código esteja sendo amplamente testado, para evitar falhas e garantir o bom funcionamento do sistema. Durante a análise, a equipe percebe que algumas partes do código não estão sendo cobertas pelos testes, o que pode resultar em falhas inesperadas.
Com base nesse cenário, assinale a alternativa que identifica o uso do Coverage.py:

A

O Coverage.py mostra a cobertura de código em tempo real, indicando imediatamente quais partes do código precisam de mais testes.

B

A ferramenta Coverage.py é usada para medir o número de falhas encontradas durante a execução dos testes, ajudando a identificar erros no código.

C

O Coverage.py é usado para monitorar o tempo de execução dos testes, sem fornecer informações sobre a cobertura de código.

D

O Coverage.py indica a porcentagem de linhas de código não executadas durante os testes, mas não fornece detalhes sobre falhas específicas.

E

O Coverage.py é uma ferramenta de depuração que ajuda a corrigir erros de código automaticamente, garantindo que o código esteja livre de falhas.

#11

Leia o trecho a seguir:
Com o uso de ferramentas como o JaCoCo, torna-se possível avaliar aspectos importantes do teste de software, como a parte do código que ainda não foi verificada e o nível com que os testes percorrem diferentes possibilidades. Esses recursos facilitam a identificação de [preencher 1] não testados e oferecem uma visão mais clara sobre a [preencher 2] alcançada pelos testes.
Neste contexto, reconheça os termos de [preencher 1] e [preencher 2] que são substituídos por:

A

1 - instruções; 2 - intensidade.

B

1 - caminhos; 2 - profundidade.

C

1 - blocos; 2 - abrangência.

D

1 - métodos; 2 - consistência.

E

1 - falhas; 2 - cobertura.

#12

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”? 

A

Substituir variável temporária por consulta. 

B

Dividir variável temporária. 

C

Extrair método.

D

Remover atribuições a parâmetros.

E

Introduzir variável explicativa.

Semana 5 8

#1

Pelas boas práticas de “clean code”, o ideal é que nossas funções recebam no máximo quantos parâmetros? 

A

5

B

4

C

1

D

2

E

3

#2

Uma equipe de desenvolvimento de software está trabalhando em um sistema de gestão escolar. Para cada nova funcionalidade implementada, é necessário garantir que os testes automatizados sejam executados rapidamente, de forma a verificar se nenhuma funcionalidade anterior foi quebrada. 
Com base nessa situação, assinale a alternativa que reconhece a prática adotada pela equipe:

A

Refatoração de código com reexecução manual de testes após o deploy em produção.

B

Integração contínua com execução automatizada de testes a cada mudança no código.

C

Entrega contínua com testes automatizados exclusivamente ao final de cada sprint.

D

Teste de aceitação feito antes do início da codificação.

E

Programação em par com foco em revisão manual de testes.

#3

Qual alternativa a seguir apresenta corretamente uma boa prática de “clean code? 

A

Cada função deve fazer apenas coisas relacionadas. 

B

Nomes de métodos devem ter adjetivos. 

C

Evite efeitos colaterais.

D

Esconda o propósito ao nomear as coisas. 

E

Nomes de classes devem ter verbos.

#4

Em um time de desenvolvimento ágil, os desenvolvedores utilizam uma pipeline de integração contínua com testes automatizados. A cada push no repositório, o servidor dispara testes unitários e de integração. Porém, um erro causou instabilidade em outras partes do sistema e exigiu um rollback de emergência.
Com base na situação apresentada, observe as afirmativas a seguir:
  1. O problema poderia ter sido evitado se houvesse testes de integração mais completos na pipeline, validando a interação entre os módulos afetados.
  2. Os testes unitários, por si só, são suficientes para garantir que não ocorram erros em produção quando todos passam corretamente.
  3. A eficácia da integração contínua depende da qualidade dos testes; se forem superficiais, falhas críticas ainda podem passar despercebidas.

Está correto o que se afirma em:

A

I, apenas.

B

I e III, apenas.

C

I e II, apenas.

D

II e III, apenas.

E

I, II e III.

#5

Durante o desenvolvimento de software, é comum que as equipes utilizem métricas para avaliar a qualidade do código produzido. Tais métricas podem indicar não apenas o tamanho do sistema, mas também aspectos como sua complexidade, legibilidade e manutenibilidade. Entre essas métricas, podemos citar a contagem de linhas de código, a [preencher 1] ciclomática e a densidade de [preencher 2], que ajudam os times a identificar pontos que merecem atenção, facilitando o aprimoramento contínuo do código.
Neste contexto, identifique os termos de [preencher 1] e [preencher 2] que são substituídos por:

A

1 – legibilidade; 2 – testes.

B

1 – modularidade; 2 – versões.

C

1 – complexidade; 2 – defeitos.

D

1 – complexidade; 2 – comentários.

E

1 – arquitetura; 2 – integrações.

#6

Leia o texto a seguir:
"O desenvolvimento de software exige não só que o programa funcione, mas que seja compreensível e sustentável ao longo do tempo. O código limpo não é apenas uma escolha estética, mas uma prática que favorece a colaboração, a manutenção e a evolução de sistemas complexos."

DUARTE, Abraão. Clean Code: boas práticas. dev.to, 2021. Disponível em: https://dev.to/abraaoduarte/clean-code-boas-praticas-19n0. Acesso em: 14 mai. 2025.
No contexto do desenvolvimento de software, não basta que um sistema apenas funcione corretamente. À medida que projetos crescem em escala e complexidade, torna-se essencial que o código produzido seja claro, bem estruturado e de fácil manutenção. Essa preocupação vai além da funcionalidade imediata, refletindo um compromisso com a qualidade a longo prazo e com o trabalho colaborativo dentro das equipes de desenvolvimento.
Com base nesse contexto e no conteúdo estudado, avalie as asserções a seguir e a relação proposta entre elas:
I. Os métodos curtos, com nomes significativos e objetivos claros, facilitam a manutenção do código ao permitir que qualquer desenvolvedor entenda rapidamente o que está sendo feito, reduzindo a dependência de comentários.
PORQUE
II. Um dos pilares do código limpo é escrever métodos longos e detalhados, já que isso garante a explicação completa das regras de negócio e dispensa a necessidade de documentação externa.
A respeito dessas asserções, assinale a alternativa correta:

A

As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.

B

A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.

C

As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.

D

A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.

E

As asserções I e II são falsas.

#7

Uma equipe de desenvolvimento está revisando o código de um novo projeto. Durante a revisão, foi identificado um método com o nome f1() que calcula o valor final de um pedido com base em impostos e descontos aplicados. Além disso, havia uma classe chamada C1 que agrupava funções relacionadas a pagamentos e envio de produtos. A equipe decidiu refatorar os nomes para refletirem com mais clareza a responsabilidade de cada elemento no código.
Com base nos princípios de código limpo, assinale a alternativa que reconhece a forma de melhorar a legibilidade desse código:

A

A equipe poderia manter os nomes originais e criar um documento separado explicando o que cada método e classe faz no projeto.

B

A equipe poderia manter os nomes curtos, pois códigos mais compactos tendem a ser mais fáceis de digitar e entender rapidamente.

C

A equipe poderia remover o método f1() e distribuir sua lógica entre outras funções menores, mesmo que os nomes não representem diretamente suas funcionalidades.

D

A equipe poderia renomear o método f1() para calcularValorFinalPedido() e a classe C1 para ProcessadorDePagamento, refletindo suas responsabilidades.

E

A equipe poderia adicionar comentários detalhados explicando a função do método f1() e a estrutura da classe C1, mantendo os nomes atuais.

#8

Durante o desenvolvimento de um sistema para uma clínica médica, diversos dilemas éticos surgem para os engenheiros de software envolvidos. A equipe precisa tomar decisões que envolvem desde a privacidade dos dados dos pacientes até a entrega de funcionalidades sob pressão. Esse contexto exige dos profissionais consciência de sua responsabilidade ética e técnica no exercício da função.
Com base nesse cenário e nos princípios éticos da engenharia de software, observe e associe as situações abaixo aos princípios éticos que as representam.
Princípios ÉticosSituações
I. Confiabilidade e qualidade do produto.A. Um engenheiro se recusa a implementar um mecanismo que permitiria ao gestor acessar históricos médicos dos pacientes sem o consentimento deles.
II. Privacidade e respeito às informações dos usuários.B. Diante de um prazo apertado, a equipe opta por entregar uma versão do sistema sem testes mínimos, mesmo sabendo que há risco de falhas em prontuários.
III. Responsabilidade social e proteção do bem-estar público.C. Uma desenvolvedora denuncia anonimamente um colega que modificava registros clínicos a pedido da administração para evitar processos legais.
IV. Lealdade à equipe e respeito à hierarquia da empresa.D. Um engenheiro revisa cuidadosamente o código para evitar vulnerabilidades que poderiam expor dados sigilosos, mesmo isso levando mais tempo.

Assinale a alternativa que apresenta a associação correta:

A

I-B; II-D; III-C; IV-A

B

I-D; II-A; III-B; IV-C

C

I-D; II-A; III-C; IV-B

D

I-B; II-C; III-A; IV-D

E

I-C; II-B; III-D; IV-A

Semana 7 5

#1

Leia o trecho a seguir:
Durante o desenvolvimento de um sistema web, a equipe de testes automatizados decidiu utilizar o JaCoCo para acompanhar a cobertura de código em seus testes de unidade. Após configurar corretamente o plugin no arquivo pom.xml, foi gerado um relatório detalhado em HTML. No entanto, ao revisar o relatório, notaram que vários métodos estavam com cobertura zero, mesmo após a execução bem-sucedida dos testes. Um dos analistas, então, sugeriu que a equipe verificasse se os testes estavam [preencher 1] corretamente e se o relatório estava sendo [preencher 2] na pasta configurada no projeto.
Neste contexto, identifique os termos de [preencher 1] e [preencher 2] que são substituídos por:

A

1 – executados; 2 – ignorado.

B

1 – escritos; 2 – apagado.

C

1 – comentados; 2 – empacotado.

D

1 – depurados; 2 – interpretado.

E

1 – executados; 2 – gerado.

#2

Marque a alternativa abaixo que apresenta uma informação correta a respeito do “design centrado no usuário” de acordo com o autor Ricardo Dias. 

A

O projetista precisa evitar entrar em detalhes de regras de negócio. 

B

A pergunta mais importante a ser feita ao usuário é “o que você quer”.

C

O usuário deve ser representado pelo próprio cliente.

D

Usuários que já possuem muita prática tendem a passar as informações de forma muito genérica. 

E

O design centrado no usuário busca promover a colaboração entre implementador e usuário.

#3

Quais são as tags (@) JavaDoc? 

A

author, date, param, return, version.

B

author, param, return, see, version.

C

author, date, return, see, version.

D

author, date, param, return, see. 

E

author, date, param, see, version.

#4

Durante uma revisão de código em uma aplicação Java, o coordenador de qualidade observou que parte significativa das classes e métodos estava sem documentação adequada, dificultando o entendimento por novos membros da equipe. A recomendação foi implementar o uso do Javadoc e de outras estratégias que facilitassem a rastreabilidade técnica do sistema. Após algumas sprints, uma nova rodada de revisão foi feita para verificar se os ajustes estavam em conformidade com as boas práticas.
Com base nesse cenário, observe as afirmativas a seguir:
I. A adoção do Javadoc permite que comentários estruturados nos métodos e classes sejam convertidos em documentação navegável, facilitando a leitura técnica do sistema.
II. Mesmo com o uso do Javadoc, a qualidade da documentação depende da clareza e completude dos comentários inseridos pelos desenvolvedores.
III. A automatização por meio do Javadoc torna desnecessária a verificação manual da consistência entre código e documentação, já que a ferramenta garante a fidelidade entre ambos.
Está correto o que se afirma em:

A

I, II e III.

B

I, apenas.

C

I e II, apenas.

D

II e III, apenas.

E

I e III, apenas.

#5

O que é correto afirmar sobre MVC? 

A

Foi usado na implementação de Java.

B

É uma especialização do modelo de três camadas.

C

Foi proposto no final da década de 1990. 

D

A interface gráfica é representada pelos grupos visão + modelo.

E

Organiza as classes em três grupos: visão, controladores, modelo.