Conceitos fundamentais
Software precisa de qualidade, que não possui uma única definição, pode envolver vários aspectos:
- Tecnologia
- Qualidade do processo de desenvolvimento
- Qualidade do time de desenvolvimento
- Custo, tempo e cronograma Qualidade não pode ser injetada no fim do processo de desenvolvimento. Os testes eram deixados para o final no modelo em cascata onde os danos talvez não pudessem mais ser revertidos.
- Quality assurance: garantia de qualidade, proativo
- Quality control: controle de qualidade, reativo
O que é teste de software?
Objetivo
- Verificar cumprimento de requisitos
- Validar se o objeto do testo atende expectativas
- Reduzir risco de falhas não detectadas no desenvolvimento
- Criar confiança no objeto do testo, classificar falhas de alto/baixo impacto
- Previne defeitos
- Atende padrões que definem parâmetros de qualidade
- Encontra defeitos e falhas Um tester não corrige bugs, reporta para o desenvolvedor e é essencial que os dois tenham comunicação fluida e se encontrem perto um do outro.
Príncipios
- Testar não garante ausência de problemas
- Teste exaustivo é impossível: cobertura <100%
- Testar cedo salva tempo e dinheiro
- Distribuição de bugs dentro do sistema não é homogênea
- Ausência de erros não quer dizer que o sistema atende, perspectiva de produto
Tipos de teste
- Funcional: funcionalidade do sistema
- Estrutural: estrutura interna do objeto de testes
- O que isso quer dizer?
- Não-funcional: requisitos não funcionais
- Confiabilidade
- Usabilidade
- Segurança
- Desempenho
- Orientado a mudanças: executado após uma mudança no sistema
- Confirmação: teste executado com mesmos dados dentro do ambiente de teste deve ser sempre aceite
- Regressão: mudanças em partes que (não) tem relação direta com os testes feitos, que devem ser reexecutados para garantir o funcionamento
Níveis de teste
- Unitário/De componente
- Classes
- Métodos
- Estruturas de dados
- Menor nível possível de um teste
- Integração: interação entre componentes do sistema
- Sistema: testa as aplicações do sistema no ambiente operacional , testado pelos testers
- Aceitação: testes manuais que testam aplicações do sistema, testado pelos POs
Metodologias para testagem
Continuous integration (CI) Test driven development (TDD)