Critério de seleção de casos de teste



Documentos relacionados



LINGUAGEM C UMA INTRODUÇÃO

subdiretório diretório de usuário

Representações de caracteres

ANEXO A. Prof. Erico Lisboa 53

CAPÍTULO 2 SISTEMAS DE NUMERAÇÃO E CÓDIGOS

1 2 9, i n c i s o I I, d a C F ; e a r t i g o 5 º, i n c i s o V, a l í n e a s a e

Universidade Federal do ABC Disciplina: Natureza da Informação Lista de Exercícios 02 Códigos e conversão A/D Prof. João Henrique Kleinschmidt

Sistemas de Vírgula Flutuante

U N I V E R S I D A D E F E D E R A L D A P A R A Í B A C E N T R O D E C I Ê N C I A S D A S A Ú D E

Erros e Incertezas. Rafael Alves Batista Instituto de Física Gleb Wataghin Universidade Estadual de Campinas (Dated: 10 de Julho de 2011.

2) Escreva um algoritmo que leia um conjunto de 10 notas, armazene-as em uma variável composta chamada NOTA e calcule e imprima a sua média.

Sistemas Numéricos. Tiago Alves de Oliveira


Aritmética Computacional. Prof. Leonardo Barreto Campos 1

J U R I S P R U D Ê N C I A F I S C A L A R B I T R A L ( 3. º E 4. º T R I M E S T R E S D E )

Depart am ent o de Mat em át ic a. Lic enc iat uras em : Ec onom ia Gest ão de Em presas Gest ão / Inform át ic a

Guia do usuário do Report Portal. Versão 6.0 SP1

P RO J E T O E S P E C I A L : A R E S T / F AZ E N D A S E N H O R J E S U S

ARMAZÉNS GERAIS ASPECTOS LEGAIS, VANTAGENS E SERVIÇOS

REDES DE NOVA GERAÇÃO. m a i o r q u a l i d a d e, m a i s r a p i d e z, mais inovação;

Algoritmos e Estruturas de Dados I. Variáveis Indexadas. Pedro O.S. Vaz de Melo

Interface com Displays de 7 Segmentos. Interface com Displays

Referências. Programação de Computadores II. Cap. 7 Cadeias de Caracteres. Caracteres. Tópicos

UNIMINAS Só é necessário o armazenamento de: Sinal da mantissa: - (menos). Valor da mantissa: Sinal do expoente: -(na realidade, háh

Plano de Teste. Arndt von Staa Departamento de Informática PUC-Rio Maio 2014

Informática Aplicada

Prof. Adilson Gonzaga. Interface com Displays

A C T A N. º I X /

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores 12/03/2011 VARIÁVEIS E TIPOS DE DADOS

Sistema de Suporte à Auditoria de Folhas de Pagamento Baseado em Redes Neurais

Capítulo 4 Inferência Estatística


Nesta aula vamos rever operações com frações,

TUTORIAL MATLAB Victor Breder 2016

PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C

Variáveis e Comandos de Atribuição

Linguagem de Programação C. Fluxo de Saída Padrão. Linguagem de Programação C. printf. Fluxo de Saída Padrão. Algoritmos e Lógica de Programação

OBSERVAÇÕES: EXERCÍCIOS

7. Funções de Lógica Combinacional. 7. Funções de Lógica Combinacional 1. Somadores Básicos. Objetivos. Objetivos. Circuitos Digitais 03/11/2014

Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C. Exercícios: Structs

Exercícios: Vetores e Matrizes

1. Estrutura de Dados

3. COMPILAÇÃO E ESTRUTURA BÁSICA DE UM PROGRAMA EM C

Professor Alexandre Assis. Lista de exercícios de Determinantes. 5. Para que o determinante da matriz

Vírgula flutuante Aula 6

Apêndice 1. Recomendações para testes de módulos

21 Strings O que são strings? 21.2 Leitura de Strings. Ronaldo F. Hashimoto e Carlos H. Morimoto

Universidade Federal da Paraíba Centro de Informática Departamento de Informática

Avaliação e Desempenho Aula 1 - Simulação

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ. Câmpus Ponta Grossa. Coordenação do Curso Superior de Tecnologia em. Automação Industrial

Arquitetura de Computadores I

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Estruturas de Repetição

Árvores de Decisão Matemática Discreta

Introdução a Tecnologia da Informação

Projeto Jovem Nota 10 Conjuntos Numéricos Lista 3 Professor Marco Costa 1. Represente geometricamente os números racionais:

1.2. Grandezas Fundamentais e Sistemas de Unidades

VI Seminário Latino-Americano de Geografia Física II Seminário Ibero-Americano de Geografia Física Universidade de Coimbra, Maio de 2010

Algoritmos APRENDENDO A PROGRAMAR COM C#

Aula 6 Propagação de erros

Orientação a Objetos

a) 2 b) 3 c) 4 d) 5 e) 6

