19
1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula 5 Introdução a Teste de Módulos Avisos Horário de monitoria: Sextas-feiras, das 11:00 às 13:00 Local: 9º andar do Prédio Pe. Leonel Franca Próxima aula: exercício (T1) Mar 2018 2 /37 Alessandro Garcia © LES - DI/PUC-Rio

Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

1

Prof. Alessandro Garcia

Eduardo Fernandes (assistente)

LES/DI/PUC-Rio

Março 2018

Aula 5Introdução a Teste de Módulos

Avisos

• Horário de monitoria:

– Sextas-feiras, das 11:00 às 13:00

– Local: 9º andar do Prédio Pe. Leonel Franca

• Próxima aula: exercício (T1)

Mar 2018 2 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 2: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

2

Princípios discutidos até aqui

• Cada módulo deveria implementar uma única abstração

• Separação entre interface e implementação de um módulo

• Maximizar a declaração e a documentação de interface

implícita e explícita

• Garantir corretude sintática e semântica em conexões entre

funções/módulos

– nomes apropriados para funções e parâmetros

– o código do módulo cliente e/ou servidor deve checar tal

corretude (garantia de contrato)

• Encapsulamento

• Baixo acoplamento

• Alta coesão

Mar 2018 3 /37Alessandro Garcia © LES - DI/PUC-Rio

Especificação

• Objetivo dessa aula

– Definir conceitos básicos de falta – erro – falha

– Definir teste de software

– Apresentar como definir um módulo de teste manual

• Slides adaptados de: Staa, A.v. Notas de Aula em

Programação Modular; 2008.

• Referência básica:

– Monografia: Arcabouço para a Automação de Testes de

Programas Redigidos em C; contido no arquivo

TesteAutomatizado.zip acessível para download através do site

da disciplina, aba: Software

Mar 2018 4 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 3: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

3

Sumário

• Defeitos, erros e falhas

• Por que testar módulos?

• O que é testar programas?

• Módulo controlador de teste

• Teste manual

– Controlador de teste manual

Mar 2018 5 /37Alessandro Garcia © LES - DI/PUC-Rio

Até aqui, vimos...

• Princípios de modularidade para programação que levam a

programas de qualidade satisfatória por construção

– Módulos com interfaces bem definidas

– Garantir corretude em conexões

Mar 2018 6 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 4: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

4

Dados os princípios de modularidade...

• É desnecessário, então, conduzir um teste sistemático?

– Não, pois mesmo programas modulares por construção contém

faltas

• Nenhuma técnica de construção, ou mesmo de testes,

pode assegurar que o software não tenha faltas

• Objetivo: aplicar sistematicamente a execução de testes

para maximizar as chances de obter-se software com

qualidade satisfatória

– Encontrar faltas remanescentes no software

Mar 2018 7 /37Alessandro Garcia © LES - DI/PUC-Rio

Por que testar módulos?

• Programas podem conter defeitos (ou faltas) que, quando

exercitados, provocam erros de funcionamento. Quando

observados, estes erros passam a ser falhas.

– defeito: código errado (falta: a mesma coisa que defeito)

– erro: estado diferente do esperado ou desejado, ainda não

observado

– falha: estado diferente do esperado ou desejado, observado

• Faltas podem ser introduzidos à medida que evoluímos os

módulos

Mar 2018 8 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 5: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

5

Qualidade do software em execução

Mar 2018 9 /37Alessandro Garcia © LES - DI/PUC-Rio

Dados Produtorcria elemento

Erro

?

?

?

?

Observadorde erros

Defeito

Elemento

Sistema

a

b

c

d

e

f

g

h

i

j

k

Usuário

Lesão(conseqüência

de erro nãoobservado)

Falha

Resultados

Engano do produtorintroduz defeito Causa exógena

provoca um erro

Causaendógenaprovocaum erro

Por que módulos podem conter faltas?

• Humanos são falíveis (ferramentas também ), logo:

– podem se enganar ao redigir o código e inserir defeitos

– podem se enganar ao especificar o que se deseja que o

módulo faça

• a implementação correta passa a ser uma solução correta

do problema errado, ou seja a solução estará incorreta

– podem se enganar ao especificar os requisitos de

qualidade da solução

• a implementação correta cria problemas para o usuário, ou

seja a solução estará incorreta. Exemplos:

