Requisitos

Histórias de Usuário e Critérios de Aceitação: o que são e como criar

Histórias de usuário descrevem uma necessidade do ponto de vista de quem usa o sistema. Critérios de aceitação dizem como saber se essa necessidade foi atendida. Juntos, eles ligam a conversa com as pessoas ao trabalho de modelagem e de testes.

Modelo visual representando o planejamento de requisitos de um sistema de software.

Introdução

Depois de conversar com as pessoas envolvidas em um projeto, a equipe acumula anotações, pedidos e exemplos. O levantamento de requisitos ajuda a descobrir essas necessidades, mas ainda falta registrá-las de um jeito curto, compreensível e fácil de priorizar.

Histórias de usuário e critérios de aceitação cumprem esse papel. A história diz quem precisa de algo, o quê e por quê. Os critérios dizem, de forma verificável, quando o resultado pode ser considerado pronto. Neste artigo, você vai aprender a escrever os dois e a conectá-los com casos de uso, modelagem e testes.

O que é uma história de usuário?

Uma história de usuário é uma descrição curta de uma necessidade, escrita do ponto de vista de quem vai usar o sistema. Ela não explica como a funcionalidade será construída; explica qual resultado a pessoa espera e qual valor isso traz.

Ela serve para:

  • manter o foco no usuário e no benefício, não na tecnologia;
  • dividir o trabalho em partes pequenas que podem ser priorizadas;
  • abrir conversas entre quem conhece o negócio e quem vai desenvolver;
  • servir de base para critérios de aceitação e testes.

Uma história envolve várias pessoas. Quem conhece a necessidade, como usuários e responsáveis pelo produto, ajuda a escrevê-la e priorizá-la. Quem desenvolve e testa faz perguntas, estima o esforço e ajuda a definir os critérios. A história é, antes de tudo, um lembrete de uma conversa, não um documento que substitui essa conversa.

A estrutura “Como, quero, para”

O formato mais conhecido tem três partes:

Como [tipo de usuário], quero [objetivo], para [benefício].

No exemplo educacional deste artigo, um cadastro de membros, a história fica assim:

Como atendente, quero cadastrar os dados de um membro, para manter suas informações organizadas no sistema.

O usuário

“Como atendente” indica quem tem a necessidade. Use um papel, não o nome de uma pessoa, e evite o genérico “como usuário” quando houver papéis diferentes. Uma pessoa atendente e uma pessoa gestora podem precisar de coisas muito diferentes do mesmo sistema.

O objetivo

“Quero cadastrar os dados de um membro” descreve o que a pessoa deseja fazer, com um verbo e um resultado. O objetivo deve caber em uma frase; se precisar de “e” várias vezes, talvez sejam várias histórias.

O benefício

“Para manter suas informações organizadas” explica por que isso importa. O benefício ajuda a priorizar e a escolher soluções: se o objetivo real é organização, talvez uma busca por nome seja tão importante quanto o próprio cadastro.

O que torna uma história clara

Uma boa história pode ser entendida por alguém de fora da conversa original, sem explicações longas. Ela é pequena o bastante para ser feita em pouco tempo, independente o bastante para ser priorizada sozinha e verificável por meio de critérios. Muitas equipes usam o acrônimo INVEST (independente, negociável, valiosa, estimável, pequena e testável) como lembrete dessas qualidades.

Compare: “Como usuário, quero um sistema de cadastro melhor” é vaga. Não diz quem precisa, o que significa “melhor” nem como verificar. Já a história do atendente tem papel, objetivo e benefício definidos.

O que são critérios de aceitação?

Critérios de aceitação são as condições que precisam ser verdadeiras para que a história seja considerada atendida. Eles transformam a intenção da história em regras observáveis.

Eles são importantes porque:

  • evitam interpretações diferentes sobre o que é “pronto”;
  • revelam cenários de erro antes da implementação;
  • orientam o desenvolvimento e a revisão;
  • dão origem direta aos testes.

Critérios também podem registrar qualidades esperadas, como tempo de resposta ou controle de acesso. Essa ponte entre comportamento e qualidade é discutida no artigo sobre requisitos funcionais e não funcionais.

O formato “Dado, Quando, Então”

