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

Documentos relacionados
Introdução a Teste de Software

Introdução a Verificação, Validação e 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

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

Prof. Me. Marcos Echevarria

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

Tipos de teste de software

MÓDULO 6 INTRODUÇÃO À PROBABILIDADE

Fundamentos em Teste de Software. Vinicius V. Pessoni

Projeto de Sistemas I

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

Dadas a base e a altura de um triangulo, determinar sua área.

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

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

9 Comandos condicionais

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

APLICATIVO PARA CÁLCULO DE MÉTRICA DE SOFTWARE EM CÓDIGO-FONTE PL/SQL

Testes de Caixa Branca e Caixa Preta

TRABALHANDO COM SUBSTITUIÇÃO TRIBUTÁRIA

Engenharia de Software II

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

OPERADORES E ESTRUTURAS DE CONTROLE

4 Segmentação Algoritmo proposto

Tabela e Gráficos Dinâmicos Como estruturar dinamicamente dados no Excel

Organização e Arquitetura de Computadores I

Técnicas de Teste de Software

1. NÍVEL CONVENCIONAL DE MÁQUINA

Técnicas de Caixa Preta de Teste de Software

ÍNDICE 1 INTRODUÇÃO ACESSO ABERTURA DE PROTOCOLO CONSULTA DE PROTOCOLO PROTOCOLO PENDENTE CONFIRMAÇÃO DE RECEBIMENTO.

ESTRUTURA CONDICIONAL

Tutorial de Matlab Francesco Franco

Processamento da Informação Teoria. Algoritmos e Tipos de dados

Engenharia de Software II

A4 Projeto Integrador e Lista de Jogos

Fundamentos de Teste de Software

Engenharia de Software II

Software. Gerenciamento de Manutenção

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

MODELO CMM MATURIDADE DE SOFTWARE

Modelo Cascata ou Clássico

Gerenciamento de Riscos do Projeto Eventos Adversos

Só Matemática O seu portal matemático FUNÇÕES

Capítulo 2. Processos de Software Pearson Prentice Hall. Todos os direitos reservados. slide 1

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 13

Arquitetura de Rede de Computadores

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

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

ISO/IEC 12207: Gerência de Configuração

Algoritmos: Lógica para desenvolvimento de programação de computadores. Autor: José Augusto Manzano. Capítulo 1 Abordagem Contextual

Exercícios Teóricos Resolvidos

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Juciara Nepomuceno de Souza Rafael Garcia Miani. Teste de Software

GASTAR MAIS COM A LOGÍSTICA PODE SIGNIFICAR, TAMBÉM, AUMENTO DE LUCRO

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

Aplicação Prática de Lua para Web

BC0501 Linguagens de Programação

Orientação a Objetos

AULA 6 - Operações Espaciais

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Introdução a Testes de Software. Ricardo Argenton Ramos

Busca. Pesquisa sequencial

Comandos Sequenciais if else, e Switch

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

20 Caracteres - Tipo char

Especificação de Requisitos

QUESTÃO 1 ALTERNATIVA B

Resolução da lista de exercícios de casos de uso

Desenvolvendo Websites com PHP

Teste de Software Parte 1. Prof. Jonas Potros

OBS.: Simulado baseado no conteúdo abordado pelo capítulo 4 (Técnica de Modelagem de Teste) do Syllabus.

3 Classificação Resumo do algoritmo proposto

Sistemas de Numerações.

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

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

2. ENTRADA DE DADOS 2.1. TEXTOS

1. Estrutura de seleção. Seleção: algumas etapas (passos) do algoritmo são executadas dependendo do resultado de uma condição

ÍNDICE 1 INTRODUÇÃO ACESSO CONSULTA DE PROTOCOLO PROTOCOLO PENDENTE CONFIRMAÇÃO DE RECEBIMENTO ANDAMENTO DE PROTOCOLO.

ENGENHARIA DE SOFTWARE I

O método de Monte Carlo: algumas aplicações na Escola Básica

Departamento de Matemática - UEL Ulysses Sodré. Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Processo de Controle das Reposições da loja

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

SISTEMA INTEGRADO DE GESTÃO ACADÊMICA

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

FKcorreios - Geração 2

Estrutura do Trabalho: Fazer um resumo descrevendo o que será visto em cada capítulo do trabalho.

