Guia de Teste de Software: Técnicas e Estratégias
Classificado em Tecnologia
Escrito em em
português com um tamanho de 6,9 KB
Introdução ao Teste de Software
Teste de Software é o processo de execução de um programa com a intenção específica de detecção de erros antes de chegar ao usuário final.
Objetivos dos Testes
- Encontrando falhas: o teste de software é bem-sucedido se você descobrir um defeito. Um teste falhará se os defeitos não forem descobertos.
- Teste de Verificação: verifica se o sistema atende às especificações de projeto.
- Validação de Teste: verifica se o sistema se qualifica conforme a análise.
- Operação: busca uma operação limpa.
- Nota: os resultados de cada caso de teste devem ser observáveis.
- Controlabilidade: grau em que os testes podem ser automatizados e otimizados.
- Decomposição: os testes podem ser realizados de forma decomposta.
- Simplicidade: reduzir a complexidade da arquitetura e da lógica para simplificar o teste.
- Estabilidade: poucas mudanças devem ser necessárias durante os testes.
- Compreensibilidade: clareza do projeto.
O que os testes fazem?
Eles verificam a conformidade de erros, requisitos de desempenho e fornecem uma indicação da qualidade.
Quem testa o software?
- Desenvolvedor: compreende o sistema, mas pode ser condescendente por ser dirigido pelo "produto".
- Testador Independente: deve entender o sistema, mas tentará causar a falha, sendo motivado pela qualidade.
Teste de Caixa Branca
Este teste observa o código; as provas são dedicadas a executá-lo com a intenção de testar todos os caminhos, utilizando notação de gráfico de fluxo e matrizes de complexidade ciclomática.
Conceito e Terminologia
Testar o código é conhecido como teste de caixa branca (caixa clara ou transparente), buscando exercitar todos os elementos do código.
- Objetivo: garantir que todas as declarações e condições sejam executadas pelo menos uma vez.
- Tipos de testes: cobertura de teste, condições e testes de loops (laços).
- Por que usar? Muitas vezes pensamos que um caminho fundamental tem pouca chance de executar-se. Erros de tipografia, lógica aleatória e suposições incorretas são inversamente proporcionais à probabilidade de um caminho que executa o programa.
Notação de Gráfico de Fluxo
Representa o fluxo de controle lógico usando uma notação ilustrada. Cada instrução estruturada tem um símbolo correspondente no gráfico de fluxo.
Complexidade Ciclomática
Uma métrica de software que fornece uma medida quantitativa da complexidade lógica de um programa. Quando usada no contexto do caminho básico, define o número da complexidade ciclomática de caminhos independentes do conjunto básico de um programa, fornecendo o limite de testes que devem ser executados.
Um caminho independente é qualquer caminho do programa que apresenta, pelo menos, um novo conjunto de declarações ou um novo nó de condição. Um nó predicado ocorre quando duas ou mais arestas surgem a partir dele.
Gráficos de Matriz
Utilizados para obter um gráfico de fluxo e determinar o conjunto de caminhos de base. É uma matriz quadrada cuja dimensão (linha e coluna) é igual ao número de nós do gráfico de fluxo, com as entradas representando as arestas entre os nós.
Cobertura de Execução
Execução de pelo menos uma vez de cada frase. É preciso ter vários casos de teste, embora possa ser impossível cobrir 100%.
Cobertura de Traço
Como em alguns programas o número de traços possíveis de execução é limitado, é útil usar o índice de (número de traços observados / número de todos os traços possíveis). Ao observar mais traços, o processo se aproxima de 100% de cobertura.
Cobertura de Loops
Os laços são segmentos controlados por decisões. Um loop executa um certo número de vezes, mas esse número deve ser preciso. Executá-lo uma vez a mais ou a menos pode ter consequências indesejáveis para o laço (como em while ou for).
Limitações
No teste de caixa branca, podemos nos convencer de que um programa faz o que está codificado, mas ele pode não fazer o que realmente precisamos.
Teste de Caixa Preta
Conceito e Terminologia
O teste de caixa preta (caixa opaca) foca na interface e nos requisitos funcionais do software. Permite aplicar um conjunto de condições de entrada para exercitar plenamente os requisitos funcionais. É uma alternativa complementar à caixa branca.
- Tipos de testes: cobertura de funções (invocar 100% das funções), classes de equivalência de dados e testes de limites.
Testes de Classes de Equivalência
Divide o domínio de entrada em um conjunto de dados que podem derivar casos de teste. Exemplo: se a entrada é um código composto por um prefixo de 3 dígitos começando com 9 e uma senha de até 6 caracteres (iniciando com letra, podendo conter letras, dígitos e $).
Limites de Testes
Muitos erros ocorrem nos limites. Se a entrada está na faixa [a, b], deve-se testar os valores: a-1, a, b, b+1.
Ambientes e Estratégias Especializadas
Testes de interface gráfica (GUI), menus, uso do mouse, documentação, entrada de dados e ajuda.
Estratégias de Teste de Software
- Teste de unidade, teste de integração, teste de regressão e teste de validação.
- Testes sem estratégia: motivados por preguiça ou por achar os testes chatos.
- Big Bang: testar tudo junto no final. Geralmente falha por toda parte e é muito difícil diagnosticar as causas.
Teste de Integração
Realizado durante a construção do sistema, envolvendo um número crescente de módulos. Pode ser estrutural (semelhante à caixa branca, mas em alto nível, focando em chamadas entre módulos) ou funcional.
Validação de Testes
Verifica se os requisitos foram cumpridos. Utiliza o código final da aplicação. Inclui casos de teste para cada requisito ou caso de uso, além de testes de desempenho e capacidade.
- Teste Alfa: realizado pelos desenvolvedores.
- Teste Beta: realizado pelos usuários.
Teste Unitário
Testa o funcionamento de um módulo individual de código.
Teste de Sistema
Verifica o sistema concluído para garantir que esteja livre de falhas. Avalia robustez, desempenho, confiabilidade, segurança, usabilidade e instalação.