Aula 01 Introdução Custo de um algoritmo, Funções de complexidad e Recursão

O Sistema de Computação

Trabalho Prático II - Resta 1 Data de Entrega: Conferir no calendário!

Aula Extra. Depurador Code::Blocks. Monitoria de Introdução à Programação

Aula 1 Conjuntos Numéricos

3. Linguagem de Programação C

Matemática A. Teste Intermédio Matemática A. Versão 1. Teste Intermédio. Versão 1. Duração do Teste: 90 minutos º Ano de Escolaridade

Python: Tipos Básicos. Claudio Esperança

=...= 1,0 = 1,00 = 1,000...

A S N O V A S R E G R A S D E F A C T U R A Ç Ã O

Integração Web Services REST Gateway

Prática. Exercícios didáticos ( I)

Curso de Sistemas de Informação 8º período Disciplina: Tópicos Especiais Professor: José Maurício S. Pinheiro V

Qualidade de Produto. Maria Cláudia F. P. Emer

Programação em FORTRAN V. João Manuel R. S. Tavares

Teste Intermédio Matemática A. Versão 1. Teste Intermédio Matemática A. Versão 1. Duração do Teste: 90 minutos º Ano de Escolaridade

MARINHA DO BRASIL Pagadoria de Pessoal da Marinha

Conteúdo. 1 Introdução. Histograma do Quinto Sorteio da Nota Fiscal Paraná 065/16. Quinto Sorteio Eletrônico da Nota Fiscal Paraná

COBRANÇA BANESE. de acordo com as normas da FEBRABAN e ASBACE

Apostila de Informática Básica

Introdução. Qualidade de Produto. Introdução. Introdução ISO/IEC Normas

Conteúdo. 1 Introdução. Histograma do 1o Sorteio da Nota Fiscal Paraná 152/15. 1º Sorteio Eletrônico da Nota Fiscal Paraná

Aula 3/4: Vetores/Matrizes e Ponteiros

Detecção de erros de comunicação de dados CRC

Transcrição:

Critério de seleção de casos de teste Arndt von Staa Departamento de Informática PUC-Rio Março 2016 Especificação Objetivo desse módulo apresentar os conceitos relacionados com critérios de seleção de casos de teste apresentar e exemplificar o uso do critério de valoração. Esse critério é da família dos critérios de condições de contorno. Justificativa a escolha de condições de teste e de valores para os casos de teste semânticos deve enfatizar valores que tenham maior probabilidade de encontrar defeitos Texto Pezzè, M.; Young, M.; Teste e Análise de Software; Porto Alegre, RS: Bookman; 2008, capítulo 9 Staa, A.v.; Programação Modular; Campus; 2000 Capítulo 15 2 1

Critério de seleção, requisitos Um critério de seleção de casos de teste deve ser confiável: acusa falhas sempre que existam defeitos no artefato sendo testado se isso fosse semprepossível, então seríamos capazes de saber se encontramos todos os defeitos, infelizmente não é em virtude disso uso eficácia o percentual dos defeitos existentes que foi identificado pelos testes completo: testa todo o artefato segundo um padrão de completeza cobertura do teste, exemplos» cobertura de instruções» cobertura de arestas» cobertura de chamadas» cobertura de retornos (inclusive throws)» cobertura de widgets»... 3 Critério de seleção, requisitos Um critério de seleção de casos de teste deve ser, cont. indiferente à escolha: dados escolhidos de modo que satisfaçam as condições de um determinado caso de teste semântico devem acusar sempre exatamente as mesmas falhas para um mesmo código entretanto, a prática mostra que: para um mesmo caso de teste semântico, existem conjuntos de dados valorados que têm probabilidade maior de encontrar falhas do que outros» ou seja, a escolha faz diferença podem existir não determinismos que fazem com que, em diferentes execuções, um mesmo código se comporte de forma diferente para um mesmo conjunto de dados. Exemplos:» uso de variáveis não inicializadas» multi-programação(threads)» aprendizado 4 2

