Teste de Software
Parte 3
Ricardo de Almeida Falbo
Tópicos Especiais – Qualidade de Software
2008/2
Departamento de Informática
Universidade Federal do Espírito Santo
Agenda


Teste Funcional
Teste Estrutural
Tópicos Especiais - Qualidade de Software 2008/2
2
Teste Funcional


Técnica de projeto de casos de teste na qual o
programa ou sistema é considerado uma caixapreta. Para testá-lo, são fornecidas entradas e
avaliadas as saídas geradas para verificar se
estão em conformidade com os objetivos
especificados.
Estabelece critérios para particionar o domínio
de entrada em subdomínios, a partir dos quais
serão definidos os casos de teste (Delamaro et
al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
3
Teste Funcional

Alguns critérios:





Particionamento de Equivalência
Análise de Valor Limite
Teste Funcional Sistemático
Todos os critérios das técnicas funcionais
baseiam-se apenas na especificação do produto
testado e, portanto, o teste funcional depende
fortemente da qualidade da especificação de
requisitos.
Podem ser aplicados em todas as fases de teste
e são independentes de paradigma, pois não
levam em consideração a implementação.
Tópicos Especiais - Qualidade de Software 2008/2
4
Particionamento de Equivalência



Divide o domínio de entrada em classes de
equivalência, de acordo com a especificação do
programa.
Uma classe de equivalência representa um
conjunto de estados válidos ou inválidos para as
condições de entrada.
Caso as classes de equivalência se sobreponham
ou os elementos de uma mesma classe não se
comportem da mesma maneira, elas devem ser
revistas, a fim de torná-las distintas (Delamaro
et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
5
Particionamento de Equivalência


Uma vez identificadas as classes de equivalência,
devem-se definir os casos de teste, escolhendo
um elemento de cada classe.
Qualquer elemento da classe pode ser
considerado um representante desta e, portanto,
basta ter definir um caso de teste por classe de
equivalência (Delamaro et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
6
Particionamento de Equivalência

Passos:


Identificar as classes de equivalência, tomando por
base a especificação e, sobretudo, as entradas e as
saídas;
Gerar casos de teste selecionando um elemento de
cada classe, de modo a ter o menor número possível de
casos de teste (Delamaro et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
7
Exemplo 1: Programa Cadeia de
Caracteres

Especificação:


Curso Normal: O usuário informa uma cadeia de caracteres
contendo de 1 a 20 caracteres e um caractere a ser
procurado. O sistema informa a posição na cadeia em que o
caractere foi encontrado pela primeira vez.
Curso Alternativo: O caractere informado não está presente
na cadeia previamente informada.


Curso de Exceção: A cadeia informada está vazia ou seu
tamanho é maior do que 20.


Uma mensagem é exibida informando que o caractere não
pertence à cadeia informada.
Uma mensagem de erro é exibida indicando que a cadeia de
caracteres deve ter tamanho de 1 a 20.
Curso de Exceção: Não é informado um caractere a ser
procurado ou é informado mais de um caractere.

Uma mensagem de erro é exibida indicando que um caractere a
ser procurado deve ser informado.
Tópicos Especiais - Qualidade de Software 2008/2
8
Exemplo 1: Programa Cadeia de
Caracteres

Entradas:



Cadeia de caracteres
Caractere a ser procurado
Saídas possíveis:




A posição da primeira ocorrência do caractere a ser
procurado na cadeia.
Mensagem informando que o caractere não pertence à
cadeia informada.
Mensagem de erro informando que a cadeia é inválida.
Mensagem de erro informando que o caractere a ser
procurado é inválido.
Tópicos Especiais - Qualidade de Software 2008/2
9
Exemplo 1: Programa Cadeia de
Caracteres

Classes de Equivalência:
Entrada
Classes de
Equivalência
Válidas
Classes de
Equivalência
Inválidas
Cadeia de
caracteres
Qualquer cadeia
de tamanho T, tal
que 1  T  20.
Qualquer cadeia de
tamanho T, tal que
T < 1 e T > 20.
Caractere a
Caractere que
ser procurado pertence à
cadeia.
Caractere que
não pertence à
cadeia.
Caractere não
informado.
Mais de um
caractere é
informado.
Tópicos Especiais - Qualidade de Software 2008/2
10
Exemplo 1: Programa Cadeia de
Caracteres

Casos de Teste:
Cadeia de
Caracteres
Caractere a ser Saída Esperada
procurado
abc
b
2
abc
d
O caractere não pertence à
cadeia informada.
abcdefghijklm
nopqrstuvxyz
<<qualquer>>
Erro: Cadeia inválida.
abc
xyz
Erro: Mais de um caractere
informado.
abc
<<caractere não Erro: Nenhum caractere
informado>>
informado.
Tópicos Especiais - Qualidade de Software 2008/2
11
Exemplo 2: Programa Fibonacci

Especificação:

Curso Normal: O usuário informa um número n, inteiro maior
do que zero. O enésimo termo da série de Fibonacci é
calculado e apresentado. A série de Fibonacci tem a seguinte
formação:




Curso de Exceção: O número informado é menor do que 1.


O dois primeiros termos da série são iguais a 1.
O enésimo termo (n > 2) é calculado da seguinte forma: Fn =
Fn-1 + Fn-2.
Portanto, a série de Fibonacci tem a seguinte forma:
1,1,2,3,5,8,13,21,34...
Uma mensagem de erro é exibida indicando que o número deve
ser maior do que 0.
Curso de Exceção: O valor informado não é um número
inteiro.

Uma mensagem de erro é exibida indicando que um número
inteiro positivo deve ser informado.
Tópicos Especiais - Qualidade de Software 2008/2
12
Exemplo 2: Programa Fibonacci

Entrada:


Número inteiro n.
Saídas possíveis:



Enésimo termo da série de Fibonacci.
Mensagem de erro informando que n deve ser maior do
que 0.
Mensagem de erro informando que o valor informado
deve ser um número inteiro positivo.
Tópicos Especiais - Qualidade de Software 2008/2
13
Exemplo 2: Programa Fibonacci

Classes de Equivalência:
Entrada Classes de
Equivalência
Válidas
n
n é um número
inteiro positivo.
Classes de
Equivalência
Inválidas
n é um número
inteiro menor ou igual
a 0.
n não é um número
inteiro.
Tópicos Especiais - Qualidade de Software 2008/2
14
Exemplo 2: Programa Fibonacci

Casos de Teste:
n
Saída Esperada
6
8
-2
Erro: n deve ser maior do que 0.
a
Erro: Entre com um número inteiro positivo.
Tópicos Especiais - Qualidade de Software 2008/2
15
Avaliação do Critério



Possibilita uma boa redução do tamanho do
domínio de entrada.
É especialmente adequado para aplicações em
que as variáveis de entrada podem ser
facilmente identificadas e assumem valores
específicos.
Não é tão facilmente aplicável quando o domínio
de entrada é simples, mas o processamento é
complexo.

Nestes casos, a especificação pode sugerir que um
grupo de dados seja processado de forma idêntica, mas
isso pode não ocorrer na prática.
Tópicos Especiais - Qualidade de Software 2008/2
16
Análise de Valor Limite



Critério usado em conjunto com o
particionamento de equivalência.
Premissa: casos de teste que exploram
condições limites têm maior probabilidade de
encontrar defeitos.
Tais condições estão exatamente sobre ou
imediatamente acima ou abaixo dos limitantes
das classes de equivalência (Delamaro et al.,
2007).
Tópicos Especiais - Qualidade de Software 2008/2
17
Análise de Valor Limite

Recomendações:




Condição de entrada especificando um intervalo de
valores: definir casos de teste para os limites desse
intervalo e para valores imediatamente subseqüentes,
acima e abaixo, que explorem as classes vizinhas.
Condição de entrada especificando uma quantidade de
valores: definir casos de teste com nenhum valor de
entrada, somente um valor, com a quantidade máxima
de valores e com a quantidade máxima de valores + 1.
Aplicar as recomendações acima para condições de
saída, quando couber.
Se a entrada ou a saída for um conjunto ordenado,
deve ser dada atenção especial aos primeiro e último
elementos desse conjunto.
Tópicos Especiais - Qualidade de Software 2008/2
18
Exemplo 1: Programa Cadeia de
Caracteres

Casos de Teste adicionais:
Cadeia de
Caracteres
Caractere a ser Saída Esperada
procurado
<<qualquer>>
Erro: Cadeia inválida. Entre
com uma cadeia contendo de
1 a 20 caracteres.
abcdefghijklm
nopqrstu
<<qualquer>>
Erro: Cadeia inválida. Entre
com uma cadeia contendo de
1 a 20 caracteres.
a
a
1
a
x
O caractere não pertence à
cadeia informada.
Tópicos Especiais - Qualidade de Software 2008/2
19
Exemplo 1: Programa Cadeia de
Caracteres

Casos de Teste:
Cadeia de
Caracteres
Caractere a ser Saída Esperada
procurado
abcdefghijklm
nopqrst
a
1
abcdefghijklm
nopqrst
t
20
abc
xy
Erro: Mais de um caractere
informado.
Tópicos Especiais - Qualidade de Software 2008/2
20
Exemplo 2: Programa Fibonacci

Casos de Teste adicionais:
n
Saída Esperada
1
1
2
1
0
Erro: n deve ser maior do que 0.
Tópicos Especiais - Qualidade de Software 2008/2
21
Avaliação do Critério

As vantagens e desvantagens deste critério são
as mesmas do critério Particionamento de
Equivalência.
Tópicos Especiais - Qualidade de Software 2008/2
22
Teste Funcional Sistemático


Combina os critérios de Particionamento de
Equivalência e Análise de Valor Limite.
Uma vez que os domínios de entrada e de saída
tenham sido particionados, este critério requer
ao menos dois casos de teste de cada partição
para minimizar o problema de defeitos
coincidentes que mascaram falhas (Delamaro et
al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
23
Teste Funcional Sistemático

Algumas diretrizes adicionais:

Valores numéricos – Domínio de Entrada



Valores numéricos – Domínio de Saída



Discretos: testar todos os valores
Intervalo de valores: testar os extremos e um valor no
interior do intervalo
Discretos: gerar cada um dos valores
Intervalo de valores: gerar cada um dos extremos e ao
menos um valor no interior do intervalo
Valores ilegais: também devem ser incluídos nos casos
de teste para se verificar se o software os rejeita.
Diretrizes do critério de análise de valor limite devem
ser empregadas.
Tópicos Especiais - Qualidade de Software 2008/2
24
Teste Funcional Sistemático

Algumas diretrizes adicionais:

Tipos de valores diferentes




Explorar tipos ilegais que podem ser interpretados como
valores válidos (p.ex., valor real para um campo inteiro).
Explorar entradas válidas, mas que podem ser
interpretadas como tipos ilegais (p.ex., números em
campos que requerem caracteres).
Explorar limites da representação binária dos dados
(p.ex., para campos inteiros de 16 bits, selecionar os
valores -32768 e +32767).
Testar ao menos dois elementos de uma mesma classe
de equivalência para minimizar o problema de defeitos
coincidentes que mascaram falhas.
Tópicos Especiais - Qualidade de Software 2008/2
25
Exemplo 1: Programa Cadeia de
Caracteres

Casos de Teste adicionais:
Cadeia de
Caracteres
Caractere a ser Saída Esperada
procurado
!
`´
O caractere não pertence à
cadeia informada.
!”#$%&()*+´
/01234567
!
1
&
6
´
11
6
19
7
20
Tópicos Especiais - Qualidade de Software 2008/2
26
Exemplo 2: Programa Fibonacci

Casos de Teste:
n
Saída Esperada
1.0
Erro: Entre com um número inteiro positivo.
-1
Erro: n deve ser maior do que 0.
xyz Erro: Entre com um número inteiro positivo.
23
28657
24
46368
11
89
Tópicos Especiais - Qualidade de Software 2008/2
27
Avaliação do Critério


Por ser baseado nos critérios Particionamento de
Equivalência e Análise de Valor Limite, apresenta
os mesmos problemas que estes.
Para tratar o problema da correção coincidente,
enfatiza a seleção de mais de um caso de teste
por partição ou limite, aumentando, assim, a
chance de revelar defeitos (Delamaro et al.,
2007).
Tópicos Especiais - Qualidade de Software 2008/2
28
Teste Funcional: Considerações Finais



Como os critérios funcionais se baseiam apenas
na especificação, não podem assegurar que
partes críticas e essenciais do código tenham
sido cobertas.
Além disso, os próprios critérios apresentam
limitações.
Assim, é fundamental que outras técnicas sejam
aplicadas em conjunto, para que o software seja
explorado por diferentes pontos de vista
(Delamaro et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
29
Teste Estrutural



Baseia-se no conhecimento da estrutura interna
do programa.
Caminhos lógicos são testados, estabelecendo
casos de teste que põem à prova condições,
laços, definições e usos de variáveis.
Principais critérios:



Critérios baseados na complexidade
Critérios baseados no fluxo de controle
Critérios baseados no fluxo de dados
(Delamaro et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
30
Teste Estrutural



A maioria dos critérios estruturais utiliza uma
representação de Grafo de Fluxo de Controle
(GFC) ou Grafo de Programa, no qual blocos
disjuntos de comandos são considerados nós.
A execução do primeiro comando do bloco
acarreta a execução de todos os outros
comandos desse bloco, na ordem dada.
Todos os comandos em um bloco têm um único
predecessor (possivelmente com exceção do
primeiro) e um único sucessor (possivelmente
com exceção do último) (Delamaro et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
31
Teste Estrutural




A representação de um programa como um GFC
estabelece uma correspondência entre nós e
blocos de comandos e indica possíveis fluxos de
controle entre blocos por meio de arcos.
Um GFC é um grafo orientado com um único nó
de entrada e um único nó de saída.
Cada nó representa um bloco indivisível
(seqüencial) de comandos e cada arco representa
um possível desvio de um bloco para outro.
A partir do GFC, podem ser escolhidos os
elementos que devem ser executados (Delamaro
et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
32
Exemplo: Programa Fibonacci
public class Fibonacci {
public long fibonacci (int n) {
1
2
3
int i =
int a =
int b =
1;
0;
1;
4
5
6
7
8
9
10
11
12
if (n > 1) {
while (i < n) {
long temp =
b = b + a;
a = temp;
i = i + 1;
}
}
return (b);
b;
}
}
Tópicos Especiais - Qualidade de Software 2008/2
33
Exemplo: Programa Fibonacci
public class Fibonacci {
public long fibonacci (int n) {
1
2
3
int i =
int a =
int b =
1;
0;
1;
4
5
6
7
8
9
10
11
12
if (n > 1) {
while (i < n) {
long temp =
b = b + a;
a = temp;
i = i + 1;
}
}
return (b);
Nó
b;
Bloco de
Comandos
1
1a4
2
5
3
6 a 10
4
11 e 12
}
}
Tópicos Especiais - Qualidade de Software 2008/2
34
Exemplo: Programa Fibonacci
Grafo de Fluxo de Controle
1
2
4
3
Tópicos Especiais - Qualidade de Software 2008/2
35
Critérios Baseados na Complexidade


Utilizam informações sobre a complexidade do
programa para derivar casos de teste.
O Critério de McCabe ou Teste de Caminho
Básico é o critério baseado em complexidade
mais conhecido.
Tópicos Especiais - Qualidade de Software 2008/2
36
Critério de Teste de Caminho Básico


Utiliza a medida de complexidade ciclomática
para derivar requisitos de teste.
Complexidade ciclomática: número de caminhos
linearmente independentes do conjunto básico
de um programa, indicando um limite máximo
para o número de casos de teste que devem ser
executados para garantir que todas as instruções
do programa sejam exercitadas pelo menos uma
vez (Delamaro et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
37
Critério de Teste de Caminho Básico



Caminho linearmente independente: qualquer
caminho que introduza pelo menos um novo
conjunto de instruções ou uma nova condição,
ou seja, que introduza pelo menos um arco que
não tenha sido atravessado.
Caminhos linearmente independentes
estabelecem um conjunto básico para o GFC.
Se os casos de teste puderem ser projetados de
modo a forçar a execução desses caminhos
(conjunto básico):


cada instrução terá sido executada pelo menos uma vez
cada condição terá sido executada com V e F
Tópicos Especiais - Qualidade de Software 2008/2
38
Critério de Teste de Caminho Básico


O conjunto básico não é único. De fato,
diferentes conjuntos básicos podem ser
derivados para um GFC.
O tamanho do conjunto (número de caminhos) é
dado pela complexidade ciclomática, que pode
ser calculada de três formas (Delamaro et al.,
2007):



Número de regiões em um GFC, uma região
corresponde a uma área incluída no plano do grafo. O
número de regiões é computado contando-se todas as
áreas delimitadas e a área não delimitada fora do grafo
noArcos – noNos + 2
Número de nós predicativos + 1
Tópicos Especiais - Qualidade de Software 2008/2
39
Exemplo: Programa Fibonacci 1
public class Fibonacci {
Nó
public long fibonacci (int n) {
1
2
3
int i =
int a =
int b =
4
5
6
7
8
9
10
11
12
if (n > 1) {
while (i < n) {
long temp =
b = b + a;
a = temp;
i = i + 1;
}
}
return (b);
}
1;
0;
1;
b;
Bloco de
Comandos
1
1a4
2
5
3
6 a 10
4
11 e 12
1
2
4
}
3
Tópicos Especiais - Qualidade de Software 2008/2
40
Exemplo: Programa Fibonacci 1



CC = ?
Casos de Teste: ?
Programa está correto?
Tópicos Especiais - Qualidade de Software 2008/2
41
Exemplo: Programa Fibonacci 2
public class Fibonacci {
public long fibonacci (int n)
{
1
if (n == 1)
2
return 1;
3
else
4
return fibonacci(n-1)+ fibonacci(n-2);
}
}



CC = ?
Casos de Teste: ?
Programa está correto?
Tópicos Especiais - Qualidade de Software 2008/2
42
Critérios Baseados no Fluxo de Controle


Utilizam apenas características de controle da
execução do programa (comandos, desvios,
laços) para derivar casos de teste.
Principais Critérios:



Todos-Nós: requer que cada nó do grafo (e por
conseguinte cada comando do programa) seja
executado pelo menos uma vez (mínimo esperado de
uma boa atividade de teste).
Todos-Arcos: requer que cada arco do grafo (cada
desvio de fluxo de controle) seja exercitado pelo menos
uma vez.
Todos-Caminhos: requer que todos os caminhos
possíveis no programa sejam exercitados (pode ser
impraticável).
Tópicos Especiais - Qualidade de Software 2008/2
43
Exemplo: Programa Fibonacci 1
public class Fibonacci {
Nó
public long fibonacci (int n) {
1
2
3
int i =
int a =
int b =
4
5
6
7
8
9
10
11
12
if (n > 1) {
while (i < n) {
long temp =
b = b + a;
a = temp;
i = i + 1;
}
}
return (b);
}
1;
0;
1;
b;
Bloco de
Comandos
1
1a4
2
5
3
6 a 10
4
11 e 12
1
2
4
}
3
Tópicos Especiais - Qualidade de Software 2008/2
44
Exemplo: Programa Fibonacci 1

Todos-Nós
1
2
4
3


Casos de Teste ?
n=2
Tópicos Especiais - Qualidade de Software 2008/2
45
Exemplo: Programa Fibonacci 1

Todos-Arcos
1
2
4
3


Casos de Teste ?
n = 1; n = 2
Tópicos Especiais - Qualidade de Software 2008/2
46
Exemplo: Programa Fibonacci 1

Todos-Caminhos
1
2
4
3


Casos de Teste ?
Infinitos...
Tópicos Especiais - Qualidade de Software 2008/2
47
Critérios Baseados no Fluxo de Dados



Baseiam-se nas associações entre a definição de
uma variável e seus possíveis usos subseqüentes
para derivar casos de teste.
Visam testar as interações que envolvem
definições de variáveis e subseqüentes
referências a essas definições.
Premissa: Comandos que têm uma relação de
fluxo de dados são provavelmente parte de uma
mesma função e, portanto, devem ser
exercitados juntos.
Tópicos Especiais - Qualidade de Software 2008/2
48
Critérios Baseados no Fluxo de Dados

Principais Critérios:



Todas-Definições: requer que cada definição de variável
seja exercitada pelo menos uma vez.
Todos-Usos: requer que todas as associações entre
uma definição de variável e seus subseqüentes usos
sejam exercitadas pelo menos uma vez, em um
caminho em que não há redefinição da variável
(caminho livre de definição).
Todos-DU-Caminhos: requer que toda associação entre
uma definição de variável e seus subseqüentes usos
seja exercitada por todos os caminhos livres de
definição e livres de laço que cubram essa associação.
Tópicos Especiais - Qualidade de Software 2008/2
49
Exemplo: Programa Fibonacci 1
public class Fibonacci {
Nó
public long fibonacci (int n) {
1
2
3
int i =
int a =
int b =
4
5
6
7
8
9
10
11
12
if (n > 1) {
while (i < n) {
long temp =
b = b + a;
a = temp;
i = i + 1;
}
}
return (b);
}
1;
0;
1;
b;
Bloco de
Comandos
1
1a4
2
5
3
6 a 10
4
11 e 12
1
2
4
}
3
Tópicos Especiais - Qualidade de Software 2008/2
50
Exemplo: Programa Fibonacci 1

Todas-Definições



Todos-Usos



Blocos a Exercitar ?
Casos de Teste ?
Blocos a Exercitar ?
Casos de Teste ?
Todos-DU-Caminhos


Blocos a Exercitar ?
Casos de Teste ?
Tópicos Especiais - Qualidade de Software 2008/2
51
Teste Estrutural: Considerações Finais





Foco Principal: teste de unidade
Alguns elementos requeridos podem não ser
executáveis.
Se um programa não implementa uma função,
não existirá um caminho que corresponda a ela
e nenhum dado de teste será requerido para
exercitá-la.
Essa técnica é vista como complementar às
demais, uma vez que cobre classes distintas de
defeitos.
Estratégia de Teste: aplicar inicialmente critérios
mais fracos e talvez menos eficazes, porém
menos custosos (Delamaro et al., 2007).
Tópicos Especiais - Qualidade de Software 2008/2
52
Aplicando Técnicas de Teste


Uma boa abordagem para a introdução de
práticas mais sistemáticas de teste em uma
organização consiste em aplicar inicialmente
critérios mais fracos, e talvez menos eficazes,
porém menos custosos.
Em função da disponibilidade de orçamento e de
tempo, da criticidade de um programa e da
maturidade da organização, aplicar critérios mais
fortes, e eventualmente mais eficazes, porém
mais caros.
Tópicos Especiais - Qualidade de Software 2008/2
53
Abordagem Incremental de Aplicação de
Técnicas de Teste
1.
2.
3.
4.
5.
Elaborar um conjunto de testes funcionais (Tf),
utilizando um critério funcional ou uma
combinação deles.
Avaliar a cobertura de Tf em relação aos
critérios de teste estruturais.
Evoluir Tf até obter um conjunto de teste Tn
adequado ao critério Todos-Nós.
Avaliar a cobertura de Tn em relação aos
demais critérios de teste estruturais.
Evoluir Tn até obter um conjunto de teste Ta
adequado ao critério Todos-Arcos.
Tópicos Especiais - Qualidade de Software 2008/2
54
Abordagem Incremental de Aplicação de
Técnicas de Teste
6.
7.
Avaliar a cobertura de Ta em relação aos demais
critérios de teste estruturais.
Evoluir Ta até obter um conjunto de teste Tu
adequado ao critério Todos-Usos.
Tópicos Especiais - Qualidade de Software 2008/2
55
Referências

Delamaro, M.E., Maldonado, J.C., Jino, M.,
Introdução ao Teste de Software, Série Campus
– SBC, Editora Campus, 2007.
Tópicos Especiais - Qualidade de Software 2008/2
56
Download

Aula 8 - Teste de Software - Parte 3 - Informática