Sobes.tech
Junior

O que é a idempotência no contexto de programação e testes?

sobes.tech IA

Resposta da IA

A idempotência é a propriedade de uma operação ou função que significa que a aplicação repetida dessa operação leva ao mesmo resultado que uma única aplicação. O estado do sistema após executar repetidamente uma operação idempotente não muda em relação ao estado após a primeira execução.

No contexto da programação:

Exemplos de operações idempotentes:

  • Ler dados de uma base (requisição GET), se isso não alterar o estado dos dados.
  • Atualizar um registro na base de dados com um valor dado (requisição PUT a um recurso específico com o estado completo).
  • Excluir um recurso (requisição DELETE). A exclusão repetida de um recurso já excluído leva ao mesmo estado (recurso ausente).
  • Inicializar uma variável com um valor definido.

Exemplos de operações não idempotentes:

  • Adicionar um novo registro na base de dados (requisição POST). A execução repetida adicionará um novo registro.
  • Incrementar um contador em um.
  • Enviar um email.

No contexto de testes:

Testar a idempotência é importante para sistemas onde chamadas repetidas às operações são possíveis, por exemplo, ao trabalhar com APIs, sistemas distribuídos ou sistemas de mensagens.

  • Objetivo do teste: Garantir que a execução repetida de uma operação idempotente não cause efeitos colaterais indesejados ou mudanças no estado do sistema, além do que é esperado após a primeira execução.
  • Métodos de teste:
    • Executar a operação N vezes (N > 1) e verificar o estado do sistema e o resultado após cada execução.
    • Comparar o estado do sistema antes e depois de execuções repetidas (após a primeira bem-sucedida).
    • Verificar logs e métricas para ausência de anomalias em chamadas repetidas.
  • Exemplos de casos de teste:
    • Realizar uma requisição GET ao recurso 5 vezes. Garantir que os dados na resposta sejam idênticos e que o estado do recurso no servidor não tenha mudado.
    • Realizar uma requisição PUT para atualizar um registro. Repetir a requisição. Garantir que o registro na base de dados permaneça no mesmo estado após a segunda requisição que após a primeira.
    • Realizar uma requisição DELETE para excluir um recurso. Repetir a requisição. Garantir que o recurso não exista após a primeira requisição, e que a segunda retorne o status esperado (por exemplo, 404 Não Encontrado).

A idempotência simplifica o tratamento de erros e tentativas repetidas, tornando os sistemas mais confiáveis e previsíveis, o que é um aspecto chave da qualidade.