Page 1

Fortaleza, 10 de Novembro de 2009

Otimização em Teste de Software: Teoria e Aplicações Camila Loiola Brito Maia GOES.UECE - Grupo de Otimização em Engenharia de Software Universidade Estadual do Ceará


Prazer em conhecer,

Camila Loiola Brito Maia Universidade Estadual do Cearรก http://goes.comp.uece.br/ camila.maia@gmail.com


Nosso tempo está dividido desta forma Parte 01 Parte 02 Parte 03

Otimização em Engenharia de Software Aplicação de Metaheurísticas em Teste de Software Considerações Finais


Otimização em Engenharia de Software


Otimização “Otimização consiste em encontrar uma ou mais soluções válidas para um determinado problema que correspondem a valores extremos (ou ótimos) de uma ou mais funções que valoram tais soluções.”


Tipos de Otimização Mono-objetiva Uma única função a ser otimizada Possui uma Ordenação Total Busca uma única solução (ótima)

Multi-objetiva Duas ou mais funções a serem otimizadas Possui uma Ordenação Parcial Busca um conjunto de soluções


f(x)  f(y) ou f(x)  f(y), para todo x e y

Ordenação Total

Ordenação Parcial f(x)  f(y), f(x)  f(y) ou (f(x) / f(y) e f(x) / f(y)) para algum x e y


Na Otimização multi-objetiva, o conceito de Dominância substitui o conceito “melhor-pior-igual”

Dominância “Uma solução S1 domina uma solução S2 se S1 é melhor ou igual a S2 em todos os critérios, e estritamente melhor em pelo menos um deles”


EXEMPLO ILUSTRATIVO

Problema Escolher um vôo entre São Paulo e Fortaleza, minimizando o custo, que deve ser no máximo de R$ 800,00, e que possua o menor tempo de vôo possível.


EXEMPLO ILUSTRATIVO

Tempo de Vôo (horas)

2

1

2

3,5

4

6

7

8

Custo (R$)

300,00

700,00

900,00

650,00

400,00

100,00

300,00

600,00

Voos Disponíveis

Problema Escolher um vôo entre São Paulo e Fortaleza, minimizando o custo, que deve ser no máximo de R$ 800,00, e que possua o menor tempo de vôo possível.


EXEMPLO ILUSTRATIVO

Tempo de Vôo (horas)

2

1

2

3,5

4

6

7

8

Custo (R$)

300,00

700,00

900,00

650,00

400,00

100,00

300,00

600,00

Voos Disponíveis Solução Inválida

Problema Escolher um vôo entre São Paulo e Fortaleza, minimizando o custo, que deve ser no máximo de R$ 800,00, e que possua o menor tempo de vôo possível.


S1 domina S2 1.000,00 900,00 800,00 700,00 600,00 custo() (R$) 500,00 400,00 300,00 200,00 100,00 0,00

S2 S1

0

1

2

3

4

5

6

7

8

9

10

tempo_de_voo() (horas)

Objetivo: Minimizar tempo_de_voo() e custo()


S1 n達o domina S2 e S2 n達o domina S1

1.000,00 900,00 800,00 700,00 600,00 custo() (R$) 500,00 400,00 300,00 200,00 100,00 0,00

S1 S2

0

1

2

3

4

5

6

7

8

9

10

tempo_de_voo() (horas)

Objetivo: Minimizar tempo_de_voo() e custo()


1.000,00 900,00 800,00 700,00 600,00 custo() (R$) 500,00 400,00 300,00 200,00 100,00 0,00

Pior Indiferente

Indiferente Melhor

0

1

2

3

4

5

6

7

8

9

10

tempo_de_voo() (horas)

Objetivo: Minimizar tempo_de_voo() e custo()


Soluções Não Dominadas

Soluções Dominadas

1.000,00 900,00 800,00 700,00 600,00 custo() (R$) 500,00 400,00 300,00 200,00 100,00 0,00 0 Frente de Pareto

1

2

3

4

5

6

7

8

9

10

tempo_de_voo() (horas)

Objetivo: Minimizar tempo_de_voo() e custo()


Funções a Minimizar/Maximizar

