Data Flow Testing. Vários critérios de adequação até aqui Baseado em entradas de função (funcional)‏ Baseado na estrutura do programa (estrutural)‏ Baseado.

Slides:



Advertisements
Apresentações semelhantes
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Soluções Iterativas com Laços
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Métodos, Parâmetros, Argumentos e Contratos
Aula Teste INFNET terça-feira, 11 de janeiro de 2011
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Vamos abordar o exemplo
Java: Pacotes e Modificadores de Visibilidade
Orientação a Objetos Introdução. Objetos: o que são? Olhando o mundo real pode-se ver vários objetos: mesa, cadeiras, alunos, professores etc. Esses objetos.
Programação Básica em Java
Sobrecarga de Operadores
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
7 Abstração Genérica Unidades genéricas e instanciação.
Buffer Overrun Detection using Linear Programming and Static Analysis
Classes & Objectos em JAVA5
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
CRIANDO OBJETOS EM JAVA
Tipos Agregados Homogêneos e Listas
Slides preparados por Bruno Monteiro e Marcelo dAmorim Execução simbólica - 24/09/2009.
Curso de Nivelamento LCG
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem técnica de programação I Java
Java Bytecode Software Básico Mitsuo Takaki.
Orientação a Objetos e Java Graduação em Ciência da Computação
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Java Kickstart, day 2 Semelhanças com linguagem C.
Laboratório de Programação II Método Construtor Dados e Métodos de Objetos Prof Edivaldo - Network.
Aula Prática 4 Monitoria IP/CC (~if669).
Polimorfismo.
Tradução Dirigida por Sintaxe
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Utilizando UML e Padrões Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Março de 2010.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Estruturas de Dados I Segundo Período de 2008 Gabarito da Primeira Prova.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Teste baseado em falhas
Removing Unnecessary Synchronization in Java Sérgio Soares Gente.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Execução de testes: driver e stub
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Programação orientada a objetos Com Visual Studio.
Teste Simbólico Marcelo d’Amorim
Data Flow Testing. Vários critérios de adequação até aqui Baseado em entradas de função (funcional)‏ Baseado na estrutura do programa (estrutural)‏ Baseado.
Bruno Inojosa MCP .NET Framework
Fundamentos de Análise Estática
Adequação do Teste. 2 Teste é incompleto Origem da incompletude –Seqüências insuficientes –Classificadores parciais É necessário uma medida que indique.
Critérios de adequação e os diversos tipos de teste
Java 5 - Novidades Gerente de Tecnologia – Vitor Costa.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Teste baseado em falhas. Problema Usuário não sabe se a suíte de teste é adequada ou não para encontrar erro Solução 1 –Medir cobertura. Mas ainda não.
Planejamento do Teste. Define que “tipo de teste” se quer fazer Depende de restrições do ambiente. Exemplo: –Deve basear-se em requisitos –Limitações.
C# Universidade Federal de Pernambuco Centro de Informática Recife, 10/10/2002 Autor: Alexandre T. Vasconcelos Delegates.
Conceitos de OO em Java Parte I
Engenharia de Requisitos Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Agosto de 2012.
J U nit Um Framework Para Testes. Motivação  Todos os programadores sabem que devem testar seu código  Quanto mais curto o prazo menos testes são realizados.
Associação. 2 Desafio – Aula class Aluno { 2. private String nome; 3. private float nota; 4. public Aluno(String nome, float nota){ 5. this.nome.
1 Programação – JAVA Unidade 3 – Loops e Lógica Prof. Aparecido V. de Freitas Curso de Ciência da Computação.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Introdução 1.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Adequação do Teste. 2 Teste é incompleto É necessário uma medida que indique quão completo é o teste –Indica quando o testador deve parar de testar.
Teste de Software 04: Que parte devo testar? Marcelo d’Amorim
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
1 Orientação a Objetos - Programação em C++ 1 o Slides – B : Introdução à OO/C++ Passando à Pratica – Estruturas, Classes e Objetos Engenharia Eletrônica.
Teste de Software 04: Que parte devo testar?
Transcrição da apresentação:

Data Flow Testing

Vários critérios de adequação até aqui Baseado em entradas de função (funcional)‏ Baseado na estrutura do programa (estrutural)‏ Baseado em faltas injetadas (mutação)‏

Algumas limitações também... Funcional  Inadequado para construir entradas que leva a caminhos específicos do programa Estrutural  Pode gerar muitos caminhos desnecessários (e.g., exercitar mesmo loop repetidamente.)‏ Baseado em falhas  Modelo de falhas irrealista

Critério baseado em fluxo de dados Hipótese  Falta modifica estado de um programa de forma incorreta  Falha manifesta-se através da leitura deste estado Relação de leitura e escrita entre dados é importante!

Critério baseado em fluxo de dados Abordagem  Suíte deve incluir testes que executam statements logicamente relacionados E.g., escrita e posterior leitura de um campo de um objeto devem aparecer em um mesmo teste

DU Pair Associação de definição e uso de variáveis do programa  Neste contexto, uma definição é uma nova atribuição de valor a uma variável

Exemplo 01: public static int foo(int a) { 02: if (a > 10) { 03: a++; 04: } 05:... 06: return a; 07: } DU pairs: (01,02), (01,03),... Assuma que parâmetro define um valor

Exemplo 01: public static int foo(int a) { 02: if (a > 10) { 03: a++; 04: } 05:...// nova definição de a? 06: return a; 07: } DU pairs: (01,02), (01,03), (03,06)? Linha 05 pode redefinir variável a.

DU Path Caminho que associa uma definição ao uso de uma variável Vários DU Paths para um DU Pair  E.g. 01: int x = 1; 02: if (...) { 03:... 04: } else { 05:... 07: } 08: System.out.println(“x value”+ x);

Cobertura de uma suíte de testes du pairs: fração de todos os pares du que são cobertos por pelo menos um teste du paths: fração de todos os caminhos (desconsiderando loop) du que são cobertos por pelo menos um teste definitions: fração de definições cobertas pelos pares du que são cobertos por pelo menos um teste

Desafios gerais de análises estáticas Abrangência: whole-program analysis, main Profundidade: intraprocedural, interprocedural Características de programas: encapsulamento de dados, ponteiros e arrays

Interprocedural public class Sample { int x; public static void main(String[] args){ Sample s = new Sample(); s.x = read(System.in); if (s.x > 10) { s.x--; } s.f(); } public void f() { s.x++; } } Definição de s.x se propaga até Sample.f

Interprocedural public class Sample { int x; public static void main(String[] args){ Sample s = new Sample(); s.x = read(System.in); if (s.x > 10) { s.x--; } s.f(); } public void f() { s.x++; } } Definição de s.x se propaga até Sample.f Duas definições alcançam a entrada de f

Interprocedural public class Sample { int x; public static void main(String[] args){ Sample s = new Sample(); s.x = read(System.in); if (s.x > 10) { s.x--; } s.f(); } public void f() { s.x++; } } Definição de s.x se propaga até Sample.f Duas definições alcançam a entrada de f Análise é feita sobre funções alcançáveis a partir de main

Análise a partir de função main Reduz complexidade da análise estática  Muitas funções não são alcançáveis (usadas)‏ No contexto de testes é útil para medir cobertura  Requisitos de teste (cobertura) são construídos a partir de uma sequência de teste

O que fazer quando é preciso analisar dependências sob vários contextos? (sem o main )‏

Construção de contextos Mas que contextos são esses? (além de main)‏  Heurística: assuma ao menos que os métodos de uma classe estão relacionados

Várias funções e encapsulamento public class Stack { int num; T[] elems; public void push(T t) { num++; elems[num]=t; } public T pop() { elems[num] = null; num--; } public T peek() { return elem[num]; } }

Várias funções e encapsulamento public class Stack { int num; T[] elems; public void push(T t) { num = num + 1; elems[num]=t; } public T pop() { elems[num] = null; num = num - 1; } public T peek() { return elem[num]; } } definições e uso peek pode usar definições de elems e num construídas pelo construtor de Stack, push, e pop.

Note que não há função main associando peek, push, e pop.

Encapsulamento de dados public class Foo { Stack s; public Stack getStack() { return s; } public void foo() {...getStack().peek();...} public void bar(int k) {...getStack().push(k);...} } public class Stack { int num; T[] elems; public void push(T t) { num++;... } public T pop() { num--;... } public T peek() { return elem[num]; } } Foo.foo usa definições construídas em Foo.bar.

Encapsulamento de dados public class Foo { Stack s; public Stack getStack() { return s; } public void foo() {...getStack().peek();...} public void bar(int k) {...getStack().push(k);...} } public class Stack { int num; T[] elems; public void push(T t) { num++;... } public T pop() { num--;... } public T peek() { return elem[num]; } } Campo do tipo Stack é estado encapsulado em Foo. Foo.foo usa definições construídas em Foo.bar.

Leituras adicionais Capítulo 13 (Data Flow Testing) do livro “Software Testing and Analysis” “Efficient Computation of Interprocedural Definition-Use Chains”, M. J. Harrold and M. L. Soffa, ACM TOPLAS 1994