UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA



Documentos relacionados
Testar os programas para estabelecer a presença de defeitos no sistema. Teste de Software. Teste de defeitos. Objetivos. Tópicos

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

Testes de Software. Testes de Software. Teste de Validação. Teste de Defeito. Modelo de Entrada e Saída. Modelo de Entrada e Saída

Testes de Software. Testes de Software. Teste de Validação. Teste de Defeito. Modelo de Entrada e Saída. Modelo de Entrada e Saída

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

Testes de correção (de defeitos)

Teste de software. Definição

Juciara Nepomuceno de Souza Rafael Garcia Miani. Teste de Software

Teste de Software. Ricardo Argenton Ramos Engenharia de Software I

Técnicas de Teste de Software

Engenharia de Software II

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

Princípios do teste de software

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

Engenharia de Software II

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

Fundamentos em Teste de Software. Vinicius V. Pessoni

Técnicas de Teste de Software

Testes de Software Fases. Baseado em notas de aula da profa. Eliane Martins

BCC202 - Estrutura de Dados I

Prototipação de Software

Construção e Implantação de Software II - Unidade 3- Estratégias Para Testes de Software. Prof. Pasteur Ottoni de Miranda Junior

Projeto de Arquitetura

Análise e Projeto Orientados por Objetos

c. Técnica de Estrutura de Controle Teste do Caminho Básico

a) Teste das funções do sistema com outros sistemas b) Teste de componentes que em conjunto compõem a função do sistema

Java. Marcio de Carvalho Victorino

Projeto de Arquitetura

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

MDC Metodologia de Desenvolvimento Compartilhado Roteiro da Disciplina de Teste

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

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Qualidade de Software. Profa. Cátia dos Reis Machado

Introdução a Verificação, Validação e Teste de Software

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Gerenciamento de Qualidade

Tópicos abordados. Testes de Software (Capítulo 8 Sommerville) 2/2/2015. Testes de desenvolvimento. Desenvolvimento dirigido a testes

Teste de Software Estrutural ou Caixa Branca. Disciplina de Engenharia de Software prof. Andrey Ricardo Pimentel

Sistemas Operacionais

Verificação e Validação

Professor: Curso: Disciplina:

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

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Sumário. Uma visão mais clara da UML

Técnicas de Caixa Preta de Teste de Software

Universidade Federal de Pernambuco

Testes Baseados na Implementação. (fluxo de controle) Baseado em notas de aula da profa. Eliane Martins

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Engenharia de Software I

QUALIDADE DE SOFTWARE. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 27 Slide 1

Tipos de teste de software

DIM Testes de caixa branca Cobertura estrutural DIM / 37

Teste de Software I Conceitos e Estratégias

Aula 26 Testes de Caixa Preta (Exercícios)

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Unidade VI. Validação e Verificação de Software Teste de Software. Conteúdo. Técnicas de Teste. Estratégias de Teste

Teste de Software II Técnicas de Teste

Teste de Software Parte 1. Prof. Jonas Potros

Modelos de Sistema by Pearson Education. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 8 Slide 1.

1. Introdução ao teste de software 2. Testes em um ciclo de vida de software 3. Especificado vs. Implementado 4. Preenchendo um modelo de

Fundamentos de Teste de Software

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Felipe Denis M. de Oliveira. Fonte: Alice e Carlos Rodrigo (Internet)

BSI UFRPE Prof. Gustavo Callou

Teste de Software. Objetivos e Limites. Objetivos e Limites. Objetivos e Limites. Objetivos e Limites. Objetivos e Limites

Orientação à Objetos. Aécio Costa

Persistência e Banco de Dados em Jogos Digitais

Gerenciamento de configuração. Gerenciamento de Configuração. Gerenciamento de configuração. Gerenciamento de configuração. Famílias de sistemas

O Processo de Engenharia de Requisitos

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Introdução ao Modelos de Duas Camadas Cliente Servidor

PROVA DE CONHECIMENTOS ESPECÍFICOS PROGRAMADOR DE COMPUTADOR. Analise as seguintes afirmativas sobre os modelos de processos de software:

