• Nenhum resultado encontrado

Aula 5 Introdução à Teste de Módulos. Alessandro Garcia LES/DI/PUC-Rio Agosto 2017

N/A
N/A
Protected

Academic year: 2021

Share "Aula 5 Introdução à Teste de Módulos. Alessandro Garcia LES/DI/PUC-Rio Agosto 2017"

Copied!
40
0
0

Texto

(1)

Alessandro Garcia

LES/DI/PUC-Rio Agosto 2017

Aula 5

(2)

Avisos

Monitoria, horário:

–  Sextas, 11:00 às 13:00

–  9º. Andar do Prédio Pe. Leonel Franca

(3)

Princípios Discutidos até aqui…

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

•  Separação: interface da implementação de um módulo

•  Maximizar a declaração e 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

(4)

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 Programacao 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

(5)

5 / 30 LES/DI/ PUC-Rio

Sumário

•  Faltas, erros e falhas

•  Por que testar módulos

•  O que é testar programas

•  Módulo controlador de teste

•  Teste manual

(6)

Até aqui...

•  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

(7)

7 / 30 LES/DI/ PUC-Rio

Até aqui...

•  Princípios de modularidade para programação que levam a programas de qualidade satisfatória por construção

–  Módulos com interfaces bem definidas

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

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

•  Na verdade: nenhuma técnica de construção ou mesmo de testes pode assegurar que o software não tenha faltas

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

maximizar chances de obter software de qualidade satisfatória

(8)

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 na medida que evoluimos os módulos

(9)

Jun 2009 9 /41

Qualidade do software em execução

Dados Produtor cria elemento Erro ? ? ? ? Observador de erros Defeito Elemento Sistema a b c d e f g h i j k Usuário Lesão (conseqüência de erro não observado) Falha Resultados Engano do produtor

introduz defeito Causa exógena provoca um erro

Causa endógena

provoca um erro

(10)

Por que módulos podem conter faltas?

Humanos são falíveis

(ferramentas também L)

, 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

(11)

Ago 2008 11 / 30

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

(12)

Exemplo de Falta – Erro - Falha

•  O uso de muitas construções da linguagem de

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

faltas em programas

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

–  confusão: comparadores de valores

•  As faltas somente se manifestarão na forma de erros quando certas entradas (valores) forem acionados

(13)

13 / 30 LES/DI/PUC-Rio

Exemplo – falha introduzida no uso…

•  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; else return –1; return 0; } A intenção do programador é a seguinte: i >10 retornar 10 i in 1..10 retornar 0 i <= 0 retornar –1

ü

•  de cláusulas if....

(versão simplicada de uma função de mapeamento)

(14)

A intenção do programador é a seguinte: i >10 retornar 10 i in 1..10 retornar 0 i <= 0 retornar –1

Exemplo

int map( int i ) { if( i > 0 ) if( i > 10 ) return 10; else return –1; return 0; }

û

•  Qual é o resultado de chamar a

função map com o valor de argumento 5?

(15)

15 / 30 LES/DI/PUC-Rio

Exemplo

•  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; else return –1; return 0; } A intenção do programador é a seguinte: i >10 retornar 10 i in 1..10 retornar 0 i <= 0 retornar –1 O comportamento real é: i >10 retornar 10 i in 1..10 retornar -1 i <= 0 retornar 0 O compilador, na prática,

associa a cláusula else com o if interno

û

associação desejada

Qual é a falta introduzida

pelo programador?

associação real

falta ou defeito

(16)

Exemplo

int map( int i ) { if( i > 0 ) if( i > 10 ) return 10; else return –1; return 0; } A intenção do programador é a seguinte: i >10 retornar 10 i in 1..10 retornar 0 i <= 0 retornar –1 O comportamento real é: i >10 retornar 10 i in 1..10 retornar -1 i <= 0 retornar 0 O compilador, na prática,

associa a cláusula else com o if interno

associação desejada

Quais são as possíveis

situações de erro?

associação real

falta ou defeito

Erros: momento em que tais retornos são gerados

(17)

17 / 30 LES/DI/PUC-Rio

Exemplo

int map( int i ) { if( i > 0 ) if( i > 10 ) return 10; else return –1; return 0; } A intenção do programador é a seguinte: i >10 retornar 10 i in 1..10 retornar 0 i <= 0 retornar –1 O comportamento real é: i >10 retornar 10 i in 1..10 retornar -1 i <= 0 retornar 0 O compilador, na prática,

associa a cláusula else com o if interno associação desejada associação real

falta ou defeito

FALHA: pode ser observada pelo usuário

ou administrador...

Erros: momento em que tais retornos são gerados

(18)

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

(19)

19 / 30 LES/DI/ PUC-Rio

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

(20)

Exemplos de casos de teste