m  1,..., M

minimizar f m(x)

Restrições

sujeito a : g j(x)  0

j  1,..., J k  1,..., K

hk (x)  0 xi

( L)

 xi  xi

(U )

i  1,..., n

Definem as Soluções Válidas

Formulação de Um Problema da Otimização


Resolvendo Problemas Multi-objetivos

1

Métodos à priori Decisor explicita suas preferências antes do processo de busca

2

Métodos à posteriori Decisor explicita suas preferências após o processo de busca

3

Métodos Interativos Decisor explicida suas preferências durante o processo de busca, guiando o processo iterativamente


1

Métodos à Priori

Atribui-se um peso a cada objetivo, explicitando as preferências do decisor, assim técnicas de otimização mono-objetivo podem ser utilizadas diretamente. n

f ( x)   wi f i ( x) i 1

n

w i 1

i

1

Técnicas de Resolução: Métodos Exatos, Métodos Aproximativos, Heurísticas, Metaheurísticas Mono-objetivas.


2

Métodos à Posteriori

Selecionam um conjunto de soluções não dominadas, que deverão ser analisadas posteriormente pelo decisor. Técnicas de Resolução: Metaheurísticas Multiobjetivas.


Otimização em Engenharia de Software Novo ramo da Engenharia de Software dedicado a resolução automática de problemas complexos dessa área, modelados como problemas de otimização


Otimização em Engenharia de Software = Search-based Software Engineering (SBSE)


Otimização em Engenharia de Software óri

Por que ?


Por que ? Sistemas cada vez mais complexos Abordagens automáticas se tornam cada vez mais necessárias.

Escalabilidade Soluções convencionais sofrem com problemas de escalabilidade em grandes projetos. SBSE é escalável, dado o aumento no poder de processamento.

Independência Resultados são gerados a partir de análises ausentes de qualquer vício ou pré-conceitos.


Otimização em Engenharia de Software óri

Quando ?


Quando ? Problemas Complexos

1: Grande Espaço de Busca 2: Ausência de Solução Ótima Conhecida


Otimização em Engenharia de Software óri

Como ?


Aplicando Otimização em Engenharia de Software Escolha de uma Representação para as soluções do problema

Definição da Função(ões) de Avaliação e das Restrições do problema

Escolha e Aplicação de Algoritmos de Busca


Exemplos de Problemas Complexos em Engenharia de Software Planejamento de Releases Estimativa de Custos Alocação de Pessoal


Exemplos de Problemas Complexos em Engenharia de Software Otimização de Código Fonte Otimização de Projeto Geração, Seleção e Priorização de Casos de Teste


Um Pouco de

Hist贸ria


até 2001 Diversos trabalhos esparsos, especialmente em teste de software, tratam problemas de Engenharia de Software como problemas de busca.

2007 Mark Harman publica o artigo “The Current State and Future of Search Based Software Engineering”.

Maio de 2009 1st International Symposium on Search Based Software Engineering, na cidade de Windsor, UK

2008

2001

Chamada para Edição Especial do periódico IEEE Transactions on Software Engineering em Search-Based Optimization for Software Engineering.

Mark Harman e Bryan Jones introduzem o termo Search-based Software Engineering em um artigo de mesmo nome.

Agosto de 2009 Chamada para Edição Especial do periódico Software—Practice and Experience em Practical Aspects of Search-Based Software Engineering


Metaheurística Combinação de duas palavras gregas: heuriskein, que significa “encontrar”, e o sufixo meta significando “além, em um nível mais alto”.

Refere-se a uma estratégia inteligente de alto nível que guia um processo de busca, explorando eficientemente um espaço de soluções a procura de soluções ótimas ou sub-ótimas.


Aplicação de Metaheurísticas em Teste de Software


Roteiro de Aplicações

Teste de Software Priorização de Casos de Teste

Seleção de Casos de Teste


Roteiro de Aplicações

Teste de Software Geração de Dados de Teste para Teste Estrutural

Teste não Funcional


1

Casos de Teste

Entendendo a Métrica APBC

Blocos 2

3

A

X

B

X

X

X

C

X

X

X

4

5

6