Engenharia de Sistemas Computacionais

Curso de Aprendizado Industrial Desenvolvedor WEB

Engenharia de Software II

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

1. Qual das seguintes alternativas não é um tipo de revisão? 2. Qual das alternativas é um atributo da qualidade?

Métodos de Construção de Software: Orientação a Objetos. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

Processos de Software

Testes Orientação Visão Conceitual em Testes Versão 0.3

Engenharia de Requisitos

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Modelo Cascata ou Clássico

Gerenciamento de Projeto

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Módulo 07 Características Avançadas de Classes

Arquitetura de Computadores. Sistemas Operacionais IV

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Arquitetura de Computadores. Tipos de Instruções

Polimorfismo. Prof. Leonardo Barreto Campos 1

Java 2 Standard Edition Como criar classes e objetos

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Ciclo de Vida Clássico ou Convencional CICLOS DE VIDA DE DESENVOLVIMENTO DE SISTEMAS. Ciclo de Vida Clássico ou Convencional. Enfoque Incremental

Transcrição:

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA Teste de Software Engenharia de Software 2o. Semestre de 2005 Slide 1

Testes para a detecção de defeitos Testar programas para estabelecer a presença de defeitos no sistema. Slide 2

Tópicos Testes para a detecção de defeitos Testes de integração Testes orientados a objetos Slide 3

O processo de teste Testes de componentes Testes de componentes de programas individuais. Usualmente os programadores assumem a responsabilidade pelo teste de seu código (exceto em caso de sistemas críticos). Testes são derivados da experiência do desenvolvedor. Testes de integração Testes de grupos de componentes integrados para formar subsistemas ou sistemas completos. Uma equipe independente de teste fazem o teste de integração. Os testes são baseados em uma especificação do sistema. Slide 4

Teste para detecção de defeitos O objetivo de testes para a detecção de defeitos é revelar defeitos latentes nos programas. Um teste bem sucedido é aquele que revela a presença de um defeito (faz com que o programa se comporte de maneira anômala) Testes mostram a presença e não a ausência de defeitos. Slide 5

Prioridades do teste A única maneira de mostrar que um programa está correto é o teste exaustivo. Contudo, teste exaustivo é impraticável. Testes devem ser baseados em um subconjunto de possíveis casos de teste. Políticas devem ser utilizadas para escolher esse conjunto. Ex: todas as declarações do programa devem ser testadas pelo menos uma vez Todas as funções de sistema acessados por meio de menus devem ser testadas, etc. Slide 6

Dados de teste e Casos de teste Dados de teste entradas criadas para testar o sistema. Casos de teste Entradas para testar o sistema e saídas esperadas para essas entradas ( quando o sistema opera de acordo com suas especificações). Slide 7

Processo de teste para a detecção de defeitos Test Casos cases Casos de teste de teste Dados Test data Dados de teste de teste Resultados Test Resultados de results teste de teste Relatórios Test reports Relatórios de teste de teste Projetar Design casos test Projetar cases casos de teste de teste Preparar Prepare dados test Preparar dados de data teste de teste Executar Run programa Executar programa com with dados test de data teste com dados de teste Comparar Compare resultados r esults Comparar resultados com to os test casos cases de teste com os casos de teste Slide 8

Teste de caixa preta Uma abordagem de teste onde o programa é considerado como uma caixa-preta. Os casos de teste para testar o programa são baseados na especificação do sistema. O planejamento dos testes podem começar nos primeiros estágios do processo de software. Slide 9

Teste Caixa preta Entrada de Dados de teste Ie Entradas que provocam comportamento anômalo Problema: selecionar entradas ŒIe SISTEMA SISTEMA Saídas que revelam a presença de defeitos Saída dos resultados de teste Oe Slide 10

Particionamento de equivalência (abordagem sistemática para seleção de dados de teste) Dados de entrada e resultados de saída caem em diferentes classes onde todos os membros de uma classe são relacionados Cada uma dessas classes é uma partição de equivalência onde o programa se comporta de uma maneira equivalente para cada membro da classe Casos de teste devem ser escolhidos de cada partição. Slide 11

