Gerência e Qualidade de Software - Aula 07 - Conceitos de teste de software

Gerência e Qualidade de Software - Aula 07 - Conceitos de teste de software

Conceitos de Teste de Software

Introdução ao Teste de Software

  • O teste é uma forma importante de verificação e validação, mas não é a única. O objetivo do teste é executar um software à procura de defeitos.
  • A ideia comum é que o teste garante a ausência de defeitos, mas isso não é verdade; o foco deve ser encontrar o maior número possível de falhas.

Limitações dos Testes

  • Um software que passou nos testes não significa que está livre de defeitos; pode indicar que os testes realizados foram insuficientes.
  • A quantidade imensa de combinações possíveis em um método simples ilustra a dificuldade em testar tudo. Por exemplo, um método com três parâmetros pode ter 2^129 combinações.

Desafios na Execução dos Testes

  • Mesmo com computadores rápidos, como um Intel Core i7, levaria mais tempo do que a idade do universo para testar todas as combinações possíveis desse método.
  • Portanto, escolher quais testes realizar se torna essencial para maximizar a eficiência e eficácia da detecção de defeitos.

Técnicas para Seleção de Testes

  • Existem técnicas estruturais (caixa branca) e comportamentais (caixa preta). A técnica caixa preta foca nas entradas e saídas sem considerar a implementação interna.
  • O teste funcional caixa preta analisa se o comportamento do software atende às especificações definidas.

Métodos Específicos no Teste Caixa Preta

  • Dentro da técnica caixa preta, existem várias abordagens como partição equivalente e valores-limite.

Análise de Condições de Entrada em Testes

Considerações Iniciais sobre Especificações

  • A análise das condições de entrada é fundamental e não deve ser feita sem olhar a especificação do que está sendo testado. É importante agrupar entradas em conjuntos relevantes.
  • Exemplos práticos, como o teste de uma fila, mostram que as condições de entrada podem incluir estados como "fila cheia" ou "fila vazia", além de valores específicos.

Exemplo Prático: Cálculo de Preço

  • O método discutido calcula o preço considerando três parâmetros: preço real, margem de lucro (entre 0 e 1), e desconto para pagamentos à vista (5%).
  • As variações nos parâmetros são limitadas; por exemplo, a margem deve estar entre 0 e 1, enquanto valores negativos ou superiores a 1 são considerados inválidos.

Classes Válidas e Inválidas

  • Para criar testes eficazes, é necessário considerar tanto classes válidas quanto inválidas. As classes válidas devem ser agrupadas para facilitar a identificação de falhas.
  • Cada classe inválida deve ser testada separadamente para evitar compensações que possam mascarar erros no sistema.

Estratégias para Teste

  • Ao testar classes válidas, busca-se maximizar o número delas em um único teste. Por exemplo, se uma classe válida é "preço maior que zero", ela pode ser combinada com outras classes válidas.
  • As classes inválidas incluem valores como "menor que zero" ou "maior que um", onde cada uma deve ser testada isoladamente.

Técnicas Adicionais: Limites e Fronteiras

  • Uma técnica complementar é testar os limites dos parâmetros. Muitos defeitos ocorrem nas fronteiras dos valores permitidos.
  • A ideia é verificar se os desenvolvedores consideraram corretamente os limites inferior e superior ao definir as entradas do método.

Exemplos Práticos com Fronteiras

  • Um exemplo prático envolve testar valores próximos aos limites definidos na especificação. Isso inclui verificar se um valor ligeiramente acima ou abaixo do limite gera o resultado esperado.

Técnicas de Teste em Software

Limites de Preço e Margens

  • Discussão sobre a definição de um valor limite superior para produtos em uma loja, considerando margens de investimento como zero. A ideia é explorar diferentes cenários com base nesse limite.

Testes Caixa Branca

  • Introdução ao teste caixa branca, onde se conhece a estrutura interna do módulo testado, permitindo visualizar os caminhos internos e não apenas as entradas e saídas.
  • Desafio dos testes caixa branca: a complexidade aumenta com laços que geram múltiplos caminhos. Exemplo dado sobre variáveis que podem ter várias opções de execução.

Estratégias para Limitar Testes

  • Sugestão de limitar os testes a um conjunto interessante, utilizando critérios como conciliar todas as arestas do código. Isso permite testar todos os caminhos sem precisar percorrer cada um deles individualmente.
  • Demonstração prática com um exemplo de código que possui um defeito proposital relacionado à margem, ilustrando como transformar o código em um grafo para análise.

Análise Gráfica dos Caminhos

  • Explicação sobre como cada comando no código se torna uma aresta em um grafo, facilitando a visualização das condições e opções disponíveis durante o teste.
  • O gráfico resultante mostra as interações entre as condições (vértices), permitindo identificar quais caminhos foram percorridos durante os testes.

Abordagem Baseada em Arestas

  • Proposta de passar por todas as arestas do grafo gerado pelo código, garantindo que todos os caminhos sejam considerados nos testes.
  • Importância da escolha dos valores utilizados nos testes; sugere-se usar valores limites para cada condição identificada no código.

Níveis de Teste em Software

  • Discussão sobre diferentes níveis de teste existentes no desenvolvimento de software, incluindo teste unitário, integração e sistema.
  • O teste unitário foca na menor unidade do software (ex: classes), enquanto o teste integração avalia a interação entre essas unidades.

Testes de Aceitação e Análise de Requisitos

Importância do Teste de Aceitação

  • O teste de aceitação é o último nível de teste, focando na definição e análise dos requisitos, mas principalmente nas metas do usuário.
  • As metas do usuário nem sempre podem ser traduzidas diretamente em requisitos formais, refletindo a complexidade das necessidades expressas pelos usuários.
  • O teste de aceitação analisa como as necessidades e problemas dos usuários são representados nos requisitos, garantindo que suas expectativas sejam atendidas.
  • É fundamental entender que os usuários têm dificuldades em expressar suas necessidades, o que pode impactar a eficácia da análise de requisitos.
Video description

Engenharia de Computação - 16º Bimestre Disciplina: Gerência e Qualidade de Software – EES - 201 Univesp - Universidade Virtual do Estado de São Paulo Professor responsável pela disciplina: Fábio Levy Siqueira Playlist da disciplina: https://www.youtube.com/playlist?playnext=1&list=PLxI8Can9yAHcmjsfjFdo_xJ3xhLiczzLC