Skip to content

06 - Levantamento de Requisitos e Caso de Uso

Sistema: Aplicativo de Delivery de Comida ("FastDelivery")


1. Identificação dos Stakeholders

  • Clientes: Pessoas que fazem pedidos.
  • Restaurantes: Estabelecimentos parceiros.
  • Entregadores: Responsáveis pela logística.
  • Administrador: Gerencia o sistema.

2. Requisitos Funcionais (Exemplos)

ID Descrição Prioridade
RF01 O cliente deve poder buscar restaurantes por nome, categoria ou localização. Alta
RF02 O restaurante deve poder atualizar seu cardápio no sistema. Média
RF03 O entregador deve receber notificações de novos pedidos. Alta

3. Requisitos Não Funcionais

  • Performance: O app deve carregar em menos de 3 segundos.
  • Segurança: Dados de pagamento criptografados (PCI Compliance).
  • Usabilidade: Interface intuitiva (testes com usuários reais).

4. Exemplo de Caso de Uso

UC01 - Realizar Pedido

  • Atores: Cliente, Sistema.

  • Pré-condição: Cliente está logado e com localização ativa.

  • Fluxo Principal:

  • Cliente seleciona um restaurante.
  • Cliente adiciona itens ao carrinho.
  • Cliente escolhe a forma de pagamento (cartão/PIX).
  • Sistema confirma o pedido e notifica o restaurante.

  • Fluxos Alternativos:

  • FA1: Pagamento recusado → Sistema sugere nova tentativa ou outro método.

  • FA2: Restaurante indisponível → Sistema recomenda opções similares.

  • Pós-condição: Pedido é registrado e entra na fila de preparo.


5. Protótipo (Exemplo Simplificado)

  • Tela de Busca: Barra de pesquisa + filtros (vegan, rápido, etc.).
  • Carrinho: Resumo dos itens + botão "Finalizar Pedido".

6. Validação

  • Workshop com Restaurantes: Confirmar se o fluxo de atualização de cardápio é viável.
  • Teste A/B com Clientes: Comparar duas versões do checkout para melhorar conversão.

--

Diagrama de Casos de Uso

Aqui está o diagrama de Caso de Uso (UML) para o cenário de "Realizar Pedido" no aplicativo de delivery, usando PlantUML:

Código PlantUML:

ClienteRestaurante (Sistema)EntregadorUC01: Realizar PedidoSelecionar RestauranteAdicionar Itens ao CarrinhoEscolher PagamentoConfirmar PedidoNotificar RestauranteNotificar EntregadorPagamento RecusadoRestaurante IndisponívelPré-condição: Cliente logado.Pós-condição: Pedido registrado.«include»«extend»«extend»«extend»
ClienteRestaurante (Sistema)EntregadorUC01: Realizar PedidoSelecionar RestauranteAdicionar Itens ao CarrinhoEscolher PagamentoConfirmar PedidoNotificar RestauranteNotificar EntregadorPagamento RecusadoRestaurante IndisponívelPré-condição: Cliente logado.Pós-condição: Pedido registrado.«include»«extend»«extend»«extend»

Explicação:

  1. Atores:
  2. Cliente: Interage com o sistema para fazer pedidos.
  3. Restaurante (Sistema): Recebe notificações de pedidos.
  4. Entregador: Recebe alertas para coleta/entrega.

  5. Fluxo Principal (dentro do caso de uso UC01):

  6. Selecionar Restaurante → Adicionar Itens → Escolher Pagamento → Confirmar Pedido.

  7. Relacionamentos:

  8. <<include>>: "Confirmar Pedido" requer "Notificar Restaurante".
  9. <<extend>>: Fluxos alternativos (pagamento recusado/restaurante indisponível).

  10. Notas: Condições do cenário.


Visualização do Diagrama:

(Se estiver usando uma IDE como VS Code com extensão PlantUML, o código acima gerará um diagrama similar a este:)

+-------------+       +---------------------+
|   Cliente   |       |  Restaurante (Sist) |
+-------------+       +---------------------+
      |                         ^
      v                         |
