Teste de unidade? Teste de integração? Teste de regressão? Teste de aceitação?

98

Existe alguém que pode definir claramente esses níveis de teste, pois acho difícil diferenciar ao fazer TDD ou teste de unidade. Por favor, se alguém pode explicar como, quando implementá-los?

Donny
fonte

Respostas:

129

Resumidamente:

Teste de unidade - você testa cada parte individual do código. Pense em cada arquivo ou classe.

Teste de integração - ao colocar várias unidades que interagem, você precisa conduzir o teste de integração para se certificar de que a integração dessas unidades não introduziu nenhum erro.

Teste de regressão - depois de integrar (e talvez consertar), você deve executar os testes de unidade novamente. Este é um teste de regressão para garantir que outras alterações não quebrem nenhuma unidade que já foi testada. O teste de unidade que você já fez produziu os testes de unidade que podem ser executados repetidamente para teste de regressão.

Testes de aceitação - quando um usuário / cliente / empresa recebe a funcionalidade, eles (ou seu departamento de teste) conduzirão testes de aceitação para garantir que a funcionalidade atenda aos seus requisitos.

Você também pode querer investigar os testes das caixas branca e preta. Há também testes de desempenho e carga, além de testes de "ilidades" a serem considerados.

mikey
fonte
Para sua informação, no teste de unidade , as unidades testadas podem ser de vários tamanhos. Você pode, por exemplo, testar a unidade de um grupo de classes, um único método ou mesmo como um único método. Fonte: BlueJ chaptor 9.3 "Teste de unidade no BlueJ".
Sebastian Nielsen
112

Teste de unidade: quando falha, ele informa qual parte do seu código precisa ser consertada.

Teste de integração: quando falha, informa que as partes de seu aplicativo não estão funcionando como esperado.

Teste de aceitação: quando falha, informa que o aplicativo não está fazendo o que o cliente espera.

Teste de regressão: quando falha, informa que o aplicativo não se comporta mais como antes.

Mathias
fonte
19

Aqui está uma explicação simples para cada um dos testes mencionados e quando eles são aplicáveis:

Teste de unidade Um teste de unidade é executado em uma unidade independente (geralmente uma classe ou método) e deve ser executado sempre que uma unidade for implementada ou a atualização de uma unidade for concluída.

Isso significa que ele é executado sempre que você escreve uma classe / método, corrige um bug, altera a funcionalidade ...

Teste de integração O teste de integração visa testar como várias unidades interagem umas com as outras. Este tipo de teste deve ser realizado sempre que uma nova forma de comunicação foi estabelecida entre as unidades ou a natureza de sua interação mudou.

Isso significa que ele é executado sempre que uma unidade escrita recentemente é integrada ao resto do sistema ou sempre que uma unidade que interage com outros sistemas é atualizada (e concluído com sucesso seus testes de unidade).

Teste de regressão Os testes de regressão são realizados sempre que algo é alterado no sistema, para verificar se não foram introduzidos novos bugs.

Isso significa que ele é executado após todos os patches, atualizações e correções de bugs. O teste de regressão pode ser visto como um caso especial de teste de unidade combinado e teste de integração.

Teste de aceitação Os testes de aceitação são realizados sempre que for relevante verificar se um subsistema (possivelmente o sistema inteiro) atende a todas as suas especificações.

Isso significa que ele é executado principalmente antes de terminar uma nova entrega ou anunciar a conclusão de uma tarefa maior. Veja isso como sua verificação final para ver se você realmente completou seus objetivos antes de correr para o cliente / chefe e anunciar a vitória.

Pelo menos foi assim que aprendi, embora tenha certeza de que existem outras visões opostas. De qualquer maneira, espero que ajude.

Agentlien
fonte
Eu realmente não consigo diferenciar entre teste de regressão e teste de unidade. Quero dizer, após cada alteração / confirmação, você ainda tem seus testes de unidade sendo executados ... e eles podem detectar erros introduzidos pelo novo código. Certo?
Mel
@Honey Bem, o conjunto de testes de regressão é principalmente uma seleção de alguns ou todos os seus testes de unidade e integração. É uma questão de política, quanto teste de regressão você deseja fazer. A principal diferença é que os testes de unidade são feitos em desenvolvimento ativo, enquanto os testes de regressão são mais algo que você usa para verificar se os projetos anteriores não quebram quando você volta e os corrige.
Agentlien
AFAIK você realmente não deve métodos de teste de unidade. Se você testa a classe, deve tratá-la como um todo, então testa a interface pública da classe, não seus detalhes de implementação. Embora você possa fazer o teste de unidade da função autônoma, tudo bem.
Qback
14

Vou tentar:

  1. Teste de unidade: um desenvolvedor escreveria um para testar um componente ou classe individual.
  2. Teste de integração: um teste mais extenso que envolveria vários componentes ou pacotes que precisam colaborar
  3. Teste de regressão: Fazer uma única alteração em um aplicativo força você a executar novamente TODOS os testes e verificar TODAS as funcionalidades.
  4. Teste de aceitação: os usuários finais ou QA fazem isso antes de assinar para aceitar a entrega de um aplicativo. Diz "O aplicativo atendeu aos meus requisitos".
duffymo
fonte
14

Teste de unidade: meu único método está funcionando corretamente? (SEM dependências ou simulações de dependências)

Teste de integração: meus dois módulos desenvolvidos separadamente estão funcionando corretamente quando colocados juntos?

Teste de regressão: Eu quebrei alguma coisa ao alterar / escrever um novo código? (a execução de testes de unidade / integração com cada confirmação é um teste de regressão tecnicamente (automatizado)). Mais frequentemente usado no contexto do controle de qualidade - manual ou automatizado.

Teste de Aceitação : teste feito pelo cliente, de que ele "aceita" o SW entregue

Andrejs
fonte
0

Não posso comentar (reputação muito baixa: - |) então ...

@Andrejs destaca as diferenças entre os ambientes associados a cada tipo de teste.

Os testes de unidade são executados normalmente na máquina dos desenvolvedores (e possivelmente durante a construção de CI) com dependências simuladas para outros recursos / sistemas.

Os testes de integração, por definição, devem ter (algum grau) de disponibilidade de dependências; os demais recursos e sistemas sendo chamados para que o ambiente seja mais representativo. Os dados para teste podem ser simulados ou um pequeno subconjunto ofuscado de dados de produção reais.

O teste de UAT / Aceitação deve representar a experiência do mundo real para o controle de qualidade e as equipes de negócios que aceitam o software. Portanto, precisa de integração total e volumes de dados realistas e conjuntos de dados totalmente mascarados / ofuscados para fornecer desempenho e experiência realistas do usuário final.

Outras "ilidades" também precisam que o ambiente seja o mais próximo possível da realidade para simular a experiência de produção, por exemplo, testes de desempenho, segurança, ...

Mhaselup
fonte