📋 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

Boas Práticas & Anti-Patterns

  • 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 IntegradorComo o conceito deste capítulo é aplicado no PI
PI-07: AgroSafeRN estrita: defensivos agrícolas não podem ser liberados para aplicação sem ART válida do agrônomo.
PI-09: FinLiteRNF 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

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

🎯 Próximo Passo 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.