quinta-feira, 22 de agosto de 2013

Notas de Teste de Software - Parte 1 Teste Funcional



Definição

Teste de Software é uma forma de garantir que o produto de software atende os requisitos que foram definidos, então executa-se o programa para revelar a presença de defeitos.

Terminologias 

D (Defeito), E (Erro) e F (Falha) – O Defeito é um passo, processo ou definição de dados incorretos. O Engano é uma ação (humana) que produz um defeito, esses dois conceitos são estáticos, portanto, não dependem da execução do programa. A existência de um Defeito pode ocasionar um Erro durante a execução do programa que o levará a um estado inconsistente, tal estado pode incorrer em Falha, que é um resultado diferente do esperado.

Figura 1 - Domínio Conceitual do Teste de Software. 

Na Figura 1 é possível identificar os conceitos envolvidos durante o processo de teste de software. O domínio de entrada de um programa P pode ser denotado por D(P), que é o conjunto de todos os valores possíveis para execução de P.  Um dado de teste T é um elemento do domínio de entrada de um programa P. Um caso de teste é um par formado pelo dado de teste e uma saída esperada (T, O(P) ), onde a saída esperada é forma por um domínio de saída O(P) e o conjunto de todos os testes são referenciados como Conjunto de Casos de Teste de um programa. O veredicto sobre o sucesso ou falha de um caso de teste é dado por um Oráculo utilizando a especificação S(P) e executando os casos de teste.

Durante as atividades de teste de software é possível encontrar outros conceitos relacionados: Validação, Verificação e Teste. A Validação nos remete a pensar se estamos construindo o produto certo. A Verificação se estamos fazendo da maneira certa. Enquanto o Teste examina o comportamento do produto de software durante a sua execução (Verificação Dinâmica).

Entre os tipos de teste vou apresentar os fundamentos sobre: 
1) Teste Funcional
2) Teste Estrutural
3) Teste de Mutação
4) Teste Baseado em Modelos

1 - Teste Funcional

Conhecido como Teste de Caixa Preta, tem objetivo de cobrir a especificação. Pode ser derivado a partir de um modelo com base na arquitetura e requisitos do software.
Benefício: Não leva em conta detalhes de implementação, pode ser utilizado em qualquer paradigma e fase do desenvolvimento.

Limitações: Não garante cobertura de código e a detecção de defeitos depende da qualidade da especificação de requisitos.

1.1 Particionamento por Classe de Equivalência


 
O domínio de entrada e de saída do programa é dividido em um número finito de partições (ou classes) de equivalência. 

Os dados da mesma partição tem a capacidade de revelar os mesmos defeitos e são consideradas partições válidas e inválidas. 

A geração de teste deve selecionar um dado em cada partição e os casos de teste devem ter cobertura de ao menos cada partição. 

Intervalos ou conjuntos são possuem indicação de que os dados serão processados da mesma forma.

Diretrizes:


Os casos de teste devem cobrir o maior número de classes válidas possível e deve haver um caso de teste para cada classe inválida.
 
Benefícios: Redução no tamanho do domínio de entrada e na criação de dados de teste. É adequado para aplicações com variáveis de entrada facilmente identificadas e co valores específicos.
 
Limitações: O critério não á facilmente aplicável quando o domínio de entrada é simples mas o processamento é complexo. Os dados podem não ser processados de forma idêntica ao grupo de dados especificado nos testes. A técnica não fornece diretrizes para combinação dos dados de teste.
 
Exemplo:
O programa deve determinar se um identificador é válido ou não em Silly Pascal (uma variante do Pascal). Um identificador válido deve começar com uma letra e conter apenas letras ou dígitos. Além disso, deve ter no mínimo um caractere e no máximo seis caracteres de comprimento.

Entradas da aplicação:
V – Vetor de caracteres que representa o identificador. T – Tamanho do vetor. L – 1º caractere do vetor é uma letra.

1.2 Análise de Valor Limite

Acrescenta inteligência ao critério de particionamento por classes de equivalência por não selecionar os dados de teste de forma aleatória para explorar os limites.
 
Casos de teste que exploram limites tem mais probabilidade de encontrar defeitos.
 
Os valores são escolhidos imediatamente acima ou abaixo dos limites definidos nas classes de equivalência.

1.3 Teste Funcional Sistemático

Combina PCE e AVL.
 
Requer ao menos 2 casos de teste para cada partição para eliminar defeitos coincidentes.
 
 
Ex: programa calcula o quadrado de um número; dado de teste { 2; resultado 4} é correto, mas pode ter vindo de uma soma 2 + 2.

1.4 Grafo de Causa-Efeito

A limitação dos critérios anteriores é que não consideram a combinação das entradas.

Explora ambiguidades e incompletudes da especificação.



Benefícios: exercita combinações dos dados de teste.

Limitações: complexidade em se construir o grafo e sua conversão em tabelas de decisão. O grande número de causas e efeitos podem não gerar dados de testes significativos.


Não perca o próximo post sobre Teste Estrutural!

0 comments:

Postar um comentário

Inscreva-se

Creative Commons 3.0. Tecnologia do Blogger.

Teste a Velocidade da Internet

Siga-me

Curta