Questão de Engenharia de Software — Geral — VUNESP 2023
- Código
- vu197116
- Banca
- VUNESP
- Órgão
- Pref SBO
- Ano
- 2023
- Cargo
- Ana ( )

- AUpdate Customer Information.
- BMake Offer.
- CMake Payment Arrangements.
- DCreate New Customer.
- ERecord Sales Contract.

GabaritoD — Create New Customer.
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.
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.
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.
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.
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.
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.
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 💪.
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