Software de Telecomunicações. Introdução aos testes

Documentos relacionados
Programação de Sistemas. Introdução aos testes

Teste de Software. Técnica de Teste Estrutural. Rosemary Silveira Filgueiras Melo

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução

Testes de software - Teste funcional

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

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

15/03/2018. Professor Ariel da Silva Dias Paradigma Imperativo

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 04 Algoritmos e Programação Estruturada

Capítulo III : A Linguagem Pascal Estruturas de Controlo

Desenho de casos de teste

Teste de Software. Técnica de Teste Estrutural. Rosemary Silveira Filgueiras Melo

Testes de correção (de defeitos)

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Teste de Software. Teste Funcional Teste Estrutural. Teste Baseado em Erros (Análise de Mutantes)

Aula 01. Programação Condicional Programação repetitiva

Projeto de Casos de Teste

Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Exercício... Para começar... Resolução... Para começar... Para começar...

Lógica de Programação I

No segundo caso, se a condição for verdadeira é executado o bloco-instruções1

Programação I Estruturas de Decisão

Capítulo 7. Expressões e Sentenças de Atribuição

Aula 20 Testes 3. Alessandro Garcia Leonardo da Silva Sousa OPUS Group/LES/DI/PUC-Rio Dezembro 2016

Treinamento Olimpíada Brasileira de Informática

Engenharia de Software

Prática 10 - Funções

A linguagem C (visão histórica)

6. QUAIS AS TÉCNICAS E RESPECTIVOS CRITÉRIOS DE TESTE EXISTENTES?

Lógica de Hoare. Abordagem que usaremos: aplicar o método de Hoare sobre uma linguagem de programação imperativa simplificada.

Programação I Apresentação

Compiladores. Análise Léxica

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Instruções condicionais

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

Introdução ao Teste de Software

2.2.5 EXPRESSÕES - Regras para o cálculo de valores

Teste de Validação. ações visíveis ao usuário e entradas e saídas do sistema reconhecíveis pelo usuário

ESTRUTURAS DE CONTROLE

Engenharia Civil. Introdução à Programação

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Linguagem C Princípios Básicos (parte 1)

Programação de Computadores

3. Linguagem de Programação C

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Programação Estruturada

Aula 6 Instruções de Seleção Cleverton Hentz

4 Modelos Propostos para Otimização de Planejamentos com Restrições de Precedência 4.1 Representação com Algoritmos Genéticos

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

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

Linguagem de programação: Pascal

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

C Comandos de Controle

Garantia de Qualidade

Compilador de LP3 para C3E e P3

Teste de Software Parte 2. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2016

Engenharia de Software

Recursividade, Tentativa e Erro

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Programação Estruturada

Comandos de Controle do Programa

Ficha de Avaliação Sumativa. Notas Gerais:

Um algoritmo deve conter passos não ambíguos, executáveis e que sejam terminados quando seguidos.

Análise e Síntese de Algoritmos

SSC 0721 Teste e Validação de Software

Linguagem C/C++ Estrutura Condicional. Prof: Rosemary Melo

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

C Comandos de Controle

Introdução à Programação em C Input / Output

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

LINGUAGEM C: COMANDOS DE REPETIÇÃO

Aula Anterior. Decomposição algorítmica (continuação)

Teste de Software Parte 2. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2015

& somadosnumeros = valor

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Aulas Anteriores. Detalhes da linguagem de programação

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Introdução à Programação I

Expressões e sentença de atribuição

IEC081 Introdução à Ciência dos Computadores Estruturas Condicionais em Linguagem C

Introdução à Programação. Uma Abordagem Funcional

Fundamentos de Programação em Python

Introdução à Programação

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO. Prof. Esp. Fabiano Taguchi

Conceitos básicos de programação

Matemática Discreta Parte 11

Conhecendo a Linguagem de Programação C

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

LINGUAGEM C CONTROLE DE FLUXO

Engenharia de Software

Correção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre

Linguagens de Programação. Marco A L Barbosa

Capítulo 1: Alfabetos, cadeias, linguagens

Teste de Software. Objetivo: Executar software para revelar erros/falhas ainda não descobertos. Pode gastar 40% do esforço de desenvolvimento

SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos

Programação de Computadores

Programação II. Aula 3

Introdução à Programação em C

Fundamentos Programação

RESOLUÇÃO. Computação e Programação (2009/2010-1º Semestre) 1º Teste (11/11/2009) Nome. Número. Leia com atenção os pontos que se seguem:

Transcrição:

Software de Telecomunicações Introdução aos testes Prof RG Crespo Software Telecomunicações Testes:1/43 Introdução (1) 1. Prova formal da correcção de programas Complexo, exigindo conhecimentos de matemática Demorado Viável apenas no mundo académico e para aplicações informáticas nas quais a correcção é requisito fundamental (aviação, ) 2. Testes aceitáveis, desde que executados metodicamente!!!! Prof RG Crespo Software Telecomunicações Testes:2/43

Introdução (2) Definições básicas Erro: inserção de uma afirmação contrária aos requisitos do sistema. Na fase de codificação são denominados bugs. Defeito ( fault ): Representação de um erro num esquema de representação de software (diagrama DFD, código fonte, ). O mesmo erro pode provocar vários defeitos. Falha: Estado do sistema após a execução de um defeito. A falha do sistema pode não ser imediatamente visível ao utilizador do sistema. Defeitos distintos podem provocar o mesmo tipo de falhas. Incidente: Sintoma de falha que é visível para o utilizador (cliente ou programador). Teste: Execução do sistema segundo um plano ( test case ). Prof RG Crespo Software Telecomunicações Testes:3/43 Introdução (3) Normalmente, a especificação, o programa e o plano de testes descrevem comportamentos ( behaviour ) distintos. Especificação (requisito) Programa (verificado) Universo comportamentos Omissões do programa Erros do programa Plano de teste (observado) Prof RG Crespo Software Telecomunicações Testes:4/43

Introdução (4) O plano de teste típico contém:- Identificador do plano de teste Objectivos do teste: motivos para plano de teste (idealmente ligados aos requisitos) Entradas: Pré-condições (determinam em que estados o programa se deve encontrar antes da execução) Parâmetros (entradas fornecidas ao programa) Saídas: Pós-condições (determinam em que estados o programa se deve encontrar após a execução) Resultados esperados Historial Test case ID: Purpose: Inputs: Pre-conditions: Parameters: Outputs: Post-conditions: Expected results: Execution history Date Result Version Run by Prof RG Crespo Software Telecomunicações Testes:5/43 Introdução (5) 1. Requisitos Exemplo de programa/plano de testes i. Pré-condições (espaço de dados admissível no início do programa) ii. O programa aceita à entrada um caracter ord e vector A[0..N], no qual: ord = 'S' OU ord = 'P' N 0 # o vector tem, pelo menos 1 elemento Os elementos A[0..N] são inteiros Pós-condições (propriedade satisfeita após execução do programa) O programa calcula a soma, ou o produto, dos valores A[0..N] conforme ord seja igual a, respectivamente, 'S' e 'P'. Prof RG Crespo Software Telecomunicações Testes:6/43

Introdução (6) 2. Programa (NB! implementação incorrecta) int calc(char ord; int A[ ],N;) { int result = 0; int index; for(index=0; index<n; index++) { if (ord=='s') result=result+a[index]; else result=result*a[index]; } return result; } 3. Plano de testes: deve incluir casos normais (extremos e intermédios) e situações erróneas. Prof RG Crespo Software Telecomunicações Testes:7/43 Introdução (7) Pré-condições Parâmetros Pós-condições Observado N Ord A[0..N] res 3 'S' 0,5,-2 3 3 1 'S' 10 10 10 1 'P' 10 10 0 3 'P' 1,7,10 70 0 3 'T' 1,15,10 erro 0 Os testes revelam defeitos no tratamento dos valores de ORD diferentes de 'S'. Prof RG Crespo Software Telecomunicações Testes:8/43