7

8

9

10

X

X

X

X

X

D

X

X X

X

X

X

E

Percentual de Cobertura de Blocos

Ordenação T1: A – B – C – D – E 100 90 80 70 60 50 40 30 20 10 0

APBC = 46% 0,0

0,2

0,4

0,6

0,8

1,0

Fração do Suíte de Teste

Priorização de Casos de Teste


1

Casos de Teste

Entendendo a Métrica APBC

Blocos 2

3

A

X

B

X

X

X

C

X

X

X

4

5

6

7

8

9

10

X

X

X

X

X

D

X

X X

X

X

X

E

Percentual de Cobertura de Blocos

Ordenação T1: C – E – B – A – D 100 90 80 70 60 50 40 30 20 10 0

APBC = 82% 0,0

0,2

0,4

0,6

0,8

1,0

Fração do Suíte de Teste

Priorização de Casos de Teste


!

ATENÇÃO Notações e formulação serão respeitadas integralmente


Fonte: Walcott, K. R., Soffa, M. L., Kapfhammer, G. M. e Roos, R. S. Time-Aware Test Suite Prioritization, Proceedings of the International Symposium on Software Testing and Analysis, 2006, pp. 1-12.

Propõe resolução para o problema de priorização de casos de teste Utiliza Algoritmo Genético

Priorização de Casos de Teste (1)


Problema

Priorizar um conjunto de casos de teste considerando a cobertura de código dos casos de teste e o tempo limitado para a execução. Foram utilizadas quatro técnicas: Algoritmo Genético, Ordem Inicial, Ordem Reversa e Fault-Aware.

Priorização de Casos de Teste (1)


Priorização de Casos de Teste (1)


Formulação

A função fit implementa a métrica APBC (Average Percentage Block Coverage)

A função time implementa o tempo total de execução da suíte de teste Tmax representa o tempo limite para a execução dos testes

Priorização de Casos de Teste (1)


Resultados Foram realizados dois estudos.

A técnica proposta, com o uso do Algoritmo Genético, superou as demais no primeiro estudo.

Já no segundo estudo, onde os casos de teste eram mais intercambiáveis, as técnicas Ordenação Reversa e Fault Aware foram as melhores.

Priorização de Casos de Teste (1)


Fonte: Li, Z., Harman, M., e Hierons, R. (2007), Search Algorithms for Regression Test Case Prioritization, IEEE Transactions on Software Engineering, vol. 33, no. 4, pp. 225-237

Compara cinco algoritmos para priorização de casos de teste Algoritmos: Guloso,Guloso Adicional, 2Ótimo, Hill Climbing e Algoritmo Genético

Métricas: APBC, APDC e APSC

Priorização de Casos de Teste (2)


Problema Comparar cinco algoritmos para priorização de casos de teste.

Separaram em 1000 suítes de teste pequenas (8 a 155 casos de teste) e 1000 suítes de teste maiores (228 a 4350 casos de teste) Seis programas utilizados: quatro da Siemens (pequenos), e space e Sed (grandes).

Priorização de Casos de Teste (2)


Formulação Suíte de testes, T

Conjunto contendo todas as permutações de T, PT Função de PT aos números reais, f

Encontrar T’ ϵ PT, tal que (para todo T’’ϵ PT) (T’’ <> T’) [f(T’) >=f(T’’)]

Priorização de Casos de Teste (2)


Resultados - Suítes de Teste Pequenas

Para os programas pequenos, o Algoritmo Genético foi ligeiramente melhor que os demais. O pior foi o Algoritmo Guloso. Não houve diferença significante entre o Guloso Adicional.

Para os programas grandes, o Guloso Adicional foi o melhor, não havendo diferença significante para o 2-Ótimo. O pior também foi o Algoritmo Guloso.

Priorização de Casos de Teste (2)


Resultados - Suítes de Teste Maiores

Os resultados foram semelhantes aos resultados das suítes de teste pequenas. Neste caso, não houve diferença significativa entre o Guloso Adicional e o 2Ótimo.

Priorização de Casos de Teste (2)


