📋 CAPÍTULO 05: FUNDAMENTOS DE REQUISITOS
🎯 1. Objetivos de Aprendizagem & Competências
Estimativa de Dedicação: 2 horas de estudo autoguiado.
Ao final deste capítulo, você será capaz de:
- 🔹 Diferenciar rigorosamente Requisitos Funcionais (RF), Requisitos Não-Funcionais (RNF) e Regras de Negócio (RN).
- 🔹 Classificar RNFs segundo o modelo de qualidade FURPS+ (Functionality, Usability, Reliability, Performance, Supportability).
- 🔹 Formular requisitos mensuráveis, claros e sem ambiguidades ("a tela deve ser rápida" ➔ "latência p95 < 200ms").
- 🔹 Implementar contratos de dados e validações semânticas em Python 3.11+ utilizando Pydantic v2.
🏢 2. Cenário Corporativo & Estudo de Caso (TecProExpress)
Na TecProExpress, o departamento jurídico e o time de infraestrutura emitiram diretrizes mandatórias: o novo portal corporativo deve atender à LGPD (anonimização de dados de motoristas) e garantir tempo de resposta inferior a 500ms durante o pico de tráfego de 10.000 requisições/minuto.
O Desafio: Como Analista de Requisitos e Arquiteto de Software, você deve traduzir as dores dos usuários e as imposições legais em especificações técnicas precisas, separando o que é comportamento funcional (RF) do que é atributo arquitetural de qualidade (RNF).
🧠 3. Fundamentação Teórica & Modelos Visuais
3.1. A Tríade dos Requisitos de Software
Um requisito é uma condição ou capacidade necessária que o software deve possuir para resolver um problema real:
flowchart TD
subgraph TRIADE ["A TRÍADE DE ESPECIFICAÇÃO DE SOFTWARE"]
RF["⚡ REQUISITOS FUNCIONAIS (RF)<br>O QUE o sistema faz<br>Ex: Cadastrar motorista, Emitir cupom"]
RNF["🛡️ REQUISITOS NÃO-FUNCIONAIS (RNF)<br>COMO o sistema opera (Qualidade)<br>Ex: Tempo de resposta < 200ms, Criptografia AES-256"]
RN["⚖️ REGRAS DE NEGÓCIO (RN)<br>DIRETRIZES corporativas e leis<br>Ex: Desconto de 10% para compras acima de R$ 500,00"]
end
style RF fill:#e0f2fe,stroke:#0284c7
style RNF fill:#ede7f6,stroke:#5e35b1
style RN fill:#fef3c7,stroke:#d97706
3.2. Classificação de RNFs pelo Modelo FURPS+
O modelo FURPS+ (Hewlett-Packard / Rational) categoriza os requisitos de qualidade em 5 dimensões essenciais:
flowchart TD
root["🛡️ Modelo FURPS+ (Dimensões de Qualidade)"]
root --> F["1. Functionality (Funcionalidade)<br>• Capacidades e Segurança<br>• Conformidade de Negócio"]
root --> U["2. Usability (Usabilidade)<br>• Fatores Humanos e UX<br>• Consistência de Interface"]
root --> R["3. Reliability (Confiabilidade)<br>• MTBF e Tolerância a Falhas<br>• Recuperabilidade"]
root --> P["4. Performance (Desempenho)<br>• Throughput e Tempo de Resposta<br>• Consumo de Memória"]
root --> S["5. Supportability (Suportabilidade)<br>• Manutenibilidade e Testabilidade<br>• Portabilidade e Configuração"]
style root fill:#eff6ff,stroke:#2563eb,stroke-width:2px
style F fill:#f0fdf4,stroke:#16a34a
style U fill:#fffbeb,stroke:#d97706
style R fill:#fee2e2,stroke:#ef4444
style P fill:#ede7f6,stroke:#7c3aed
style S fill:#e0f2fe,stroke:#0284c7
💻 4. Aplicação Prática & Código Executável (Python 3.11+)
Implementação de validação de requisitos funcionais e regras de negócio com Pydantic v2:
📋 Pré-requisitos e Instalação
O esquema utiliza o validador EmailStr do Pydantic, que requer a biblioteca email-validator:
pip install "pydantic[email]"
💻 Código Completo e Autocontido (requisitos_contrato.py)
Crie o arquivo requisitos_contrato.py e insira o código abaixo integralmente:
"""
Módulo: requisitos_contrato.py
Domínio: Validação estrita de contratos de dados (Pydantic v2).
Stack: Python 3.11+ | Pydantic v2
"""
from decimal import Decimal
from pydantic import BaseModel, Field, EmailStr, field_validator
class RequisitoMotoristaSchema(BaseModel):
# RF: Cadastro de motorista parceiro
nome_completo: str = Field(..., min_length=3, max_length=100, description="Nome do motorista")
cpf: str = Field(..., pattern=r"^\d{3}\.\d{3}\.\d{3}-\d{2}$", description="CPF formatado")
email: EmailStr
cnh_categoria: str = Field(..., description="Categoria da CNH (B, C, D, E)")
score_avaliacao: Decimal = Field(default=Decimal("5.0"), ge=0, le=5)
# RN: Regra de Negócio - Motoristas de carga pesada exigem CNH C, D ou E
@field_validator("cnh_categoria")
@classmethod
def validar_cnh_valida(cls, v: str) -> str:
categorias_permitidas = {"B", "C", "D", "E"}
v_upper = v.upper()
if v_upper not in categorias_permitidas:
raise ValueError(f"Categoria CNH inválida. Permitidas: {categorias_permitidas}")
return v_upper
if __name__ == "__main__":
try:
motorista_valido = RequisitoMotoristaSchema(
nome_completo="Carlos Eduardo Silva",
cpf="123.456.789-00",
email="carlos.motorista@email.com",
cnh_categoria="D"
)
print("✅ Requisito Funcional atendido com dados válidos:")
print(motorista_valido.model_dump_json(indent=2))
except Exception as err:
print(f"❌ Violação de Requisito: {err}")
🚀 Como Executar
Execute o script no terminal:
python requisitos_contrato.py
🖥️ Saída Esperada no Terminal
✅ Requisito Funcional atendido com dados válidos:
{
"nome_completo": "Carlos Eduardo Silva",
"cpf": "123.456.789-00",
"email": "carlos.motorista@email.com",
"cnh_categoria": "D",
"score_avaliacao": "5.0"
}
💡 5. Checkpoint de Engenharia & Boas Práticas
- Requisitos Mensuráveis: Nunca escreva "o sistema deve ser rápido" ou "fácil de usar". Escreva: "O tempo de carregamento da listagem de entregas deve ser inferior a 1,5s no percentil 95 sob carga de 500 usuários simultâneos".
- Anti-Pattern Gold Plating: Evite adicionar funcionalidades complexas não solicitadas pelo cliente acreditando que "seria legal ter". Foque no valor de negócio acordado.
🔗 6. Conexão com os Projetos Integradores
| Projeto Integrador | Como o conceito deste capítulo é aplicado no PI |
|---|---|
| PI-07: AgroSafe | RN estrita: defensivos agrícolas não podem ser liberados para aplicação sem ART válida do agrônomo. |
| PI-09: FinLite | RNF de Confiabilidade: operações de baixa de títulos bancários devem ser atômicas (ACID). |
🧪 7. Quiz de Fixação e Autoavaliação (Formative Assessment)
🧪 Quiz de Autoavaliação — Capítulo 05
🧪 Quiz de Autoavaliação — Capítulo 05
1. A declaração 'A senha de todos os usuários deve ser armazenada com hash seguro bcrypt e salt de no mínimo 12 rounds' classifica-se como:
- A) Requisito Funcional de Interface.
- B) Requisito Não-Funcional de Segurança (RNF).
- C) Caso de Uso Estendido.
- D) Requisito de Escopo Descartável.
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: O requisito impõe uma restrição de segurança técnica sobre como as senhas devem ser persistidas, qualificando-se como um Requisito Não-Funcional (RNF) de Segurança.
2. O que caracteriza uma 'Regra de Negócio' (RN) em contraste com um Requisito Funcional (RF)?
- A) A RN só existe depois que o software é compilado.
- B) A RN define uma política, cálculo ou restrição corporativa que existe independentemente do software (ex: cálculo de juros por atraso).
- C) A RN é um comando do sistema operacional.
- D) A RN só pode ser modelada em diagramas de hardware.
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: Regras de negócio derivam de leis, políticas da empresa ou regulamentações de mercado. Elas existiriam mesmo que a empresa operasse no papel.
3. No modelo de qualidade FURPS+, a letra 'P' refere-se a:
- A) Portability (Portabilidade de hardware).
- B) Performance (Desempenho, tempo de resposta, consumo de memória e throughput).
- C) Programming (Linguagem de programação escolhida).
- D) Payment (Formas de pagamento suportadas).
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: No acrônimo FURPS+, o 'P' representa Performance (Desempenho), abrangendo métricas de latência, taxa de transferência de dados e uso de recursos do servidor.
🛠️ 8. Ponte para a Ação: Laboratório Prático
Coloque esta teoria em prática executando o roteiro de laboratório autoguiado:
👉 ATIVIDADE 03: ENGENHARIA DE REQUISITOS
📌 9. Resumo Executivo & Key Takeaways
- RF vs RNF vs RN: RF define o comportamento funcional (O quê); RNF define os critérios de qualidade (Como); RN define as políticas do negócio.
- FURPS+: Framework consolidado de engenharia para elicitação abrangente de requisitos de qualidade.
- Mensurabilidade: Requisitos não-funcionais devem conter métricas quantificáveis para permitir testes de aceitação automatizados.
- Validação por Contrato: Modelos Pydantic v2 garantem que as regras de integridade dos requisitos sejam respeitadas em tempo de execução.