Algoritmos de Busca em Tabelas

Janelas e seus elementos

Especificação do 3º Trabalho

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

Modelagem no Domínio do Tempo. Carlos Alexandre Mello. Carlos Alexandre Mello 1

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE

COMO DETERMINAR O PREÇO DE UMA

Como fazer um fluxo de nutrição de leads eficaz

TRAMITE Manual do usuário

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação

Transcrição:

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

CMP1132 Processo e qualidade de software II Prof. Me. Elias Ferreira Sala: 402 E Quarta-Feira: 20:30 as 22:00 Sábado: 10:50 as 12:20

Níveis de teste de software

Níveis de teste de software Planejamento e projeto dos testes devem ocorrer de cima para baixo, ou seja: 1. Inicialmente é planejado o teste de aceitação a partir do documento de requisitos; 2. Após isso é planejado o teste de sistema a partir do projeto de alto nível do software; 3. Em seguida ocorre o planejamento dos testes de integração a partir do projeto detalhado; 4. E por fim, o planejamento dos testes a partir da codificação. A execução ocorre no sentido inverso

Técnicas de teste de software Atualmente existem muitas maneiras de se testar um software. Técnicas muito utilizadas em sistemas desenvolvidos sobre linguagens estruturadas que ainda têm grande valia para os sistemas orientados a objeto. Apesar de os paradigmas de desenvolvimento serem diferentes, o objetivo é o mesmo: encontrar falhas no software.

Técnicas de teste de software As técnicas de teste são classificadas de acordo com a origem das informações utilizadas para estabelecer os requisitos de teste.

Técnicas de teste de software Contemplam diferentes perspectivas do software e impõe-se a necessidade de se estabelecer uma estratégia de teste que contemple as vantagens e os aspectos complementares dessas técnicas. As técnicas existentes são: funcional e estrutural.

Técnica Estrutural (ou teste caixabranca) Técnica de teste que avalia o comportamento interno do componente de software. Essa técnica trabalha diretamente sobre o código fonte do componente de software para avaliar aspectos tais como: teste de condição; teste de fluxo de dados teste de ciclos teste de caminhos lógicos

Teste Estrutural Aspectos avaliados dependerão da complexidade e da tecnologia que determinarem a construção do componente de software. Testador tem acesso ao código fonte da aplicação e pode construir códigos para efetuar a ligação de bibliotecas e componentes.

Teste Estrutural Este tipo de teste é desenvolvido analisandose o código fonte e elaborando-se casos de teste que cubram todas as possibilidades do componente de software. Todas as variações originadas por estruturas de condições são testadas.

/* 01 */ { /* 01 */ char achar; /* 01 */ int length, valid_id; /* 01 */ length = 0; /* 01 */ printf ("Digite um possível identificador\n"); /* 01 */ printf ("seguido por <ENTER>: "); /* 01 */ achar = fgetc (stdin); /* 01 */ valid_id = valid_starter (achar); /* 01 */ if (valid_id) /* 02 */ length = 1; /* 03 */ achar = fgetc (stdin); /* 04 */ while (achar!= '\n') /* 05 */ { /* 05 */ if (!(valid_follower (achar))) /* 06 */ valid_id = 0; /* 07 */ length++; /* 07 */ achar = fgetc (stdin); /* 07 */ } /* 08 */ if (valid_id && (length >= 1) && (length < 6) ) /* 09 */ printf ("Valido\n"); /* 10 */ else /* 10 */ printf ("Invalido\n"); /* 11 */ } Teste Estrutural - Exemplo

Grafo de Programa

Teste Estrutural Um exemplo bem prático desta técnica de teste é o uso da ferramenta livre JUnit para desenvolvimento de casos de teste para avaliar classes ou métodos desenvolvidos na linguagem Java.

Teste Estrutural A técnica de teste Estrutural é recomendada para os níveis de Teste da Unidade e Teste da Integração, cuja responsabilidade principal fica a cargo dos desenvolvedores do software, que são profissionais que conhecem bem o códigofonte desenvolvido e dessa forma conseguem planejar os casos de teste com maior facilidade.

Método dos Caminhos Básicos Método criado pelo matemático norteamericano Thomas McCabe baseado na teoria de grafos. Sua lógica consiste essencialmente em fazer com que os casos de teste sejam gerados de forma a fazer com que o fluxo do programa passe por um número mínimo de caminhos entre a entrada e a saída do programa, sem o risco de ocorrerem redundâncias.