Critério de valoração Valoração dos dados: é a escolha dos dados a serem utilizados a partir dos casos de teste semânticos a escolha deve ser feita de modo a maximizar a chancede se encontrar um problema a observação da prática tem mostrado que a escolha de condições de contorno aumenta esta chance podem-se adicionar condições que são frequentes causadoras de problemas lista de controle (checklist), exemplos overflow saturação de acumulador perda de significância divisão por zero dados ilegais para a função sendo avaliada, ex. sqrt( -1 ) caracteres ilegais para o campo sendo preenchido, ex. campo numérico... 5 Critério de valoração Valoração dos dados: é um critério complementar Especificação Escolher o critério de seleção o conjunto valorado pode ser bem maior do que o conjunto de casos de teste semânticos Critério de seleção Gerar casos de teste Padrões Artefato Determinar significados Critério de valoração Casos de teste abstratos Selecionar dados e ações A forma de gerar os casos de teste é escolhida nesta etapa. Existem as grandes categorias: caixa aberta, caixa fechada, caixa entreaberta, geração aleatória. Casos de teste semânticos Em muitos casos corresponde a fragmentos de caminhos a serem percorridos, e/ou a cenários a serem satisfeitos Casos de teste valorados Valoração dos casos de teste ocorre em todas as formas de geração de casos de teste porventura escolhidos. Pode ser automatizada. Casos de teste úteis Determinar resultados esperados Massa de teste 6 3

Critérios de valoração O critério de valoração é um exemplo de critério baseado em lista de controle(checklist) critérios baseados em listas de controle são critérios que se baseiam no aprendizado humano (aquisição de conhecimento) o conhecimento deve ser registrado para não se perder com o tempo para reduzir o tempo de treinamento quando ingressar um novo desenvolvedor na equipe crie e mantenha um manual de testes com os padrões de valoração registre nele os cenários que frequentemente injetam defeitos, exemplos» teste de comparações numéricas» teste de listas de tamanho variável como realizar os testes capazes de identificar a ocorrência dos potenciais defeitos do cenário 7 Critério de seleção, requisitos Problema da escolha diferentes escolhas de dados (valorações) satisfazendo um mesmo caso de teste semântico podem levar à detecção de diferentes falhas ou mesmo à não detecção delas exemplo: o caso de teste semântico pode exigir que se acesse um elemento contido em uma lista de colisão de uma tabela de randomização (hash table). O programa sob teste contém um defeito que o faz errar ao acessar elementos da lista de colisão de índice dimtab-1(limite superior). Caso a escolha não exercite este índice, o defeito não será observado nem removido. 8 4

Critério de seleção, requisitos Problema da completeza da suíte (massas) de teste algum critério de completeza deve sempre estar identificado cada critério de completeza assegura a detecção de um conjunto específico de defeitos procurem usar instrumentos de medição da completeza alcançada pela cobertura da suíte de testes muitos IDE s já vêm com medidores de cobertura de arestas Exemplos de critérios de completeza das suítes de teste Cobertura de instruções Cobertura das arestas do fluxograma Cobertura de fragmentos de caminhos Cobertura de caminhos inteiros Cobertura de chamadas de funções Cobertura dos retornos de funções, inclusive throw e chamadas a funções que jamais retornam (arrumação da casa) Cobertura dos elementos da interface com o usuário... 9 Qual seria a suíte de teste? # include <stdio.h> void main ( void ) int i, Num, Resto ; float TotalPar = 0, TotalImpar = 0 ; int NumPar = 0, NumImpar = 0 ; printf( "Digite 5 números: " ) ; for ( i = 0 ; i < 5 ; i++ ) scanf ( "%i", &Num ) ; Resto = Num % 2 ; if ( Resto == 0 ) TotalPar += Num ; NumPar ++ ; } else TotalImpar += Num ; NumImpar ++ ; } } printf ( "\nmédias dos pares = %8.1f", TotalPar / NumPar ) ; printf ( "\nmédias dos impares = %8.1f\n", TotalImpar / NumImpar ) ; } 10 5