Fonte: Maia, C. , Carmo, R., Campos, G. e SOUZA, J. A Reactive GRASP Approach for Regression Test Case Prioritization. Anais do XL Simpósio Brasileiro de Pesquisa Operacional. 2008.

Baseado no trabalho de (Li et al., 2007) Adiciona a metaheurística GRASP Reativo

Priorização de Casos de Teste (3)


Formulação Suíte de testes, T, com n casos de teste que cobre um conjunto B de m blocos de código Seja TBi o primeiro caso de teste na ordem T´, de T, que cobre o bloco i.

A métrica APBC (Average Percentage Block Coverage) para a ordem T´ é dada por 1 – (TB1 + TB2 + ... + TBm)/nm + 1/2n As métricas APDC (Average Percentage Decision Coverage) e APSC (Average Percentage Statement Coverage) são calculadas de forma similar

Priorização de Casos de Teste (3)


Maximizar APBC

Priorização de Casos de Teste (3)


Resultados A metaheurística GRASP Reativo foi comparada com os métodos Guloso, Guloso Adicional e Algoritmo Genético. Foram usados 5 programas de tamanhos variados, onde foram avaliadas as métricas APBC, APDC e APSC. O algoritmo Guloso Adicional teve o melhor desempenho de todos, superando significantemente o método Guloso e Algoritmo Genético, que surpreendentemente obteve a pior performance de todos. O GRASP Reactivo obteve o segundo melhor resultado, gerando resultados insignificantemente piores do que o Guloso Adicional.

Não foram encontradas diferenças de performance nas diferentes métricas.

Priorização de Casos de Teste (3)


Fonte: Mansour, N., Bahsoon, R. e Baradhi, G. Empirical Comparison of Regression Test Selection Algorithms, The Journal of Systems and Software 57, 2001, pp. 79-90.

Utiliza oito parâmetros de qualidade para comparar os algoritmos

Utiliza Têmpera Simulada Função Objetivo: cobertura de código

Seleção de Casos de Teste (1)


Problema

Comparar a Têmpera Simulada com outros algoritmos para seleção de casos de teste, utilizando oito métricas de qualidade.

Seleção de Casos de Teste (1)


Algoritmo Reduction

Seja T o conjunto contendo todos os casos de teste.

Seja R o conjunto mínimo de casos de teste que satisfazem os requisitos dados. Seja um conjunto de requisitos {r1, r2, ... , rn}.

Seleção de Casos de Teste (1)


Algoritmo Reduction Considere subconjuntos T1, T2, ..., Tn, tal que Ti contém os casos de teste que cobrem o requisito i.

O algoritmo considera todos os casos de teste que ocorrem em um único Ti e os inclui em R. Depois, considera os Ti’s com cardinalidade 2. Isto é repetido até o número máximo de cardinalidade.

Seleção de Casos de Teste (1)


Algoritmo Slicing

Os casos de teste são associados a “pedaços” de código.

O algoritmo considera todos os casos de teste que cobrem os “pedaços” de código que foram alterados.

Seleção de Casos de Teste (1)


Algoritmo Dataflow Utiliza procedimentos de backward e forward para determinar os “pedaços” do programa associados ao segmento modificado. O algoritmo considera todos os casos de teste que cobrem estes “pedaços” de código.

Seleção de Casos de Teste (1)


Algoritmo Segment-Firewall Algoritmo Firewall adaptado para segmentos de código.

Um segment-firewall é construído nos limites dos segmentos alterados. Um segmento pode ser ancestral (que leva ao segmento modificado) ou descendente (que é atingido a partir do código modificado). O algoritmo considera todos os casos de teste que cobrem estes ancestrais e os dependentes.

Seleção de Casos de Teste (1)


Resultados

A escolha da melhor solução depende dos critérios de qualidade desejados.

Não houve um resultado “fechado” apontando para um algoritmo específico, pois todos foram bons em algum critério de qualidade.

Seleção de Casos de Teste (1)


Resultados Têmpera Simulada

Reduction

Slicing

Dataflow

SegmentFirewall

Número de casos de teste

Baixo

Baixo

Variável

Alto

Alta

Tempo execução

Lento

Rápido

Lento

Rápido

Médio