Um formato popular para escrever critérios é Dado / Quando / Então:

  • Dado descreve o contexto inicial;
  • Quando descreve a ação;
  • Então descreve o resultado esperado.

Para a história do atendente, dois critérios seriam:

Cenário de sucesso: Dado que os dados obrigatórios foram preenchidos, quando o atendente confirmar o cadastro, então o sistema deve registrar o cadastro e informar que a operação foi concluída.

Cenário de erro: Dado que um campo obrigatório não foi preenchido, quando o atendente tentar confirmar, então o sistema deve informar que existem dados pendentes.

A tabela abaixo mostra esses e outros exemplos no mesmo formato:

Exemplos de critérios de aceitação no formato Dado, Quando, Então para a história de cadastro de membro
CenárioDadoQuandoEntão
Sucessoos dados obrigatórios foram preenchidoso atendente confirmar o cadastroo cadastro é registrado e a conclusão é informada
Dado pendenteum campo obrigatório está vazioo atendente tentar confirmaro sistema informa quais dados estão pendentes
Cancelamentoo atendente começou a preencher o formulárioele cancelar a operaçãonenhum dado é registrado

Os critérios são educacionais. Quais campos são obrigatórios, por exemplo, é uma decisão que precisa ser tomada com as pessoas envolvidas em cada projeto.

Da necessidade aos critérios de aceitação

Transformar uma necessidade em história e critérios segue um caminho previsível:

  1. Parta da necessidade real descoberta no levantamento: “as informações dos membros estão espalhadas em planilhas”.
  2. Identifique quem sente o problema: neste caso, a pessoa atendente.
  3. Escreva o objetivo com um verbo: cadastrar os dados de um membro.
  4. Explique o benefício: manter as informações organizadas.
  5. Pergunte “como saberemos que está pronto?” e escreva o cenário de sucesso.
  6. Pergunte “o que pode dar errado?” e escreva os cenários de erro relevantes.
  7. Revise com quem pediu e ajuste até que todos concordem com o significado.

Depois disso, a história segue pela trilha: pode ser detalhada em um caso de uso, modelada em diagramas e verificada por testes.

Da necessidade ao testeFluxo vertical com cinco etapas ligadas por setas: Necessidade, organizar as informações dos membros; História de usuário, como atendente, quero cadastrar um membro; Critérios de aceitação, no formato Dado, Quando, Então; Caso de uso, com fluxo principal e alternativas; e Teste, que verifica cada critério.1NecessidadeOrganizar as informações dos membros2História de usuárioComo atendente, quero cadastrar um membro3Critérios de aceitaçãoDado / Quando / Então4Caso de usoFluxo principal e alternativas5TesteVerifica cada critério de aceitação
Cada etapa usa a anterior como base: a necessidade vira história, a história ganha critérios, os critérios ajudam a detalhar o caso de uso e cada critério se torna ao menos um teste. Exemplo educacional.

Requisito, história, caso de uso, critério e teste

Esses conceitos aparecem juntos com frequência, mas não são a mesma coisa:

Comparação entre requisito, história de usuário, caso de uso, critério de aceitação e caso de teste
ConceitoPergunta principalObjetivo
RequisitoO que o sistema precisa atender?Registrar uma necessidade, regra ou qualidade esperada.
História de usuárioQuem precisa de quê, e por quê?Expressar uma necessidade do ponto de vista do usuário, de forma curta.
Caso de usoComo o ator interage com o sistema para atingir o objetivo?Descrever o fluxo principal e os fluxos alternativos.
Critério de aceitaçãoComo saber se a história foi atendida?Definir condições verificáveis de “pronto”.
Caso de testeComo verificar, na prática, cada condição?Executar passos com dados concretos e comparar com o resultado esperado.

O requisito é o conceito mais amplo, estudado pela Engenharia de Requisitos; histórias de usuário são uma das formas de registrá-lo. A história é curta e centrada no valor. O caso de uso é mais detalhado e descreve a interação passo a passo, inclusive alternativas, como mostra o artigo sobre diagrama de casos de uso.

O critério de aceitação diz o que precisa ser verdade; o caso de teste diz como verificar isso com dados e passos concretos. Um único critério, como “informar dados pendentes”, pode gerar vários casos de teste: nome vazio, telefone vazio, ambos vazios.