Grafo de Controle É um grafo orientado (ou seja, suas arestas possuem setas) que descreve o fluxo de controle do programa. Na realidade, o grafo de controle não passa de um fluxograma com símbolos diferentes, quais sejam:

Exemplo Grafo de Controle procedure Teste(A,B,C : integer); begin if A=B then A : = A + 1 else if B = C then B : = B+1 else B : = B -1; end;

Caminhos independentes Dentre um conjunto de caminhos identificados para um grafo, dizemos que eles são independentes quando nenhum deles é formado da combinação de dois ou mais outros. Para determinarmos os caminhos independentes de um grafo, temos que inicialmente determinar quantos são.

Caminhos independentes Um caminho independente é qualquer caminho ao longo do programa que introduz pelo menos um novo conjunto de comandos de processamento ou uma nova condição. Quando enunciado em termos de grafo de fluxo, um caminho independente deve incluir pelo menos uma nova aresta que não tenha sido atravessada antes do caminho ser definido.

Caminhos independentes Existem 3 formas de se determinar este número, também denominado complexidade ciclomática: 1. Contar o número de regiões no grafo de controle. No exemplo da figura 3, temos três regiões, R1, R2 e R3: as duas internas(r1 e R2) e a externa (R3). Logo, este grafo tem 3 caminhos independentes.

Caminhos independentes 2. Aplicar a fórmula: C = E - N + 2 C = número de caminhos independentes E = número de arestas N = número de nós No exemplo da figura 3 temos: E = 7, N = 6, logo C = 7-6+2 = 3

Caminhos independentes 3. Método manual: Contar o número de estruturas de decisão no programa e somar 1. No exemplo da figura 3, temos 2 "if". Logo, o número de caminhos independentes é 3.

Caminhos independentes Para identificar os caminhos independentes em um grafo fazemos o seguinte: Determinar o número de caminhos independentes conforme visto anteriormente. Tomar o caminho mais a esquerda possível no grafo como primeiro caminho independente. No exemplo, este caminho é o ac. Tomar o próximo caminho à direita, tendo o cuidado de incluir nele pelo menos uma aresta que não tenha sido incluída nos outros caminhos já determinados. No exemplo, caminho bdg. Repetir o passo anterior até que se obtenham todos os caminhos. No exemplo, só nos resta o caminho bef.

Geração dos Casos de Teste Cada caminho obtido dará origem a um caso de teste. Os casos de teste são gerados de forma que façam com que os caminhos aos quais correspondam sejam percorridos. No exemplo temos: Caminho ac: Entradas: A=3, B=3, C=3. Saídas: A=4, B=3. Caminho bdg: Entradas: A=3, B=4, C=4. Saídas: A=3, B=4. Caminho bef: Entradas: A=3, B=5, C=6. Saídas: A=3, B=4.

Passos do método Passo 1: Desenhar o grafo de controle Passo 2: Determinar o número de caminhos independentes (complexidade ciclomática) Passo 3: Obter os caminhos independentes Passo 4: Para cada caminho, gerar os casos de teste, utilizando a especificação do programa para inferir os resultados esperados. Passo 5: Executar cada caso de teste Checar os resultados obtidos contra os esperados O teste estará completo quando houver confiança absoluta em que todos os casos de teste obtêm resultados satisfatórios.

Gráfico de Fluxo: condições complexas

Teste Funcional (ou teste caixapreta) Técnica de teste em que o componente de software a ser testado é abordado como se fosse uma caixa-preta, ou seja, não se considera o comportamento interno do mesmo.

Teste Funcional Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido.

Teste Funcional Haverá sucesso no teste se o resultado obtido for igual ao resultado esperado. O componente de software a ser testado pode ser um método, uma função interna, um programa, um componente, um conjunto de programas e/ou componentes ou mesmo uma funcionalidade. A técnica de teste funcional é aplicável a todos os níveis de teste.

Particionamento em classes de equivalência Esse critério divide o domínio de entrada de um programa em classes de equivalência, a partir das quais os casos de teste são derivados. Ele tem por objetivo minimizar o número de casos de teste, selecionando apenas um caso de teste de cada classe, pois em princípio todos os elementos de uma classe devem se comportar de maneira equivalente.

