Guia Extra: Engenharia de Software e Modelagem UML • Bloco 1: Processo de Software • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 3.1 — Classificar Requisitos

Contexto: Anotações de uma entrevista com a coordenação do SGB.

Requisitos de Execução:

  1. Classifique cada item como RF, RNF ou RD: (a) o leitor pode renovar um empréstimo pela internet; (b) o sistema deve ficar disponível 99,5% do tempo em horário de funcionamento; (c) exemplares de obras raras não podem ser emprestados, só consultados no local; (d) o sistema deve enviar e-mail 2 dias antes do vencimento; (e) o sistema deve rodar no servidor Linux da prefeitura.
  2. Numere cada um no formato [RF001].

Resultado Esperado

Tabela com os 5 itens, o tipo e o código.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_1_SeuNome.md
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Requisitos: Elicitação, Especificação e Validação
🔑 Gabarito de Código & Solução Comentada
Item Tipo Código
(a) Renovar pela internet RF [RF001]
(b) Disponibilidade de 99,5% RNF (confiabilidade) [RNF001]
(c) Obras raras só no local RD (regra da biblioteca) [RD001]
(d) E-mail antes do vencimento RF [RF002]
(e) Servidor Linux da prefeitura RNF (restrição de implantação) [RNF002]

Comentário: (c) vem das regras da biblioteca, não de uma escolha técnica; por isso é requisito de domínio.


🎯 Nível 2: Prática

Problema 3.2 — Tornar Requisitos Verificáveis

Contexto: A primeira versão do documento do SGB tem requisitos que ninguém consegue testar.

Requisitos de Execução:

  1. Reescreva de forma verificável: (a) “O sistema deve ser rápido”; (b) “O cadastro de leitor deve ser simples”; (c) “Os relatórios devem estar sempre atualizados”; (d) “O sistema deve suportar muitos usuários”.
  2. Para cada um, escreva em uma frase o teste que comprovaria o requisito.

Resultado Esperado

Quatro requisitos com números e unidades, cada um com seu teste.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_2_SeuNome.md
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Requisitos: Elicitação, Especificação e Validação
🔑 Gabarito de Código & Solução Comentada
Original Verificável Teste
(a) Rápido 95% das buscas em até 2 s com 200 usuários simultâneos Teste de carga com 200 usuários virtuais medindo o percentil 95
(b) Simples Um leitor novo conclui o cadastro em até 3 min sem ajuda Teste de usabilidade com 5 leitores cronometrados
(c) Sempre atualizados Relatórios refletem operações com até 5 min de atraso Registrar um empréstimo e consultar o relatório após 5 min
(d) Muitos usuários Suportar 500 sessões simultâneas com taxa de erro < 1% Teste de carga com 500 sessões medindo erros

Comentário: os números devem vir dos stakeholders, não do analista. Se ninguém souber o valor, isso vira uma pergunta para a próxima entrevista.


🎯 Nível 3: Integração

Problema 3.3 — Roteiro de Entrevista e Validação

Contexto: Você vai entrevistar a bibliotecária-chefe sobre reservas.

Requisitos de Execução:

  1. Escreva um roteiro com 6 perguntas abertas (evite perguntas de sim/não).
  2. A partir das respostas do gabarito, escreva 3 requisitos (pelo menos 1 RF e 1 RD).
  3. Aplique as 5 verificações de validação a um dos requisitos e registre o resultado.

Resultado Esperado

Roteiro, 3 requisitos numerados e uma tabela de validação.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_3_SeuNome.md
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Requisitos: Elicitação, Especificação e Validação
🔑 Gabarito de Código & Solução Comentada

Roteiro: (1) Como funciona hoje uma reserva, do pedido até o leitor pegar o livro? (2) O que acontece quando dois leitores querem o mesmo exemplar? (3) Quanto tempo o exemplar fica separado esperando o leitor? (4) Como o leitor fica sabendo que o livro chegou? (5) Que problemas as reservas causam no balcão? (6) Que informação você gostaria de ter e hoje não tem?

Respostas resumidas: fila por ordem de pedido; o exemplar fica separado 3 dias; o aviso é por telefone e muitas vezes falha.

  • [RF010] O sistema deve manter uma fila de reservas por título, em ordem de pedido.
  • [RF011] O sistema deve avisar o leitor por e-mail quando o exemplar reservado for devolvido.
  • [RD005] O exemplar reservado fica separado por 3 dias úteis; depois disso, passa ao próximo da fila.
Verificação (RD005) Resultado
Validade Sim: evita exemplar parado indefinidamente
Consistência Conferir com RD001 (dias úteis) — consistente
Completude Falta dizer o que acontece se a fila estiver vazia → volta à estante
Realismo Sim
Verificabilidade Sim: simular devolução e avançar 3 dias úteis

🎯 Nível 4: Desafio

Problema 3.4 — Verificador de Rastreabilidade

Contexto: A equipe mantém requisitos e testes em listas separadas e quer saber o que está descoberto.

Requisitos de Execução:

  1. Escreva um programa que receba um dicionário de requisitos e um dicionário de testes (cada teste lista os requisitos que cobre).
  2. Liste os requisitos sem nenhum teste e os testes que citam requisitos inexistentes.
  3. Calcule a porcentagem de requisitos cobertos.

Resultado Esperado

Relatório com requisitos descobertos, testes órfãos e a cobertura em porcentagem.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_4_SeuNome.md
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Requisitos: Elicitação, Especificação e Validação
🔑 Gabarito de Código & Solução Comentada
# rastreabilidade.py
REQUISITOS = {
    "RF001": "Cadastrar exemplar",
    "RF002": "Buscar acervo",
    "RF003": "Reservar exemplar",
    "RF004": "Calcular multa",
    "RD002": "Limite de 3 empréstimos",
}
TESTES = {
    "T01": ["RF002"],
    "T02": ["RF002"],
    "T05": ["RD002"],
    "T09": ["RF004"],
    "T30": ["RF099"],  # cita um requisito que não existe
}

cobertos = {r for reqs in TESTES.values() for r in reqs if r in REQUISITOS}
descobertos = sorted(set(REQUISITOS) - cobertos)
orfaos = sorted(t for t, reqs in TESTES.items() if any(r not in REQUISITOS for r in reqs))
cobertura = 100 * len(cobertos) / len(REQUISITOS)

print("Requisitos sem teste:", ", ".join(descobertos))
print("Testes com requisito inexistente:", ", ".join(orfaos))
print(f"Cobertura de requisitos: {cobertura:.0f}%")

Saída:

Requisitos sem teste: RF001, RF003
Testes com requisito inexistente: T30
Cobertura de requisitos: 60%

Comentário: teste órfão costuma indicar requisito renomeado ou removido sem atualizar a matriz, o problema que a rastreabilidade existe para evitar.