+---------------------+         |
| UC01: Realizar Pedido|         |
| 1. Selecionar Rest. |         |
| 2. Adicionar Itens  |         |
| 3. Escolher Pagamento|        |
| 4. Confirmar Pedido |----------
+---------------------+  <<include>> 
      |                         
      v                         
+---------------------+         +---------------+
|   Pagamento Recusado |<<extend|  Notificar    |
|   Rest. Indisponível |         | Entregador   |
+---------------------+         +---------------+
                                      ^
                                      |
                              +---------------+
                              |   Entregador  |
                              +---------------+

Dica:


Protótipo

Aqui está o protótipo de telas do aplicativo de delivery usando Salt (PlantUML), alinhado ao caso de uso anterior:


Código PlantUML (Salt)

FastDelivery - Buscar Restaurantes🔍 Buscar...Filtros ▼Restaurante A⭐ 4.5Restaurante B⭐ 4.2Restaurante C⭐ 4.7Ver CardápioVoltar
FastDelivery - Buscar Restaurantes🔍 Buscar...Filtros ▼Restaurante A⭐ 4.5Restaurante B⭐ 4.2Restaurante C⭐ 4.7Ver CardápioVoltar
Restaurante A - CardápioPizza MargheritaR$ 35.00Hambúrguer ArtesanalR$ 28.00Salada CaesarR$ 22.00Adicionar ao CarrinhoVoltar
Restaurante A - CardápioPizza MargheritaR$ 35.00Hambúrguer ArtesanalR$ 28.00Salada CaesarR$ 22.00Adicionar ao CarrinhoVoltar
Carrinho de ComprasPizza MargheritaR$ 35.00HambúrguerR$ 28.00Taxa de EntregaR$ 5.00TotalR$ 68.00Continuar para PagamentoEditar
Carrinho de ComprasPizza MargheritaR$ 35.00HambúrguerR$ 28.00Taxa de EntregaR$ 5.00TotalR$ 68.00Continuar para PagamentoEditar
PagamentoCartão Crédito (•••• 1234)PIXDinheiro na EntregaFinalizar PedidoCancelar
PagamentoCartão Crédito (•••• 1234)PIXDinheiro na EntregaFinalizar PedidoCancelar
Pedido Confirmado!! Pedido #1234 recebido!"Tempo estimado:" 30-40 min.Acompanhar PedidoVoltar ao Início
Pedido Confirmado!! Pedido #1234 recebido!"Tempo estimado:" 30-40 min.Acompanhar PedidoVoltar ao Início

Telas Prototipadas (Fluxo do Caso de Uso)

  1. Buscar Restaurantes:
  2. Barra de busca + filtros.
  3. Lista de restaurantes com seleção (radio buttons).

  4. Cardápio do Restaurante:

  5. Itens selecionáveis com preços.
  6. Botão para adicionar ao carrinho.

  7. Carrinho:

  8. Resumo dos itens + valor total.
  9. Ação para prosseguir ao pagamento.

  10. Pagamento:

  11. Opções de pagamento (cartão, PIX, dinheiro).
  12. Confirmação do pedido.

  13. Confirmação:

  14. Feedback de sucesso + tempo de entrega.

Como Visualizar

  • Cole o código em ferramentas como:
  • PlantText (suporte a Salt).
  • VS Code com extensão PlantUML.

Exemplo de Saída (Estilizada)

FastDelivery - Buscar Restaurantes🔍 Buscar...Filtros ▼Restaurante A⭐ 4.5Restaurante B⭐ 4.2Ver CardápioVoltar
FastDelivery - Buscar Restaurantes🔍 Buscar...Filtros ▼Restaurante A⭐ 4.5Restaurante B⭐ 4.2Ver CardápioVoltar

Personalização

  • Para adicionar mais telas (ex.: login, acompanhamento de entrega):
Login"E-mail:" [ ]"Senha:" [ ]EntrarCriar Conta
Login"E-mail:" [ ]"Senha:" [ ]EntrarCriar Conta

