💻 Exemplos — 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 • Demonstrações Práticas
📝 Exemplo 1: Requisitos Numerados do SGB
[RF001] O sistema deve permitir cadastrar exemplares com ISBN, título, autores, unidade e estado.
[RF002] O sistema deve permitir buscar exemplares por título, autor ou assunto.
[RF003] O sistema deve permitir que o leitor reserve um exemplar emprestado.
[RF004] O sistema deve calcular a multa na devolução em atraso.
[RNF001] O sistema deve funcionar nos navegadores Chrome, Firefox e Edge das duas últimas versões.
[RNF002] 95% das buscas no acervo devem responder em até 2 s com 200 usuários simultâneos.
[RNF003] Dados pessoais de leitores só podem ser vistos por bibliotecárias autenticadas (LGPD).
[RD001] A multa por atraso é de R$ 0,50 por dia útil, conforme regimento da rede.
[RD002] Um leitor pode ter no máximo 3 exemplares emprestados ao mesmo tempo.
🔗 Exemplo 2: Matriz de Rastreabilidade
| Requisito | Origem | Caso de uso | Testes |
|---|---|---|---|
| RF002 | Entrevista com bibliotecárias (12/03) | UC01 Buscar acervo | T01, T02 |
| RF003 | Questionário com leitores | UC04 Reservar exemplar | T12, T13 |
| RF004 | Regimento da rede | UC03 Devolver exemplar | T09 |
| RD002 | Regimento da rede | UC02 Emprestar exemplar | T05 |
🐍 Exemplo 3: Detector de Palavras Ambíguas
Um “lint” simples para requisitos: aponta termos que quase sempre indicam requisito não verificável.
# lint_requisitos.py
import re
AMBIGUOS = ["rápid", "fácil", "amigável", "intuitiv", "seguro", "eficiente",
"etc", "adequad", "flexível", "moderno", "sempre que possível"]
REQUISITOS = {
"RNF010": "A tela de empréstimo deve ser intuitiva e rápida.",
"RNF002": "95% das buscas devem responder em até 2 s com 200 usuários simultâneos.",
"RF020": "O sistema deve exportar relatórios em PDF, CSV, etc.",
}
for codigo, texto in REQUISITOS.items():
achados = [t for t in AMBIGUOS if re.search(rf"\b{t}", texto, re.IGNORECASE)]
situacao = "revisar: " + ", ".join(achados) if achados else "ok"
print(f"{codigo}: {situacao}")
Saída:
RNF010: revisar: rápid, intuitiv
RNF002: ok
RF020: revisar: etc
O detector não substitui a revisão humana, mas encontra os casos óbvios antes da reunião de validação.