Geração automática de casos de teste



Documentos relacionados
Teste Funcional 3. Arndt von Staa Departamento de Informática PUC-Rio Março 2015

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

Casos de teste semânticos. Casos de teste valorados. Determinar resultados esperados. Gerar script de teste automatizado.

Aula 27 Testes Caixa Branca. Alessandro Garcia Willian Oizumi LES/DI/PUC-Rio Novembro 2014

Plano de Gerenciamento do Projeto

Questionário. A ferramenta auxilia na alocação de Não (0) x x x. Satisfatório (5) complexidade de um caso de uso? de uso (72) Sim (10)

GUIA INTEGRA SERVICES E STATUS MONITOR

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

IBM Software Demos Rational Software Delivery Platform - Teste automatizado

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Passo-a-passo para acesso ao novo sistema de reservas de salas no Rochaverá

Sistema de Controle de Solicitação de Desenvolvimento

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

Ferramenta: Spider-CL. Manual do Usuário. Versão da Ferramenta:

7 Conclusão e Trabalhos Futuros

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

Table of Contents. PowerPoint XP

18º Congresso de Iniciação Científica IMPLEMENTAÇÃO DE UM MODELO DE TESTE DE APLICAÇÕES WEB

SUAP Módulo Protocolo Manual do Usuário DTI DIRETORIA DE TECNOLOGIA DA INFORMAÇÃO SEÇÃO DE PROJETOS, SISTEMAS E PROCESSOS DE NEGÓCIO

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Programação Web Prof. Wladimir

Cenários do CEL. Acessar ao sistema

Introdução aos critérios de consulta. Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em

Manual usuario sipon. Índice. Introdução. Características do Sistema. De Wiki Intranet. 1 Introdução 1.1 Características do Sistema

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

2 Diagrama de Caso de Uso

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

ROTEIRO PARA TREINAMENTO DO SAGRES DIÁRIO Guia do Docente

Engenharia de Software III

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Projeto de Sistemas I

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

Manual do Sistema WebDiário Perfil Admin Versão 1.0

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

Gestão inteligente de documentos eletrônicos

Manual Integra S_Line

Orientação a Objetos

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Cadastramento de Computadores. Manual do Usuário

MANUAL DE UTILIZAÇÃO DO SISTEMA DE NOTA FISCAL ELETRÔNICA e-nota

Funções básicas Cronograma Cronograma Funções Básicas

MANUAL OPERACIONAL DO SISTEMA ESTADUAL DE CONTROLE DE PESCA

MANUAL TISS Versão

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB

Prof. Raul Sidnei Wazlawick UFSC-CTC-INE. Fonte: Análise e Projeto de Sistemas de Informação Orientados a Objetos, 2ª Edição, Elsevier, 2010.

Tutorial de Matlab Francesco Franco

Algoritmos e Programação Estruturada

Java. Marcio de Carvalho Victorino

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos?

Manual Captura S_Line

gsd - Service Desk Manual do Usuário versão 1

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

TUTORIAL DE UTILIZAÇÃO. Rua Maestro Cardim, cj. 121 CEP São Paulo - SP (11)

Programação WEB I Estruturas de controle e repetição

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

1.6. Tratamento de Exceções

Manual de Instalação... 2 RECURSOS DESTE RELÓGIO REGISTRANDO O ACESSO Acesso através de cartão de código de barras:...

Manual Geral do OASIS

Como melhorar a Qualidade de Software através s de testes e nua. Cláudio Antônio de Araújo 22/11/2008

Manual de Operação do Sistema de Tickets Support Suite

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Configuração do Linux Educacional 5 para melhor uso do MonitorINFO-V4

AULA 12 CLASSES DA API JAVA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes alba.lopes@ifrn.edu.br

Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística Curso de Graduação em Ciências da Computação

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

SCPI 8.0. Novas funcionalidades. Conciliação Bancária Automática:

ROTEIRO NOTA FISCAL ELETRONICA A partir de Agosto/2012

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Comm5 Tecnologia Manual de utilização da família MI. Manual de Utilização. Família MI

Projeto CapacitarME Capacitação de Microempresas

Easytrade Admin Client

Manual TDMax Web Commerce VERSÃO: 0.2

Manual de Integração Web Service

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como:

Professor: Curso: Disciplina:

Princípios da Engenharia de Software Aula 02. Prof.: Franklin M. Correia

TESTES AUTOMATIZADOS COM JUNITE MOCKITO

Teste de Software Parte 1. Prof. Jonas Potros