Introdução (7) O modelo do ciclo de testes tem, por base, o modelo do processo de software de cascata. Erros Requisitos Erros Defeitos Arquitectura Erros Defeitos Codificação Defeitos Teste Resolução Isolamento Classificação Incidente Prof RG Crespo Software Telecomunicações Testes:9/43 Introdução (8) O plano de testes é identificado segundo uma abordagem: 1. Funcional ( black-box ): o sistema é considerado uma caixa negra, cujas saídas são função da entrada entrada Programa saída 2. Estruturada ( white-box ): escolhem-se casos de teste que exercitem, idealmente, todo o código. Prof RG Crespo Software Telecomunicações Testes:10/43

Introdução (9) Para exemplificar cada abordagem, é usado um programa classificador de triângulos. Programa: Classificador de triângulos Entrada: 3 números, separados por vírgulas, correspondentes às dimensões dos três lados Saída: Cadeia de caracteres indicativa da classificação Algoritmo: Se a dimensão de um lado for superior à soma das dimensões dos outros dois lados, escrever "Não é triângulo". Caso seja um triângulo válido, escrever a classificação do triângulo consoantes os lados sejam todos diferentes ("Escaleno"), dois iguais ("Isósceles") ou todos iguais ("Equilátero"). Prof RG Crespo Software Telecomunicações Testes:11/43 Abordagem funcional (1) A partir dos requisitos, o comportamento da aplicação informática é dividido em partições. A bateria de testes é gerada seguindo os passos seguintes: 1. Cada partição do comportamento é posto à prova por um único teste 2. Gerados testes que cubram situações habituais de ocorrência de defeitos, tais como tratamento dos dados de entrada incorrectos e dados mal formatados Há 3 métodos de gerar a bateria de testes segundo a abordagem funcional: Análise de valores fronteiros Classes de equivalência Tabelas de decisão Elevado Esforço de identificação de testes Baixo Valores fronteiros Classes de equivalência Tabelas de decisão Prof RG Crespo Software Telecomunicações Testes:12/43

Abordagem funcional (2) Vantagens da abordagem funcional Independentes da implementação: a bateria de testes pode ser reutilizada quando a implementação é alterada. Testes modulares podem ser executados em paralelo com a codificação. Inconvenientes da abordagem funcional Redundância de testes. Não garante teste a todas as sequências de código. Prof RG Crespo Software Telecomunicações Testes:13/43 Valores fronteiros (1) Uma percentagem muito significativa de erros ocorre em valores fronteiros ( boundary values ). Exemplos: teste de ciclo < quando devia ser, contador cujo valor está deslocado de uma unidade, Com base nos limites, a cada entrada x i, é identificado o conjunto de valores Mínimo-x min Imediatamente acima do mínimo-x min+ Nominal-x nom Imediatamente abaixo do máximo-x max- Máximo-x max Prof RG Crespo Software Telecomunicações Testes:14/43

Valores fronteiros (2) A ferramenta T gera automaticamente os valores, a partir da especificação de um programa e é usada em diversos CASE como Teamwork da Cadre e Software Trough Pictures da Interactive Development Environments. Existem 4 métodos de geração da bateria de testes, usando a análise de valores fronteiros: Básico Robusto Teste aos piores casos Robustez nos piores casos Prof RG Crespo Software Telecomunicações Testes:15/43 Valores fronteiros (3) AF.1 Análise básica Baseada no pressuposto da teoria da fiabilidade de "defeito singular": falhas no sistema raramente são resultado de dois (ou mais) defeitos. Funciona bem apenas quando o programa a testar é função de variáveis independentes, cada uma representando quantidades físicas limitadas. Nas combinações de teste, todas as variáveis excepto uma, tomam o valor nominal e a restantes variáveis assumem todos os valores extremos. Para n variáveis, a análise básica gera 4n+1 casos. Exemplo: Consideremos uma função F(x1,x2), na qual os parâmetros são limitados a x1 b, c x2 d. A bateria de testes para F(x1,x2) são: x {<x1nom,x2min>,<x1nom,x2min+>,<x1nom,x2nom>, <x1nom,x2max>,<x1nom,x2max>, <x1min,x2nom>, <x1min+,x2nom>,<x1max-,x2nom>,<x1max,x2nom>} Prof RG Crespo Software Telecomunicações Testes:16/43 2 d c a b x 1

