Pular para o conteúdo principal

Questão de Engenharia de Software — Geral — VUNESP 2023

Engenharia de SoftwareGeral
Código
vu197116
Banca
VUNESP
Órgão
Pref SBO
Ano
2023
Cargo
Ana ( )
Observe o diagrama de casos de uso utilizando UML 2.2 apresentado a seguir.   Assinale a alternativa que apresenta o caso de uso que sempre acompanha a execução de outro caso de uso.Imagem associada para resolução da questão
  1. AUpdate Customer Information.
  2. BMake Offer.
  3. CMake Payment Arrangements.
  4. DCreate New Customer.
  5. ERecord Sales Contract.
Revelar gabarito e comentário

GabaritoD — Create New Customer.

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

Diagrama de casos de uso: relacionamento de inclusão (include)

Gabarito: letra D. O caso de uso que "sempre acompanha a execução de outro caso de uso" é aquele ligado por um relacionamento de inclusão (<<include>>), em que o caso de uso base obrigatoriamente executa o caso incluído. No diagrama da questão, o caso de uso Create New Customer é incluído por Update Customer Information, Make Offer e Record Sales Contract — ou seja, sempre que qualquer um desses três é executado, o caso Create New Customer também é executado. É exatamente essa a definição do relacionamento de inclusão na UML 2.2.

O diagrama de casos de uso é uma das ferramentas mais importantes da engenharia de requisitos. Ele representa, de forma gráfica, as funcionalidades que o sistema oferece (os casos de uso, desenhados como elipses) e quem as utiliza (os atores, desenhados como bonecos-palito). Os atores ficam fora da fronteira do sistema, enquanto os casos de uso ficam dentro dela. Mas o que realmente interessa para esta questão são os relacionamentos entre casos de uso, que podem ser de três tipos: inclusão (<<include>>), extensão (<<extend>>) e generalização.

O relacionamento de inclusão é representado por uma seta tracejada com o estereótipo <<include>>, apontando do caso de uso base (o que inclui) para o caso de uso incluído. A semântica é de obrigatoriedade: sempre que o caso de uso base for executado, o caso incluído também será executado. É uma forma de fatorar comportamentos comuns a vários casos de uso, evitando duplicação. Por exemplo, em um sistema de vendas, os casos de uso "Registrar Venda" e "Registrar Devolução" podem ambos incluir o caso de uso "Validar Cliente" — sempre que qualquer um deles rodar, a validação do cliente também roda.

Já o relacionamento de extensão (<<extend>>) tem semântica opcional e condicional. A seta tracejada com o estereótipo <<extend>> aponta do caso de uso de extensão (o que estende) para o caso de uso base (o que é estendido). O caso de uso de extensão só é executado quando uma condição específica é satisfeita, e ele adiciona comportamento ao caso de uso base. Por exemplo, o caso de uso "Registrar Venda" pode ser estendido por "Aplicar Desconto Especial", que só ocorre se o cliente for VIP. A confusão entre <<include>> e <<extend>> é a pegadinha clássica da banca: no <<include>>, o caso incluído é sempre executado; no <<extend>>, o caso de extensão é executado apenas sob condição.

A generalização entre casos de uso é análoga à generalização entre classes: um caso de uso filho herda o comportamento do caso de uso pai e pode adicionar ou sobrescrever partes dele. É representada por uma seta com ponta vazada (triângulo), apontando do caso de uso filho para o caso de uso pai.

Na questão, o diagrama mostra três casos de uso — Update Customer Information, Make Offer e Record Sales Contract — todos com uma seta <<include>> apontando para Create New Customer. Isso significa que, para atualizar informações de um cliente, fazer uma oferta ou registrar um contrato de venda, é obrigatório primeiro criar o novo cliente (ou seja, o caso de uso "Create New Customer" sempre acompanha a execução desses outros três). As demais alternativas são casos de uso que são acompanhados pelo caso incluído, e não o caso que acompanha.

Guarde a distinção central: no relacionamento de inclusão, o caso incluído é sempre executado quando o caso base é executado; no relacionamento de extensão, o caso de extensão é executado apenas se uma condição for atendida. É exatamente essa fronteira que separa a alternativa correta das incorretas.

Alternativa A — ❌ Incorreta

Update Customer Information é um caso de uso que inclui o caso Create New Customer. Ou seja, ele é o caso de uso base, que sempre executa o caso incluído. A alternativa inverte o papel: ela afirma que ele é o caso que acompanha, quando na verdade ele é o caso que é acompanhado. O caso que sempre acompanha a execução de outro é o Create New Customer.

Alternativa B — ❌ Incorreta

Make Offer também é um caso de uso base que inclui Create New Customer. Assim como a alternativa A, ela apresenta um caso de uso que é acompanhado, não o que acompanha. A relação <<include>> parte de Make Offer e chega em Create New Customer, indicando que este último é o caso incluído, sempre executado.

Alternativa C — ❌ Incorreta

Make Payment Arrangements não aparece no diagrama como um caso de uso que inclui Create New Customer. A alternativa tenta confundir o candidato com um caso de uso que não possui o relacionamento de inclusão com o caso central. O caso que sempre acompanha a execução de outro é Create New Customer, não Make Payment Arrangements.

Alternativa D — ✅ Correta ⟵ GABARITO

Create New Customer é o caso de uso que recebe as setas <<include>> de Update Customer Information, Make Offer e Record Sales Contract. Isso significa que ele é o caso de uso incluído, e que sempre é executado quando qualquer um desses três casos de uso base é executado. A definição de inclusão na UML é exatamente essa: o caso incluído acompanha obrigatoriamente a execução do caso base. Portanto, Create New Customer é o caso de uso que sempre acompanha a execução de outro caso de uso.

Alternativa E — ❌ Incorreta

Record Sales Contract é outro caso de uso base que inclui Create New Customer. Assim como as alternativas A e B, ela apresenta um caso de uso que é acompanhado, não o que acompanha. A seta <<include>> parte de Record Sales Contract e chega em Create New Customer, indicando que este último é o caso incluído, sempre executado.

NÃO CAIA NESSA!

A banca explora a confusão entre os relacionamentos de inclusão (<<include>>) e extensão (<<extend>>). No <<include>>, o caso incluído é sempre executado; no <<extend>>, o caso de extensão é executado apenas sob condição. Além disso, a banca inverte o papel dos casos de uso: as alternativas A, B e E apresentam os casos de uso base (que incluem) como se fossem os casos que acompanham, quando na verdade o caso que acompanha é o incluído (Create New Customer). Com treino, você identifica essa inversão de papéis de longe 💪.

PEGA ESSA DICA!

Para resolver questões de relacionamento entre casos de uso, identifique primeiro o estereótipo da seta (<<include>> ou <<extend>>). Se for <<include>>, o caso de uso apontado pela seta é o que sempre acompanha a execução do caso de uso de origem. Se for <<extend>>, o caso de uso na origem da seta é o que pode ser executado sob condição. Guarde a regra: a seta <<include>> aponta para o caso que é sempre executado.

Gabarito: letra D

Link permanente: /questoes/vu197116