JSP - ORIENTADO A OBJETOS

Guia de Especificação de Caso de Uso Metodologia CELEPAR

MANUAL DO PRESTADOR WEB

AutoTest Um Framework Reutilizável para a Automação de Teste Funcional de Software

VVS Sistemas (21)

Informática I. Aula 6. Aula 6-12/09/2007 1

Nova Versão 3.0 do Software de Gestão de Equipamentos da Katun KDFM!

IES-300. Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Me. Álvaro d Arce alvaro@darce.com.br

Sistema Hospitalar - Módulo Auditoria v.1.0

Rational Quality Manager. Nome: Raphael Castellano Campus: AKXE Matrícula:

Basic Exchange System

Introdução à Linguagem

Para resolver as questões abaixo considere o Sistema Operacional Microsoft Windows Vista

Manual do Sistema "Vida em Mão - Controle Financeiro Para PALM" Editorial Brazil Informatica

GESTOR ONLINE Gestor Online Principais Recursos:

Transcrição:

Geração automática de casos de teste Arndt von Staa Departamento de Informática PUC-Rio Maio 2014 Especificação Objetivo desse módulo discutir uma abordagem de geração automática de suítes de teste executáveis Justificativa a criação automática das suítes de teste reduz significativamente o esforço de criação de casos de teste pode alcançar uma grau de confiabilidade bastante superior ao alcançado com a criação manual de suítes de teste 2 1

Geração automática de massas de teste A geração de massas de teste é trabalhosa requer a obediência a critérios de seleção que, muitas vezes, acabam conduzindo a um volume muito grande de casos de teste não garante que sejam selecionados todos os casos de teste relevantes 3 Geração automática de massas de teste Seria possível automatizar a geração das massas de teste? reduzir o trabalho de criação de massas de teste? conjugar o gerador com uma variedade de ferramentas de teste? melhorar a eficácia dos testes? 4 2

Geração automática de massas de teste Como gerar automaticamente os casos de teste? geração a partir de modelos? seleção aleatória de dados pré-definidos? qual a vantagem disso com relação à geração manual de dados? geração de dados aleatórios? gerar ou procurar dados segundo regras estabelecidas? procurar dados é necessário quando se trabalha com dados persistentes criados externamente ao artefato sob teste 5 Geração a partir de modelos Modelo é uma especificação abstrata destina-se a guiar o desenvolvimento pode servir para gerar scripts de teste a automação da geração de suítes de testes leva ao desenvolvimento dirigido por testes de aceitação Esquema geral da abordagem: Gerar suíte de teste para ferramenta X Script de teste Modelo testável do artefato Ferramenta de teste X Laudo do teste Apoiar o desenvolvimento Artefato sob teste 6 3

Geração a partir de casos de uso Specifier & Reviewer Standard use cases Architect Mark up use cases Projeto de pesquisa e desenvolvimento envolvendo um processo de geração semi-automática e execução automática de casos de teste Marked up use cases State machine editor XML State machines Interface sketch Design user interface SWB Data dictionary Designer Decision table generator Test case selection criterion Interface designer User Interface Test case generator XML Typed decision tables Decision table editor XML Decision tables XML Test cases Boundary conditions adder Boundary conditions criterion Developer Format & print XML Performable test cases Manual test cases Develop artifact Test script generator Test tool specification Artifact tool Automated test scripts Test artifact Test log & findings 7 Geração a partir de caminhos semânticos h Fornecer dados "Cancelar" } C Cancela controle dados Dados e botão Até limite erros} Erro léxico} Usuário Cadastro de usuários autorizados Validar dados Erro} abstrato: h k p h p h k A k "Login" } "Mudar senha"} "Esqueci senha" } "Cancelar" } Controlar erros Erros além limite} Não autoriza uso "Cancelar" } "Muda" } m Trocar a senha Autoriza uso Fornecer identificação alternativa Emite nova senha h-k dados lexicamente válidos, usuário existe, senha não vale, botão Login ou Mudar senha k-p senha não vale p-h 1º. erro h-p dados lexicamente errados p-h 2º. erro h-k dados lexicamente válidos, usuário existe, senha vale, botão Login k-a botão login p N c a E 8 A o abstrato: h k m c h k m a h k A h-k dados lexicamente válidos, botão k-m usuário e senha existem, botão mudar senha m-c retorna de mudar senha sem mudar c-h volta à origem h-k dados lexicamente válidos, botão k-m usuário e senha existem, botão mudar senha m-a retorna de mudar senha tendo mudado a senha a-h volta à origem h-k dados lexicamente válidos, botão k-a usuário e senha existem, botão login Pergunta: como selecionar dados satisfazendo as condições dos caminhos semânticos? 4