Quando o fluxo de uma história tem muitas decisões, um diagrama de atividades ajuda a visualizar os caminhos de sucesso e de erro que os critérios descrevem. Os conceitos citados na história, como Membro, podem aparecer depois no diagrama de classes.

Relação entre história e testes

Critérios bem escritos são quase testes prontos. O “Dado” vira a preparação, o “Quando” vira a ação e o “Então” vira a verificação. Por isso, é comum que a mesma frase oriente a pessoa que desenvolve e a pessoa que testa. Os tipos e níveis de teste são explicados em o que são testes de software.

O código abaixo é uma representação didática da regra dos critérios de cadastro. Ele não é uma implementação do SIGM nem de nenhum sistema real; neste exemplo, nome e telefone foram escolhidos como campos obrigatórios apenas para ilustrar.

CAMPOS_OBRIGATORIOS = ["nome", "telefone"]


def campos_pendentes(dados):
    pendentes = []
    for campo in CAMPOS_OBRIGATORIOS:
        if not dados.get(campo, "").strip():
            pendentes.append(campo)
    return pendentes


def confirmar_cadastro(dados, cadastros):
    pendentes = campos_pendentes(dados)
    if pendentes:
        return "Existem dados pendentes: " + ", ".join(pendentes)
    cadastros.append(dados)
    return "Cadastro concluído."


# Verificações ligadas aos critérios de aceitação
cadastros = []
sucesso = confirmar_cadastro({"nome": "Maria Silva", "telefone": "(11) 99999-0000"}, cadastros)
assert sucesso == "Cadastro concluído."
assert len(cadastros) == 1

erro = confirmar_cadastro({"nome": "João Souza", "telefone": ""}, cadastros)
assert "pendentes" in erro
assert len(cadastros) == 1  # nada novo foi registrado
print("Critérios verificados.")

A função campos_pendentes() confere se os dados obrigatórios foram preenchidos. A função confirmar_cadastro() segue os dois critérios: se houver pendências, informa quais são e não registra nada; se não houver, registra e informa a conclusão. As linhas com assert funcionam como testes simples: a primeira dupla verifica o cenário de sucesso, e a segunda verifica o cenário de erro, incluindo a garantia de que nenhum cadastro novo foi criado.

Erros comuns e como melhorar

  • Escrever como especificação técnica: “como sistema, quero uma tabela com cinco colunas” não é uma história. Volte ao usuário e ao resultado que ele espera.
  • Usuário indefinido: “como usuário” esconde diferenças entre papéis. Nomeie o papel, como atendente ou gestor.
  • Benefício ausente: sem o “para”, fica difícil priorizar. Pergunte “por que isso importa?” até chegar a um valor real.
  • Vários objetivos em uma história: “cadastrar, editar e excluir membros” são três histórias. Divida-as.
  • Critérios vagos: “o cadastro deve ser fácil” não pode ser verificado. Descreva um comportamento observável.
  • Critérios impossíveis de verificar: “o sistema nunca pode falhar” não tem teste possível. Defina condições concretas e mensuráveis.
  • Confundir critério com caso de teste: o critério diz o que deve ser verdade; os dados e passos específicos pertencem ao caso de teste.
  • Critérios desconectados da história: uma regra sobre relatórios não pertence à história de cadastro. Mova-a para a história certa.

Checklist para revisar uma história

  • O usuário está claro?
  • O objetivo está claro e é único?
  • O benefício está claro?
  • A história pode ser compreendida sem contexto excessivo?
  • Os critérios são verificáveis?
  • Existem cenários positivos?
  • Existem cenários de erro, quando necessários?
  • Todos os critérios estão relacionados à história?

Se alguma resposta for “não”, ajuste antes de levar a história para desenvolvimento.

Resumo

Uma história de usuário descreve, em uma frase, quem precisa de algo, o quê e por quê, no formato “Como, quero, para”. Critérios de aceitação definem as condições verificáveis para considerar a história atendida, muitas vezes no formato “Dado, Quando, Então”.

Juntos, eles fazem a ponte entre o levantamento de requisitos e o restante da trilha: casos de uso detalham o fluxo, diagramas modelam a solução e testes verificam cada critério. Comece com histórias pequenas, sempre com cenários de sucesso e de erro, e revise-as com quem conhece o problema.

Leia também

Voltar à Engenharia de Software