Requisitos Funcionais E Nao Funcionais
Como documentar requisitos que realmente funcionam na prática
A maioria dos projetos falha porque os requisitos são escritos como se fossem comandos de um manual de instruções. Ninguém percebe isso até estar olhando para um sistema que não entrega o que foi prometido. Eu já passei por isso várias vezes. Requisitos funcionais dizem o que o sistema deve fazer. Requisito não funcional diz como ele deve fazer, ou melhor, o que ele não pode deixar de fazer. A diferença parece óbvia no papel, mas na prática se mistura de forma chata. Um gerente de projeto que entendeu isso uma vez nunca mais vai subestimar. Eu me lembro de um projeto em 2019 onde a equipe escreveu "O sistema deve processar 100 transações por segundo" como se fosse um requisito funcional. Quando fomos testar, percebemos que 100 transações eram de tipos completamente diferentes, algumas levavam 3 segundos, outras 3 milissegundos. O requisito não funcionava porque não especificava o tipo de transação nem o tempo médio esperado. A solução foi voltar atrás e dividir em dois requisitos: um funcional para o fluxo de pagamento, outro não funcional para a capacidade de resposta sob carga específica.
Documentação que não gera frustração desnecessária
Requisitos funcionais precisam ser testáveis. Se você não consegue escrever um caso de teste que confirme ou negue o requisito, ele não está completo. Não adianta dizer "o sistema deve ser intuitivo" porque isso não gera teste nenhum. Alguém vai ter que decidir se é ou não intuitivo, e essa decisão será subjetiva. Já requisitos não funcionais costumam ser negligenciados no início do projeto e viram dor de cabeça no final. Performance, segurança, disponibilidade, compatibilidade. Tudo isso precisa estar documentado desde o começo porque mudar depois custa muito mais tempo e dinheiro. Um sistema que não foi projetado para escalar vai exigir reescrita quando o número de usuários crescer. Isso não é teoria, é algo que eu vi acontecer repetidamente. Aqui vai um exemplo concreto. Uma empresa pediu para desenvolver um sistema de agendamento de consultas médicas. O requisito funcional estava claro: o médico deve poder agendar consultas pelo sistema. O não funcional, porém, estava implícito: o sistema precisava funcionar durante horários de pico, quando centenas de médicos tentavam acessar ao mesmo tempo. Como isso não foi especificado, o sistema caiu na segunda semana de uso. Corrigir isso exigiu refazer toda a arquitetura de banco de dados e cache. Se o requisito não funcional tivesse sido documentado desde o início, o custo seria uma fração disso.
Instruções práticas para escrever sem ambiguidade
Use sempre o formato: o sistema deve [ação] quando [condição], resultando em [resultado esperado]. Isso força clareza. Evite termos como "rápido", "fácil", "intuitivo". Substitua por métricas: "em menos de 2 segundos", "em no máximo 3 cliques", "com taxa de erro inferior a 0,1 por cento". Outro erro comum é confundir requisito com solução. Escrever "o sistema deve usar PostgreSQL" é uma solução, não um requisito. O requisito seria "o sistema deve manter a integridade dos dados com suporte a transações ACID". A solução pode mudar dependendo da avaliação técnica. Fixar uma tecnologia no requisito limita opções e pode gerar problemas futuros se aquela tecnologia não atender a algum critério não funcional emergente. Revisão entre pares é essencial. Dois olhos veem mais que um. Quando escrevi meu primeiro conjunto de requisitos, um colega apontou que eu havia omitido um cenário de falha de rede que era crítico para o sistema. Sem aquela revisão, o problema teria aparecido só em produção. O tempo gasto na revisão compensa amplamente o risco de omitir algo importante.

Pegadinhas que ninguém conta nos livros
Requisitos não funcionais muitas vezes entram em conflito entre si. performance versus segurança é um exemplo clássico. Criptografia forte aumenta o tempo de processamento. Disponibilidade alta exige replicação, que aumenta a complexidade de consistência. É preciso decidir qual_priorizaçãonão funcionais entram em conflito constante. Escolher a prioridade errada gera retrabalho significativo. Um erro frequente é tratar requisitos como coisa parada. Eles mudam. O mercado muda, a tecnologia muda, a compreensão do problema evolui. Um documento de requisitos que não é revisado periodicamente vira quickly obsoleto. Eu recomendo revisar a cada sprint ou a cada três meses no mínimo, dependendo da dinâmica do projeto. Isso não é burocracia, é manutenção da relevância do documento. Também existe o problema de requisitos implícitos. O cliente acha que certas coisas são óbvias e não as documenta. "Óbvio" é perigoso. O que é óbvio para ele pode não ser para você. Pergunte sempre. Mesmo que a pergunta pareça boba. Um requisito óbvio não documentado é uma bomba-relógio esperando explodir.
Quando abandonar a abordagem tradicional
Em projetos muito pequenos, tipo um aplicativo de uma tela para uso interno, escrever requisitos detalhados pode ser desperdício de tempo. Dois ou três parágrafos narrativos resolvem. A documentação pesada só se justifica em sistemas grandes, críticos, ou com múltiplas equipes envolvidas. Saber a diferença é tão importante quanto saber escrever. Se o projeto tiver muitos stakeholders com visões conflitantes, considere usar user stories em vez de requisitos tradicionais. Elas capturam melhor o ponto de vista do usuário final e forçam a discussão sobre valor real. O risco é que user stories mal escritas escondam requisitos não funcionais importantes. Sempre revise cada história para garantir que performance, segurança e outros critérios não funcionais estejam cobertos. Não existe fórmula mágica. O que funciona para um projeto pode não funcionar para outro. A melhor prática é começar simples, evoluir a documentação conforme o projeto cresce, e sempre revisar com quem vai usar o sistema, não apenas com quem vai construir. Isso economiza tempo e evita surpresas desagradáveis no final.
Galeria
-
Requisitos Funcionais e Não Funcionais para o EBSERH (TI) -
Requisitos Não Funcionais e Arquitetura de Software - DevMedia -
Aula Projeto de Software: Requisitos Funcionais e Não funcionais - YouTube -
REQUISITOS FUNCIONAIS E NÃO FUNCIONAIS - Sistema de Posto de Saúde