Diagrama de Classe

Aqui está o diagrama de classes conceitual para o sistema de delivery, representando os principais conceitos e seus relacionamentos:

Diagrama de Classes (PlantUML)

Clienteid: Stringnome: Stringemail: Stringlocalizacao: StringbuscarRestaurantes()fazerPedido()Restauranteid: Stringnome: Stringcardapio: List<Item>localizacao: StringatualizarCardapio()confirmarPedido()Pedidoid: Stringitens: List<Item>status: StringvalorTotal: DoublecalcularTotal()atualizarStatus()Itemid: Stringnome: Stringpreco: Doublecategoria: StringEntregadorid: Stringnome: Stringveiculo: StringaceitarPedido()atualizarLocalizacao()Pagamentoid: Stringmetodo: Stringvalor: Doublestatus: StringprocessarPagamento()10..*10..*11..*1110..110..*
Clienteid: Stringnome: Stringemail: Stringlocalizacao: StringbuscarRestaurantes()fazerPedido()Restauranteid: Stringnome: Stringcardapio: List<Item>localizacao: StringatualizarCardapio()confirmarPedido()Pedidoid: Stringitens: List<Item>status: StringvalorTotal: DoublecalcularTotal()atualizarStatus()Itemid: Stringnome: Stringpreco: Doublecategoria: StringEntregadorid: Stringnome: Stringveiculo: StringaceitarPedido()atualizarLocalizacao()Pagamentoid: Stringmetodo: Stringvalor: Doublestatus: StringprocessarPagamento()10..*10..*11..*1110..110..*

Explicação:

  1. Classes Principais:
  2. Cliente: Realiza pedidos e busca restaurantes.
  3. Restaurante: Oferece itens do cardápio e confirma pedidos.
  4. Pedido: Agrupa itens, calcula total e rastreia status.
  5. Item: Produtos individuais do cardápio.
  6. Entregador: Responsável pela entrega.
  7. Pagamento: Processa transações.

  8. Relacionamentos:

  9. Um cliente faz 0 ou N pedidos.
  10. Um pedido contém 1 ou N itens.
  11. Um restaurante tem 0 ou N itens no cardápio.
  12. Cada pedido tem exatamente 1 pagamento.
  13. Um pedido pode estar associado a 0 ou 1 entregador.

  14. Atributos e Métodos:

  15. Atributos privados (indicados por -) e métodos públicos (+).
  16. Exemplo: Pedido.calcularTotal() soma os preços dos itens.

Visualização Esperada:

+-------------+       +-------------+       +-------------+
|   Cliente   |       | Restaurante |       |  Entregador |
+-------------+       +-------------+       +-------------+
| - id        |       | - id        |       | - id        |
| - nome      |       | - nome      |       | - nome      |
| - email     |       | - cardapio  |       | - veiculo   |
| - localizacao|      | - localizacao|      +------------+
+-------------+       +-------------+             ^
      |                   |                      |
      | 1              1  |                      | 0..1
      v                   v                      |
+-------------+       +-------------+       +-------------+
|   Pedido    |       |    Item     |       |  Pagamento  |
+-------------+       +-------------+       +-------------+
| - id        |       | - id        |       | - id        |
| - itens     |       | - nome      |       | - metodo    |
| - status    |       | - preco     |       | - valor     |
| - valorTotal|       | - categoria |       | - status    |
+-------------+       +-------------+       +-------------+
      | 1..*               ^                      ^ 1
      |____________________|                      |

Adaptações Possíveis:

  1. Adicionar Herança:

    Usuarioid: Stringnome: StringClientelocalizacao: StringEntregadorveiculo: String
    Usuarioid: Stringnome: StringClientelocalizacao: StringEntregadorveiculo: String

  2. Incluir Enums (ex.: status do pedido):

    StatusPedidoEM_PREPAROEM_TRANSITOENTREGUEPedidostatus: StatusPedido
    StatusPedidoEM_PREPAROEM_TRANSITOENTREGUEPedidostatus: StatusPedido