Valores fronteiros (4) Para o classificador de triângulos, os três parâmetros são limitados inferiormente a 1. Não há limite superior, mas arbitra-se o valor 200. Os valores de teste são: min=1, min+=2, nom=100, max-=199, max=200. Para este exemplo, a análise de valores fronteiros não testa o caso do triângulo escaleno (ex: a=2, b=200, c=199). Prof RG Crespo Software Telecomunicações Testes:17/43 Valores fronteiros (5) ID a b c Resultado AVF1 100 100 1 Isósceles AVF2 100 100 2 Isósceles AVF3 100 100 100 Equilátero AVF4 100 100 199 Isósceles AVF5 100 100 200 Não é triângulo AVF6 100 1 100 Isósceles AVF7 100 2 100 Isósceles AVF8 Teste AVF3 AVF9 100 199 100 Isósceles AVF10 100 200 100 Não é triângulo AVF11 1 100 100 Isósceles AVF12 2 100 100 Isósceles AVF13 Teste AVF3 AVF14 199 100 100 Isósceles AVF15 200 100 100 Não é triângulo Prof RG Crespo Software Telecomunicações Testes:18/43

Valores fronteiros (6) AF.2 Análise robusta É extensão da análise básica. Para além dos 5 valores da análise básica, são utilizados valores que ultrapassam ligeiramente (max+) ou ficam aquém ligeiramente (min-). O teste à robustez incide no tratamento de excepções (ex: ângulo de asa do avião ultrapassar dado limite, exceder capacidade do elevador, data fixada a 31 Fevereiro, ). O teste de robustez é uma boa escolha para teste de variáveis internas ao sistema, ou variáveis auxiliares. x 2 d c a b x 1 Prof RG Crespo Software Telecomunicações Testes:19/43 Valores fronteiros (7) AF.3 Teste aos piores casos A bateria de testes é gerada pelo produto cartesiano das variáveis assumindo os 5 valores min, min+, nom, max- e max. Para n variáveis, a bateria de testes aos piores casos gera 5 n testes distintos (ex: para classificador de triângulos, a bateria de testes contém 5 3 =125 casos). As combinações de teste geradas no teste aos piores casos focam nas situações em que mais de uma variável toma valores extremos. AF.4 Teste robustez aos piores casos No teste de robustez aos piores casos, o plano de teste é formado pelo produto cartesiano das variáveis assumindo 7 valores. Ao todo, são gerados 7 n testes distintos (ex: para classificador de triângulos, a bateria de testes contém 7 3 =343 casos). Prof RG Crespo Software Telecomunicações Testes:20/43 x 2 d c a b x 1

Classes de equivalência (1) O método de classes de equivalência tem por objectivo a completude dos testes, evitando a redundância. Uma relação R A 2 é uma relação de equivalência sse R é reflexiva, simétrica e transitiva (ex: relações de igualdade e congruência) Dada uma relação de equivalência, pode-se definir subconjuntos formados pelos elementos relacionados entre si: os subconjuntos constituem partições induzidas pela relação de equivalência. Ex: Seja o conjunto N e a relação de equivalência módulo 3. As partições induzidas são {{0,3,6,...}, {1,4,7,...}, {2,5,8,...}}. A escolha da relação de equivalência é determinante na identificação da bateria de testes! Uma boa selecção de classes de equivalência reduz a redundância nos testes. Prof RG Crespo Software Telecomunicações Testes:21/43 Classes de equivalência (2) As combinações de teste são geradas pelo seguinte algoritmo: 1. Identificar as classes de equivalência em termos de validade. Para cada parâmetro, determinar as gamas de valores válidos e inválidos. 2. Gerar testes para todas as combinações possíveis de um valor da classe de equivalência para cada parâmetro. 3. Gerar testes para todas as combinações possíveis de um valor inválido para um parâmetro e um valor válido para os restantes parâmetros. Vantagens das classes de equivalência Útil para teste de funções complexas. Orientado para a completude. Inconvenientes das classes de equivalência Identificação das classes exige conhecimento da (provável) implementação. Parâmetros devem ser independentes entre si: caso contrário, são geradas situações de "erro". Prof RG Crespo Software Telecomunicações Testes:22/43

