Um teste de verificação de idade parece trivial até o dia em que o sistema recusa alguém que acabou de completar a idade mínima, ou aceita alguém um dia mais novo. O erro quase nunca está na regra, e sim na conta: a data de referência, o fuso horário, o aniversário de quem nasceu em 29 de fevereiro. Neste texto, mostramos de onde vêm os limites de idade, por que eles não formam um número único e como montar os casos que realmente exercitam a verificação.
De onde vêm os limites de idade?
Não existe uma idade mínima universal na internet. Cada limite nasce de uma regra diferente, com um objetivo diferente, e tratá-los como um único número é o primeiro erro de projeto.
- Treze anos. É o limite que aparece nas regras americanas de proteção de dados de crianças, que restringem a coleta de informações de menores dessa faixa. O número ficou conhecido mundialmente, e muitos serviços o adotaram como padrão.
- Dezesseis anos. É a idade padrão de consentimento para serviços digitais na Europa, e os países membros podem ajustá-la entre treze e dezesseis anos. Isso produz uma situação curiosa: o mesmo serviço pode ter limites diferentes dependendo do país do usuário.
- Dezoito anos. É a maioridade na maioria dos países, e é o limite usado quando a regra trata de contratos, crédito ou conteúdo restrito a adultos.
- Vinte e um anos. Aparece em situações específicas de consumo de álcool em alguns lugares, e não é uma regra geral de maioridade.
Um sistema que usa um único número global está, na prática, aplicando a regra de um contexto a todos os outros. Se o produto opera em vários países, o limite precisa ser configurável por país e por finalidade.
Declarar a data e comprovar a data são coisas diferentes
Há dois níveis de verificação, e é importante não confundi-los. O primeiro é a data de nascimento declarada: a pessoa informa o dia, o mês e o ano, e o sistema apenas calcula a idade. Isso não prova nada, e serve para separar fluxos, aplicar avisos e registrar uma declaração.
O segundo nível é a comprovação, que envolve conferir um documento, uma base de referência ou um serviço especializado. Esse caminho tem custo, depende de regras locais e não se resolve com um campo de formulário.
A consequência para os testes é direta: o cálculo da idade a partir de uma data declarada é a parte que o seu sistema controla, e é a parte que precisa ser testada com cuidado. Nenhum dado de teste aqui atravessa um processo de comprovação de identidade real, e nenhum registro gerado serve para isso: os conjuntos sintéticos existem apenas para testes e não podem ser usados para se passar por outra pessoa.
A conta precisa olhar para o dia
O cálculo correto compara dia, mês e ano, nessa ordem, e não apenas subtrai anos. Quem faz a subtração simples erra em todo mundo que ainda não fez aniversário no ano corrente, e o erro passa despercebido porque a maior parte dos usuários faz aniversário em algum momento e o número se corrige sozinho depois.
Há ainda a questão do momento da conta. O sistema pode comparar a data de nascimento com a data de referência, e essa referência é o dia de hoje em algum fuso. Se o servidor e o navegador estiverem em fusos diferentes, o mesmo instante pode pertencer a dois dias distintos, e uma pessoa no limite da idade aparece como aceita ou recusada dependendo de onde a conta rodou.
Tabela de casos que precisam existir no conjunto
| Caso | Data em relação ao limite | O que verifica |
|---|---|---|
| Completa a idade hoje | exatamente no limite | a inclusão do dia do aniversário |
| Completa amanhã | um dia antes | se o sistema adianta a idade |
| Completou ontem | um dia depois | se o sistema atrasa a idade |
| Nascido em 29 de fevereiro | aniversário em ano comum | a convenção adotada |
| Limite no ano bissexto | data de referência em ano bissexto | erros na regra de ano bissexto |
| Fuso diferente do servidor | mesma data, fusos distintos | a escolha da data de referência |
Esses seis casos cobrem a verificação inteira. Se o seu conjunto de teste tem apenas idades confortavelmente acima e abaixo do limite, ele não testa nada: um sistema com a conta errada passa nesse conjunto sem dificuldade.
Como testar quando o aniversário não existe?
Quem nasceu em 29 de fevereiro faz aniversário apenas em anos bissextos, e os sistemas precisam escolher uma convenção para os outros anos: considerar o aniversário no dia 28 de fevereiro, no dia 1º de março, ou ignorar a data exata e comparar pelo primeiro dia do mês seguinte. Qualquer uma das três escolhas é defensável, desde que esteja documentada e seja aplicada de forma consistente entre a tela, a validação e os relatórios.
O defeito clássico é a inconsistência: a tela mostra uma idade e a regra interna usa outra, com diferença de um dia. Em verificações de idade no limite, essa diferença decide se alguém entra ou não. Guarde um caso de teste dedicado para essa data, porque ele é o único que expõe a divergência.
Para quem desenvolve: limite configurável e data pura
Três decisões evitam a maior parte dos problemas:
- Guarde a data de nascimento, não a idade. O campo de idade fica errado no dia seguinte. Calcule no momento da verificação, a partir da data guardada.
- Trate a data como data pura. Sem hora e sem fuso no campo de nascimento. O fuso pertence à data de referência, que é uma decisão do sistema e deve estar explícita em um único lugar.
- Torne o limite configurável. Um valor fixo no código precisa ser alterado em todos os lugares quando a regra muda por país ou por finalidade. Um parâmetro nomeado muda em um lugar só.
Vale ainda separar as mensagens. Recusar por idade é diferente de recusar por data inválida ou por campo vazio, e juntar os casos em uma mensagem genérica atrapalha quem usa o serviço e quem dá suporte. E, na hora de montar os conjuntos, gere registros no gerador de identidade para as pessoas comuns e escreva à mão apenas os casos de borda, que são poucos e precisam de precisão.
Próximos passos
Adicione ao conjunto de teste os dois casos mais valiosos: alguém que completa a idade exatamente na data de referência e alguém que completa no dia seguinte. Depois, percorra o fluxo com cada um e confira se a mensagem exibida corresponde ao motivo real da recusa. Para os registros comuns, use o gerador de identidade e veja em seguida como tratar a data em si no texto sobre validação de data de nascimento.