Exemplo de Junit gerado Ao invés de escrever o Junit pode-se gerá-lo podem ser utilizadas diversas notações para isso tabelas de decisão máquinas de estado casos de uso tudo isso junto Passa-se a poder testar características ao invés de classes ou módulos evidentemente os módulos de teste para testar características poderiam também ser criados à mão 9 Exemplo de Junit gerado Caldeira, L.R.N.; Geração Semiautomática de Massas de Testes Funcionais a Partir da Ciomposição de Casos de Uso e Tabelas de Decisão; Dissertação de Mestrado; PUC-Rio; 2010 10 5

Exemplo de Junit gerado 11 Exemplo de Junit gerado 12 6

Geração automática de massas de teste Testes com dados aleatórios permitem gerar grandes volumes de dados segundo variadas funções de distribuição as funções podem basear-se em gramáticas de geração são úteis quando o número de condições estruturais for grande o número e a complexidade das regras de negócio for grande se deseja que, a cada nova execução, os testes percorram um grande número de diferentes caminhos 13 Geração automática de massas de teste Como saber se o resultado do teste é coerente com os dados gerados? utilizar assertivas executáveis rigorosas controlam todas as variáveis e estados manipuladas pelas funções utilizar geradores de oráculos associados à geração dos dados de teste ex.: aplicar os dados a uma tabela de decisão e extraír o oráculo da tabela aproveitar propriedades conhecidas dos resultados... ex.: usar funções inversas capazes de recompor os dados de entrada 14 7

Teste com assertivas recordação O teste usando assertivas como oráculo depende da qualidade das assertivas torna necessária a introdução de redundâncias no código requer assertivas estruturais (quase) completas devem assegurar a auto-verificação porém, o custo de avaliação de uma assertiva estrutural pode ser muito elevado as assertivas de entrada são assumidas verdadeiras ao iniciar e assegurar a corretude do fragmento de interesse precisa-se verificar se isso é verdade instrumentação devem figurar nas assertivas de entrada todos os dados, estados e recursos usados no fragmento de interesse antes de serem redefinidos (alterados, destruídos) neste fragmento devem figurar nas assertivas de saída todos os dados, estados e recursos criados, alterados ou destruídos no fragmento de interesse é importante verificar se o efeito do fragmento de código foi atingido através de assertivas de saída sensíveis aos dados de entrada 15 Geração automática de massas de teste Como saber que a massa de teste gerada é boa? usar mutantes para avaliar a eficácia do teste assegurada pelo método de geração medir a cobertura para avaliar a completeza assegurada pelo método de geração todos os comandos todas as arestas todos (fragmentos de) caminhos 16 8

Geração automática de massas de teste Pode-se gerar sem regras definidas? Como gerar com regras definidas? geração segundo uma gramática geração ad hoc regras intuitivas criadas sob medida para o artefato a ser testado geração a partir de grafos, ou máquinas de estados geram-se os caminhos geram-se dados em acordo com as regras desses caminhos geração usando técnicas de busca em conjuntos complexos... muitas vezes baseadas em princípios de inteligência artificial search based software engineering (SBSE) aplicado a testes McMinn, P.; "Search-based software test data generation: a survey"; Software Testing, Verification and Reliability 14(2); 2004; pp. 105 156 17 Gramática livre de contexto especificação 1 / 2 <gramática> ::= 0 [ ( <produção> <declara_função> ) ] ; <produção> ::= <não_terminal> '::=' <não_terminal> ::= '<' $nome '>' ; <frase> ( <frase> <expressão lógica> ) ';' ; ::= ( <sequência> <alternativa> <repetição> <declara_token> ) ; <sequência> ::= 1 [ <elemento> ] ; <alternativa> ::= '(' <frase> 0 [ ' ' <frase> ] ')' ; <repetição> ::= <cardinalidade> '[' <frase> ']' ; <cardinalidade> ::= ( $num $num '-' $num '-' $num ) ; <elemento> ::= ( <terminal> <não_terminal> ) ; <terminal> ::= ( $lexema ) ; exemplos de elementos léxicos $xxx é um conjunto de elementos léxicos lexema é qualquer coisa retornada pelo analisador léxico, exemplos: ' ' '::=' $num $nome até $lexema 18 9

