📋 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
🗺️ Mapa Conceitual do Capítulo
flowchart LR
subgraph ENGENHARIA_REQUISITOS["Processo Cíclico de Engenharia de Requisitos (ISO/IEC/IEEE 29148)"]
direction TB
V["1. Estudo de Viabilidade\n(Econômica, Técnica e Operacional)"]
E["2. Elicitação & Análise\n(Entrevistas, JAD, Etnografia, Prototipação)"]
S["3. Especificação Formal\n(RF · RNF FURPS+ / ISO 25010 · Regras de Negócio)"]
VA["4. Validação & Homologação\n(Verificabilidade, Consistência, Casos de Teste)"]
V --> E --> S --> VA
VA -.->|"Defeitos e Inconsistências Detectados"| E
end
VA --> DOC["Documento de Requisitos (SRS)\nBaseline Aprovada"]
DOC --> GEST["Gestão de Mudanças & Matriz de Rastreabilidade Bidirecional"]
style ENGENHARIA_REQUISITOS fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
style S fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
style VA fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style GEST fill:#fff3e0,stroke:#ff9800,stroke-width:2px
🎯 1. A Importância Estratégica dos Requisitos de Software
Um requisito de software é a declaração de um serviço ou capacidade que o sistema deve fornecer, ou de uma restrição e condição operacional que o sistema deve satisfazer. Estatísticas consolidadas do Standish Group (CHAOS Report) revelam que mais de 50% das falhas catastróficas em projetos de TI têm como causa raiz deficiências em requisitos: especificações incompletas, requisitos ambíguos, expectativas irreais de stakeholders e ausência de envolvimento contínuo dos usuários.
💡 O Paradoxo da Engenharia: Não adianta construir o software com código perfeito e testes automatizados se você construiu o sistema errado (Verification vs Validation). A Engenharia de Requisitos garante que o software resolva o problema real do negócio.
🗣️ 2. Técnicas Avançadas de Elicitação de Requisitos
A elicitação não é um processo passivo de “coleta”, mas uma investigação técnica ativa. Os stakeholders muitas vezes não sabem articular suas necessidades ou descrevem a solução técnica em vez do problema de negócio.
| Técnica de Elicitação | Mecânica e Execução | Melhor Aplicação Prática |
|---|---|---|
| Entrevistas Estruturadas | Roteiro guiado individual com perguntas abertas e fechadas. | Entender responsabilidades e dores específicas de cada perfil de usuário. |
| Workshops JAD (Joint Application Design) | Reuniões intensivas mediadas reunindo usuários, POs e arquitetos na mesma sala. | Resolver requisitos conflitantes entre diferentes departamentos com consenso ágil. |
| Observação Passiva (Shadowing / Etnografia) | O engenheiro de requisitos acompanha o dia a dia do usuário no local de trabalho. | Descobrir o fluxo real de trabalho e exceções que o usuário esquece de relatar. |
| Prototipação Rápida (Wireframes Interativos) | Mockups navegáveis de baixa a alta fidelidade (Figma/Penpot). | Validar a experiência de uso antes de escrever qualquer linha de código backend. |
| Engenharia Reversa de Documentos | Inspeção de planilhas Excel, formulários físicos e relatórios fiscais. | Mapear regras de domínio implícitas e formatos de dados consolidados. |
📝 3. Classificação e Modelos de Qualidade (FURPS+ e ISO/IEC 25010)
Os requisitos dividem-se em três grandes categorias taxonômicas:
- Requisitos Funcionais (RF): Descrevem o comportamento do sistema, transformações de dados e respostas a estímulos de entrada.
- Requisitos Não-Funcionais (RNF): Definem atributos de qualidade de serviço e restrições arquiteturais da solução.
- Regras de Negócio e Domínio (RD): Imposições legais, regulatórias ou políticas corporativas que existem independentemente de haver um software.
O Modelo FURPS+ (Hewlett-Packard)
- F - Functionality: Recursos, capacidades e segurança.
- U - Usability: Fatores humanos, consistência e ergonomia.
- R - Reliability: Frequência de falhas, recuperabilidade (MTBF e MTTR).
- P - Performance: Tempo de resposta, throughput e consumo de recursos.
- S - Supportability: Manutenibilidade, testabilidade e configurabilidade.
- ”+” (Restrições Adicionais): Restrições de design, implementação, interface e físicas.
⚖️ 4. O Critério da Verificabilidade (Testability)
A qualidade mais crítica de um requisito de engenharia é a não-ambiguidade e verificabilidade: se não for possível desenhar um teste automatizado ou manual que comprove de forma binária (Passou / Falhou) que o requisito foi satisfeito, ele está mal especificado.
graph TD
A["Requisito Ambíguo (Inaceitável)"] -->|"Refatoração com Métricas SMART"| B["Requisito Verificável (Padrão de Engenharia)"]
style A fill:#ffebee,stroke:#e53935,stroke-width:2px
style B fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
| ❌ Requisito Ambíguo e Frágil | ✅ Requisito Verificável e Mensurável (Padrão Ouro) |
|---|---|
| “O sistema deve ser rápido e tolerar picos de acesso.” | [RNF01] O endpoint /api/pedidos deve processar 1.500 req/s com latência no percentil p95 menor que 200ms sob estresse. |
| “A interface gráfica precisa ser intuitiva para qualquer pessoa.” | [RNF02] Um operador novato deve ser capaz de emitir uma nota fiscal em até 90 segundos após 30 minutos de treinamento. |
| “O banco de dados deve ser seguro contra acessos indevidos.” | [RNF03] Todas as senhas devem ser armazenadas com hash Argon2id (custo m=64MB, t=3, p=4); a chave do banco deve ter rotação anual. |
📊 5. Matriz de Rastreabilidade Bidirecional
A rastreabilidade garante que o projeto mantenha uma cadeia de evidências ligando a solicitação do cliente aos artefatos de código e testes:
- Rastreabilidade para Frente (Forward Traceability): Garante que nenhum requisito aprovado foi esquecido durante o desenvolvimento.
- Rastreabilidade para Trás (Backward Traceability): Evita o Scope Creep (adição de funcionalidades não autorizadas que ninguém pediu) e permite analisar o impacto de uma mudança.
| ID Requisito | Descrição Resumida | Stakeholder | Caso de Uso / Feature | Componente Código | Caso de Teste QA |
|---|---|---|---|---|---|
| [RF001] | Autenticação com 2FA via OTP | Gerente de Segurança | UC01 - Login Seguro | auth/totp_service.go |
test_totp_valido() |
| [RF002] | Estorno automático em cartão | Dir. Financeiro | UC08 - Cancelar Compra | billing/refund.go |
test_estorno_gateway() |
| [RNF005] | Criptografia em trânsito TLS 1.3 | Compliance PCI | Infraestrutura Web | Ingress Nginx TLS | audit_ssl_labs() |