Quais são os erros? São sempre detectáveis? char meustring[ ] = "abcde" ; strcpy( meustring, "123456" ) ; strncpy( meustring, "123456", sizeof( meustring )) ; strncpy( meustring, "123456", strlen( meustring )) ; qual o problema? void Copia( int dimstrdest, char * StrDest, char * StrOrg ) ;... char meustring[ ] = "abcde" ; Copia( sizeof( meustring ), meustring, "123456" ) ;... void Copia( int dimstrdest, char * strdest, char * strorg ) assert( dimstrdest >= strlen( strorg )) ; strcpy( strdest, strorg ) ; Quais são os problemas aqui? } 11 Critérios de valoração, comparações Ao testar uma comparação a <= b, escolha sempre os três casos: a = b ε a = b a = b + ε εé o menor valor possível que torne verdadeira a relação a + ε>= bquando for verdadeira a relação a < b. para valores inteiros εé 1. para valores vírgula flutuante erro absoluto: a ε<= b<= a+ ε» depende da magnitude de ae b erro relativo: 1 ε<= b/ a<= 1 + ε» independe da magnitude» ε pode ser o número de algarismos significativos desejado» procure usar sempre que possível erro relativo ao testar 12 6

Critérios de valoração, valores numéricos Ao testar tabelas, métodos ou funções que recebam valores numéricos representando alguma grandeza (ex. tempo, dinheiro, distância, dimensão de vetor, etc.) teste sempre para 0 tenta observar defeitos de divisão por zero teste sempre para -1 tenta observar falta de controle do uso ilegal de valores negativos (ex. sqrt( -1 )) se a máquina em uso codifica inteiros usando magnitude com sinal, teste com 0, -a + b e a + -b e similares tenta observar erros ridículos, ex. dívida de R$-0,00 teste também para valores razoáveis considerando a aplicação permite verificar se o resultado corresponde a o que o usuário espera o que o usuário espera pode ser diferente de o que a especificação (oráculo) determina! Goddard Space Flight Center; FSW Unit Test Standard; Flight Software Branch; Code 582; 2006; Buscado em: 06/abril/2009; URL: http://software.gsfc.nasa.gov/assetsapproved/pa2.4.2.2.1.doc 13 Critérios de valoração, valores numéricos Procure sempre provocar as condições pouco comuns: overflow sintoma em inteiros e em vírgula flutuante: o resultado da soma é maior do que a capacidade de representação, teste para os dois dados positivos e para os dois negativos, mistura não pode dar overflow exemplos em inteiro: o resultado é menor do que pelo menos uma das parcelas» a + b < a ou a + b < b, sendo a > 0 e b > 0 somas ou multiplicações envolvendo números grandes, ou muitos números em vírgula flutuante: divisão de número grande (expoente positivo grande) por número muito pequeno (expoente negativo grande) próximo slide tem a codificação de números vírgula flutuante O contrário de um dado válido é um dado não válido, mas não um dado inválido 14 7

Vírgula flutuante: IEEE 754 double Algumas vezes é importante conhecer o hardware, ex. Formato de números vírgula flutuante double(64 bits) Deslocamento expoente: 0x3FF (metade de 11 bits) Expoente mínimo = -0x3FF = -1023 10 Expoente máximo = 0x7FF-x3FF = 1024 10 a fração é sempre normalizada: o expoente deve ser ajustado de modo que o primeiro bit da fração seja não nulo consequentemente ele não precisa ser representado na codificação o número de bits da fração é então 53 bits Valor-bin = exp-bin( exp 0x3FF ) * 1.fracao [Wikipedia] Obs. existem diversas codificações de valores especiais. 15 Vírgula flutuante decimal, para ilustrar 10 ** exp + fração as frações são normalizadas: 0.1 <= fração < 1.0 codexpé codificado 50 + expo que permite gerar expoentes de -50 <= exp <= 49 exp = codexp - 50 exemplos de valores: 1. = 5110 (10*0,1) 0.1 = 5010 100 = 5310 0.001 = 4810 16 8

Critérios de valoração, valores numéricos underflow em vírgula flutuante sintoma em vírgula flutuante: número absoluto diferente de zero, porém menor do que o menor representável na codificação usada pela máquina exemplo em vírgula flutuante: divisão de número muito pequeno por número muito grande divisão por zero saturação de acumulador sintoma em vírgula flutuante: somas sucesivas podem não alterar o valor do resultado exemplos em vírgula flutuante: ocorre quando se tenta somar um número pequeno a um número grande o pequeno é tratado como zero soma de um número muito grande de pequenas parcelas 17 Exemplo de saturação adições sucessivas decimal, 2 dígitos na fração 5023 + 5023 5011 5011 5074 5097 5013 5024 5011 5110 5023 5047 5171 5181 5074 5112 5013 5182 5099 5121 5129 5211 5129 5150 5099 5211 5171 5212 adições sucessivas decimal, 3 dígitos na fração 50230 50230 51712 51710 50740 50970 51290 52100 50110 51108 50990 52109 51710 51818 50740 52116 50130 51831 50230 52118 51290 52112 50130 52119 50990 52121 50110 52120 parcelas não ordenadas parcelas ordenadas formato vírgula flutuante do exemplo: eeff soma flutuante valor real: 10**(ee-50)*ff 18 9