Gramática livre de contexto especificação 2 / 2 <declara_função> ::= <nome_função> '(' <parâmetros> ')' '::=' $expressão_lógica ; <parâmetros> ::= <parâmetro> 0 [ ',' <parâmetro> ] ; <parâmetro> ::= $nome ; <chama_função> ::= <nome_função> '(' <parâmetros> ')' ; <nome_função> ::= $nome ; <declara_token> ::= <tipo> <nome_token> ',' $expressão_lógica ; <tipo> ::= $idtipo ; <nome_token> ::= $nome ; $expressão_lógica corresponde à gramática de expressões lógicas descrita na aula de assertivas indica a regra que o token deve satisfazer 19 Exemplo: gramática para datas (oráculo) <data> ::= <ano> '/' <mês> '/' <dia> ; <ano> ::= int a, 1900 <= a && a <= 3000 ; <mês> ::= int m, 1 <= m && m <= 12 ; bissexto( a ) ::= a div 400 ( a div 4 &&! ( a div 100 )) ; <dia> ::= int d, ( 1 <= d ) && ( m 1, 3, 5, 7, 8, 10, 12 } => d <= 31, m 4, 6, 9, 11 } => d <= 30, m = 2 && bissexto( a ) => d <= 29, m = 2 &&! bissexto( a ) => d <= 28 ) ; Segundo a regra acima um ano corresponde a 365 + 97 / 400 dias = 365,2425 Um ano Tropical medido é aproximadamente 365,24219 dias. Considerando o calendário Gregoriano, o cálculo corresponde a um erro de um dia a aproximadamente cada 3300 anos 20 10

Geração de datas aleatórias (parcial) <ano> ::= int a, 1900 <= a && a <= 3000 ; não vale: a == 1899; a == 3001 vale: a == 1900 ; a == 1901 ; a == 2999 ; a == 3000; e escolhas randômicas entre 1902 e 2998 bissexto( a ) ::= a div 400 ( a div 4 &&! ( a div 100 )) ; são bissextos a div 400: 2000, 2400, 2800 não são bissextos a div 100: 1900, 2100, 2200,... são bissextos a div 4: 1904, 1908, 1912,... não são bissextos: 1901, 1902, 1903, 1905,... precisa-se criar um gerador capaz de interpretar a regra e gerar dados que satisfaçam e outros que não satisfaçam as regras gerar um número aleatório e aplicar a regra não é suficiente, pois não assegura os casos especiais enumerados acima 21 Geração de dados segundo uma gramática Exemplo: gerar nomes de um programa Java, C#, C ou C++ <Nome> ::= <InicioNome> <RestoNome> ; <InicioNome> ::= ( <Letras> _ ) ; <RestoNome> ::= 0 31 [ <CharCont> ] ; <CharCont> ::= ( <Letras> <Digitos> _ ) ; <Letras> ::= ( <Maiusculas> <Minusculas> ) ; <Digitos> ::= $Numerais ; <Maiusculas> ::= $UpperCase_ASCII ; <Minusculas> ::= $LowerCase_ASCII ; Como gerar? quais são as distribuições das alternativas? 22 11

Geração de dados segundo uma gramática <Nome> ::= <InicioNome> <RestoNome> ; <InicioNome> ::= ( 92% <Letras> '_' ) ; <RestoNome> ::= 0 31 2% 0 ; 30% 1 5 ; 33% 6 12 ; 24% 13 22 ; 10% 23-30 } [ <CharCont> ] ; <CharCont> ::= ( 75% <Letras> <Letras> 20% <Digitos> '_' ) ; ::= ( 10% <Maiusculas> <Minusculas> ) ; <Digitos> ::= $Sel( "0123456789" ) ; alguma função de distribuição A última opção de uma lista possui freqüência necessária para se chegar a 100% $Sel usa distribuição uniforme <Maiusculas> ::= $Sel( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ) ; <Minusculas> ::= $Sel( "abcdefghijklmnopqrstuvwxyz" ) ; 23 Função de distribuição aproximada % função de distribuição a ser aproximada distribuição uniforme 30/4 33/6 24/9 10/8 0 1 5 6 12 13 2223 3132 24 12