– programa não robusto

– tempo de resposta excessivamente demorado

– difícil de utilizar

Mar 2018 10 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 6: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

6

O que é correto por desenvolvimento?

• Um módulo é dito correto por desenvolvimento se ele for

desenvolvido de forma a estar sem defeitos antes de ser

posto em uso (disponibilizado)

• Qual a vantagem?

– redução do risco de danos

• prejuízos decorrentes de falhas ao processar

– custos tangíveis

» perda de vida

» prejuízo financeiro

» quebra de máquina

» quebra de empresa

» ...

– custos intangíveis

» alguns exemplos: perda de confiança, perda de imagem

Mar 2018 11 /37Alessandro Garcia © LES - DI/PUC-Rio

Relação entre Defeito – Erro - Falha

• O uso de muitas construções da linguagem de programação

(C, por exemplo) facilitam a inserção de defeitos em

programas

– atribuição vs. comparação de valores

– confusão: comparadores de valores

• Os defeitos somente se manifestarão na forma de erros

quando certas entradas (valores) forem acionados

Mar 2018 12 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 7: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

7

Exemplo – falha introduzida no uso…

Mar 2018 13 /37Alessandro Garcia © LES - DI/PUC-Rio

• Qual é o resultado de chamar a

função map com o valor de

argumento 11?

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

• de cláusulas if.... (versão simplificada de uma função de mapeamento)

Exemplo – falha introduzida no uso…

Mar 2018 14 /37Alessandro Garcia © LES - DI/PUC-Rio

• Qual é o resultado de chamar a

função map com o valor de

argumento 5?

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

• de cláusulas if.... (versão simplificada de uma função de mapeamento)

Resposta: -1

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

Page 8: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

8

Exemplo – falha introduzida no uso…

Mar 2018 15 /37Alessandro Garcia © LES - DI/PUC-Rio

• Qual é o resultado de chamar a

função map com o valor de

argumento -3?

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

O comportamento real é:i >10 retornar 10i in 1..10 retornar -1i <= 0 retornar 0

O compilador, na prática, associa a cláusula else com o if interno

associaçãodesejada

Qual é a falta introduzida

pelo programador?

associaçãoreal

defeito (ou falta)

Resposta: 0

Exemplo – falha introduzida no uso…

Mar 2018 16 /37Alessandro Garcia © LES - DI/PUC-Rio

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

O comportamento real é:i >10 retornar 10i in 1..10 retornar -1i <= 0 retornar 0

O compilador, na prática, associa a cláusula else com o if interno

associaçãodesejada

Quais são as possíveis

situações de erro?

associaçãoreal

defeito (ou falta)

Erros: momento em que tais retornos

são gerados

Page 9: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

9

Mar 2018 17 /37Alessandro Garcia © LES - DI/PUC-Rio

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar -1

O comportamento real é:i >10 retornar 10i in 1..10 retornar -1i <= 0 retornar 0

O compilador, na prática, associa a cláusula else com o if interno

associaçãodesejada

associaçãoreal

defeito (ou falta)

Falha: pode ser observada

pelo usuário ou administrador

Exemplo – falha introduzida no uso…

O que é testar um módulo?

• Teste é uma das técnicas dinâmicas de controle de

qualidade

• Um teste é um experimento controlado em que se confronta

o comportamento observado com o comportamento

esperado

– teste de corretude: existem diferenças entre o especificado e o

esperado?

• Como fazer isso?

– uma forma de teste é submeter o módulo a dados escolhidos e

comparar o resultado obtido com o resultado esperado,

calculado a partir da especificação e dos dados fornecidos

• Ex.: comparação em que o valor obtido não está dentro dos limites

de tolerância aceitáveis

– por exemplo, 0 >= Nota <= 10

Mar 2018 18 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 10: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

10

Como testar um módulo?

• Para testar um módulo, tornam-se necessários

– um módulo controlador do teste desenvolvido para testar

o módulo sob teste

• o módulo controlador exercita o módulo sob teste através

de sua interface

– uma massa de teste, isto é, um conjunto de casos de

teste

• caso de teste é um conjunto de dados e de ações do cliente/usuário

que exercitam o programa a testar em uma única ativação deste

Mar 2018 19 /37Alessandro Garcia © LES - DI/PUC-Rio

Exemplos de casos de teste

