Teste de Sistemas de Software

63
1 Teste de Sistemas de Software Alexandre Monteiro

description

Teste de Sistemas de Software. Alexandre Monteiro. Motivação. Ocorrência de falhas humanas no processo de desenvolvimento de software é considerável Processo de testes é indispensável na garantia de qualidade de software - PowerPoint PPT Presentation

Transcript of Teste de Sistemas de Software

Page 1: Teste de Sistemas de Software

1

Teste de Sistemas de Software

Alexandre Monteiro

Page 2: Teste de Sistemas de Software

2

Motivação Ocorrência de falhas humanas no

processo de desenvolvimento de software é considerável

Processo de testes é indispensável na garantia de qualidade de software

Custos associados às falhas de software justificam um processo de testes cuidadoso e bem planejado

Page 3: Teste de Sistemas de Software

3

Conceitos Básicos

Page 4: Teste de Sistemas de Software

4

Falha, Falta e Erro Falha

Incapacidade do software de realizar a função requisitada (aspecto externo)

Exemplo Terminação anormal, restrição temporal

violada

Page 5: Teste de Sistemas de Software

5

Falha, Falta e Erro Falta

Causa de uma falha Exemplo

Código incorreto ou faltando

Page 6: Teste de Sistemas de Software

6

Falha, Falta e Erro Erro

Estado intermediário (instabilidade) Provém de uma falta Pode resultar em falha, se propagado

até a saída

Page 7: Teste de Sistemas de Software

7

Falta, erro e falha

Falta Erro Falha

Pode iteragir…

Page 8: Teste de Sistemas de Software

8

Noção de confiabilidade Algumas faltas escaparão

inevitavelmente Tanto dos testes Quanto da depuração

Falta pode ser mais ou menos perturbadora Dependendo do que se trate e em qual

freqüência irá surgir para o usuário final

Page 9: Teste de Sistemas de Software

9

Noção de confiabilidade Assim, precisamos de uma referência

para decidir Quando liberar ou não sistema para uso

Confiabilidade de software É uma estimativa probabilística Mede a freqüência com que um software

irá executar sem falha Em dado ambiente E por determinado período de tempo

Page 10: Teste de Sistemas de Software

10

Noção de confiabilidade Assim, entradas para testes devem

se aproximar do ambiente do usuário final

Page 11: Teste de Sistemas de Software

11

Dados e Casos de Teste Dados de Teste

Entradas selecionadas para testar o software

Casos de Teste Dados de teste, bem como saídas

esperadas de acordo com a especificação (Veredicto)

Cenários específicos de execução

Page 12: Teste de Sistemas de Software

12

Finalidade dos testes Averiguar se todos os requisitos do

sistema foram corretamente implementados

Assegurar, na medida do possível, a qualidade e a corretude do software produzido

Reduzir custos de manutenção corretiva e re-trabalho

Page 13: Teste de Sistemas de Software

13

Finalidade dos testes Assegurar a satisfação do cliente com

o produto desenvolvido Identificar casos de teste de elevada

probabilidade para revelar erros ainda não descobertos (com quantidade mínima de tempo e esforço)

Verificar a correta integração entre todos os componentes de software

Page 14: Teste de Sistemas de Software

14

Eficácia de Testes A atividade de teste é o processo de

executar um programa com a intenção de descobrir um erro

Um bom caso de teste é aquele que apresenta uma elevada probabilidade de revelar um erro ainda não descoberto

Um teste bem sucedido é aquele que revela um erro ainda não descoberto

Page 15: Teste de Sistemas de Software

15

Padronização de Testes Sistemático

Testes aleatórios não são suficientes Testes devem cobrir todos os fluxos

possíveis do software Testes devem representar situações de uso

reais Documentado

Que testes foram feitos, resultados, etc. Repetível

Se encontrou ou não erro em determinada situação, deve-se poder repeti-lo

Page 16: Teste de Sistemas de Software

16

Abordagens de teste Abordagem funcional (“caixa preta”)

Os testes são gerados a partir de uma análise dos relacionamentos entre os dados de entrada e saída, com base nos requisitos levantados com os usuários

Especificação (pré e pós-condições) Geralmente é aplicado durante as

últimas etapas do processo de teste

Page 17: Teste de Sistemas de Software

17

Abordagens de teste Abordagem funcional (“caixa

preta”) Objetivo

Erros associados a não satisfação da especificação

Erros na GUI Erros nas estruturas de dados ou acesso

ao banco de dados Problemas de integração

Page 18: Teste de Sistemas de Software

18

