🧩 Exercícios — Cap 03: Engenharia de Requisitos: Elicitação, Especificação e Validação
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:
- 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.
- 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)
- Salve o arquivo como:
Atividade_03_1_SeuNome.md - 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:
- 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”.
- 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)
- Salve o arquivo como:
Atividade_03_2_SeuNome.md - 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:
- Escreva um roteiro com 6 perguntas abertas (evite perguntas de sim/não).
- A partir das respostas do gabarito, escreva 3 requisitos (pelo menos 1 RF e 1 RD).
- 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)
- Salve o arquivo como:
Atividade_03_3_SeuNome.md - 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:
- Escreva um programa que receba um dicionário de requisitos e um dicionário de testes (cada teste lista os requisitos que cobre).
- Liste os requisitos sem nenhum teste e os testes que citam requisitos inexistentes.
- 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)
- Salve o arquivo como:
Atividade_03_4_SeuNome.md - 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.