Pular para o conteúdo principal

Questão de Engenharia de Software — Geral — FUNDATEC 2025

Engenharia de SoftwareGeral
Código
qa700062
Banca
FUNDATEC
Órgão
UFRGS
Ano
2025
Cargo
Tec ( )
Um analista está modelando um sistema de biblioteca usando um Diagrama de Casos de Uso em UML. O analista identificou as seguintes funcionalidades:   1. “Fazer Login”: Deve ser executada obrigatoriamente antes de qualquer outra funcionalidade do sistema.   2. “Reservar Livro”: Esta funcionalidade possui um comportamento alternativo e opcional: se o livro estiver em situação de atraso, o usuário será notificado sobre a penalidade antes que a reserva seja concluída.   Qual é a correta representação UML para as interações entre os casos de uso “Fazer Login”, “Reservar Livro” e “Notificar Penalidade”?
  1. AUma relação de Extensão (<<extend>>) de "Reservar Livro" para "Fazer Login" e uma relação de Inclusão (≪include≫) de "Reservar Livro" para "Notificar Penalidade".
  2. BUma relação de Inclusão (<<includ>>) de "Reservar Livro" para "Fazer Login" e uma relação de Extensão (<<extend>>) de "Reservar Livro" para "Notificar Penalidade".
  3. CUma relação de Generalização (Herança) de "Reservar Livro" para "Fazer Login" e uma relação de Inclusão (≪include≫) de "Reservar Livro" para "Notificar Penalidade".
  4. DUma relação de Inclusão (<<include>>) de "Fazer Login" para "Reservar Livro" e uma relação de Extensão (<<extend>>) de "Reservar Livro" para "Notificar Penalidade".
  5. EUma relação de Extensão (<<extend>>) de "Fazer Login" para "Reservar Livro" e uma relação de Inclusão (<<include>>) de "Notificar Penalidade" para "Reservar Livro".
Revelar gabarito e comentário

GabaritoB — Uma relação de Inclusão (<<includ>>) de "Reservar Livro" para "Fazer Login" e uma relação de Extensão (<<extend>>) de "Reservar Livro" para "Notificar Penalidade".

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Relacionamentos entre casos de uso: include e extend

Gabarito: letra B. A relação entre “Reservar Livro” e “Fazer Login” é de inclusão (<<include>>), pois o login é obrigatório e sempre executado antes da reserva; já a relação entre “Reservar Livro” e “Notificar Penalidade” é de extensão (<<extend>>), pois a notificação é opcional e só ocorre em uma condição específica (livro em atraso). Essa distinção é o núcleo da questão.

No Diagrama de Casos de Uso da UML, os relacionamentos entre casos de uso são representados por três tipos principais: inclusão (<<include>>), extensão (<<extend>>) e generalização (herança). A inclusão indica que um caso de uso sempre inclui o comportamento de outro caso de uso em seu fluxo — o caso incluído é obrigatório e executado em todas as ocorrências do caso base. A extensão, por outro lado, indica que um caso de uso opcionalmente adiciona comportamento a outro, sob certas condições — o caso estendido é executado apenas quando a condição é satisfeita. A generalização representa uma relação de herança, onde um caso de uso é uma especialização de outro.

No enunciado, “Fazer Login” é obrigatório antes de qualquer outra funcionalidade, o que caracteriza uma relação de inclusão de “Reservar Livro” para “Fazer Login” (a reserva inclui o login). Já “Notificar Penalidade” é um comportamento alternativo e opcional, que só ocorre se o livro estiver em atraso — isso é exatamente o cenário de extensão: “Reservar Livro” estende “Notificar Penalidade” (a notificação é um comportamento opcional adicionado à reserva).

A pegadinha clássica da banca é inverter a direção das setas ou trocar os estereótipos. Lembre-se: a seta de <<include>> aponta do caso base para o caso incluído (o caso base depende do incluído), enquanto a seta de <<extend>> aponta do caso de extensão para o caso base (o caso de extensão depende do base). No caso, “Reservar Livro” é o caso base que inclui “Fazer Login” e que pode ser estendido por “Notificar Penalidade”.

NÃO CAIA NESSA!

A banca adora inverter a direção das setas ou trocar os estereótipos. Aqui, a alternativa D inverte a direção do include (colocando “Fazer Login” incluindo “Reservar Livro”), e a alternativa A troca os estereótipos (colocando extend onde deveria ser include e vice-versa). Fique atento: a seta de <<include>> aponta do caso base para o caso incluído; a de <<extend>> aponta do caso de extensão para o caso base.

Relação

Caso base

Caso dependente

Direção da seta

Obrigatoriedade

Inclusão (<<include>>)

Reservar Livro

Fazer Login

Reservar Livro → Fazer Login

Obrigatória (sempre executado)

Extensão (<<extend>>)

Reservar Livro

Notificar Penalidade

Notificar Penalidade → Reservar Livro

Opcional (sob condição)

Alternativa A — ❌ Incorreta

Inverte os estereótipos: coloca <<extend>> de “Reservar Livro” para “Fazer Login” (quando deveria ser <<include>>, pois o login é obrigatório) e <<include>> de “Reservar Livro” para “Notificar Penalidade” (quando deveria ser <<extend>>, pois a notificação é opcional).

Alternativa B — ✅ Correta ⟵ GABARITO

Representa corretamente: <<include>> de “Reservar Livro” para “Fazer Login” (login obrigatório) e <<extend>> de “Reservar Livro” para “Notificar Penalidade” (notificação opcional sob condição).

Alternativa C — ❌ Incorreta

Usa generalização (herança) entre “Reservar Livro” e “Fazer Login”, o que não se aplica: não há relação de especialização entre eles, e sim de inclusão obrigatória.

Alternativa D — ❌ Incorreta

Inverte a direção do include: coloca “Fazer Login” incluindo “Reservar Livro”, quando o correto é o contrário — a reserva inclui o login.

Alternativa E — ❌ Incorreta

Inverte a direção do extend: coloca “Fazer Login” estendendo “Reservar Livro” (não faz sentido) e ainda coloca “Notificar Penalidade” incluindo “Reservar Livro” (inverte o sentido da inclusão).

Gabarito: letra B

Link permanente: /questoes/qa700062