Recentemente comecei a estudar com mais profundidade assuntos relacionados à qualidade de software e, tendo isso em vista, debrucei-me mais atentamente sobre questões relacionadas a Teste de Software, como tipos, técnicas, ferramentas, etc. Logo abaixo deixo um resumo dos conteúdos estudados:
- Testes de software servem para verificar e validar se o sistema codificado atende as necessidades impostas pelas regras de negócio propostas e se o usuário consegue usufruir das funcionalidades apropriadamente;
- É capaz de encontrar falhas e defeitos na aplicação, reduzindo-os de maneira a melhorar a qualidade do software;
- Melhora a usabilidade da aplicação, garantindo que o usuário encontrará um ambiente previamente estudado e planejado
podem ser:
- Estáticas 👉 São técnicas relacionadas ao âmbito da qualidade, não se executa o software e se analisa assuntos relacionados ao código
- Dinâmicas 👉 São técnicas que executam o software, realizando os testes
Objetivos são encontrar:
- Falhas de segurança
- Práticas ruins
- Erros de linguagem ou design
- Especificações inconsistentes
- Erros de run-time
São todos os tipos e níveis de teste de software, em que se verifica tempo de resposta, performance, capacidade do software de se adaptar a diversos ambientes
-
Não Funcional
- performance
- segurança
- usabilidade
- acessibilidade
- responsividade
- obervalidade
-
Funcional
- Baseados na estrutura (caixa branca)
- Baseados na mudança (regressão e confirmação)
- Baseados no comportamento (caixa preta)
- Baseados na experiência (teste exploratório)
-
Baseados em comportamento (caixa preta)
- Partição de equivalência (válida e inválida)
- Análise do valor limite
- Tabela de decisão
- Pair wise
- Transição de estado
-
Baseados na Experiência
- Teste exploratório
- Suposição de erro
- Baseado em checklist
-
Baseados na Estrutura (caixa branca)
- Teste de decisão (if/else/case)
- Teste de fluxo (for/while)
Os testes podem ser relacionados em diferentes niveis, que são:
- Unidade/Componente: Verifica a menor parte do software de forma isolada, pode ser uma classe, um método, uma função. Em geral é o tipo de teste mais rápido e barato de se fazer, normalmente sendo atribuído à pessoa desenvolvedora
- Integração: Acontece a partir do momento em que se quer testar como dois elementos diferentes se comportam ao unirem-se para realizar uma determinada tarefa, geralmente utilizam-se mocks para simular essa interação
- Sistema: Verifica como um sistema funciona como um todo, tentando entender se ele consegue realizar as tarefas às quais foi planejado
- Regressão: Acontece quando uma nova feature é implementada, testando se nada da versão anterior deixou de funcionar adequadamente
- Aceitação: Compara a versão final apresentada condiz com os requisitos do sistema proposto inicialmente, pode ser também:
- alfa: quando a aplicação é aberta para um maior número de pessoas testar, mas dentro de um escopo (resto da empresa, por exemplo)
- beta: quando um número maior de usuários tem acesso à versão, geralmente um público externo selecionado que atenda a determinados requisitos
Resolvi juntar tudo (e mais um pouco das anotações que ainda não estão aqui) em um único mapa mental para ajudar a ter uma visão global do assunto, ele pode ser acessado aqui: mapa mental