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.