Abordagens de teste Abordagem estrutural (“caixa

branca”) Os testes são gerados a partir de uma

análise dos caminhos lógicos possíveis de serem executados

Conhecimento do funcionamento interno dos componentes do software é usado

Page 19: Teste de Sistemas de Software

19

Abordagens de teste Abordagem estrutural

Objetivo Garantir que todos os caminhos

independentes dentro de um módulo tenham sido exercitados pelo menos uma vez

Realizar todas as decisões lógicas para valores falsos e verdadeiros

Executar laços dentro dos valores limites Executar as estruturas de dados internas

Page 20: Teste de Sistemas de Software

20

Abordagens de teste Abordagem estrutural

Programador Testa o programa em pedaços Encontra quais as partes do programa que

já foram testadas Conhece quais partes do programa serão

modificadas Verifica os limites internos no código que

são invisíveis ao testador externo

“É parte da atividade de codificação”

Page 21: Teste de Sistemas de Software

21

Estágios de Teste Teste de Unidade Teste de Aspectos OO Teste de Integração Teste de Sistema Teste de Aceitação

Page 22: Teste de Sistemas de Software

22

Estágios de teste Teste de unidade

Componentes individuais (ex.: métodos, classes) são testados para assegurar que os mesmos operam de forma correta

Teste de aspectos OO Teste de Iteradores Teste de Abstrações de Dados Teste de Hierarquia de Tipos

Page 23: Teste de Sistemas de Software

23

Estágios de teste Teste de integração

A interface entre as unidades integradas é testada

Teste de sistema Os elementos de software integrados

com o ambiente operacional (hardware, pessoas, etc.) são testados como um todo

Page 24: Teste de Sistemas de Software

24

Estágios de teste Testes de aceitação (“caixa preta”) são

realizados pelo usuário Finalidade é demonstrar a conformidade com os

requisitos do software Envolve treinamento, documentação e

empacotamento Podem ser de duas categorias:

Testes alfa Feitos pelo usuário, geralmente nas

instalações do desenvolvedor, que observa e registra erros e/ou problemas

Page 25: Teste de Sistemas de Software

25

Estágios de teste Testes de aceitação (“caixa preta”) são

realizados pelo usuário Testes beta

Feitos pelo usuário, geralmente em suas próprias instalações, sem a supervisão do desenvolvedor. Os problemas detectados são então relatados para o desenvolvedor

Page 26: Teste de Sistemas de Software

26

Tipos de Teste São definidos em relação aos diversos

tipos de requisitos descritos no documento de requisitos

Alguns exemplos são: Teste funcional Teste de recuperação de falhas Teste de segurança Teste de performance Teste de carga

Page 27: Teste de Sistemas de Software

27

Tipos de teste Teste funcional (regras de negócio)

A funcionalidade geral do sistema em termos de regras de negócio (fluxo de trabalho) é testada

Condições válidas e inválidas

Page 28: Teste de Sistemas de Software

28

Tipos de teste Teste de recuperação de falhas

O software é forçado a falhar de diversas maneiras para que seja verificado o seu comportamento

Bem como a adequação dos procedimentos de recuperação

A recuperação pode ser automática ou exigir intervenção humana

Page 29: Teste de Sistemas de Software

29

Tipos de teste Teste de segurança e controle de

acesso Verifica se todos os mecanismos de

proteção de acesso estão funcionando satisfatoriamente

Teste de integridade de dados Verifica a corretude dos métodos de

acesso à base de dados e a garantia das informações armazenadas

Page 30: Teste de Sistemas de Software

30

Tipos de teste Teste de performance

Verifica tempo de resposta e processamento (para diferentes configurações, número de usuários, tamanho do BD, etc.)

Exemplo Recuperar conta de usuário em x segundos

São necessários definir Servidores e clientes, sistemas operacionais e

protocolos utilizados

Page 31: Teste de Sistemas de Software

31

Tipos de teste Teste de volume (carga)

Foca em transações do BD Verifica se o sistema suporta altos

volumes de dados em uma única transação

Verifica o número de terminais, modems e bytes de memória que é possível gerenciar

Page 32: Teste de Sistemas de Software

32

Tipos de teste Teste de estresse

Verifica a funcionalidade do sistema em situações limite

Pouca memória ou área em disco, alta competição por recursos compartilhados (ex: vários acessos/transações no BD ou rede)

Exemplo: pode-se desejar saber se um sistema de transações bancárias suporta uma carga de mais de 100 transações por segundo ou se um sistema operacional pode manipular mais de 200 terminais remotos