Classes de equivalência (3) Há 3 métodos de gerar a bateria de testes segundo as classes de equivalência, de acordo com as combinações dos elementos de cada partição: Equivalência fraca Equivalência forte Validação Exemplo: consideremos o programa fomado por 3 variáveis a:a, b:b, c:c e que são identificadas as seguintes partições dos domínios: A = A1 A2 A3 B = B1 B2 B3 B4 C = C1 C2 Prof RG Crespo Software Telecomunicações Testes:23/43 Classes de equivalência (4) CE.1 Equivalência fraca As variáveis têm valores em sucessão de cada uma das partições. Se os domínios tiverem menor número de partições, a sucessão regressa à ordem inicial. O número de testes é igual ao número de classes da maior partição. ID a b c WE1 a1 b1 c1 WE2 a2 b2 c2 WE3 a3 b3 c1 WE4 a1 b4 c2 Prof RG Crespo Software Telecomunicações Testes:24/43

Classes de equivalência (5) CE.2 Equivalência forte Bateria de testes construída pelo produto cartesiano das classes de partições. O número de testes é igual ao produto do número de classes de cada partição (no exemplo, 3*4*2=24). ID a b c SE1 a1 b1 c1 SE2 a1 b1 c2 SE3 a1 b2 c1 SE4 a1 b2 c2 SE5 a1 b3 c1 SE6 a1 b3 c2 SE7 a1 b4 c1 SE8 a1 b4 c2 SE9 a2 b1 c1 SE10 a2 b1 c2 SE11 a2 b2 c1 SE12 a2 b2 c2 SE13 a2 b3 c1 SE14 a2 b3 c2 SE15 a2 b4 c1 SE16 a2 b4 c2 SE17 a3 b1 c1 SE18 a3 b1 c2 SE19 a3 b2 c1 SE20 a3 b2 c2 SE21 a3 b3 c1 SE22 a3 b3 c2 SE23 a3 b4 c1 SE24 a3 b4 c2 Prof RG Crespo Software Telecomunicações Testes:25/43 Classes de equivalência (6) CE.3 Validação Bateria de testes definida em termos de dados válidos e inválidos. Para entradas válidas, usar os valores da equivalência fraca Para entradas inválidas, usar para cada teste uma entrada inválida e as restantes entradas válidas. Testes de equivalência baseada na validação são usados em linguagens de programação não fortemente tipificadas, i.e., sem tipos gamas de dados (COBOL, FORTRAN, ) Prof RG Crespo Software Telecomunicações Testes:26/43

Classes de equivalência (7) Para o exemplo do classificador de triângulos Classes de equivalência identificadas com base nas relações de igualdade entre os parâmetros para triângulos válidos: D1={<a,b,c>: a=b=c} D2={<a,b,c>: a=b,a c} D3={<a,b,c>: a=c,a b} D4={<a,b,c>: b=c,a b} D5={<a,b,c>: a b,a c,b c} Classes de equivalência identificadas com base nas relações de igualdade entre os parâmetros para triângulos inválidos: D6a={<a,b,c>: a=b+c}, D6b={<a,b,c>: a>b+c} D7a={<a,b,c>: b=a+c}, D7b={<a,b,c>: b>a+c} D8a={<a,b,c>: c=a+b}, D8b={<a,b,c>: c>a+b} Prof RG Crespo Software Telecomunicações Testes:27/43 Classes de equivalência (8) ID a b c Resultado E1 5 5 5 Equilátero E2 5 5 2 Isósceles E3 5 2 5 Isósceles E4 2 5 5 Isósceles E5 2 3 4 Escaleno E6a 5 3 2 Não é triângulo E6b 5 2 2 Não é triângulo E7a 3 5 2 Não é triângulo E7b 2 5 2 Não é triângulo E8a 2 3 5 Não é triângulo E8b 2 2 5 Não é triângulo Prof RG Crespo Software Telecomunicações Testes:28/43