(abordagem sistemática para seleção de dados de teste) Particição de Equivalência Invali d in pu ts Vali d in pu ts Sy stem Ou tput s Slide 12

(abordagem sistemática para seleção de dados de teste) Particionamento de equivalência Entradas e saídas do sistema são particionadas em conjuntos de equivalência Se a entrada é um inteiro de 5 dígitos entre 10.000 e 99.999, partições de equivalência são números < 10.000, números entre 10.000 e 99. 999 e números > 99. 999 Escolher casos de teste nos limites das partições: 00000, 09.999, 10.000, 50.0000, 99.999, 100.000 Slide 13

(abordagem sistemática para seleção de dados de teste) Partições de equivalência O programa aceita entre 4 a 10 entradas, que são números inteiros de cinco dígitos, maiores do que 10.000 e menores que 99.999 3 4 7 1 1 1 0 Less th an 4 Betw een 4 an d 10 M o re than 10 Nu m ber of inp ut v alu es 9 99 9 1 00 00 5 00 00 1 00 00 0 9 99 99 Less th an 1 00 00 Betw een 10 00 0 an d 99 99 9 M o re than 99 99 9 Inp ut valu es Slide 14

Especificação de uma rotina de busca procedure Search (Key : ELEM ; T: ELEM_ARRAY; Found : in out BOOLEAN; L: in out ELEM_INDEX) ; Pré-condição -- a seqüência tem pelo menos um elemento T FIRST <= T LAST Pós-condição -- O elemento é encontrado e é referenciado por L ( Found and T (L) = Key) ou -- O elemento não está na seqüência ( not Found and not (exists i, T FIRST >= i <= T LAST, T (i) = Key )) Slide 15

Rotina de busca - partições de entrada Entradas que estão de acordo com a pré condição: seqüência com no mínimo um elemento. Entradas onde a pré condição não vale. Entradas onde o elemento chave é um elemento da seqüência. Entradas onde o elemento chave não é um membro da seqüência. Slide 16

Diretrizes de testes (no caso do exemplo usado) Teste o software com seqüências que possuem somente um único valor. Use diferentes seqüências, de diferentes tamanhos, em diferentes testes. Derive testes de maneira que o primeiro, o médio e o último elemento da seqüência sejam acessados. Teste com seqüências de comprimento zero. Slide 17

Rotina de busca - partições de equivalência Vetor Valor único Valor único Mais que 1 valor Mais que 1 valor Mais que 1 valor Mais que 1 valor Elemento Está na seqüência Não está na seqüência Primeiro elemento está na seqüência Último elemento está na seqüência Elemento médio está na seqüência Não está na seqüência Seqüência de entradas (T) Chave (key) Saídas (Found, L) 17 17 Verdadeiro, 1 17 0 Falso,?? 17, 29, 21, 23 17 Verdadeiro, 1 41, 18, 9, 31, 30, 16, 45 45 Verdadeiro, 7 17, 18, 21, 23, 29, 41, 38 23 Verdadeiro, 4 21, 23, 29, 33, 38 25 Falso,?? Slide 18

Teste Estrutural Algumas vezes chamado testes de caixa branca. Derivação de casos de teste de acordo com a estrutura do programa. O conhecimento do programa é usado para identificar casos de testes adicionais. Exemplo: exercitar todas as declarações do programa. Slide 19

Testes caixa branca Dados Dados de teste Test de teste data Testa Tests Derives Deriva Component Código de componente Código code de componente Test Saídas outputs Saídas do do teste teste Slide 20

Testes de Caminho O objetivo dos testes de caminho é garantir que o conjunto de casos de teste é tal que cada caminho do programa é executado no mínimo uma vez. Para o teste de caminho, elabora-se um grafo de fluxo de programa, onde os nós, representam os pontos de decisão do programa, e os arcos representam o fluxo de controle. Slide 21

