Testes de software - Teste funcional
Vitor Alcântara de Almeida
Universidade Federal do Rio Grande do Norte
Natal, Brasil
30 de outubro de 2014
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 1 / 51
Sumário
1 Teste funcional - Introdução
2 Particionamento em Classes de Equivalência
3 Análise do valor limite
4 Teste funcional sistemático
5 Ferramentas de testes
6 Referências
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 2 / 51
Objetivo
Definição de testes funcionais
Tipos de critérios existentes
Critérios de partição:
I Classes de equivalência
I Valor limite
I Teste funcional sistemático
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 3 / 51
O que é teste funcional?
Técnica de teste no qual o sistema é considerada uma caixa preta
São avaliadas as saídas produzidas pelo sistema de acordo com
as entradas fornecidas
Detalhes de implementação não são consideradas nos testes
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 4 / 51
Que valores escolher para os testes?
Uma forma de testar é através da verificação de todas as
entradas possíveis - teste exaustivo
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 5 / 51
Programa exemplo
Porém, seja abaixo a especificação de um programa
Cadeia de Caracteres
1 O programa solicita do usuário:
1 Um inteiro positivo T no intervalo entre 1 e 20
2 Uma cadeia de caracteres CC com tamanho T
3 Um caractere C
2 Programa retorna posição onde se encontra C em CC
3 O programa pode procurar por um caractere mais de uma vez
(interativamente)
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 6 / 51
Testes possíveis
Quantas combinações de entradas podem ser testadas?
Inviável testar para todas as entradas
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 7 / 51
Subconjunto do domínio de entrada
É impossível testar todos os elementos do domíno ==> definir um
subconjunto
Mas, qual critério utilizar para selecionar o subconjunto?
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 8 / 51
Possíveis soluções
Random testing
Usar valores quaisquer - aleatórios
Abordagem possível
Mas há outras técnicas mais padronizadas para encontrar bugs
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 9 / 51
Critérios de teste estrutural
Podemos definir critérios de teste com base no conhecimento da
estrutura interna da implementação
Ex.:
I Todos os métodos foram executados?
I Todas as linhas de comando foram executadas?
I Todos os nós de decisão foram executados?
Critérios de caixa branca - não é o propósito desta aula
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 10 / 51
Critérios de teste funcional
Também podemos definir critérios de teste com base no
conhecimento dos requisitos do programa
...independemente da estrutura interna da implementação
Ex.:
I Os valores limites de cada campo foram exercitados?
I Os valores mais utilizados foram exercitados?
Veremos nesta aula alguns critérios funcionais
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 11 / 51
Alguns critérios de teste funcional
Como podemos criar testes de forma padronizada a partir da
especificação do sistema?
Alguns critérios foram propostos neste sentido:
I Particionamento em classes de equivalência
I Análise do valor limite
I Teste funcional sistemático
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 12 / 51
Sumário
1 Teste funcional - Introdução
2 Particionamento em Classes de Equivalência
3 Análise do valor limite
4 Teste funcional sistemático
5 Ferramentas de testes
6 Referências
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 13 / 51
Classe de Equivalência
O domínio de entrada do software é dividido em classes (ou
partições)
Cada classe de equivalência é um subdomínio de entrada no qual
os valores de entrada produzem comportamento similar
Exemplo a partir de “Cadeia de Caracteres´´
I O tamanho da cadeia x deve ser entre 1 e 20
I Uma classe para 1 ≤ x ≤ 20
I Uma classe para x < 1 e uma classe para x > 20
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 14 / 51
Classe de Equivalência
A base deste critério é que todos os dados de uma mesma
partição têm a capacidade de revelar as mesmas falhas
Se o sistema falhar com um valor de uma partição, deverá falhar
com qualquer outro valor desta mesma partição
I O contrário também é válido
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 15 / 51
Classe de Equivalência
Todos os valores do domínio de entrada devem pertencer a uma
classe
Para identificar valores com comportamento similar, analisamos
conjuntos de entrada e de saída
I Como criar as classes a partir desta análise?
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 16 / 51
Tipos de Classes de Equivalência
As partições são então classificadas em dois tipos:
I Classes válidas: valores válidos no domínio de entrada
I Classes inválidas: valores inválidos no domínio de entrada
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 17 / 51
Diretrizes para criação de classes de equivalência
Variável de entrada Classes de equivalência
Uma classe válida para valores pertencentes
Intervalo de valores ao intervalo
Uma classe inválida para valores menores que
o limite inferior
Uma classe inválida para valores maiores que
o limite superior
Uma classe válida para número de valores
Quantidade de valores
igual ao previsto
Uma classe inválida para número de valores
maior ou menor que o número previsto
Uma classe válida para cada valor determinado
Valores determinados e distintos
Uma classe inválida para qualquer outro valor
diferente
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 18 / 51
Como criar testes de classes de equivalência
Para gerar testes de acordo com este critério, dois passos devem
ser executados:
1 identificação das classes de equivalência
2 gerar casos de teste selecionando pelo menos um elemento de
cada classe
F Deste modo, o número de casos de teste é menor e pode encontrar
mais erros
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 19 / 51
Programa exemplo
Relembrando o programa exemplo:
Cadeia de Caracteres
1 O programa solicita do usuário:
1 Um inteiro positivo T no intervalo entre 1 e 20
2 Uma cadeia de caracteres CC com tamanho T
3 Um caractere C
2 Programa retorna posição onde se encontra C em CC
3 O programa pode procurar por um caractere mais de uma vez
(interativamente)
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 20 / 51
Exemplo de aplicação de Classes de equivalência
Para o programa especificado temos quatro entradas:
I T - tamanho da cadeira de caracteres
I CC - uma cadeia de caracteres
I C - um caractere a ser procurado
I O - a opção por procurar mais caracteres
Qualquer valor de CC e C é válido no sistema
I Não é necessário definir classes de equivalência
1 <= T <= 20
O = TRUE ou O = FALSE
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 21 / 51
Exemplo de aplicação de Classes de equivalência
Considerando o domínio de saída, temos duas alternativas:
I O sistema retorna a posição onde o caractere foi encontrado na
cadeia de caracteres
I O sistema retorna uma mensagem dizendo que o caractere não foi
encontrado
Com estas informações, nova partição pode ser feita no domínio
de entrada:
1 C ∈ CC
2 C∈/ CC
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 22 / 51
Exemplo de aplicação de Classes de equivalência
Ao total, 6 classes de equivalência, mostradas abaixo:
Variável de Classes de Classes de
entrada equivalência equivalência
válidas inválidas
T 1 <= T <= 20 T < 1 (I1a) e
(V1) T > 20 (I1b)
O Sim (V2) Não (I2)
C Caractere que Caractere que
pertence à não pertence à
cadeia (V3) cadeia (I3)
Deve ser criado um caso de teste para cada classe de
equivalência
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 23 / 51
Testes criados
Variáveis de entrada Saída esperada Classe
T CC C O
0 ’entre com um inteiro entre 1 e 20’ I1a
34 ’entre com um inteiro entre 1 e 20’ I1b
3 abc c ’o caractere c aparece na posição 3 V1 &
da cadeia’ V3
s V2
k ’o caractere k não partence à ca- I3
deia’
n I2
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 24 / 51
Avaliação do critério
Redução do domínio de entrada
Testes baseados unicamente na especificação
Mais adequado para aplicações onde variáveis de entrada são
identificáveis com facilidade e assumem valores específicos
Não determina combinações de testes
I Poderia cobrir as classes de equivalência de maneira mais eficiente
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 25 / 51
Sumário
1 Teste funcional - Introdução
2 Particionamento em Classes de Equivalência
3 Análise do valor limite
4 Teste funcional sistemático
5 Ferramentas de testes
6 Referências
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 26 / 51
Valor limite
Estudos mostram que casos de testes que exploram condições
limites têm uma maior probabilidade de encontrar defeitos
(MEYERS, 2004)
Dada uma classe de equivalência e um valor no limite da mesma,
tais condições correspondem a testar:
I O valor limite da classe
I O valor imediatamente acima do limite da classe OU
imediatamente abaixo do limite da classe
Exemplo a partir de “Cadeia de Caracteres´´
F Para a mesma cadeia x que deve ser entre 1 e 20
F Realizar testes para 0, 1, 20, 21
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 27 / 51
Valor limite
Critério utilizado conjuntamente com classes de equivalência
I São escolhidos valores limites ao invés de valores aleatórios
Algumas diretrizes foram estabelecidas para a criação dos testes
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 28 / 51
Diretriz 1: Faixa de valores
Definir testes para:
1 Os limites do intervalo
2 Os valores subseq. ao intervalo se eles exploram classes inválidas
Exemplo?
Para x ∈ N ∧ −10 <= x <= 10 testar os valores: -11;-10;10;11
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 29 / 51
Diretriz 2: Quantidade de valores
Aplica-se a mesma diretriz se parâmetro for uma quantidade de
valores
Ex: Se uma entrada determina serem inseridos de 1 a 255
valores, inserir testes para 0,1,255 e 256 valores
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 30 / 51
Mais diretrizes
Usar as diretrizes 1 (Faixa de valores) e 2 (Quantidade de
valores) para verificar também as condições de saída
Se entrada ou saída for um conjunto ordenado, dar maior atenção
aos primeiro e último elementos desse conjunto
Usar a intuição para definir outras condições limites!
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 31 / 51
Classes de equivalência do exemplo
Variável de Classes de Classes de
entrada equivalência equivalência
válidas inválidas
T 1 <= T <= 20 T < 1 (I1a) e
(V1) T > 20 (I1b)
O Sim (V2) Não (I2)
C Caractere que Caractere que
pertence à não pertence à
cadeia (V3) cadeia (I3)
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 32 / 51
Novos casos de teste
Entrada Saída esperada
T CC C O
21 ’entre com um inteiro entre 1 e 20’
0 ’entre com um inteiro entre 1 e 20’
1 a a ’o caractere a aparece na posição 1 da cadeia’
s
x ’o caractere x não pertence à cadeia
n
20 abcdefghijkl a ’o caractere a aparece na posição 1 da cadeia’
mnopqrst
s
t ’o caractere t aparece na posição 20 da cadeia
n
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 33 / 51
Avaliação do critério
Vantagens e desvantagens similares ao critério Particionamento
de Equivalência
Mas, neste caso, há diretrizes para aproveitar melhor os testes
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 34 / 51
Sumário
1 Teste funcional - Introdução
2 Particionamento em Classes de Equivalência
3 Análise do valor limite
4 Teste funcional sistemático
5 Ferramentas de testes
6 Referências
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 35 / 51
Teste funcional sistemático
Combina Particionamento de Equivalência com Análise do Valor
Limite
Mínimo de dois testes para cada partição (classe de equivalência)
I Minimiza que defeitos coincidentes mascarem falhas
Exemplo
I Um programa retorna o quadrado de um número. Se valor de entrada
for 2, valor produzido será 4
I Qual operação realizada? 2*2 ou 2+2?
Possui critérios mais rigorosos para cada tipo de entrada
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 36 / 51
Diretrizes para testes funcionais sistemáticos
1 Valores numéricos - testar os extremos e um valor dentro do
intervalo
2 Valores discretos - testar cada valor discreto e um valor fora dos
já determinados
3 Testar tipos diferentes de dados e casos especiais
Exemplos:
1 Limites de representação (-32768 e 32767 para int16)
2 Inserir valor de tipo diferente do previsto (int no lugar de char)
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 37 / 51
Mais diretrizes para testes funcionais sistemáticos
1 Números reais - verificar limites igualmente a números inteiros
1 Comparações podem não ser exatas - definir margem de erro
2 Intervalos variáveis - o intervalo de uma variável depende do valor
de outra variável
1 Testar combinações dos possíveis valores
Exemplo: 0 ≤ x ≤ y
1 Entradas válidas: x = y = 0 , x = 0 < y , 0 < x = y , 0 < x < y
2 Entradas inválidas: y = 0 < x , 0 < y < x , x < 0 , y < 0
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 38 / 51
Diretrizes para Matrizes
1 Testar os elementos do arranjo como se fossem variáveis comuns
2 Devemos testar o arranjo com o tamanho mínimo, intermediário e
máximo
3 Podemos testar linhas e colunas em separado
1 Podemos testar Matriz como:
1 Uma única estrutura
2 Uma coleção de subestruturas testadas independemente
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 39 / 51
Diretrizes para Strings e Entradas de texto
1 Explorar string com comprimentos variáveis
2 Validar os caracteres que os compõem
1 strings podem conter somente caracteres alfabéticos,
alfanuméricos ou também possuir caracteres especiais
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 40 / 51
Sobre o critério de teste
As diretrizes não precisam ser seguidas sempre à risca
Porém, quanto mais testes, maiores as chances de evitar erros no
sistema
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 41 / 51
Exemplo de aplicação
Os casos de testes já produzidos são válidos
Mas, outros casos de testes precisam ser feitos pra atender este
critério
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 42 / 51
Casos de teste funcional sistemático
Entrada Saída esperada
T CC C O
a entre com um inteiro entre 1 e 20
1.0 entre com um inteiro entre 1 e 20
1 ! ’’ n o caractere ’ ’ não pertence à cadeia
1 } n o caractere ’ ’ não pertence à cadeia
20 ¡‘#$%&()*+´ ! s o caractere ! aparece na posição 1 da cadeia
/01234567
’ s o caractere ’ aparece na posição 2 da cadeia
+ s o caractere + aparece na posição 10 da cadeia
6 s o caractere 6 aparece na posição 19 da cadeia
7 n o caracatere 7 aparece na posição 20 da cadeia
2 ab b nao o caracatere b aparece na posição 2 da cadeia
3 a2b 2 0 o caracatere 2 aparece na posição 2 da cadeia
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 43 / 51
Avaliaçao do critério
Apresenta os mesmos problemas dos critérios de
Particionamento de Equivalência e Análise do Valor Limite
Mas, assim como Análise do Valor Limite, este fornece diretrizes
para geração de testes
Enfatiza mais de um caso de teste por partição e/ou limite
Melhor cobertura do código do produto testado
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 44 / 51
Sumário
1 Teste funcional - Introdução
2 Particionamento em Classes de Equivalência
3 Análise do valor limite
4 Teste funcional sistemático
5 Ferramentas de testes
Cunit
6 Referências
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 45 / 51
Ferramentas de testes funcionais
Existem uma série de ferramentas de testes em C, como:
I Cunit
I Quick-Check
I API Sanity Checker
I Automated Test Framework
I Parasoft C/C++ test
I Check
I Outros...
Introduzo nesta aula o Cunit para realizar testes funcionais
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 46 / 51
Cunit
Framework leve de testes unitários para C
Biblioteca estática linkado ao código do usuário
Permite testes automáticos e interativos
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 47 / 51
Exemplo de uso
Seja abaixo um código em C:
insertion_sort.c
Um caso de teste simples pode ser construído:
insertion_sort_teste.c
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 48 / 51
Execução do teste
Compilação:
gcc insertion_sort.c insertion_sort_teste.c
-lcunit -o teste
Execução:
./teste
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 49 / 51
Sumário
1 Teste funcional - Introdução
2 Particionamento em Classes de Equivalência
3 Análise do valor limite
4 Teste funcional sistemático
5 Ferramentas de testes
6 Referências
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 50 / 51
Referências
Alcântara (UFRN) Testes de software - Testes funcionais 30 de outubro de 2014 51 / 51