Tabelas de decisão (1) As tabelas de decisão baseam-se nos relacionamentos lógicos entre as partições de uma aplicação informática. Canto superior esquerdo: condições descritoras dos estados possíveis dos parâmetros Canto inferior esquerdo: acções da aplicação informática observadas externamente Colunas do lado direito (regras): condições descritas na parte superior (/N) desencadeiam as acções marcadas (X). Várias condições podem ser verdadeiras, ou falsas, em simultâneo. Para determinadas condições, mais do que uma acção pode ser desencadeada pela aplicação informática. Prof RG Crespo Software Telecomunicações Testes:29/43 Tabelas de decisão (2) As combinações de teste são geradas para as condições de cada regra que não resultem em acções impossíveis. Vantagens do teste por tabelas de decisão Útil para teste de programas onde várias accções são executadas perante um conjunto variável de condições Força rigor lógico na fase de requisitos/arquitectura Inconveniente do teste por tabelas de decisão Apresenta problemas de escala (n condições implicam 2 n regras). Prof RG Crespo Software Telecomunicações Testes:30/43

Tabelas de decisão (3) c1: a<b+c c2: b<a+c c3: c<a+b c4: a=b c5: a=c c6: b=c a1: Não é um triângulo a2: Escaleno a3: Isósceles a4: Equilátero a5: Impossível Condições de entrada Acções N X N N X X X N N N N X X X N N N X X X N N N N N X A acção a5 é executada nos casos de violação da propriedade da transitividade (na qual, se x=y e y=z, então x=z). Prof RG Crespo Software Telecomunicações Testes:31/43 Tabelas de decisão (4) ID a b c Resultado TD1 5 1 2 Não é triângulo TD2 1 5 2 Não é triângulo TD3 1 2 5 Não é triângulo TD4 5 5 5 Equilátero TD5 5 5 2 Isósceles TD6 5 2 5 Isósceles TD7 2 5 5 Isósceles TD8 2 3 4 Escaleno Prof RG Crespo Software Telecomunicações Testes:32/43

Abordagem estrutural (1) A abordagem estrutural baseia-se na estrutura do programa e não na sua definição. São escolhidos casos de teste que exercitem, idealmente, todo o código. Os métodos estruturais parte da identificação do grafo (direccionado) do programa, em que: Nós representam blocos básicos (sequência de instruções, para a qual há apenas um ponto de entrada e um de saída) Arcos representam fluxo do controlo de execução É assumido o aluno ter conhecimento básico de grafos, (matéria de Algoritmos e Estruturas de Dados/MEEC) Prof RG Crespo Software Telecomunicações Testes:33/43 Abordagem estrutural (2) Algoritmo de identificação dos blocos básicos 1. Identificar os cabeçalhos dos blocos básicos i. A primeira instrução do programa é cabeçalho de um bloco básico ii. Todas as instruções que são alvo de saltos (condicionais ou incondicionais) são cabeçalho de um bloco básico. iii. Todas as instruções que seguem um salto (condicional ou incondicional) são cabeçalho de um bloco básico. 2. Os blocos básicos iniciam-se nos cabeçalhos identificados em 1) e acabam antes do cabeçalho de bloco seguinte ou final do programa São consideradas instruções de salto e não chamadas a rotinas porque nas segundas apenas há um caminho de ida e regresso Prof RG Crespo Software Telecomunicações Testes:34/43

Abordagem estrutural (3) Instruções IF-THEN-ELSE e DO-WHILE executadas com auxílio de saltos. IF cond THEN block b ELSE block c DO WHILE cond block stat stat cond cond block b True: goto block goto True: block c False: False: Os endereços alvo de instruções de salto são: A primeira instrução dos blocos block b e block c A primeira instrução de stat Os endereços alvo de instruções de salto são: A primeira instrução do bloco block e stat A primeira instrução de DO WHILE cond Prof RG Crespo Software Telecomunicações Testes:35/43 Abordagem estrutural (4) Grafos correspondentes a diversas estruturas sintácticas de linguagens de programação imperativa Sequência Ciclo pré-testado Ciclo repeat If-Then If-Then-Else Case Prof RG Crespo Software Telecomunicações Testes:36/43

