Guia Extra: Engenharia de Software e Modelagem UML • Bloco 2: Requisitos e Processos em Modelo • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 7.1 — Identificar os Elementos

Contexto: “O pedido de compra de livros chega por e-mail. O setor de acervo analisa. Se o valor passar de R$ 5.000, a coordenação aprova; senão, segue direto. Aprovado, o setor financeiro emite o pagamento e o setor de acervo cadastra os livros quando chegarem.”

Requisitos de Execução:

  1. Liste: evento de início (e seu tipo), eventos de fim, tarefas, gateways (e seus tipos) e raias.

Resultado Esperado

Uma tabela com cada elemento BPMN encontrado.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_1_SeuNome.md
  2. Envie na tarefa: Atividade Cap 07 - Processos de Negócio com BPMN
🔑 Gabarito de Código & Solução Comentada
Elemento Encontrado
Evento de início Mensagem: “pedido chega por e-mail”
Tarefas Analisar pedido; Aprovar compra; Emitir pagamento; Cadastrar livros
Gateway Exclusivo (XOR): “valor > R$ 5.000?”
Evento intermediário Recebimento dos livros (mensagem) antes de cadastrar
Evento de fim Livros cadastrados (e, se houver, “compra reprovada”)
Raias Setor de acervo, Coordenação, Financeiro

🎯 Nível 2: Prática

Problema 7.2 — Desenhar o Processo de Compra

Contexto: O mesmo processo do Problema 7.1.

Requisitos de Execução:

  1. Desenhe o processo em Mermaid usando a aproximação do capítulo (subgrafos como raias, (( )) como eventos, losango com × como gateway exclusivo).
  2. Inclua o caminho de reprovação pela coordenação.

Resultado Esperado

Um diagrama com 3 raias, 1 gateway exclusivo de valor, 1 de aprovação e dois eventos de fim.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_2_SeuNome.md
  2. Envie na tarefa: Atividade Cap 07 - Processos de Negócio com BPMN
🔑 Gabarito de Código & Solução Comentada
flowchart LR
    subgraph ACV["Raia: Setor de acervo"]
        S(("Pedido por e-mail")) --> AN["Analisar pedido"]
        AN --> G1{"× Valor > R$ 5.000?"}
        REC(("Livros recebidos")) --> CAD["Cadastrar livros"] --> F1(((Fim: cadastrados)))
    end
    subgraph COO["Raia: Coordenação"]
        G1 -->|"sim"| AP["Aprovar compra"]
        AP --> G2{"× Aprovado?"}
        G2 -->|"não"| F2(((Fim: reprovado)))
    end
    subgraph FIN["Raia: Financeiro"]
        G1 -->|"não"| PG["Emitir pagamento"]
        G2 -->|"sim"| PG
        PG --> REC
    end

🎯 Nível 3: Integração

Problema 7.3 — AS-IS, Gargalos e TO-BE da Catalogação

Contexto: Hoje, cada livro novo é catalogado à mão: a bibliotecária digita título, autores e assunto (15 min por livro), imprime a etiqueta e leva à estante. Livros ficam em média 20 dias numa caixa antes de serem catalogados.

Requisitos de Execução:

  1. Desenhe o AS-IS.
  2. Aponte 2 gargalos.
  3. Proponha o TO-BE usando busca automática dos dados pelo ISBN numa base bibliográfica externa (que vira uma nova piscina, com fluxo de mensagem).
  4. Escreva 2 requisitos funcionais que surgem do TO-BE.

Resultado Esperado

Dois diagramas, a lista de gargalos e dois requisitos numerados.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_3_SeuNome.md
  2. Envie na tarefa: Atividade Cap 07 - Processos de Negócio com BPMN
🔑 Gabarito de Código & Solução Comentada
flowchart LR
    S((Livro chega)) --> CX["Esperar na caixa (média 20 dias)"] --> DG["Digitar dados (15 min)"] --> ET["Imprimir etiqueta"] --> ES["Levar à estante"] --> F(((Fim)))

Gargalos: a fila na caixa (20 dias) e a digitação manual (15 min por livro, com erros de grafia).

flowchart LR
    subgraph REDE["Piscina: Rede de bibliotecas"]
        S((Livro chega)) --> LI["Ler ISBN"] --> CO["Conferir dados sugeridos"] --> ET["Imprimir etiqueta"] --> F(((Fim)))
    end
    subgraph EXT["Piscina: Base bibliográfica externa"]
        API["Responder dados do ISBN"]
    end
    LI -.->|"mensagem: consulta ISBN"| API
    API -.->|"mensagem: dados"| CO
  • [RF030] O sistema deve preencher título, autores e assunto a partir do ISBN consultando a base bibliográfica externa.
  • [RF031] O sistema deve permitir que a bibliotecária corrija os dados sugeridos antes de salvar.

🎯 Nível 4: Desafio

Problema 7.4 — Quantos Caminhos Tem o Processo?

Contexto: Para planejar testes de um processo automatizado, é preciso saber quantos caminhos existem do início ao fim. Gateways exclusivos criam alternativas; paralelos não criam caminhos diferentes (todos os ramos executam).

Requisitos de Execução:

  1. Represente o processo do Problema 7.2 como um grafo em que cada nó tem uma lista de sucessores e os gateways exclusivos são marcados.
  2. Escreva uma função recursiva que liste todos os caminhos do início a qualquer fim.
  3. Imprima cada caminho.

Resultado Esperado

Os caminhos possíveis do processo de compra, um por linha.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_4_SeuNome.md
  2. Envie na tarefa: Atividade Cap 07 - Processos de Negócio com BPMN
🔑 Gabarito de Código & Solução Comentada
# caminhos_bpmn.py
GRAFO = {
    "inicio": ["analisar"],
    "analisar": ["valor_alto?"],
    "valor_alto?": ["aprovar", "pagar"],     # gateway exclusivo
    "aprovar": ["aprovado?"],
    "aprovado?": ["pagar", "fim_reprovado"],  # gateway exclusivo
    "pagar": ["receber"],
    "receber": ["cadastrar"],
    "cadastrar": ["fim_cadastrado"],
    "fim_reprovado": [],
    "fim_cadastrado": [],
}

def caminhos(no: str, atual: list[str]) -> list[list[str]]:
    atual = atual + [no]
    if not GRAFO[no]:
        return [atual]
    resultado = []
    for prox in GRAFO[no]:
        resultado += caminhos(prox, atual)
    return resultado

for c in caminhos("inicio", []):
    print(" -> ".join(c))

Saída:

inicio -> analisar -> valor_alto? -> aprovar -> aprovado? -> pagar -> receber -> cadastrar -> fim_cadastrado
inicio -> analisar -> valor_alto? -> aprovar -> aprovado? -> fim_reprovado
inicio -> analisar -> valor_alto? -> pagar -> receber -> cadastrar -> fim_cadastrado

Comentário: três caminhos, logo pelo menos três casos de teste. Com um gateway paralelo, os ramos seriam executados juntos e não multiplicariam os caminhos; para isso o grafo precisaria marcar o tipo do gateway.