Page 33: Teste de Sistemas de Software

33

Tipos de teste Teste de configuração ou portabilidade

Verifica o funcionamento adequado do sistema em diferentes configurações de hardware/software

O que testar Compatibilidade do software/hardware Configuração do servidor Tipos de conexões com a Internet Compatibilidade com o browser

Page 34: Teste de Sistemas de Software

34

Tipos de teste Teste de instalação e desinstalação

Verifica a correta instalação e desinstalação do sistema para diferentes plataformas de hardware/software e opções de instalação

O que testar Compatibilidade do hardware e software Funcionalidade do instalador/desinstalador sob

múltiplas opções/condições de instalação GUI do programa instalador/desinstalador

Page 35: Teste de Sistemas de Software

35

Tipos de teste Teste da GUI (usuário)

Aparência e comportamento da GUI Navegação Consistência Aderência a padrões Tempo de aprendizagem Funcionalidade

Page 36: Teste de Sistemas de Software

36

Tipos de teste Teste de documentação

Verifica se a documentação corresponde à informação correta e apropriada:

online escrita help sensível ao contexto

Teste de ciclo de negócios Garante que o sistema funciona

adequadamente durante um ciclo de atividades relativas ao negócio

Page 37: Teste de Sistemas de Software

37

Teste de regressão Re-execução de testes feitos após

uma manutenção corretiva ou evolutiva

Em processos de desenvolvimento iterativos, muitos dos artefatos produzidos nas primeiras iterações são usados em iterações posteriores

Page 38: Teste de Sistemas de Software

38

Teste de unidade

Page 39: Teste de Sistemas de Software

39

Teste de unidade Investigar a qualidade de

componentes individuais (ex: métodos, classes)

Objetivo: Testar comportamento

(especificação) e estrutura interna (lógica e fluxo de dados)

Page 40: Teste de Sistemas de Software

40

Estratégia para Teste de unidade

Driver de teste – programa que executa o módulo a ser testado usando os dados do caso de teste e verifica o veredicto

Este será o propósito de uso do JUnit

Driver

Módulo a ser testado

Casos de teste

InterfaceEstrutura de dados localCondições limiteCaminhos independentesCaminhos de tratamento de erros

Resultados

Page 41: Teste de Sistemas de Software

41

Teste de Caixa Preta Casos de teste são gerados usando

somente a especificação Vantagens:

Procedimento de teste não é influenciado pela implementação

Resultados dos testes podem ser avaliados por pessoas sem conhecimento da linguagem de programação

Robusto em relação a mudanças na implementação (Abordagem XP...)

Page 42: Teste de Sistemas de Software

42

Teste de Caixa Preta Deve-se analisar a relação entre a

pré e a pós-condição Tentar cobrir todas as combinações

lógicas existentes entre essas partes Dada a relação pré => pós, tem-se

pré=true => pós=true pré=false => exceção

Page 43: Teste de Sistemas de Software

43

Seleção de Dados de Teste Há várias técnicas para seleção de

dados de teste Particionamento Fronteiras Pares ortogonais Etc.