Mar 2018 20 /37Alessandro Garcia © LES - DI/PUC-Rio

Massa de teste

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

Função i return

--------------------------

map 1 10

map 2 10

map 3 10

map 10 10

Page 11: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

11

Exemplos de casos de teste

Mar 2018 21 /37Alessandro Garcia © LES - DI/PUC-Rio

Massa de teste

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

Função i return

--------------------------

map 1 10

map 2 10

map 3 10

map 10 10

Essa é uma boa massa de teste?

Resposta

Mar 2018 22 /37Alessandro Garcia © LES - DI/PUC-Rio

public int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar –1

A intenção do programador é a seguinte:

i >10 retornar 10i in 1..10 retornar 0i <= 0 retornar –1

O comportamento real é:i >10 retornar 10i in 1..10 retornar -1i <= 0 retornar 0

O compilador, na prática, associa a cláusula else com o if interno

associaçãodesejada

associaçãoreal

falta ou defeito

Não, pois não irá expor o programa

ao exercício do código com defeitos.

Importante: especificação completa

da sintaxe e semântica da interface.

Page 12: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

12

Como testar um módulo?

Mar 2018 23 /37Alessandro Garcia © LES - DI/PUC-Rio

Massa de teste

int map( int i ) {if( i > 0 )

if( i > 10 )return 10;

elsereturn –1;

return 0;}

Função i return

--------------------------

map 1 10

map 2 10

map 3 10

map 10 10

Precisamos de um módulo auxiliar que permita

realizar as ativações dos casos de teste!

Como chegar lá?

Mar 2018 24 /37Alessandro Garcia © LES - DI/PUC-Rio

• Desenvolvimento incremental dos módulos

– a cada incremento do módulo são desenvolvidos e testados

• alguns (poucos) itens da interface

– se aprovado no teste, o incremento do módulo é aceito

– a seguir, passa-se a elaborar o próximo incremento até que o

módulo esteja completo

• o roteiro de teste é aumentado para contemplar o incremento

– quando o módulo estiver completo, revê-se o roteiro de teste

de modo que assegure a qualidade necessária

– retesta-se com o roteiro aprimorado e corrige-se se necessário

o módulo, repetindo até chegar a zero falhas

Page 13: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

13

Como testar um módulo?

• Uso de um módulo controlador do teste

desenvolvido que auxilia a execução de casos de

teste para testar um módulo sob teste

• Três formas:

– Teste manual: controlador exibe um menu e

comparação é feita pelo próprio testador à olho nu

– Teste de comparação automatizado:

• Casos de teste são implementados em C

• Casos de teste são redigidos em scripts em uma linguagem

com uma sintaxe própria

Mar 2018 25 /37Alessandro Garcia © LES - DI/PUC-Rio

O que é um módulo controlador de teste?

Mar 2018 26 /37Alessandro Garcia © LES - DI/PUC-Rio

deve ser facilmente removível;

instrumentação: discutido em aulas futuras

Page 14: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

14

O que é uma interface de um módulo?

• Considerando a linguagem C, é a parte de declaração

(header file, arquivo .h)

• Exemplo, módulo árvore – opera sobre uma única árvore:

ARV_tpCondRet ARV_InserirEsquerda( char Valor ) ;

ARV_tpCondRet ARV_InserirDireita( char Valor ) ;

ARV_tpCondRet ARV_IrEsquerda( void ) ;

ARV_tpCondRet ARV_IrDireita( void ) ;

ARV_tpCondRet ARV_ObterValorCorrente( char * pValor ) ;

Mar 2018 27 /37Alessandro Garcia © LES - DI/PUC-Rio

item da interface

O que seria um controlador?

• Exemplo de organização para teste manual

• O módulo controlador de teste exibe o menu de escolha do

comando de teste:

1 Inserir nó à esquerda

2 Inserir nó à direita

3 Ir para nó filho à esquerda

4 Ir para nó filho à direita

5 Obter valor do nó corrente

6 Exibir a árvore em formato parentetizado

99 Terminar

Escolha a opção:

Mar 2018 28 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 15: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

15

Um cenário de realização de testes

• Numa forma indisciplinada o testador:

1. ativa o programa

2. menu de teste de itens de interface é disponibilizado

3. seleciona uma opção (digitando 99 termina a execução)

4. fornece os dados solicitados

