Teste de Software X Métodos Formais

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

Análise e Projeto Orientado a Objetos
Introdução a Algoritmos
ENGENHARIA DE SOFTWARE Garantia de Qualidade de Software
Adélia Barros Testes de Software Adélia Barros
Engenharia de Software
Fundamentos de Engenharia de SW
Técnicas de Teste de Software
Teste de Software.
Definição de Casos de Teste Funcionais a partir de Casos de Uso
Engenharia de Software
Confiança.
Tópicos Motivação para teste Por que algumas empresas não testam
Faculdade de Ciências Sociais de Aplicadas de Petrolina – FACAPE
Mutação de Interface Interface Mutation: An Approach for Integration Testing Marcio E. Delamaro José C. Maldonado Aditya P. Mathur.
Carolina Fonseca Neumar Ribeiro
Reliability verification of Digital Systems Design based on mutation Analysis Samuel S. Marczak.
Revisões de Software Parte 1
Análise Estruturada O mais amplamente usado dos métodos de modelagem de requisitos Modelos que retratam fluxo e o conteúdo da informação (dados e controle)
Simulação de Sistemas Prof. MSc Sofia Mara de Souza AULA2.
Técnicas de Teste de Software
Abordagem Estratégica ao Teste de Software
Engenharia de Requisitos Requisito – sistema Caso de uso - usuário
TIPOS DE TESTES APLICÁVEIS E NÃO APLICÁVEIS AO PROJETO
TSDD Teste de segurança durante o desenvolvimento.
Testes – visão geral Vanilson Burégio.
Introdução aos conceitos de Teste de Software
REDUNDÂNCIA POR SOFTWARE
Prof.Alfredo Parteli Gomes
Gerenciamento de Configuração
Introdução a Computação Trabalho Final PUC Minas – São gabriel
Gerenciamento da Integração
Engenharia de Software com o RUP - Workflow de Testes Parte I
Qualidade Qualidade é um dos principais objetivos da Engenharia de Software. Muitos métodos, técnicas e ferramentas são desenvolvidas para apoiar a produção.
Programação Orientada à Objetos
Experimentação Algorítmica
Teste de Software Conceitos iniciais.
ANÁLISE ESTRUTURADA DE SISTEMAS
Engenharia de Software
Processos.
Testes de Software AULA 02 Eduardo Silvestri
O que é? É o processo de investigação técnica com intuito de identificar a qualidade, a segurança e a exatidão do software desenvolvido. A validação do.
Testes de Software AULA 06 Eduardo Silvestri
Gestão de defeitos.
Introdução a Teste de Software
Automação de Testes de Software
Base de Conhecimento em Teste de Software Gestão de Defeitos
Teste de Software 14: Geração de teste baseado em modelos: MBT
Fundamentos de linguagens de programação
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE AULA 5
Integração.
Engenharia de Software
Testes de Sistemas Concorrentes: Uma abordagem formal Paulo Eduardo e Silva Barbosa Março de 2004 Testing Concurrent Systems: A Formal Approach Jan Tretmans.
Métodos Formais Juan Andrés Mussini.
Engenharia de Software
Análise e Projeto de Sistemas Orientado a Objetos Profa. Ana Karina Barbosa.
Estimativa, Teste e Inspeção de Software
Qualidade de Produtos de Software
Engenharia de Software
O QUE MUDOU COM A NOVA ISO 9001:2000
ISO9001:2000 para Software Professor: Alexandre Vasconcelos Equipe: Amanda Pimentel Börje Karlsson Danielly Karine Erika Pessoa Jorge Cavalcanti Jose Edson.
Influencias sobre o Projeto da Linguagem
TÉCNICAS DE ESTIMATIVAS
Gerenciamento de riscos
Estimativa, Teste e Inspeção de Software
18/09/ /12/20082 Testes Baseados Em Modelo Diana Rúbia Paulo César Qualidade, Processos e Gestão de Software Alexandre Vasconcelos {drrr, pco,
4.4 Implementação e Operação
TESTES DE SOFTWARE – AULA 1 Prof. Me. Ronnison Reges Vidal
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
CMMI Capability Maturity Model Integration
Transcrição da apresentação:

Teste de Software X Métodos Formais José Amancio

Introdução Discussão sobre testes Testes formais Ferramenta

Introdução Teste é uma forma operacional de checar a corretude de um sistema através de experimentos Realizar execuções de um sistema com base em determinados critérios Linhas de execuções, valores de dados, funcionalidades, etc. Comparar os resultados das execuções com uma especificação Veredito: ok ou não

Introdução Discussão: onde está a ligação entre testes e métodos formais ? Alguns autores não consideram o uso de testes como sendo aplicação de métodos formais Não é uma técnica exaustiva que garanta cobrir todos os possíveis erros

Introdução Provê menos garantias do que verificação de modelos, por exemplo Não é possível testar todas as linhas de execução Com testes é possível detectar a existência, mas não é possível garantir a ausência de erros

Vantagens Técnicas mais “precisas” custam caro Inserção de novas linguagens Difícil sincronização de modelos com código Requerem mais especialização por parte dos projetistas/programadores Testes são aplicados diretamente sobre o programa Simples e prático: pode-se usar uma heurística simples para definir o que testar Apresenta a melhor relação custo/benefício na busca pela melhoria da qualidade de um software

Tipos de Testes Existem diferentes formas de classificar testes Considerando características do sistema Comportamento, nível de abstração Considerando estratégia do teste Teste caixa-preta, white-box

Tipos de Testes Diferentes níveis de abstração Teste de unidade: o mais baixo nível de teste. Pequenas partes do código são testadas separadamente Teste de integração: testa se diferentes partes do código trabalham bem juntas Teste de sistema: testa o sistema como um todo

Tipos de Testes Diferentes níveis de abstração Teste de aceitação: usualmente feito pelo cliente para checar se o sistema está de acordo Teste de regressão: aplicação de testes depois de alguma alteração para verificar se o sistema continua funcionando corretamente

Tipos de Testes Diferentes aspectos do comportamento Teste funcional ou de conformidade: o sistema faz o que deveria fazer ? Ou seja, está de acordo com a especificação ? Teste de performance: o sistema executa em tempo aceitável ?

Tipos de Testes Diferentes aspectos do comportamento Teste de robustez: como o sistema reage se seu ambiente apresentar comportamento estranho ou indesejado ? Teste de stress: como o sistema reage em condições extremas ? Com um número grande de usuários ou com grande quantidade de dados ?

Tipos de Testes Diferentes aspectos do comportamento Teste de confiabilidade: quanto podemos contar com o correto funcionamento do sistema ? Teste de disponibilidade: qual a disponibilidade do sistema ?

Tipos de Testes Estratégias de teste Caixa-preta White-box Grey-box Apenas a estrutura externa do sistema é conhecida White-box A estrutura interna (código) do sistema é conhecida e usada pelo testador Grey-box Quando parte do código é conhecido

O Processo de Teste Duas fases principais Geração de teste Envolve análise da especificação e determinação de que funcionalidade será testada Determinação de como será executado o teste Especificação de scripts de teste Execução de teste Desenvolvimento de um ambiente de teste em que o script pode ser executado Execução do script de teste Análise dos resultados

O Processo de Teste Outras fases Gerenciamento e manutenção Objetivo de possibilitar aplicação de testes durante a existência do sistema Manter scripts, controle de versões de especificações de testes, ferramentas para teste

Automação Necessário uso de ferramentas de suporte Tipos de ferramentas de teste Record & Play Registram ações de usuários na interface (através de mouse e teclado) e permitem repetir as operações Para testes de aceitação, por exemplo Geração de grandes quantidades de dados Para testes de stress

Automação Tipos de ferramentas de teste Geração de casos de testes baseados em uma especificação formal Para testes funcionais Cobertura de código Calculam o percentual do código executado durante o teste com base em critérios Caminhos percorridos, variáveis percorridas, comandos percorridos, etc. Para testes white-box

Utilização de Testes Em muitos casos, na prática, testes têm sido utilizados de maneira intuitiva Os casos de teste não são definidos com base em uma metodologia rigorosa Programadores definem e executam os testes Porém existem muitas pesquisas na área a fim de possibilitar o retorno de resultados mais confiáveis

Utilização de Testes Há um custo associado à aplicação de testes de forma sistemática Equipe de testadores Utilização de ferramentas Tempo para implementação/execução de testes

Testes X Métodos Formais Apesar dos custos, teste é a mais “barata” e mais utilizada técnica de validação de sistemas “Sempre” é utilizada Além disso, a prática de desenvolvimento de software atualmente exige processos confiáveis

Testes X Métodos Formais É precisamos de melhorar a qualidade do software Isso acontece através da aplicação de técnicas de validação com certo nível de rigor Testes + base matemática

Testes X Métodos Formais Testes formais Geração de casos de testes a partir de especificações formais Inserir especificações formais para utilizarmos testes Adotar especificações formais utilizadas em outras técnicas de verificação formal que estejam sendo aplicadas Análise de cobertura de código Avaliação do percentual de código executado fornece maior confiabilidade com base em argumentos formais

Testes Withe-box Em testes de unidade, um caso de teste corresponde a um caminho de execução Quase nunca é possível checar todas as situações com todos os valores possíveis Testes são feitos com base em critérios de cobertura Permite executar menos casos de testes com maior probabilidade de encontrar erros

Testes Withe-box Cobertura de statements Cobertura de “caminho” Cada comando executável (atribuição, entrada, saída, etc) aparece em pelo menos um caso de teste Cobertura de “caminho” Cada caminho executável aparece em algum caso de teste

Testes Withe-box Cobertura de condição Cobertura de caminho/condição Cada predicado aparece em um caso de teste avaliado para true Cobertura de caminho/condição Requer que, tanto os caminhos como a condição sejam cobertas

Testes Withe-box Cobertura de condição múltipla Cada combinação de predicados deve aparecer no conjunto de casos de teste Cobertura de caminhos executáveis Requer que todos os caminhos executáveis sejam considerados nos casos de teste

Testes Withe-box Exemplo y = y + 1 se x = y e z > w x = x –1 verdade falso x = x -1

Testes Withe-box Cobertura de statements Cobertura de caminho {x=2, y=2, z=4, w=3} Cobertura de caminho {x=3, y=3, z=5, w=7} Cobertura de condição {x=3, y=4, z=7, w=5}

Testes Withe-box Cobertura de caminho/condição {x=2, y=2, z=4, w=3} {x=3, y=3, z=5, w=7} {x=3, y=4, z=7, w=5} Cobertura de condição múltipla {x=3, y=4, z=5, w=6}

Testes Withe-box Determinados critérios englobam incorporam outros Cobertura de caminho engloba cobertura de statements Cobertura de caminho/condição engloba cobertura de caminho Temos agora formas de medir cobertura e inferir confiabilidade dos casos de testes Chances de implementar um conjunto menor de casos de testes com maior probabilidade de encontrar erros Pelo menos temos uma chance de avaliar o nível de confiabilidade dos casos de teste

Testes Caixa-preta Comumente chamado de teste funcional ou teste de conformidade Não há conhecimento da estrutura interna do sistema Temos apenas o sistema E esperamos dele um determinado comportamento Como associar estratégias deste tipo a métodos formais ?

Testes Caixa-preta Framework para testes baseado em especificações formais (Jan Tretmans) É apresentado um framework para uso de métodos formais em testes de conformidade Testar o comportamento com relação à especificação formal do sistema O mais importante é que liga o mundo informal das implementações, testes e experimentações com o mundo formal das especificações e modelos

Conceitos abordados no Framework Conformidade Observações e testes Testes de conformidade Suas extensões

Conformidade Necessitamos de implementações e especificações As especificações são formais. Universo de especificações é denotado por SPECS Implementações são os sistemas que iremos testar. Denotamos por IUT IMPS é o conjunto de todos os IUTs

Conformidade conforms-to  IMPS X SPECS, assim IUT conforms-to s expressa que IUT é uma correta implementação da especificação s. Implementações são objetos físicos, diferente das especificações. Não possibilitam argumentação formal: dificulta definir conforms-to

Conformidade Assumimos que todo IUT  IMPS pode ser modelado por um objeto formal Iiut  MODS, onde MODS é o universo de modelos Isso é chamado como hipóteses de teste Observação:a hipótese de teste apenas assume que um modelo Iiut existe, mas não que ele é conhecido a priori

Hipóteses de teste Permite argumentar sobre implementações como se elas fossem objetos formais Assim podemos expressar conformidade através de uma relação formal entre modelos de implementações e especificações A relação de implementação será chamada de imp  MODS X SPECS

Hipóteses de teste IUT  IMPS é dita correta com relação a s  SPECS (IUT conforms-to s), sss Iiut  MODS de IUT é imp-relacionada com s Iiut imp s

Observações e Testes O comportamento de uma IUT é investigado fazendo experimentos na implementação e observando as suas reações A especificação do experimento é um caso de teste e a implementação é chamada de execução de teste

Casos de Testes e Execução de Testes Considere casos de testes formalmente pertencentes a um domínio TESTS Requer um procedimento para executar um caso de teste t a uma IUT Denotada por EXEC(t,IUT)

Casos de Testes e Execução de Testes O que acontece durante a execução ? A execução de um teste irá levar em um conjunto de observações, subconjunto de OBS Função de observação: obs: TESTS X MODS  P(OBS) obs(t, Iiut) modela formalmente a execução do teste real EXEC(t, IUT)

Hipóteses de Testes Seu significado: Para todas as implementações reais que estamos testando, assume-se que existe um modelo, tal que se colocássemos a implementação e o modelo em caixas pretas e fizéssemos todos os experimentos possíveis em TESTS, não conseguiríamos distinguir entre a implementação real e o modelo

Funções de Veredito vt Usualmente interpretamos observações de testes em termos de certo ou errado vt: P(OBS)  {fail, pass} Podemos então introduzir a abreviação

Funções de Veredito vt Isso é extendido como uma suíte de testes: Uma implementação falha em uma suíte de testes se ela não passa:

Testes de Conformidade Envolve saber se uma implementação está conforme com respeito a uma relação de implementação imp com sua especificação Uma suíte de testes com essa propriedade é chamada completa

Testes de Conformidade É possível distinguir entre as implementações conformes e não-conformes É um requerimento muito forte para Testes práticos Precisamos enfraquecer esta declaração Sound (parece completa) – toda implementação correta, e possivelmente alguma implementação incorreta será aceita

Testes de Conformidade

Testes de Conformidade Se a propriedade de completude for provada no nível dos modelos, e se assumimos que as hipóteses de testes valem: a conformidade de uma implementação com respeito a sua especificação pode ser decidida por meio de um procedimento de testes

Derivação de testes Então, uma atividade importante passa a ser construir algoritmos que produzem suítes de testes sound e/ou completos a partir de uma especificação e de uma relação de implementação

Extensões Arquitetura de testes: define o ambiente no qual uma implementação é testada Introdução da técnica de cobertura: a cada implementação errônea detectada por uma suíte de testes, é atribuído um valor e depois esses valores são integrados