Grafos de fluxo de programa Modelo em esqueleto de todos os caminhos do programa. Consiste em nós que representam decisões e em ramos que mostram o fluxo de controle. É construído através do código fonte, onde substitui-se os comandos por nós e desvios pelos arcos (ou ramos) do grafo. Declarações seqüenciais são ignoradas na construção do grafo de fluxo. Slide 22

Grafos de fluxo de programa Em um comando condicional, cada ramo é mostrado como um caminho separado, e laços são indicados por uma seta fazendo o loop de volta para o nó de condição do laço. Usado como base para calcular o número de caminhos independentes no programa. Caminho independente - caminho que atravessa pelo menos um novo ramo no grafo de fluxo. Slide 23

Complexidade Ciclomática O número de caminhos independentes no código é igual à complexidade ciclomática. Cálculo da Complexidade ciclomática: CC = Número de ramos - Número de nós + 2. Complexidade ciclomática determina o número de casos de teste mínimo para testar adequadamente todos os caminhos independentes do programa. Slide 24

class BinSearch { // Esse é um encapsulamento de uma função de busca // binária que considera um vetor de objetos ordenados e uma chave // e retorna um objeto com 2 atributos, chamados // index o valor do índice de vetor // found um booleano que indica se uma chave está ou não no vetor // A chave será 1 se o elemento não for encontrado public static void search ( int key, int [] elemarray, Result r ) { int bottom = 0 ; int top = elemarray.length - 1 ; int mid ; r.found = false ; r.index = -1 ; while ( bottom <= top ) { mid = (top + bottom) / 2 ; if (elemarray [mid] == key) { r.index = mid ; r.found = true ; return ; } // if part else { if (elemarray [mid] < key) bottom = mid + 1 ; else top = mid - 1 ; } } //while loop } // search } //BinSearch Busca binária (Java)

1 b otto m > top 2 w hile bo ttom < = to p 3 if (elem A rray [m id] == k ey 8 4 (i f (elema rray [mi d]< key 5 6 9 7 Grafo de fluxo para Busca Binária

Caminhos independentes 1, 2, 3, 8, 9 1, 2, 3, 4, 6, 7, 2 1, 2, 3, 4, 5, 7, 2 1, 2, 3, 4, 6, 7, 2, 8, 9 Casos de teste devem ser projetados para executar todos esses caminhos. Exercício: elaborar um conjunto de dados que execute os caminhos independentes acima. Slide 27

Teste de Caminhos Útil se usado com cuidado. Não implica que o programa foi adequadamente testado - embora todos os caminhos independentes são executados, todas as combinações possíveis de caminhos não são executadas. Slide 28

Testes de integração Testes feitos em sistemas completos ou subsistemas, compostos de componentes integrados. Testes de integração devem ser desenvolvidos a partir da especificação do sistema. A maior dificuldade é a localização de erros. Integração incremental reduz esse problema. Slide 29

Testes de integração incremental A T1 A T1 A T1 T2 B T2 T2 B T3 B T3 C T3 T4 C T4 D T5 Seqüência de teste 1 Test s equ ence 1 Seqüência de teste 2 Test s equ ence 2 Test s equ ence Seqüência 3 de teste 3 Slide 30

Abordagens para o teste de integração Teste de integração top-down Começa com os componentes de alto nível de um sistema, e a integração se dá de cima para baixo em uma hierarquia de componentes. Componentes individuais em um nível mais baixo na hierarquia são representados por stubs. Teste de integração bottom-up Envolve integrar e testar os módulos de nível inferior na hierarquia e, então, subir na hierarquia de módulos, até que o módulo final seja testado. Na prática, a maioria das integrações envolve a combinação dessas estratégias. Slide 31

Testes de integração Top-down Level 1 Seqüência Testin g Level 1 seq uen ce de testes... Level 2 Level 2 Le vel 2 Level 2 Le vel 2 stu bs Stubs do nível 2 Stubs Le vel do 3 nível stubs 3 Slide 32

Testes de integração bottom-up Test drivers Drivers de teste Level N Level N Le vel N Level N Level N Seqüência Testin g sde equence testes Test drivers Drivers de teste Level N 1 Level N 1 Level N 1 Slide 33

Vantagens e desvantagens das abordagens de teste Validação da arquitetura Os testes top-down oferecem maior probabilidade de descobrir erros na arquitetura de sistema, em um estágio inicial do processo de desenvolvimento. Demonstração do sistema Os testes de integração top-down permite a demonstração de um sistema de trabalho limitado em uma fase inicial do desenvolvimento. Implementação de teste Testes top-down são mais difíceis de implementar pois é necessário a produção de stubs (programas que simulam níveis inferiores) Observação de teste Problemas com ambas as abordagens. Código extra são necessários para poder observar os testes. Slide 34

Testes de interface Ocorrem quando módulos ou subsistemas são integrados para criar sistemas maiores. Objetivo é detectar erros devido a erros ou suposições inválidas sobre interfaces. Particularmente importante para o desenvolvimento orientado a objeto, uma vez que os objetos são definidos por suas interfaces Slide 35

Testes de Interface Test cases A B C Slide 36

Diretrizes para os testes de interface Projete conjunto de testes em que o valor dos parâmetros para os componentes externos esteja nos limites extremos. Sempre teste parâmetros ponteiros com ponteiros nulos. Em sistemas de passagem de mensagem, projete testes que gerem muito mais mensagens que é provável ocorrer na prática (teste de estresse). Em um sistemas de memória compartilhada, varie a ordem na qual os componentes são ativados. Slide 37

Testes de estresse Exercitam o sistema além de sua carga máxima de projeto, até o sistema falhe. Testa o comportamento de falha do sistema. É importante que a falha não cause a corrupção de dados ou a perda inesperada de serviços do usuário. Particularmente relevantes para sistemas distribuídos, que podem exibir uma degradação severa quando a rede se torna sobrecarregada. Slide 38

Testes orientados a objetos Os componentes a serem testados são classes de objetos que são instanciadas como objetos. Diferentes de teste funcional, pois: Objetos individuais são, muitas vezes, maiores do que funções isoladas. Abordagens de teste de caixa-branca devem ser estendidas. Testadores podem não ter acesso ao código fonte do componente para análise, no caso de reuso de objetos Não existe um nível superior óbvio para integração e teste top-down. Slide 39

4 Níveis de teste Testar as operações associadas com os objetos. Testar classes de objetos individuais. Testar agrupamentos de objetos que cooperam entre si. Testar o sistema orientado a objeto completo. Slide 40

Testes de classes de objetos A cobertura completa de testes deve incluir Testar todas as operações associadas com um objeto Estabelecimento e a interrogação de todos os atributos associados com o objeto Exercitar o objeto em todos os estados possíveis (simular todos os eventos que provoquem mudança de estado no objeto) Herança dificulta o projeto de testes de classe de objetos. Quando uma superclasse fornece operações herdadas por subclasses, todas essas subclasses devem ser testadas com todas as operações herdadas. Slide 41

Integração de objetos Níveis de integração são menos distintos em sistemas orientados a objetos. Testes de clusters se ocupam com a integração e teste de objetos que cooperam entre si. Clusters devem ser identificados utilizando-se o conhecimento de suas operações e as características do sistema implementadas por esses clusters. Slide 42

Pontos chave É mais importante testar as partes do sistema mais comumente utilizadas do que as partes que são exercitadas raramente. Partição de equivalência é uma maneira de derivar casos de teste. Partições são conjuntos de dados onde o programa deve se comportar de maneira equivalente. Teste de caixa preta é baseado na especificação do sistema. Não precisa analisar o código fonte. Teste estrutural baseia-se na análise do programa para determinar os caminhos a serem executados e a seleção de casos de teste. Slide 43

Pontos chave Os testes de integração se concentram no teste das interações entre os componentes. Os testes de interface procuram descobrir defeitos nas interfaces ou nos módulos. Para testar as classes de objetos, deve-se testar todas as operações, atributos e estados. Sistemas orientados à objetos devem ser integrados em torno de clusters de objetos. Slide 44