Geração de dados segundo uma gramática static char LETRAS_MIN[ ] = "abcdefghijklmnopqrstuvwxyz" ; static char LETRAS_MAI[ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; static char DIGITOS[ ] = "0123456789" ; static int dimtamanhos = 5 ; static struct int frequenciatamanho ; int tammin ; int tammax ; } vttamanho[ ] = 2, 0, 0 }, 32, 1, 5 }, 65, 6, 12 }, 89, 13, 22 }, 99, 23, 31 } } ; static int vtselecaotamanho[ ] = 2, 32, 65, 89, 99 } ; static int vtdistribuicaochar[ ] = 75, 95 } ; static int frequenciasublinhado = 8 ; static int inxcharnome ; static char Nome[ DIM_NOME ] ; 25 Geração de dados segundo uma gramática void Gerar( void ) memset( Nome, 0, DIM_NOME ) ; inxcharnome = 0 ; GerarNome( ) ; } /* end Gerar */ <Nome> ::= <InicioNome> <RestoNome> ; void GerarNome( void ) GerarInicioNome( ) ; GerarRestoNome( ) ; } /* end GerarNome */ 26 13

Geração de dados segundo uma gramática <InicioNome> ::= ( 92% <Letras> '_' ) ; void GerarInicioNome( void ) int Selecao ; Selecao = ALT_GerarDistUniforme( 0, 100 ) ; if ( Selecao <= frequencialetras ) GerarLetras( ) ; } else InserirChar( '_' ) ; } /* if */ } /* End GerarInicioNome */ 27 Geração de dados segundo uma gramática <RestoNome> ::= 0 31 5% 0 ; 30% 1 5 ; 35% 6 12 ; 17% 13 22 ; 10% 23-30 } [ <CharCont> ] ; void GerarRestoNome( void ) int Selecao ; int tamgera ; int i ; Selecao = ALT_GerarFrequencia( dimtamanhos, vtselecaotamanho, 100 ) ; if ( Selecao == 0 ) return ; } else if ( Selecao < dimtamanhos ) tamgera = ALT_GerarDistUniforme( vttamanho[ Selecao ].tammin, vttamanho[ Selecao ].tammax ) ; } else tamgera = 32 ; } /* if */ for ( i = 0 ; i < tamgera ; i++ ) GerarCharCont( ) ; } } // GerarRestoNome 28 14

Geração de dados segundo uma gramática <CharCont> ::= ( 75% <Letras> 20% <Digitos> '_' ) ; void GerarCharCont( void ) int Selecao ; Selecao = ALT_GerarFrequencia( 2, vtdistribuicaochar, 100 ) ; switch ( Selecao ) case 0 : GerarLetras( ) ; break ; case 1 : GerarChar( DIGITOS ) ; break ; default : InserirChar( '_' ) ; break ; } // switch } // GerarCharCont o exemplo não está tratando de forma específica as letras maiúsculas e minúsculas 29 Geração de dados segundo uma gramática void GerarLetras( ) int Selecao ; int caixa = ALT_GerarDistUniforme( 0, 100 ) ; if ( caixa <= 10 ) Selecao = ALT_GerarDistUniforme( 0, strlen( LETRAS_MAI ) - 1 ) ; InserirChar( LETRAS_MAI[ Selecao ] ) ; } else Selecao = ALT_GerarDistUniforme( 0, strlen( LETRAS_MIN ) - 1 ) ; InserirChar( LETRAS_MIN[ Selecao ] ) ; } /* end if */ } // Gerar Letras void InserirChar( char Ch ) assert( inxcharnome < DIM_NOME ) ; Nome[ inxcharnome ] = Ch ; inxcharnome++ ; } /* End Inserir char */ Má prática: todas as constantes deveriam ser declaradas com um nome simbólico 30 15

Geração de dados no arcabouço C++ O comando de geração deve disparar o reconhecimento de uma sub-linguagem diversos parâmetros configuram a geração Deve integrar a geração e o apoio à diagnose um comando do gerador permite informar até onde devem ser geradas e executadas de forma automática as operações a realizar executam-se os comandos e ao terminar salva-se o estado após é gerado o texto de n comandos entre os quais deve estar aquele que gerou a falha observada para replicar: utiliza-se o estado após gerar normal e aplicam-se os comandos adicionais pode-se agora usar um trace ou debugger para determinar a causa do problema 31 Versão usada no teste de btree == Generate and test random data =GenerateTest Btree01 UseSeg BtreeHead01 +GenerationControl 10000 1000 1 quantos numchaves semente +VerificationFreq 0 500 iniciaverif freqverif +BreakpointHandling 0 7 iterinterrompe numcmdapos +ActionDistribution 35 25 40 %ins %subst %del +SizeDistribution 10 2 %doitem tamlimite +SizeDistribution 40 15 +SizeDistribution 30 25 +SizeDistribution 20 34 +ParameterListEnd 32 16