Critérios de valoração, ordenação de strings Qual a ordenação: José? JOSÉ? JOSE? jósé para computadores cada caractere tem um valor numérico a comparação simples utiliza o valor numérico strcmpou memcmp Jóse > Jose [ ó > o ] ; Jose < jóse [ J < j ] precisa criar, ou usar, uma função de comparação que seja insensível à caixa e à acentuação muitas convertem para representação canônica e depois comparam ex. tudo minúsculo e sem acentos comparação parcialmente igual google Onde fica o caractere Euro: na tabela Unicode? Em ASCII é 80 hexadecimal ou 128 decimal canônico: em conformidade com padrão, modelo, norma, ou regra 19 Critérios de valoração, ordenação de strings Caso listas de stringssejam ordenadas deve-se testar a sensitividade dos caracteresnas diferentes posições: primeiro, segundo, meio, último Para letrastemos os problemas caracteres são comparados como se fossem números descontinuidade dos valores numéricos caracteres ASCII minúsculos, maiúsculos e diacríticos estão em regiões diferentes da tabela de código vários caracteres diferentes podem representar o mesmo caractere de comparação a == A == á == à == â == ã == ä ==... as tabelas ASCII (8 bits) e Unicode (16 bits) são diferentes (óbvio) mesmo quando se considera o conjunto de caracteres latinos 20 10

Critérios de valoração: tabela ISO / ASCII 0 1 2 3 4 5 6 7 8 9 A B C D E F 2! " # $ % & ' ( ) * +, -. / 3 0 1 2 3 4 5 6 7 8 9 : ; < = >? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ \ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z } ~ 8 ƒ ˆ Š Œ Ž 9 š œ ž Ÿ A ª «B ± ² ³ µ ¹ º» ¼ ½ ¾ C À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï D Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß E à á â ã ä å æ ç è é ê ë ì í î ï F ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ parte ASCII parte ISO 21 Tabela ISO / ASCII para comparação português 0 1 2 3 4 5 6 7 8 9 A B C D E F 2! " # $ % & ' ( ) * +, -. / 3 0 1 2 3 4 5 6 7 8 9 : ; < = >? 4 @ a b c d e f g h i j k l m n o 5 p q r s t u v w x y z [ \ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z } ~ \0 8 \0 ƒ ˆ \0 \0 \0 \0 \0 9 \0 \0 \0 \0 \0 \0 A \0 ª «B ± ² ³ µ ¹ º» ¼ ½ ¾ C a a a a \0 \0 \0 c \0 e e \0 \0 i \0 \0 D \0 \0 \0 o o o \0 \0 \0 u \0 u \0 \0 \0 E a a a a \0 \0 \0 c \0 e e \0 \0 i \0 \0 F \0 \0 \0 o o o \0 \0 \0 u \0 u \0 \0 \0 '\0' corresponde ao valor numérico 0, é usado para os caracteres letra que não têm significado em português 22 11

Algoritmo de comparação int i ; int sizprefix = min( length_1, length_2 ) ; for ( i = 0 ; i < sizprefix ; i ++ ) if ( characterconversiontable[ string_1[ i ]] < characterconversiontable[ string_2[ i ]] ) return LESS ; } else if ( characterconversiontable[ string_1[ i ]] > characterconversiontable[ string_2[ i ]] ) return GREATER ; } /* if */ } /* while */ /* o mais curto é igual à parte inicial do mais longo */ if ( length_1 < length_2 ) return LESS ; if ( length_1 > length_2 ) return GREATER ; return EQUAL ; 23 Critérios de valoração, enumerações Cada elemento de uma enumeração deve ser testado se o conjunto de enumeração for muito extenso? caracteres são enumerações dependendo do caso pode-se simplificar testando intervalos 'a' <= ch <= 'z' mas pode-se utilizar intervalos para testar os caracteres ISO/ASCII válidos em português? e se o computador usar a codificação EBCDIC (IBM: Extended Binary Coded Decimal Interchange Code) ou 'a' <= ch <= 'i' ou 'j' <= ch <= 'r' ou 's' <= ch <= 'z' 24 12