Abordagem estrutural (5) /* 1 */ void function triangle () { /* 2 */ int a,b,c; /* 3 */ enum {FALSE, TRUE} istriangle; /* 4 */ printf( Introduza o comprimento dos tres lados do triangulo ); /* 5 */ scanf( %d %d %d,&a,&b,&c); /* 6 */ if (a<b+c && b<a+c && c<a+b) /* 7 */ istriangle=true; /* 8 */ else istriangle=false; /* 9 */ if (istriangle) /* 10 */ { /* 11 */ if (a==b && b==c) K /* 12 */ printf( Equilatero\n ); /* 13 */ else if (a!=b && a!=c && b!=c) /* 14 */ printf( Escaleno\n ); /* 15 */ else printf( Isosceles\n ); /* 16 */ } /* 17 */ else printf( Nao e um triangulo\n ); /* 18 */ } Prof RG Crespo Software Telecomunicações Testes:37/43 B L A D F J C E H G I Abordagem estrutural (6) Os inícios de blocos são listados na tabela Caso Início de programa 4 Instruções End. alvo de instrução de salto 9,8,13,15,16,17,18 Instrução seguinte a instrução de salto 7,10,12,14 Os blocos básicos são formados por: {A}4-6, {B}7, {C}8, {D}9, {E}10-11, {F}12, {G}13, {H}14, {I}15, {J}16, {K}17, {L}18 Um grafo de programa, definido por blocos básicos é denominado grafo DD (decisão-decisão): corresponde a uma condensação do grafo de instruções. Prof RG Crespo Software Telecomunicações Testes:38/43

Abordagem estrutural (7) Há 4 métodos de geração da bateria de testes segundo a abordagem estrutural: Grafo DD (Decisão-Decisão) Grafo DU (Decisão-Uso) Caminhos básicos Fatia Esforço de identificação de testes Elevado Baixo DD Base DU Fatia Prof RG Crespo Software Telecomunicações Testes:39/43 Caminhos básicos (1) Caminho independente: sequência de instruções que possui um subconjunto (aresta) totalmente que não é percorrida pelos caminhos restantes. McCabe propôs uma métrica de complexidade, que determina o número máximo de caminhos independentes. V(G) = nº predicados +1 Uma vez que todos os outros caminhos do grafo são combinações de caminhos independentes, V(G) é o limite inferior de testes de caminhos. Prof RG Crespo Software Telecomunicações Testes:40/43

Caminhos básicos (2) Para o programa classificador de triângulos, os predicados são Nó True False A a<b+c && b<a+c && c<a+b a>=b+c b>=a+c c>=a+b D mesmo que A mesmo que A E a==b && b==c a!= b b!= c G a!=b && a!=c && b!=c a==b a==c b==c V(G) = 4 +1= 5 Na realidade há apenas 4 caminhos independentes, porque os testes A e D são iguais) Prof RG Crespo Software Telecomunicações Testes:41/43 Caminhos básicos (2) Para identificar a bateria de testes, McCabe propõe o método 1. Escolher um caminho base, correspondente a uma execução normal, com o maior número possível nós de decisão. 2. O caminho base é alterado para ramos alternativos nos nós em que outdeg 2. Para o programa classificador de triângulos, os caminhos são: A. Caminho base (o mais longo): A-B-D-E-G-H-J-L Condições a satisfazer: A=true (a<b+c && b<a+c && c<a+b) E=false (a!=b b!= c) G=true (a!= b && a!= c && b!= c) Entrada: a=2, b=3, c=4: Saída: escaleno Prof RG Crespo Software Telecomunicações Testes:42/43

Caminhos básicos (2) A. Alternativa no nó A: A-C-D-K-L Condições a satisfazer: A=false (a>=b+c b>=a+c c<a+b) Entrada: a=1, b=2, c=5; Saída: não é triângulo B. Alternativa no nó E: A-B-D-E-F-J-L Condições a satisfazer: A=true (a<b+c && b<a+c && c<a+b) E=true (a==b && b==c) Entrada: a=4, b=4, c=4; Saída: equiláterio C. Alternativa no nó G: A-B-D-E-G-I-J-L Condições a satisfazer: A=true (a<b+c && b<a+c && c<a+b) E=false (a!=b b!= c) G=false (a == b a == c b == c) Entrada: a=2, b=4, c=4; Saída: isósceles Prof RG Crespo Software Telecomunicações Testes:43/43