{

Page 44: Teste de Sistemas de Software

44

Particionamento

Determinando partições

Selecionando representantes

Page 45: Teste de Sistemas de Software

45

Fronteiras Estatísticas indicam que há uma maior

suscetibilidade a erros nas fronteiras de partições (limites dos tipos)

Tanto em dados válidos quanto inválidos Assim, para x > 0, não bastaria usar

qualquer x > 0 (particionamento) Mas sim x = 1 (válido no limite) e x = 0

(inválido no limite)

Page 46: Teste de Sistemas de Software

46

Fronteiras A técnica da seleção de dados

pelas fronteiras é muito indicada para investigar bom funcionamento de Arrays Vetores Algoritmos de busca/ordenação Etc.

Page 47: Teste de Sistemas de Software

47

Teste de Caixa Branca Casos de teste são gerados a partir

da implementação Não se pode avaliar o grau de

cobertura de uma funcionalidade pelo teste de caixa preta

A idéia é gerar dados de teste que permitam exercitar algum critério em relação ao código (cobertura)

Page 48: Teste de Sistemas de Software

48

Grafo de fluxo de controlenó = bloco de comandos seqüenciaisaresta ou ramo = transferência de controle

11

2 3

4

1

2 3 m

n

...1

2

3

1

2

3blocoseqüencial

seleçãoif-then-else case

repetição

while repeat-until

Page 49: Teste de Sistemas de Software

49

Grafo de fluxo de controle: ExemploCálculo de xy

1. read x, y;2. if y < 03. then p := 0 - y4. else p := y;5. z := 1.0;6. while p 0 do7. begin z := z * x; p := p - 1; end;8. if y < 0 9. then z := 1 / z;10. write z; end;

1

2

3 45

67

8

9

10

y < 0 y 0

p 0

y < 0y 0

Page 50: Teste de Sistemas de Software

50

Critérios de cobertura Tipos

Cobertura de instruções Cobertura de decisões Cobertura de condições Cobertura de caminhos

Page 51: Teste de Sistemas de Software

51

Cobertura de instruções1

2

3 45

67

8

9

10

y < 0 y 0

p 0

y < 0y 0

Critério: cada instrução deve ser executada pelo menos 1 vez

nós predicados dados

{1,2,3,5,6,7,6, 8,9,10} x, y < 0 (4, -1)

{1,2,4,5,6,8,10} x, y = 0 (4, 0)

Page 52: Teste de Sistemas de Software

52

Cobertura de decisões1

2

3 45

67

8

9

10

y < 0 y 0

p 0

y < 0y 0

Critério: cada ramo deve ser percorrido pelo menos 1 vez

ramos predicados dados

{(1,2), (2,3), (3,5), (5,6) x, y < 0 (4, -1)

(6,7), (7,6), (6,8), (8,9), (9,10)}

{(1,2), (2,4), (4,5), (5,6), x, y = 0 (4, 0)

(6,7), (7,6), (6,8), (8, 10)}

Page 53: Teste de Sistemas de Software

53

Cobertura de decisões1. if a >= 0 and a <= 2002. then m := 13. else m := 34. “Dep. em a...”

c1

2 3

4

c c

ramos dados

{(1,2), (2,4)} a = 5

{(1,3), (3,4)} a = -5

Page 54: Teste de Sistemas de Software

54

Cobertura de decisões/condições

1. if a >= 0 and a <= 200

2. then m := 13. else m := 34. “Dep. em a...”

c 1

2 3

4

ramos dados

{(1,1A), (1A, 2), (2,4)} a = 5

{(1,1A), (1A,3), (3,4)} a = 500

{(1,3), (3,4)} a = -5

Critério: todas as condições devem ser avaliadas para valores V/F em cada (sub)decisão

1A

a 0 a < 0

a 200 a > 200

Page 55: Teste de Sistemas de Software

55

Aproximação do Fluxo Completo

j = k;for(int i=1; i<=100; i++)

if(Tests.pred(i*j)) j++;

Quem são os casos de testes para o fragmento de código acima?

Page 56: Teste de Sistemas de Software

56

Aproximação do Fluxo Completo Laços com iterações fixas

Considerar 2 iterações e situações de terminação do laço

Laços com iterações variáveis Considerar 0, 1 e 2 iterações, bem como

casos de terminação Recursão

Considerar situações onde não haverá chamada recursiva e com apenas 1 chamada

Page 57: Teste de Sistemas de Software

57

Iteração Fixaj = k;for(int i=1; i<=100; i++)

if(i==j) break;else if(Tests.pred(i*j)) j++;

1 i 2 e (j=1 ou j=2)

Page 58: Teste de Sistemas de Software

58

Iteração Variávelwhile( x<y || x>z ) {

...

}

1. x < y || x > z (1 e

2 iterações)2. x y && x z

Condições de terminação+

Page 59: Teste de Sistemas de Software

59

Recursãostatic int fat(int i) {

int res;if(i==0) res = 1;else res = i * fat( i – 1 );return res;

}

1. i = 02. i = 1

Page 60: Teste de Sistemas de Software

60

Teste de Abstrações de Dados Testar os métodos de maneira

conjugada Testes devem explorar

propriedades esperadas para a composição de métodos

Seqüências de testes devem ser originadas tanto pelo teste de caixa preta quanto o de caixa branca

Page 61: Teste de Sistemas de Software

61

Exemplo Suponha uma classe com métodos

inserir, remover, consultar, etc. Então, seqüências como:

consultar(x) -> inserir(x) -> remover(x)

inserir(x) -> inserir(x) inserir(x) -> consultar(x) remover(x) -> consultar(x)

Page 62: Teste de Sistemas de Software

62

Automação de Testes Integrada Testar é essencial como referencial

de qualidade Falhas humanas são comuns Realizar todos os testes,

associados a artefatos modificados, é imprescindível

Page 63: Teste de Sistemas de Software

63

Bibliografia Liskov, B. et al. Program

Development in Java (Cap. 10) Sommerville, I. Software

Engineering (Cap. 20)