5. compara visualmente o resultado obtido com o resultado

que ele imagina deveria ser retornado

6. procura corrigir o programa caso o resultado esteja errado

7. repete a partir de 1

Mar 2018 29 /37Alessandro Garcia © LES - DI/PUC-Rio

O que seria um controlador?

Mar 2018 30 /37Alessandro Garcia © LES - DI/PUC-Rio

• Escolhida a opção, entra-se em um switch e realiza-se a

operação. Exemplo para uma das funções:

switch ( idAcao )

{

...

case AcaoInserirEsq:

printf( ” Inserir aa esquerda” ) ;

printf( ”\n Forneca o valor do no’ a inserir” ) ;

scanf( ” %10s” , Valor ) ;

CondRet = ARV_InserirEsquerda( Valor ) ;

printf( ”\nCondicao de retorno: %d\n” , CondRet ) ;

break ;

...

} /* switch */

item de interface

sendo testadoreceber valor do nó

imprime-se resultado que será comparado visualmente

pelo testador com o resultado esperado

Page 16: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

16

Exemplo

• Exiba o exemplo árvore com teste manual

– diretório: \autotest\manual

• Não esquecer de, antes, executar o programa

– Executar o gmake antes: gmake /CExemploManual.COMP

– Compilar todos os arquivos: CompilaTudo.bat

• Executar ExemploManual.exe

Mar 2018 31 /37Alessandro Garcia © LES - DI/PUC-Rio

Sobre o teste manual

Quais seriam as suas principais vantagens?

E as suas desvantagens?

Mar 2018 32 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 17: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

17

Vantagens e desvantagens do teste manual

• Vantagens

– É relativamente simples de programar

– É mais fácil verificar a corretude caso esta se baseie em valores

aproximados

• evidentemente, isto requer que o testador saiba determinar quais as

aproximações aceitáveis

• Desvantagens

– O usuário não sabe quando testou tudo que deveria ser testado

• teste incompleto pode deixar defeitos remanescentes

– O usuário imagina o resultado esperado

– O usuário realiza testes que repetem condições já testadas

• teste redundante adiciona custo sem contribuir para descobrir novos defeitos

Mar 2018 33 /37Alessandro Garcia © LES - DI/PUC-Rio

Como testar um módulo?

• Uso de um módulo controlador do teste

desenvolvido que auxilia a execução de casos de

teste para testar um módulo sob teste

• Três formas:

– Teste manual: controlador exibe um menu e

comparação é feita pelo próprio testador à olho nu

– Teste de comparação automatizado:

• Casos de teste são implementados em C

• Casos de teste são redigidos em scripts em uma linguagem

com uma sintaxe própria

Mar 2018 34 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 18: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

18

Avisos

• Façam download do arcabouço, caso ainda não tenham feito

– venham com dúvidas para as próximas aulas

• Aula sobre instalação e uso do arcabouço

• Já podem começar a verificar como funciona o teste do

módulo Lista

– estudar e usar o módulo Lista

– estudar o módulo TesteLis

– melhoria dos testes deste módulo

– estudo da monografia disponível no sítio eletrônico

– executar o exemplo de teste manual da pasta Manual

Mar 2018 35 /37Alessandro Garcia © LES - DI/PUC-Rio

Trabalho prática da disciplina

• Referência básica:

– Monografia: Arcabouço para a Automação de Testes de

Programas Redigidos em C; contido no arquivo

TesteAutomatizado.zip acessível para download através do

site da disciplina, aba: Software

• Comecem a instalar o arcabouço

– Seção 2 da monografia dá todos os passos de instalação

– Ler o arquivo “...readme” para verificar como instalar

– “Recomenda-se fortemente...” = leia-se “DEVE LER”

– Comece a utilizar os exemplos e arcabouço de testes...

Mar 2018 36 /37Alessandro Garcia © LES - DI/PUC-Rio

Page 19: Aula 5 Introdução a Teste de Módulos - inf.puc-rio.brinf1301/docs/2018_1/aula_05.pdf · 1 Prof. Alessandro Garcia Eduardo Fernandes (assistente) LES/DI/PUC-Rio Março 2018 Aula

19

Prof. Alessandro Garcia

Eduardo Fernandes (assistente)

LES/DI/PUC-Rio

Março 2018

Aula 5Introdução a Teste de Módulos