Teste usando dados aleatórios, processo Desenvolva um módulo de teste específico capaz de gerar dados e de selecionar comandos aleatórios (chamadas de funções) em acordo com a especificação do módulo deve ser capaz de gerar dados que executem completamente o módulo a ser testado Instrumente o módulo a testar com contadores para medir a cobertura e outras propriedades Utilize como oráculo um verificador estrutural e/ou assertivas pontuais executáveis Ao terminar o teste destrua integralmente as estruturas alocadas para verificar a ocorrência de vazamento de memória ou de outros recursos 33 Teste com dados previamente gerados Em muitas ocasiões não se pode gerar dados aleatórios irrestritos, exemplo: para testar o componente Login é necessário que o cadastro de usuários esteja disponível entretanto, o módulo "gerente do login" poderia criar um cadastro com dados aleatórios se, ao fazer isso, for criada uma tabela auxiliar, esta tabela poderia ser utilizada pelo testador do componente Login para gerar os dados podem-se criar distribuições que provoquem erros de fornecimento de dados a partir de seleções randômicas dentro da tabela 34 17

Seleção randômica de casos de teste Tabela <dados, oráculo> Gerador / executor Gerar dados persistentes Selecionar randomicamente casos de teste úteis Dados persistentes Artefato sob teste Script de teste 35 Teste usando dados aleatórios: comentários Vantagens não se precisa gerar manualmente a massa de teste é gerado um número grande de dados dados exploram uma grande variedade de combinações pode ser repetido com diferentes parâmetros exercitando o módulo de diferentes maneiras como se está utilizando um gerador de números pseudo-aleatórios o teste é repetível se os números aleatórios forem gerados a partir de uma mesma semente mudando a semente mudam-se os caminhos percorridos é rápido a rapidez é proporcional ao volume de dados gerados custo baixo não requer muito trabalho humano 36 18

Teste usando dados aleatórios: comentários Desvantagens requer algum trabalho de condicionamento do módulo sob teste instrumentação assertivas estruturais ou outra forma de oráculo requer a programação das funções de geração requer uma inspeção e um teste cuidadoso das funções de geração da massa de teste o módulo de teste específico pode tornar-se complexo 37 Teste usando dados aleatórios: comentários A forma de teste discutida foi utilizada em componente btree componente editor de texto uma vez removidos os defeitos, nenhum defeito novo foi encontrado em mais de 15 anos de uso 38 19

Geração automática de suítes de teste Alguns comentários muitos "geradores" publicados na literatura geram somente casos de teste abstratos e, algumas vezes, os casos de teste semânticos como exemplos vejam os "geradores" de caminhos a partir de máquinas de estado ou de diagramas de fluxo por enquanto os geradores são projetados para determinadas classes de problemas uma grande parte destes geradores são resultados de projetos de pesquisa ainda não convertidos em produtos vale a pena procurar literatura tratando de soluções específicas 39 Referências bibliográficas Caldeira, L.R.N.; Geração de Massas de Teste para Aplicações WEB a Partir da Composição de Casos de Uso e Tabelas de Decisão; Dissertação de Mestrado, DI/PUC- Rio, 2010 Edwards, S.H.; A Framework for Practical, Automated Black-Box Testing of Component-Based Software ; Software Testing, Verification and Reliability 11(2); New York: John Wiley & Sons; 2001; pags 97-111 Heumann, J.; Generating Test Cases from Use Cases ; The Rational Edge e-zine www.ibm.com/developerworks/rational/rationaledge/ International Business Machines; 2001 ; Buscado em: 22/jan/2009; URL: www.ibm.com/developerworks/rational/library/content/rationaledge/jun01/ GeneratingTestCasesFromUseCasesJune01.pdf Lachtermacher, L.; O uso de tabelas de decisão para a automação da geração e da execução de casos de teste; Dissertação de Mestrado, DI/PUC-Rio, 2010 Pacheco, C.; Lahiri, S.K.; Ernst, M.D.; Ball, T.; Feedback-directed Random Test Generation ; Proceedings of the 29th International Conference on Software Engineering - ICSE'07, Minneapolis, 2007; Los Alamitos, CA: IEEE Computer Society; 2007; pags 75-84 Wanderley, C.G.; Ferramenta de Auxílio à Automação de Testes de Interfaces Gráficas Desenvolvidas com C++; Relatório de Iniciação Científica, PIBIC/PUC-Rio; 2011 40 20

FIM 41 21