O Que São Requisitos Funcionais - O Que São Requisitos Não Funcionais - REVOEDUCA
O Que São Requisitos Não Funcionais - REVOEDUCA

O que todo mundo deveria saber antes de documentar um sistema novo

Vou começar por algo que ouço em quase todas as startups e consultorias: requisito funcional é a descrição do que o sistema precisa fazer, ponto. Não é sobre como ele vai fazer isso. Não é sobre estética. É funcionalidade pura, testável, verificável. Se não tem como você passar um caso de teste e dizer "fez ou não fez", provavelmente você escreveu um requisito mal. O problema real aparece quando as pessoas confundem requisito funcional com requisito não funcional. "O sistema precisa ser rápido" não é funcional. "O sistema precisa responder uma consulta em menos de 2 segundos" é. A diferença é tênue na cabeça de quem não escreve isso todo dia, mas é a linha entre um documento que guia o time e um documento que vira papel de parede no Confluence.

Definição técnica de o que são requisitos funcionais

Na prática, requisito funcional é uma declaração de comportamento externo esperada do software. Ele especifica entradas, processamentos e saídas. Um requisito funcional bem escrito contém sujeito (quem ou o quê), ação (o que o sistema faz) e condição (quando ou sob quais circunstâncias). Isso soa óbvio até você ver um requisito como "O usuário pode cadastrar produtos" sem nenhuma condição, nenhuma validação, nenhum limite. Isso não é requisito. É um desejo. Eu trabalhei num sistema de pagamentos onde o requisito funcional dizia simplesmente "o sistema deve processar o reembolso". Sem prazo. Sem status. Sem regra de negócio. Quando fomos implementar, descobrimos que o ERP financeiro integrava via SOAP com um gateway que tinha timeout de 30 segundos, e os reembolsos que ultrapassavam esse limite simplesmente falhavam silenciosamente. O time de desenvolvimento achava que era um bug de rede. Eu achei que era problema de timeout. A verdade era que o requisito funcional não mapeava o fluxo completo de exceção.

A solução que eu usei foi escrever um diagrama de estado do reembolso antes de qualquer código. Fluxo: iniciado -> validando -> processando -> concluído, cancelado, falhou, estornado. Cada estado com suas condições de transição. Isso transformou aquele requisito vago em algo que podia ser testado. Também forcei a inclusão de um SLA interno: processo em até 5 segundos, retry automático em caso de timeout, log de auditoria em cada transição. Sem isso, a equipe de QA não sabia o que cobrar do desenvolvimento.

Como escrever requisitos funcionais que não viram lixo

O primeiro erro comum é escrever em linguagem natural solta. Linguagem natural é ambígua por natureza. A palavra "pode" significa coisas diferentes para diferentes pessoas. Para o produto, "pode" significa possibilidade. Para o desenvolvedor, "pode" significa que a feature é opcional. Para o QA, "pode" significa que ele não precisa testar esse caminho. A solução é usar modalidades padronizadas: "deve" para obrigatoriedade, "não deve" para proibição, "poderá" quando há uma escolha deliberada entre alternativas. Outro erro frequente é misturar múltiplos requisitos numa única linha. "O sistema deve permitir cadastro de usuário com email e telefone, enviar confirmação por email e enviar SMS de verificação." Isso é três requisitos. Separe. Cada um ganha um ID único. Cada um ganha seu próprio caso de teste. Se um mudar, você não mexe nos outros dois.

👉 Clique no botão abaixo para saber mais sobre o assunto!

A ferramenta que eu recomendo depende do tamanho do projeto. Para projetos pequenos, até 20 requisitos funcionais, uma planilha com colunas de ID, descrição, prioridade, autor, estado e traceabilidade é suficiente. Para projetos medianos e grandes, o mais importante não é a ferramenta, é o processo de revisão. Um requisito funcional que não passa por review técnico antes de entrar no backlogs vai gerar retrabalho que custa entre 4 e 8 horas por requisito mal formado, segundo a minha experiência em pelo menos seis projetos diferentes nos últimos anos. Se você está começando do zero e precisa de um template pronto, pode baixar um exemplo simples aqui: template de requisitos funcionais em Excel. Ele tem campos de ID, descrição, prioridade MoSCoW, critério de aceitação, dependência e status. Não é perfeito, mas é melhor que começar do branco.

O que ninguém te conta sobre requisitos funcionais

A primeira coisa contraintuitiva: requisitos funcionais completos nunca existem. Você vai escrever os que conhece hoje e o sistema vai expor os que você não pensou quando alguém tentar usar de um jeito inesperado. Isso não é falha sua. É expectativa irreal. O correto é tratar o documento de requisitos como vivo, com versionamento e changelog, e não como um contrato assinado em pedra. A segunda coisa: a densidade de requisitos funcionais bem escritos em um projeto normal fica entre 1 e 3 páginas por módulo funcional. Se o seu documento tem 50 páginas de requisitos funcionais para um módulo de cadastro simples, você não tem muitos requisitos. Você tem texto explicativo disfarçado de requisito. Requisitos funcionais devem ser enxutos. Se precisa de uma explicação de cinco parágrafos, provavelmente aquilo não é um requisito, é uma especificação de design, e deveria ir num documento separado.

O maior risco que vejo na prática é a confiança excessiva no documento de requisitos como garantia de qualidade. Um documento bem escrito não evita bugs. Ele evita mal-entendidos. Bugs vêm de edge cases que ninguém pensou, de condições de concorrência, de dados corruptos que entraram no sistema, de integrações que falham de formas inesperadas. O requisito funcional cobre o happy path. O que acontece fora dele precisa ser pensado individualmente, não assume que vai surgir sozinho. Também vale mencionar uma limitação séria: requisitos funcionais são péssimos para capturar regras de negócio dinâmicas. Se o seu sistema depende de regras que mudam semanalmente, como taxações, regras de frete, ou precificação dinâmica, manter um documento de requisitos funcionais atualizado vai drenar o tempo da equipe de análise em cerca de 6 a 10 horas por sprint apenas para atualização de documentação. Nesse cenário, o que funciona melhor é configurar regras em um motor de decisão separado, como Drools ou mesmo uma tabela configurável no banco, com controle de versão embutido. O documento de requisitos funcionais passa a descrever a estrutura do motor, não cada regra individual.

Se você precisa de uma referência mais completa sobre padrões da indústria, a base do IEEE 830 ainda é válida como ponto de partida, mesmo que os templates tenham evoluído muito desde 1998. O que não mudou é a necessidade de clareza, testabilidade e traçabilidade.