int map( int i ) { if( i > 0 ) if( i > 10 ) return 10; else return –1; return 0; }

map 1 10

map 2 10

map 3 10

map 10 10

(21)

21 / 30 LES/DI/PUC-Rio

Exemplos de casos de teste

public int map( int i ) { if( i > 0 ) if( i > 10 ) return 10; else return –1; return 0; }

map 1 10

map 2 10

map 3 10

map 10 10

É um boa massa

de teste?

(22)

Exemplo de casos de teste

public int map( int i ) { if( i > 0 ) if( i > 10 ) return 10; else return –1; return 0; } A intenção do programador é a seguinte: i >10 retornar 10 i in 1..10 retornar 0 i <= 0 retornar –1 O comportamento real é: i >10 retornar 10 i in 1..10 retornar -1 i <= 0 retornar 0 O compilador, na prática,

associa a cláusula else com o if interno associação desejada associação real

falta ou defeito

Não! Não irá expor o programa ao exercício do código com faltas.

Importância: especificação

completa da sintaxe e semântica da interface.

(23)

Como testar um módulo?

23 / 30 LES/DI/PUC-Rio

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

(24)

Como chegar lá?

•  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

(25)

25 / 30 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

(26)

O que é um módulo controlador do teste?

deve ser facilmente removível;

(27)

27 / 30 LES/DI/ PUC-Rio

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 ) ; item da interface

(28)

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

(29)

29 / 30 LES/DI/ PUC-Rio

Qual seria 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 é disponibizado

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

(30)

O que seria um controlador?

•  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 testado receber valor do nó

imprime-se resultado que será comparado visualmente pelo testador com o resultado esperado

(31)

31 / 30 LES/DI/ PUC-Rio

Exemplo

•  Exiba o exemplo árvore com teste manual

–  diretório: \autotest\manual

•  Não esquecer de antes de executar o programa

–  Executar o gmake antes: gmake /CExemploManual.COMP

–  Compilar todos os arquivos: CompilaTudo.bat

(32)

Quais as vantagens e desvantagens de…

(33)

33 / 30 LES/DI/PUC-Rio

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

(34)

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

(35)

Avisos

•  Façam download do arcabouço, caso ainda fizeram

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

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

•  Já podem a começar a tentar 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

•  Próxima aula: exercício sobre introdução à teste

•  Próximas aulas nas 3 próximas semanas: Profs. Leonardo e Eduardo

(36)

Trabalho

•  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”

(37)

Alessandro Garcia

LES/DI/PUC-Rio Agosto 2017

Aula 5

(38)

Avisos

•  Façam download do arcabouço, caso ainda fizeram

–  venham com dúvidas para a próxima aula

•  Já podem a começar a tentar 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

(39)

Ago 2008 39 / 30

Por que módulos podem conter defeitos?

•  O problema a resolver ainda não está bem compreendido ao redigir a especificação

–  especificação incompleta ou evolutiva

–  especificação errada: solução correta do problema errado

•  O processo de desenvolvimento é na realidade um processo de aquisição de conhecimento

–  conhecimento sobre o problema a resolver

•  visa eliminar os erros de especificação

–  conhecimento sobre a forma utilizada para resolver

(40)

Uma visão simplificada do processo de teste

Especificação Módulo aceito Desenvolver ou corrigir Testar Projetar o teste Comparar Laudo Roteiro de

teste Resultadosesperados

Resultados obtidos Módulo

Referências

Documentos relacionados

servidores, software, equipamento de rede, etc, clientes da IaaS essencialmente alugam estes recursos como um serviço terceirizado completo...

115 você usou o verbo no plural e na negativa, pois você sabe que eles estão localizados na Cinelândia e não em

10° Aplicação de fórmulas: P9 e B13 para tosse ; B13 e B38 para asma ; BP6 e E30 para as regras dolorosas ; ID3 e C6 para transpiração noturna ; B54 e R1 para hipertensão,

O diagnóstico da arquitetura institucional compreendeu uma análise dos convênios e contratos firmados pela Fundação SEADE e pelo DIEESE com as

No Amapá as comunidades tradicionais conquistaram a força política para a criação pelo governo estadual do Programa de Desenvolvimento Sustentável do Amapá (PDSA), um programa

Traçar um perfil do conteúdo veiculado nas manhãs brasileiras identificando categorias e gêneros utilizados por estes cinco importantes canais e suas afiliadas locais, é

principais experiências profissionais durante os últimos 5 anos, indicando: nome e setor de atividade da empresa, cargo e se a empresa integra (i) o grupo econômico do

No dia 29 de maio (quinta-feira), às 21 horas, a ACBJ realiza o Concerto Comemorativo do Centenário da Imigração Japonesa no Brasil, com a Orquestra Aliança Cultural