Precisão Inclusividade Processamento de requisitos

Alta Baixa CFG TSCT

Alta Baixa RTCT

Alta Média D-CFG TSCT

Média Média D-CFG TSCT

Média Média D-CFG TSCT

Tipo de Corretiva manutenção

Sim

Sim

Sim

Sim

Sim

de

Aperfeiçoamento Pode ser Pode ser Pode ser Pode ser Pode ser adaptado adaptado adaptado adaptado adaptado Nível de teste

Tipo de abordagem

Módulo

Sim

Sim

Sim

Integração

Pode ser Pode ser Pode ser Pode ser Sim adaptado adaptado adaptado adaptado Minimização Minimização Cobertura outputoriented

Sim

Cobertura dataflowbased

Sim

Cobertura dataflowbased

Seleção de Casos de Teste (1)


Fonte: Yoo, S. e Harman, M. Pareto Efficient MultiObjective Test Case Selection, Proceedings of the International Symposium on Software Testing and Analysis, 2007, pp. 140-150.

Primeira versão multi-objetivo para o problema de seleção de casos de teste

Utiliza NSGA-II, vNSGA-II e um Algoritmo Guloso mono-objetivo com atribuição de pesos

Duas formulações utilizadas

Seleção de Casos de Teste (2)


Formulação 1

Maximizar a cobertura de código

Minimizar o custo computacional

Seleção de Casos de Teste (2)


Formulação 2 Maximizar a cobertura de código Minimizar o custo computacional Maximizar a taxa de detecção de falhas

Seleção de Casos de Teste (2)


Resultados Para a primeira abordagem e para os programas pequenos, o NSGA-II obteve a melhor performance, obtendo a frente de pareto. O segundo foi o Algoritmo Guloso e o último foi o vNSGA-II.

Para o programa space,o Algoritmo Guloso obteve o melhor desempenho.

Para a segunda abordagem, os resultados são semelhantes aos do primeiro.

Seleção de Casos de Teste (2)


Fonte: Maia, C., Carmo, R., Freitas, F., Campos, G. e Souza, J. A Multi-Objective Approach for the Regression Test Case Selection Problem, XLI Simpósio Brasileiro de Pesquisa Operacional, 2009.

Apresenta nova abordagem multi-objetivo para o problema da seleção de casos de teste Considera a importância dos casos de teste, interagindo com o cliente Foram utilizados NSGA-II e um algoritmo randômico

Seleção de Casos de Teste (3)


Formulação

Seleção de Casos de Teste (3)


Resultados

Seleção de Casos de Teste (3)


Considerações Finais


Considerações Finais A Otimização em Engenharia de Software (Search-based Software Engineering) se apresenta como novo ramo de pesquisa da Engenharia de Software. Tem alcançado um crescente interesse mundial, e gerado resultados relevantes rapidamente, especialmente por combinar conhecimentos consolidados.

Muito ainda precisa ser feito no sentido de popularização desses resultados fora do meio acadêmico. A área de Teste de Software é a que possui mais trabalhos envolvendo otimização, e ainda há muito o que melhorar nesta fase do desenvolvimento de software.


Pesquisa em Otimização em Teste de Software Novos Problemas Geração de novas formulações para problemas de teste de software. Extensão de formulações existentes . Tratamento multi-objetivo para formulações monoobjetivas.

Novas Abordagens Aplicações de novos métodos de busca em problemas existentes. Estudos comparativos de técnicas de busca.

Competitividade Humana Análise da competitividade dos resultados gerados automaticamente em comparação com resultados produzidos por humanos.


Pesquisa em Otimização em Teste de Software Análise de Sensibilidade Avaliação da influência de variáveis na qualidade de resultados gerados e na dificuldade de resolver certos problemas.

Otimização Interativa Estratégias de incorporação do julgamento humano durante o processo de otimização.

Hibridização Combinação de métodos na geração de abordagens mais eficientes.


Chegamos ao fim! Obrigado pelo tempo e pela atenção.

Otimização em Teste de Software  

Esta apresentação trata da teoria e da prática em Teste de Software.

Read more
Read more
Similar to
Popular now
Just for you