Critérios de valoração, tamanho Ao testar valores de tamanho variável por exemplo: arquivos, vetores, strings gere casos de teste para tamanho zero tamanho mínimo-1, caso exista limite inferior tamanho mínimo tamanho médio tamanho máximo tamanho máximo+1, caso exista limite superior no caso de strings teste ainda: tamanho máximo+número grande teste de sensibilidade a agressões vulnerabilidade decorrente da falta de controle de extravasão de buffer 25 Critérios de valoração, pertinência Ao acessar valores pertencentes a um conjunto dinamicamente criado, ex. lista, arquivo sequencial considere sempre conjunto vazio conjunto contendo exatamente um elemento e conjunto contendo três ou mais elementos para um conjunto com 3 ou mais elementos acesse o primeiro elemento um elemento mais ou menos no meio do conjunto o último elemento 26 13

Critérios de valoração, pertinência Ao procurar elementos pertencentes a conjuntos ordenados o elemento inexistente imediatamente anterior ao primeiro em um conjunto ordenadodeve ser possível gerar um valor anterior ao primeiro elemento o primeiro elemento o elemento inexistente entre o primeiro e o segundo em conjunto ordenado deve ser possível gerar um elemento mais ou menos no meio do conjunto um elemento inexistente mais ou menos no meio do conjunto em conjunto ordenado deve ser possível gerar o elemento inexistente entre o penúltimo e o último em conjunto ordenado deve ser possível gerar o último elemento o elemento inexistente imediatamente após ao último em conjunto ordenado deve ser possível gerar 27 Critérios de valoração, pertinência como você testaria a função findstring? findstring( stringbase, stringprocurado, inxinferior, inxsuperior ) se encontrado: retorna o índice maior ou igual a inxinferiordo primeiro caractere de stringprocuradoencontrado em stringbase se não encontrado: retorna -1 28 14

Critérios de valoração, nomes Ao testar nomes de arquivos nome (string) nulo nomes com caracteres ilegais, ex.:?*/\< > "'.,; sempre para os casos existe e não existe nome sem extensão nome com extensão igual ao default nome com extensão diferente do default nome com duas extensões (ex. xpto.x.y) nome com diretório absoluto nome com diretório relativo nome com dispositivo diferente do corrente, ex. disco 29 Exemplo: quais seriam os casos de teste? Modelo V e t o r d e r a n d o m i z ç ã o Vt Exemplo n Listas de colisão pesq Id Simbolo pdir Tabela hash (randomização) n > 1 Para todos os Simbolos 0 <= ObterInxHash( Simbolo ) < n } Para todos os Simbolos da lista inx : 0 <= inx < n inx = ObterInxHash( Simbolo ) } cada lista é duplamente encadeada e ordenada segundo Simbolo 30 15

Exemplo n == 1 ilegal n == 5 criar símbolos crescentes A, B, C, D, E, F, G tal que ObterHash( simbolo ) == 0 procurar e não encontrar D inserir D e, depois, procurar e encontrar D procurar e não encontrar C procurar e não encontrar E inserir B e, depois, procurar e encontrar B procurar e não encontrar A procurar e não encontrar C inserir F e, depois, procurar e encontrar F procurar e não encontrar E procurar e não encontrar G procurar e encontrar B procurar e encontrar D procurar e encontrar F Por que não n == 2? Que instrumentação precisa ser adicionada para poder realizar o teste? 31 Exemplo n == 5 criar símbolos A, B, C, D, E, F, G tal que ObterHash( simbolo ) == 2 procurar e não encontrar D inserir D e, depois, procurar e encontrar D procurar e não encontrar C procurar e não encontrar E inserir B e, depois, procurar e encontrar B procurar e não encontrar A procurar e não encontrar C inserir F e, depois, procurar e encontrar F procurar e não encontrar E procurar e não encontrar G procurar e encontrar B procurar e encontrar D procurar e encontrar F Precisa realmente de todos eles? Lista e hash não são independentes? 32 16

Exemplo n == 5 criar símbolos A, B, C tal que ObterHash( simbolo ) == 4 procurar e não encontrar B inserir e, depois, procurar e encontrar B procurar e não encontrar A procurar e não encontrar C procurar e encontrar B criar símbolos A tal que ObterHash( simbolo ) == 1 procurar e não encontrar A criar símbolos B tal que ObterHash( simbolo ) == 3 procurar e não encontrar B 33 FIM 34 17