Régis Simão
1/45Testes de Software
Testes de Software
Testes de Software
Agenda
Introdução
Testes para a detecção de defeitos
Testes de integração
Testes orientados a objetos
Workbenches de testes
Bibliografia
Régis Simão
3/45Testes de Software
Introdução
Objetivos
Explicar uma série de técnicas de testes, que são utilizadas para
descobrir defeitos em programas
Descrever as diretrizes que apoiam os testes de interfaces de
componentes
Explicar as abordagens específicas dos testes de componentes e dos
testes de integração para sistemas orientados a objetos
Explicar os princípios de operação de apoio de ferramentas CASE para
Testes de Software
Introdução
Testar programas para identificar a
presença de defeitos
Régis Simão
5/45Testes de Software
Introdução
Processo de Testes
Testes de Componentes
Testes de componentes de programas individuais
Geralmente é responsabilidade do desenvolvedor de componentes (exceto em sistemas críticos)
Testes são derivados da experiência dos desenvolvedores
Testes de Integração
Testes de grupos de componentes integrados para criar um sistema ou subsistema
Responsabilidade de um time independente de testes
Testes de Software
Testes para a Detecção de Defeitos
O objetivos destes testes são descobrir defeitos nos programas
Um teste de defeito de sucesso é aquele que faz que o programa se
comporte de uma forma anômala
Testes mostram a presença, não a ausência de defeitos
Priorização dos Testes
Somente testes exaustivos podem mostrar que um programa está livre de
defeitos. Contudo testes exaustivos são impossíveis
Testes devem exercitar as funcionalidades dos sistemas, não os seus
componentes
Os testes de regressão são mais importantes que os testes de novas
funcionalidades
Régis Simão
7/45Testes de Software
Testes para a Detecção de Defeitos
Dados de Testes e Casos de Testes
Dados de Testes Massa de dados que é definida para testar o sistema
Casos de Testes Entradas que são usadas para testar o sistema e
saídas esperadas para as entradas, se o sistema funcionar de acordo
com a especificação
Testes de Software
Testes para a Detecção de Defeitos
Testes Caixa Preta
Uma técnica de teste onde os programas são vistos como caixas pretas,
não se conhece a estrutura interna do programa
Os casos de testes do programa são baseado na sua especificação
O planejamento de testes podem começar cedo durante o processo de
Régis Simão
9/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Software
Testes para a Detecção de Defeitos
Partição de Equivalência
Dados de entrada e de saída normalmente são divididos em classes,
onde os membros de uma classes estão relacionados
Exemplos de classes: números primos, números negativos, números
positivos, strings sem branco
Cada uma dessas classes é uma partição equivalente, onde o programa
comporta-se de um modo equivalente para cada membro de uma classe
Régis Simão
11/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Software
Testes para a Detecção de Defeitos
Partição de Equivalência
Entradas e saídas de conjuntos de equivalência
Se a entrada é um inteiro de 5 dígitos entre 10000 e 99999, partições equivalentes são < 10000, 10000 – 99999 e > 100000
Régis Simão
13/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Software
Testes para a Detecção de Defeitos
Especificação de uma Rotina de Busca
Partições de Entrada
Entradas que atendam as pré-condições
Entradas que uma pré-condição não trate
Entradas onde o elemento é membro de um vetor (array)
Entradas onde o elemento não é membro do vetor
Orientação para os testes
Teste o software com um conjunto que tenha somente um valor Use conjuntos com diferentes tamanhos
Derive os testes de forma que os elementos da primeira, do meio e da última
posições sejam acessados
Régis Simão
15/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Software
Testes para a Detecção de Defeitos
Testes de Estrutura
Às vezes chamado de testes de caixa branca
Derivação dos casos de testes de acordo com a estrutura do programa. O
conhecimento sobre o programa é usado para identificar casos de testes
adicionais
O objetivo é exercitar todos os comandos do programa (não todas as
Régis Simão
17/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Estrutura ou
Caixa Branca – Implementação
em Java de uma Rotina de
Testes de Software
Testes para a Detecção de Defeitos
Testes de Estrutura ou Caixa Branca
Partições de Equivalência para a Rotina de Pesquisa Binária
Pré-condições satisfeitas, elemento está no conjunto
Pré-condições satisfeitas, elemento não está no conjunto
Pré-condições não satisfeitas, elemento está no conjunto
Pré-condições não satisfeitas, elemento não está no conjunto
Conjunto de entradas com um único valor
Conjunto de entradas com um número impar de valores
Régis Simão
19/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Estrutura ou Caixa Branca
Testes de Software
Testes para a Detecção de Defeitos
Testes de Estrutura ou Caixa Branca
Régis Simão
21/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Caminho
O objetivo dos testes de caminho é garantir que o conjunto de casos de
testes percorrem todos os caminhos do programa pelo menos uma vez
O ponto inicial para os testes de caminho é um grafo de fluxo de
programa, onde os nós representam decisões do programa e arcos
representam o fluxo de controle
Grafo de Fluxo do Programa
Descreve o fluxo de controle do programa. Cada ramo é mostrado com um caminho em separado e laços são mostrados como uma seta de volta ao nó que representa a condição do laço
Usado como base para cálculo da computação ciclomática
Testes de Software
Testes para a Detecção de Defeitos
Testes de Caminho
Complexidade Ciclomática
O número mínimo de casos de testes para testar todas os caminhos dos programa é igual a complexidade ciclomática
A complexidade ciclomática é igual ao número de condições simples no programa + 1
Útil se usado com cuidado. Todos os caminhos são executados, mas nem todas as combinações de caminhos são executadas
Caminhos Independentes
1, 2, 3, 8, 9 1, 2, 3, 4, 6, 7, 2 1, 2, 3, 4, 5, 7, 2 1, 2, 3, 4, 6, 7, 2, 8, 9
Casos de testes devem ser derivados de forma que todos os caminhos sejam executados
Régis Simão
23/45Testes de Software
Testes para a Detecção de Defeitos
Testes de Software
Testes de Integração
Testar todo o sistema ou subsistema composto de componentes
integrados
Testes de integração devem ser testes de caixa preta com testes
derivados da especificação do sistema
A principal dificuldade é localizar os erros quando eles acontecem
Testes de integração incremental reduzem este problema
Régis Simão
25/45Testes de Software
Testes de Integração
Testes de Software
Testes de Integração
Abordagens para os Testes de Integração
Testes Top-Down
Inicia-se com o sistema de alto nível e integra-se de cima para baixo, trocando componentes individuais pelos stubs quando necessário
Testes Botton-Up
Integra-se componentes individuais em níveis até o sistema completo ser criado
Régis Simão
27/45Testes de Software
Testes de Integração
Testes de Software
Testes de Integração
Utilização das Abordagens de Testes de Interação
Validação Arquitetural
O teste de integração top-down é melhor na descoberta de erros na arquitetura do sistema
Demonstração do Sistema
O teste de integração top-down permite uma demonstração limitada nos estágios iniciais do desenvolvimento
Implementação dos testes
Normalmente mais fácil com os testes de integração botton-up
Observação dos testes
Ambas as abordagens têm problemas. Códigos extras podem ser necessários para se observar os testes
Régis Simão
29/45Testes de Software
Testes de Integração
Testes de Interface
Ocorrem quando módulos ou subsistemas são integrados para criar
grandes sistemas
Os objetivos são detectar falhas devido aos erros de interface ou
interpretações inválidas sobre as interfaces
Particularmente importantes para o desenvolvimento orientado a objetos,
Testes de Software
Testes de Integração
Régis Simão
31/45Testes de Software
Testes de Integração
Tipos de Interface
Interfaces de Parâmetros
Quando dados são passados de um componente para outro
Interfaces de Memória Compartilhada
Quando um bloco de memória é utilizado por um componente para guardar os
dados e outro componente ler os dados do bloco de memória
Interfaces de Procedimento
Quando um subsistema encapsula um conjunto de procedimentos a serem chamados por outros subsistemas
Interfaces de Passagem de Mensagem
Testes de Software
Testes de Integração
Erros de Interface
Mau Uso da Interface
Um componente chama outro componente e provoca um erro no uso de sua interface, por exemplo, ordem errada dos parâmetros
Mau Entendimento da Interface
Um componente faz interpretações erradas de um outro componente e quando o invoca, o resultado é uma resposta não esperada
Erros de timing
Os componentes operam em diferentes velocidades e uma informação
Régis Simão
33/45Testes de Software
Testes de Integração
Diretrizes para Testes de Integração
Projete os testes de forma que os parâmetros de um procedimento
estejam nos limites extremos
Sempre teste parâmetros do tipo ponteiro com ponteiros nulos
Projete testes que causem o componente falhar
Use testes de estresse em sistemas de passagens de mensagem
Em sistemas de memória compartilhada, varie a ordem em que os
Testes de Software
Testes de Integração
Testes de Estresse
Exija do sistema além da carga máxima projetada. Estressar o sistema
normalmente força que os defeitos apareçam
Estressar o sistema testa as falhas de comportamento. Sistemas não
devem falhar catastroficamente. Os testes de estresse buscam a perda
inaceitável de serviços ou dados
Particularmente relevante para sistemas distribuídos que podem exibir
Régis Simão
35/45Testes de Software
Testes Orientados a Objetos
Os componentes a serem testados são classes que são instanciados
como objetos
Os objetos possuem granularidade maior que funções individuais, de
forma que a abordagem de teste caixa branca necessita ser estendida
Não há um topo de sistema para aplicar a integração e os testes top-down
Níveis de Testes
Testes de operações associadas aos objetos
Testes de classes
Testes de grupos de objetos que cooperam entre si
Testes do sistema OO completo
Testes de Software
Testes Orientados a Objetos
Testes de Classes
A cobertura de testes completa de uma classe envolve
Testar todas as operações associadas com um objeto
Atribuição e leitura de todos os atributos do objeto
Testar o objeto em todos os possíveis estados
Herança torna mais difícil projetar testes de classes, por que a
Régis Simão
37/45Testes de Software
Testes Orientados a Objetos
Interface do Objeto Estação Meteorológica
Casos de testes são necessários para
todas as operações
Use o modelo (diagrama) de estados para
identificar as transições de estado a serem
testados
Exemplos de seqüência de testes
Desativado Aguardando Desativado
Aguardando Calibrando Testando Transmitindo Aguardando
Aguardando Coletando Aguardando Resumindo Transmitindo Aguardando
Testes de Software
Testes Orientados a Objetos
Integração de Objetos
Níveis de integração são menos distintos em sistemas orientados a
objetos
Testar um grupo de objetos está relacionado com a integração e o teste
do conjunto de objetos colaborando entre si
Abordagens para Testar um Grupo de Objetos
Testes baseados em Cenários ou Casos de Uso
O teste é baseado em uma interação do usuário com o sistema
Tem a vantagem de testar as funcionalidades do sistema como se fosse o próprio usuário
Testes de Threads
Testa a resposta do sistema a uma entrada em particular ou a um conjunto de
eventos de entrada
Régis Simão
39/45Testes de Software
Testes Orientados a Objetos
Testes baseados em Cenários
Identificam cenários a partir de casos de uso e complementam com
diagramas de interação que mostram como os objetos são envolvidos
nos cenários
Considere o cenário em um sistema de estação metereológica, onde um
relatório é gerado
Testando a Estação Metereológica
Seqüência de Métodos Executados:
ControladordeComunicacao:requisitar EstacaoMetereologica:relatar DadosMetereologico:resumir
Entradas e Saídas
A entrada de um pedido de relatório com uma confirmação associada e uma saída final de um relatório
Pode ser testado pela criação de dado brutos e garantir que é resumido corretamente