Particionamento em classes de equivalência Uma classe de equivalência representa um conjunto de estados válidos e inválidos para uma condição de entrada. Tipicamente uma condição de entrada pode ser um valor numérico específico, uma faixa de valores, um conjunto de valores relacionados, ou uma condição lógica.

Particionamento em classes de equivalência As seguintes diretrizes podem ser aplicadas: Se uma condição de entrada especifica uma faixa de valores ou requer um valor específico, uma classe de equivalência válida (dentro do limite) e duas inválidas (acima e abaixo dos limites) são definidas. Se uma condição de entrada especifica um membro de um conjunto ou é lógica, uma classe de equivalência válida e uma inválida são definidas.

Particionamento em classes de equivalência Devemos seguir tais passos para geração dos testes usando este critério: 1. Identificar classes de equivalência (é um processo heurístico): Condição de entrada válidas e inválidas 2. Definir os casos de teste enumeram-se as classes de equivalência casos de teste para as classes válidas casos de teste para as classes inválidas

Exemplo: programa identifier.c

Exemplo Programa identifier.c. Deve determinar se um identificador é válido ou não. O primeiro passo é a identificação das classes de equivalência.

Exemplo A partir disso, conseguimos especificar quais serão os casos de teste necessários. Para ser válido, um identificador deve atender às condições (1), (3) e (5), logo é necessário um caso de teste válido que cubra todas essas condições. Além disso, será necessário um caso de teste para cada classe inválida: (2), (4) e (6). Assim, o conjunto mínimo é composto por quatro casos de teste, sendo uma das opções: T0 = {(a1,válido), (2B3, Inválido), (Z-12, Inválido), (A1b2C3d, Inválido)}.

Análise do valor limite Por razões não completamente identificadas, um grande número de erros tende a ocorrer nos limites do domínio de entrada invés de no centro. Esse critério de teste explora os limites dos valores de cada classe de equivalência para preparar os casos de teste.

Análise do valor limite Se uma condição de entrada especifica uma faixa de valores limitada em a e b, casos de teste devem ser projetados com valores a e b e imediatamente acima e abaixo de a e b. Exemplo: Intervalo = {1..10}; Casos de Teste à {1, 10, 0,11}.

Análise do valor limite Exemplo: "... o cálculo do desconto por dependente é feito da seguinte forma: a entrada é a idade do dependente que deve estar restrita ao intervalo [0..24]. Para dependentes até 12 anos (inclusive) o desconto é de 15%. Entre 13 e 18 (inclusive) o desconto é de 12%. Dos 19 aos 21 (inclusive) o desconto é de 5% e dos 22 aos 24 de 3%... Casos de teste : {-1,0,12,13,18,19,21,22,24,25}

Grafo de causa-efeito Esse critério de teste verifica o efeito combinado de dados de entrada. As causas (condições de entrada) e os efeitos (ações) são identificados e combinados em um grafo a partir do qual é montada uma tabela de decisão, e a partir desta, são derivados os casos de teste e as saídas.

Grafo de causa-efeito Exemplo: Em um programa de compras pela Internet, a cobrança ou não do frete é definida seguindo tal regra: Se o valor da compra for maior que R$ 80,00 e foram comprados menos que 3 produtos, o frete é gratuito. Caso contrário, o frete deverá ser cobrado.

Grafo de causa-efeito 1. Para cada módulo, Causas (condições de entrada) e efeitos (ações realizadas às diferentes condições de entrada) são relacionados, atribuindo-se um identificador para cada um. Causa: valor da compra > 60 e #produtos < 3 Efeito: frete grátis

Grafo de causa-efeito 2. Gerar grafo de causa-efeito:

Grafo de causa-efeito 3. Transformar o grafo em uma tabela de decisão:

Grafo de causa-efeito 4. As regras da tabela de decisão são, então, convertidas em casos de teste: Devemos seguir todas as regras extraídas da tabela. Esse critério deve ser combinado com os dois outros já apresentados para a criação de casos de teste válidos (extraídos das regras) e inválidos (valores foras da faixa definida). Casos de Teste (valor, qtd produtos, resultado esperado) = {(61,2, frete grátis ); (61,3, cobrar frete ); (60, qualquer quantidade, cobrar frete )}