SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e...

128
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE CIÊNCIAS EXATAS E DA TERRA DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA PROGRAMA DE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE DE IMPACTO DE MUDANÇA EM LINHAS DE PRODUTO DE SOFTWARE Alexandre Strapação Guedes Vianna NATAL - RN Maio, 2012

Transcript of SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e...

Page 1: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

CENTRO DE CIÊNCIAS EXATAS E DA TERRA

DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA

APLICADA

PROGRAMA DE PÓS-GRADUAÇÃO EM SISTEMAS E

COMPUTAÇÃO

SQUID IMPACT ANALYSER: UMA FERRAMENTA

PARA ANÁLISE DE IMPACTO DE MUDANÇA EM

LINHAS DE PRODUTO DE SOFTWARE

Alexandre Strapação Guedes Vianna

NATAL - RN

Maio, 2012

Page 2: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

CENTRO DE CIÊNCIAS EXATAS E DA TERRA

DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA

APLICADA

PROGRAMA DE PÓS-GRADUAÇÃO EM SISTEMAS E

COMPUTAÇÃO

SQUID IMPACT ANALYSER: UMA FERRAMENTA

PARA ANÁLISE DE IMPACTO DE MUDANÇA EM

LINHAS DE PRODUTO DE SOFTWARE

Alexandre Strapação Guedes Vianna

Dissertação de Mestrado submetida ao

Programa de Pós-Graduação em Sistemas e

Computação do Departamento de

Informática e Matemática Aplicada da

Universidade Federal do Rio Grande do

Norte como parte dos requisitos para a

obtenção do grau de Mestre em Sistemas e

Computação.

Orientador: Prof. Dr. Uirá Kulesza

Co-orientadora: Profa. Dra. Roberta de

Souza Coelho

NATAL - RN

Maio, 2012

Page 3: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

Catalogação de Publicação na Fonte. UFRN / SISBI/ Biblioteca Setorial Especializada do Centro de Ciências Exatas e da Terra – CCET.

Vianna, Alexandre Strapação Guedes. Squid Impact Analyser: Uma Ferramenta para Análise de Impacto de Mudança em Linhas de Produto de Software / Alexandre Strapação Guedes Vianna – Natal, RN, 2012. 113f. : il. Orientador: Uirá Kulesza. Dissertação (Mestrado) – Universidade Federal do Rio Grande do Norte. Centro de Ciências Exatas e da Terra. Departamento de Informática e Matemática Aplicada. Programa de Pós-Graduação em Sistemas e Computação. 1. Software – Desenvolvimento - Dissertação. 2. Linhas de Produto de Software – Dissertação. 3. Análise de Impacto de Mudanças – Dissertação. 4. Evolução em Linhas de Produto de Software – Dissertação. I. Kulesza, Uirá. II. Universidade Federal do Rio Grande do Norte. III. Título. RN/UF/BSE-CCET CDU 004.041

Page 4: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da
Page 5: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

v

AGRADECIMENTOS

Em primeiro lugar agradeço a minha família por todo apoio que me deram durante esses

dois anos. Obrigado aos meus pais, Pedro e Cristina, que com todo amor e dedicação me

ensinaram valores e sempre serviram como exemplo de vida a ser seguido, me motivaram

a estudar, e deram apoio, conselhos e estrutura em todas as fases da minha vida para que

eu conquistasse meus objetivos. Às minhas irmãs, Carolina e Catarina, companheiras

sempre dispostas a me ouvir, também me ajudando a relaxar nos momentos de estresse

quando eu chegava de viajem.

Agradeço em especial a Uirá meu orientador nessa jornada por toda a dedicação

durante o mestrado, os valorosos ensinamentos acadêmicos, as longas conversas e

discussões, as revisões da dissertação, os conselhos acadêmicos e profissionais, e toda a

paciência nesse período. E acima disso, Uirá também ficou marcado como um grande

amigo, sendo um companheiro fora da universidade nos momentos de descontração como

nas peladas de terça feira, nas corridas, nos happy hours, e nas conversas e conselhos para

minha vida pessoal que me ajudaram muito nas indecisões que passei nesse período.

Aos membros da banca examinadora Roberta Coelho, Dalton Serey e Marcia

Lucena, que contribuíram com as discussões para a melhoria deste trabalho. Em especial a

Roberta que também foi co-orientadora deste trabalho e colaborou significativamente com

sugestões de melhorias.

Aos colegas de mestrado que me acompanharam nessa jornada e se tornaram

grandes amigos: Marília, Daniel, Mário, Diogo, Demóstenes, Jadson, Edmilson, Felipão,

Liliane e Tainá. Em especial Marília que sempre se mostrou uma ótima amiga, prestativa e

companheira para açaís, caronas, saídas e conversas.

A Lívia que com amor e carinho me acompanhou nos momentos finais do

mestrado.

Aos amigos que fiz em Natal que sempre me apoiaram e me receberam muito bem

tornando a minha mudança para Natal muito mais tranquila: Bruno Barros, Raquel,

Johnny, Bruno Anacleto, Mayron e Caroline.

Agradeço em especial aos amigos de João Pessoa que sempre estiveram do meu

lado e me proporcionaram ótimos momentos de descontração quando precisei: Luis

Felipe, Lucas, Hugo, Saulo, Caio, Antônio, Amaro, Artur e Pizzol.

A Superintendência de Informática da UFRN e ao CNPQ - que contribuíram com o

financiamento deste trabalho tornando-o viável.

Page 6: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

vi

RESUMO

Linhas de Produtos de Software (LPS) consiste em um paradigma de

desenvolvimento de software, no qual famílias de sistemas compartilham características

comuns e tornam explícitas outras características que variam de acordo com o sistema

final sendo considerado. Esta abordagem oferece benefícios ao desenvolvimento de

software como redução de custos, qualidade do produto final, produtividade e tempo de

desenvolvimento reduzido. Por outro lado, a abordagem impõe novos desafios para a

atividade de evolução dos artefatos que modelam e implementam a LPS. Trabalhos de

pesquisa recentes propõem abordagens com suporte automatizado de ferramentas de

análise de impacto de mudança no contexto de evolução de LPSs. Tais abordagens são

baseadas em técnicas de análise de impacto de mudanças e rastreabilidade de artefatos,

porém apresentam limitações quanto à análise de impacto de mudanças em variabilidades

de granularidade fina, bem como à customização dos tipos e estratégias de análise

realizadas. Esta dissertação propõe uma ferramenta de análise de impacto de mudança,

denominada Squid Impact Analyzer, que utiliza uma estratégia de estimativa de impacto

baseada em informações de características, mapeamento de tais características em

artefatos de código, e dependência existente entre artefatos de implementação. A

ferramenta é avaliada através da condução de experimentos que realizam a quantificação

de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise

de impacto de mudança da ferramenta proposta em contraposição às mudanças reais

realizadas nos artefatos de diversas versões de evolução de uma LPS para gerenciamento

de mídias em dispositivos móveis. A ferramenta foi desenvolvida com base em uma

infraestrutura que serve de base para a instanciação de ferramentas de análise de

propriedades de código de LPSs, e que é também parte da contribuição da dissertação.

Palavras-chave: Linha de Produto de Software; Análise de Impacto de Mudanças;

Evolução de Linhas de Produto de Software; Engenharia de Software Automatizada.

Page 7: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

vii

ABSTRACT

Software Products Lines (SPL) is a software engineering approach to developing

software system families that share common features and differ in other features according

to the requested software systems. The adoption of the SPL approach can promote several

benefits such as cost reduction, product quality, productivity, and time to market. On the

other hand, the SPL approach brings new challenges to the software evolution that must

be considered. Recent research work has explored and proposed automated approaches

based on code analysis and traceability techniques for change impact analysis in the

context of SPL development. There are existing limitations concerning these approaches

such as the customization of the analysis functionalities to address different strategies for

change impact analysis, and the change impact analysis of fine-grained variability. This

dissertation proposes a change impact analysis tool for SPL development, called Squid

Impact Analyzer. The tool allows the implementation of change impact analysis based on

information from variability modeling, mapping of variability to code assets, and existing

dependency relationships between code assets. An assessment of the tool is conducted

through an experiment that compare the change impact analysis results provided by the

tool with real changes applied to several evolution releases from a SPL for media

management in mobile devices.

Keywords: Software Product Lines; Change Impact Analysis; Software Product

Lines Evolution; Automated Software Engineering.

Page 8: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

viii

SUMÁRIO

1 Introdução ............................................................................................................ 1

1.1 Problema ..................................................................................................... 2

1.2 Limitações das Abordagens Existentes ....................................................... 3

1.3 Trabalho Proposto....................................................................................... 4

1.4 Objetivos Gerais e Específicos ................................................................... 5

1.5 Organização do Trabalho ............................................................................ 6

2 Fundamentação Teórica ....................................................................................... 7

2.1 Linhas de Produto de Software ................................................................... 7

2.2 Derivação Automática de Produto .............................................................. 9

2.2.1 GenArch ........................................................................................ 11

2.3 Evolução de Software no contexto de LPS ............................................... 15

2.3.1 Rastreamento em Linhas de Produto de Software ........................ 17

2.3.2 Análise de Impacto de Mudanças ................................................. 19

2.4 Análise Estática de Código ....................................................................... 21

2.4.1 Design Wizard .............................................................................. 23

2.5 Sumário..................................................................................................... 24

3 Squid Analyser: Uma Infraestrutura Extensível de Análise de Linhas de Produto

de Software ............................................................................................................... 25

3.1 Arquitetura Geral da Infraestrutura .......................................................... 25

3.2 Projeto Detalhado ..................................................................................... 28

3.2.1 Módulo Núcleo do Squid .............................................................. 28

3.2.2 Squid Analyser Model .................................................................. 31

3.2.3 Extração de Artefatos da LPS ....................................................... 34

Page 9: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

ix

3.2.4 Analisador de Dependência de Código ......................................... 36

3.2.5 Buscas de Análises de Código da LPS .......................................... 43

3.2.6 Visualizações de Análise em Linha de Produto ............................ 45

3.3 Instanciação da Infraestrutura ................................................................... 47

3.4 Sumário..................................................................................................... 49

4 Squid Impact Analyser: Uma Ferramenta para Análise de Impacto de Mudanças

50

4.1 Visão Geral do Funcionamento da Ferramenta ......................................... 50

4.2 Arquitetura ................................................................................................ 54

4.3 Buscas de Análise de Impacto de Mudanças ............................................ 57

4.3.1 Busca de Impactos de Remoção de Características ...................... 57

4.3.2 Busca de Impacto de Mudanças de Características em Profundidade.

59

4.3.3 Busca de Impacto de Mudança de Artefatos em Profundidade. ........ 61

4.3.4 Busca de Impacto de Mudanças de Tipo de Característica de Obrigatória

para Opcional ............................................................................................. 62

4.4 Visualizações de Análise de Impacto de Mudanças ................................. 63

4.5 Sumário..................................................................................................... 66

5 Avaliação do Squid Impact Analyser ................................................................. 67

5.1 Métricas para Avaliação da Análise de Impacto de Mudanças ................. 67

5.2 Linha de Produto Mobile Media ............................................................... 70

5.3 Experimento 1........................................................................................... 73

5.3.1 Configuração do Experimento ...................................................... 74

5.3.2 Resultados e Avaliação do Experimento....................................... 74

5.4 Experimento 2........................................................................................... 81

Page 10: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

x

5.4.1 Configuração do Experimento ...................................................... 82

5.4.2 Resultados e Avaliação do Experimento....................................... 83

5.5 Ameaças à Validade do Experimento ....................................................... 89

5.6 Sumário..................................................................................................... 90

6 Trabalhos Relacionados ..................................................................................... 92

6.1 AMPLE Traceability Framework ............................................................. 92

6.2 Interfaces Emergentes ............................................................................... 94

6.3 Análise de Impacto Baseada em Rastreabilidade para LPS ...................... 96

7 Considerações Finais .......................................................................................... 99

7.1 Contribuições .......................................................................................... 100

7.2 Trabalhos Futuros ................................................................................... 101

REFERÊNCIAS ...................................................................................................... 103

ANEXO I ................................................................................................................ 109

Page 11: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

xi

LISTA DE FIGURAS

Figura 1. Atividades essenciais de desenvolvimento de LPS. ..................................... 9

Figura 2. Abordagem generativa. .............................................................................. 10

Figura 3. Modelos GenArch. ..................................................................................... 13

Figura 4. Arquitetura da ferramenta GenArch. ......................................................... 14

Figura 5. Visão Geral da Infraestrutura..................................................................... 26

Figura 6. Diagrama de Componentes da Infraestrutura. ............................................ 27

Figura 7. Diagrama de classes da infraestrutura. ...................................................... 29

Figura 8. Diagrama de interação da infraestrutura. ................................................... 30

Figura 9. Squid Analyser Model. .............................................................................. 32

Figura 10. Extensão do Squid Analyser Model. ........................................................ 33

Figura 11. Transformação GenArch para Squid........................................................ 36

Figura 12. Código do método extractMethodDependencies. .................................... 38

Figura 13. Visualização da AST Java pelo plugin ASTView. .................................. 39

Figura 14. Atividades da análise de código utilizando a AST Java. ......................... 40

Figura 15. Anotações de fragmentos de código. ....................................................... 41

Figura 16. Código fonte com as entidades do tipo nome simples destacadas. .......... 42

Figura 17. Código do classe ASTExplorer do analisador estático de código. ........... 43

Figura 18. Código da busca FeatureTraceability....................................................... 45

Figura 19. Código da busca FeatureTraceability....................................................... 46

Page 12: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

xii

Figura 20. Código da busca FeatureTraceability....................................................... 47

Figura 21. Exemplo de cadeia de relacionamentos. .................................................. 51

Figura 22. Diagrama de atividades da ferramenta Squid Impact Analyser. .............. 52

Figura 23. Exemplo de grafo. .................................................................................... 53

Figura 24. Diagrama de componentes de instanciação da infraestrutura. ................. 55

Figura 25. Atividades da ferramenta Squid Impact Anayser. .................................... 56

Figura 26. Trecho de código fonte da classe ImpactOfRemovingFeature. ............... 58

Figura 27. Diagrama de classe do modelo de visualização de impactos. .................. 64

Figura 28. Código fonte da visualização de impacto de mudanças. .......................... 65

Figura 29. Vizualização do modelo de impacto de mudanças................................... 66

Figura 30. Categorização dos artefatos na análise de impacto de mudanças. ........... 68

Figura 31. Modelo de características da versão 7 do Mobile Media. ........................ 70

Figura 32. Taxas da métrica precisão. ....................................................................... 79

Figura 33. Taxas da métrica cobertura. ..................................................................... 80

Figura 34. Média Harmônica. ................................................................................... 81

Figura 35. Taxas da métrica precisão. ....................................................................... 87

Figura 36. Taxas da métrica cobertura. ..................................................................... 88

Figura 37. Média Harmônica. ................................................................................... 89

Figura 38. Modelo de características da versão 3 do Mobile Media. ...................... 109

Figura 39. Modelo de características da versão 4 do Mobile Media. ...................... 110

Page 13: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

xiii

Figura 40. Modelo de características da versão 5 do Mobile Media. ...................... 111

Figura 41. Modelo de características da versão 6 do Mobile Media. ...................... 112

Figura 42. Modelo de características da versão 7 do Mobile Media. ...................... 112

Figura 43. Modelo de características da versão 8 do Mobile Media. ...................... 113

Page 14: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

xiv

LISTA DE TABELAS

Tabela 1. Evoluções do Mobile Media. ..................................................................... 71

Tabela 2. Quantidade de artefatos por versão do Mobile Media. .............................. 72

Tabela 3. Resumo de mudanças de artefatos durante evoluções do Mobile Media. .. 72

Tabela 4. Conjunto de Impacto Real (CIR) e Conjunto de Sementes (CS). .............. 75

Tabela 5. Conjunto de Impacto Estimado (CIE). ...................................................... 75

Tabela 6. Falso-Positivos e Falso-Negativos. ........................................................... 76

Tabela 7. Conjunto Intersecção. ................................................................................ 77

Tabela 8. Métricas precisão, cobertura e média harmônica para Estratégia Orientada

a Características. ....................................................................................................... 77

Tabela 9. Métricas precisão, cobertura e média harmônica da estratégia não

orientada a características. ........................................................................................ 78

Tabela 10. Conjunto de Impacto Real (CIR). ............................................................ 83

Tabela 11. Conjunto de Impacto Estimado (CIE). .................................................... 84

Tabela 12. Conjunto de Falso-Positivo (CFP) e Conjunto de Falso-Negativo (CFN).

.................................................................................................................................. 84

Tabela 13. Conjunto Intersecção. .............................................................................. 85

Tabela 14. Métricas precisão e cobertura da estratégia orientada a análise de

dependência de código. ............................................................................................. 86

Tabela 15. Métricas precisão e cobertura da estratégia não orientada a análise de

dependência de código. ............................................................................................. 86

Page 15: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

xv

LISTA DE SIGLAS

AJDT AspectJ Development Toolkit

API Application Program Interface

AST Árvore Sintática Abstrata

CFN Conjunto Falso-Negativo

CFP Conjunto Falso-Positivo

CI Conjunto Intersecção

CIE Conjunto de Impacto Estimado

CIR Conjunto de Impacto Real

CS Conjunto de Sementes

EMF Eclipse Modeling Framework

FMP Feature Model Plugin

JDT Java Development Toolkit

LPS Linhas de Produto de Software

SAM Squid Analysis Model

VSoC Virtual Separation of Concerns

Page 16: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

1

1 Introdução

Linhas de Produtos de Software (LPS) definem famílias de sistemas que

compartilham características comuns (similaridades) e tornam explícitas outras

características que variam (variabilidades) de acordo com o sistema final (produto) sendo

considerado (LINDEN et al., 2007). Esta abordagem oferece benefícios ao

desenvolvimento de software como redução de custos, melhora da qualidade do produto

final e tempo de desenvolvimento reduzido (time-to-market) (CLEMENTS; NORTHROP,

2002). Tais benefícios são obtidos a partir do reuso sistemático de arquiteturas de software

e artefatos de implementação, realizando este reuso de forma mais planejada e direcionada

a um domínio específico. Os benefícios da abordagem de LPS são estendidos com o

suporte de técnicas e ferramentas para automatização de tarefas do processo de

desenvolvimento. Embora, o uso da abordagem de LPS implique em vários benefícios ao

desenvolvimento de software, em contraponto existem alguns desafios técnicos para a

implementação da abordagem de LPS, tais como, mecanismos apropriados de

implementação de variabilidades, rastreamento de artefatos, automação do processo de

derivação de produtos, testes e evolução dos artefatos que determinam a LPS.

Atualmente, o mercado de software impõe um ritmo acelerado de mudanças de

requisitos, assim como também surgem novas tecnologias de implementação e de

hardware. Essas mudanças impactam na evolução de sistemas de software e impõem

desafios para aos engenheiros de software. De acordo com estudos apresentados em

(CUSUMANO; SELBY, 1998), durante o ciclo de vida de software, os requisitos iniciais

do software podem mudar em mais de 30%. Deste modo, a evolução é algo rotineiro e

constante no ciclo de vida de um sistema de software (SOMMERVILLE, 2007), esse

aspecto deve ser pensado desde o início do projeto do software. Quanto mais cedo o

aspecto de evolução for considerado no desenvolvimento de um sistema de software,

menores serão as possibilidades de decadência prematura do mesmo (GODFREY;

GERMAN, 2008).

Como ocorre nos processos tradicionais de desenvolvimento, a evolução de

software também se aplica à abordagem de LPS. No entanto, existem fatores específicos

relacionados às propriedades inerentes do desenvolvimento de LPS, e que portanto, estão

sujeitos a sofrerem impacto durante mudanças, tais como: (i) modelagem e implementação

Page 17: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

2

de variabilidades – características que são variáveis na LPS; e (ii) modelagem de

conhecimento de configuração – relacionamentos de mapeamento de variabilidades com

artefatos de implementação. Dessa forma, o gerenciamento de evolução em LPS apresenta

peculiaridades específicas, que envolve lidar com artefatos que representam não apenas

um único software, mas uma família de sistemas relacionados, o que exige abordagens

orientadas para este contexto. A adoção de técnicas para suporte a evolução de LPS

(JIRAPANTHONG; ZISMAN, 2005) (ANQUETIL et al., 2010) pode trazer benefícios ao

desenvolvimento e manutenção das LPS, tais como, diminuir o esforço das atividades de

manutenção e evolução da LPS, evitar a inserção de erros colaterais devido a alterações e

prevenir erros antes que eles aconteçam.

1.1 Problema

O desenvolvimento de LPS envolve a elaboração de inúmeros artefatos, de vários

tipos (implementação, documentação e modelagem), de diferentes níveis de abstração

(espaço do problema, espaço da solução e conhecimento de configuração) e gerados em

diferentes fases de desenvolvimento (engenharia de domínio e de aplicação). Além disso,

existem relacionamentos complexos envolvendo tais artefatos, o que consequentemente

traz dificuldades para gerenciar os artefatos e seus relacionamentos, fazendo-se necessário

o uso de técnicas específicas de gerência e modelagem para LPS.

Durante a evolução de uma LPS, os artefatos gerados estão constantemente sujeitos

a alterações, e é muito provável que alterações em um artefato afetem outros artefatos que

estão direta ou indiretamente relacionados. Os impactos oriundos de tais alterações

precisam ser identificados e analisados pela equipe de desenvolvimento, a qual deverá

tomar as devidas precauções com o objetivo de evitar a introdução de erros nos demais

artefatos. A análise de impacto de mudanças não é uma tarefa trivial de ser executada

manualmente por desenvolvedores e exige o suporte de técnicas e ferramentas

especializadas. No contexto de evolução de LPSs, a diversidade dos artefatos produzidos e

suas respectivas dependências, bem como a complexidade existente oriunda do fato de

uma LPS representar uma família de sistemas para um segmento específico, torna a

análise de impacto de mudança ainda mais difícil e complexa.

Page 18: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

3

1.2 Limitações das Abordagens Existentes

Trabalhos recentes exploram os benefícios para evolução de software de

abordagens de análise de impacto de mudanças baseadas em técnicas de rastreabilidade e

análise estática de código. O trabalho apresentado por (ANQUETIL et al., 2010) propõe

um framework dirigido por modelos para rastreabilidade de artefatos, denominado

AMPLE Traceability Framework (ATF). A proposta principal do ATF é oferecer suporte

para rastreamento de artefatos ao longo do ciclo de vida de LPS, através do uso de

técnicas de engenharia dirigida a modelos. O ATF possibilita a identificação de

dependências entre os artefatos, o que permite avaliar os impactos de mudanças entre os

mesmos. No entanto, o ATF não foi elaborado com o foco específico de análise de

impacto de mudanças, e dessa forma ele não prevê a análise de dependências de artefatos

de código, através da integração com frameworks ou ferramentas existentes de análise

estática ou dinâmica de código.

No trabalho proposto por (RIBEIRO et al., 2011) é apresentado o CIDE Emergent

Interfaces (CIDE EI), uma ferramenta que oferece suporte a evolução de LPS

implementadas utilizando técnicas de compilação condicional e a abordagem de separação

virtual de interesses (VSoC – Virtual Separation of Concerns). O trabalho explora o

problema das dependências entre fragmentos de código de compilação condicional

ocultadas pela VSoC, com uma ferramenta de auxílio ao desenvolvedor durante as

modificações de código. A ferramenta oferece suporte ao desenvolvedor, para analisar o

fluxo de dados da LPS e informar quais componentes (classes, métodos) de código de

quais características estão sofrendo impactos ao modificar o código de uma característica

específica. Apesar do CIDE EI oferecer benefícios para rastrear dependências entre

elementos de código que implementam as características, a ferramenta foi desenvolvida

para lidar explicitamente com dependências de código entre variabilidades implementadas

com compilação condicional. Desta forma, ela oferece suporte para um tipo específico de

análise não fornecendo funcionalidades para definir análises customizadas.

Em (OLIVEIRA, 2011) é apresentada uma abordagem com uma ferramenta

associada para a análise de impacto de mudanças em LPS baseada em técnicas de

rastreabilidade de artefatos. As informações de rastreabilidade são utilizadas para apoiar a

análise de impacto de mudanças através da avaliação de mudanças que ocorrem na LPS

Page 19: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

4

por meio dos seus artefatos. Embora a abordagem ofereça suporte ferramental, nem todas

as etapas são automatizadas. As relações de rastreabilidades não podem ser inferidas

diretamente através dos modelos de entrada, e exigem a participação dos engenheiros da

LPS para auxiliar nessa atividade. A abordagem realiza a análise de impacto de mudanças

com base apenas em informações de rastreabilidade de artefatos de alto nível (diagrama de

casos de uso, modelo de características e diagrama de classes), não havendo nenhum tipo

de análise de dependências de artefatos de código.

Os trabalhos descritos abordam o problema de análise de impacto de mudanças no

contexto de evolução de LPS propondo ferramentas específicas. Apenas o trabalho de

(RIBEIRO et al., 2011) provê uma análise de impacto com base em informações de

características e dependência dos artefatos da LPS, mas que focaliza a análise de

dependências de implementações baseadas em compilação condicional ou com separação

virtual de interesses. Apesar da relevância de tais trabalhos, nenhum deles propõe uma

ferramenta ou abordagem, que seja extensível para permitir: (i) a incorporação de novos

tipos de artefatos e dependência entre os mesmos; (ii) a definição de análises específicas

que levam em consideração as informações das variabilidades da LPS e respectivas

dependências; e (iii) a adoção de técnicas que levem em consideração a análise de

dependências entre artefatos de implementação.

1.3 Trabalho Proposto

Tendo em vista os problemas existentes e as limitações das abordagens atuais, este

trabalho de dissertação propõe o desenvolvimento de uma ferramenta de análise de

impacto de mudanças para LPSs, denominada Squid Impact Analyser, que leva em

consideração informações: (i) das variabilidades da LPS; (ii) do mapeamento de tais

variabilidades para artefatos de implementação; e (iii) de dependências entre seus artefatos

de implementação. A ferramenta proposta é desenvolvida com base em uma infraestrutura

de software extensível implementada na plataforma Eclipse (D’ANJOU et al., 2005), que

disponibiliza pontos de extensão para a definição de análises específicas de acordo com os

tipos de artefatos de modelagem e implementação da LPS. O desenvolvimento de tal

infraestrutura é também parte do escopo desta dissertação. O projeto da infraestrutura de

software compreende a definição de um modelo de análise para armazenar e estruturar as

informações relevantes para análises de LPS, tais como, características, artefatos de

implementação, mapeamentos de características com artefatos de implementação e

Page 20: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

5

relacionamentos de dependência entre artefatos de implementação. O modelo proposto

lida com o desafio da modelagem dos artefatos que compõem a LPS e seus complexos

relacionamentos, inclusive os relacionamentos entre os artefatos de implementação.

A ferramenta proposta permite a implementação de estratégias de análise de

impacto de mudanças apoiadas por técnicas de rastreabilidade em LPS e de análise

estática de código fonte. Estas técnicas de análise podem apoiar a gerência de evolução de

uma LPS (KRUEGER, 2001). A análise de código fonte é realizada com o auxilio de

ferramentas de análise estática de código fonte, que permitam obter relacionamento de

dependência entre artefatos de granularidade fina, especificamente, métodos, atributos e

fragmentos de código.

Por fim, a ferramenta proposta neste trabalho permite que os potenciais efeitos de

mudanças que ocorrem no contexto de evolução de uma LPS, sejam identificados antes da

sua realização. As informações retornadas pela ferramenta são úteis para o planejamento

das mudanças, possibilitando aos engenheiros da LPS definir estratégias que permitam

lidar com o projeto e a implementação das mudanças.

1.4 Objetivos Gerais e Específicos

O objetivo principal do trabalho é propor e implementar a ferramenta Squid Impact

Analyzer que oferece suporte para a análise de impacto de mudanças de implementações

de linhas de produto de software. A ferramenta permite estimar os impactos de mudanças

em características e artefatos de implementação, bem como prover suporte para a

definição e customização de diferentes análises de impacto de mudanças. Os objetivos

específicos do trabalho são:

(I). Projeto e implementação de uma infraestrutura de software extensível que

permita o desenvolvimento de ferramentas de análise de código de LPS, assim

como prover suporte para a análise de impacto de mudanças.

(II). Definição de um modelo de análise para armazenar e organizar as informações

dos artefatos que modelam e implementam uma LPS, contemplando também as

informações de relacionamento entre eles.

Page 21: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

6

(III). Incorporação e combinação de técnicas de análise estática de código em

conjunto com informações de rastreabilidade de LPS para promover a análise

de impacto de mudanças em LPS.

(IV). Projeto e implementação de estratégias para análise de impacto de mudanças

que inclua artefatos de granularidade fina, tais como, classes, métodos,

atributos e fragmentos de código.

(V). Avaliação do trabalho através da condução de experimentos com a finalidade

de comparar a influência do uso de informações de dependência de código

fonte e de rastreabilidade de LPS na estratégia de análise de impacto de

mudanças para LPS. A avaliação é realizada com o cálculo de métricas

direcionadas para análise de impacto de mudanças.

1.5 Organização do Trabalho

Além do capítulo introdutório, este documento apresenta mais seis capítulos que

estão organizados como segue. O Capítulo 2 apresenta os conceitos que apoiaram a

fundamentação teórica do trabalho: linhas de produto de software, derivação automática

de produtos, evolução de LPS, rastreabilidade em LPS, análise de impacto de mudanças

em LPS e análise estática de código. O Capítulo 3 apresenta o projeto e implementação da

infraestrutura Squid para o desenvolvimento de ferramentas de análise de código de LPSs.

O Capítulo 4 apresenta o projeto e a implementação do Squid Impact Analyzer, uma

ferramenta de análise de impacto de mudanças desenvolvida como uma instância da

infraestrutura de software proposta no Capítulo 3. O Capítulo 5 apresenta a avaliação do

trabalho, no qual é adotada uma LPS para realizar experimentos e calcular métricas para

avaliação de análise de impacto de mudanças. Os experimentos realizados exploram: (i) a

influência das informações de características na análise de impacto de mudanças em LPSs;

e (ii) a influência das informações de dependências de código fonte na análise de impacto

de mudanças em LPSs. O Capítulo 6 descreve trabalhos relacionados confrontando-os

com o trabalho desenvolvido nesta dissertação. Finalmente, o Capítulo 7 apresenta as

considerações finais a respeito do trabalho, destacando suas contribuições e

desdobramentos de trabalhos futuros.

Page 22: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

7

2 Fundamentação Teórica

Este capítulo apresenta o contexto teórico em que este trabalho está inserido. Ele

contempla uma visão geral da área de Linhas de Produto de Software (Seção 2.1), uma

breve introdução sobre Derivação Automática de Produtos (Seção 2.2), com a descrição

da ferramenta de derivação GenArch (Seção 2.2.1) que é usada no nosso trabalho. Em

seguida, são apresentados conceitos sobre Evolução de Software no Contexto de Linhas de

Produto de Software (Seção 2.3) e sobre Análise Estática de Código (Seção 2.4), com a

apresentação da ferramenta Design Wizard (Seção 2.4.1).

2.1 Linhas de Produto de Software

Motivadas pela tendência do aumento do reuso em engenharia de software,

pesquisadores da academia e indústria propuseram várias abordagens que direcionam o

foco do desenvolvimento de sistemas específicos para o desenvolvimento de famílias de

sistemas. Essas abordagens culminaram na proposta de desenvolvimento de software na

forma de linhas de produto de software (DONOHOE, 2000). Uma linha de produto de

software (LPS) é uma abordagem que propõe a derivação sistemática de produtos de

software a partir de um conjunto de componentes e artefatos comuns (CLEMENTS;

NORTHROP, 2002). O termo “Linha de Produto de Software” foi designado para nomear

uma família de sistemas que atende a um segmento específico de mercado. Conforme

Cohen, (COHEN, 2002), uma das definições de LPS de maior aceitação é a de Clements e

Northrop que diz que:

“Uma linha de produto de software é um conjunto de sistemas que usam

software intensivamente, compartilhando um conjunto de características

comuns e gerenciadas, que satisfazem as necessidades de um segmento

particular de mercado ou missão, e que são desenvolvidos a partir de um

conjunto comum de ativos principais e de uma forma preestabelecida.”

(CLEMENTS; NORTHROP, 2002).

Diversos benefícios têm sido relatados por pesquisadores no que diz respeito à

adoção de métodos, técnicas e ferramentas de desenvolvimento de LPS (POHL et al.,

2005), tais como:

Page 23: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

8

Redução no custo de desenvolvimento: artefatos reutilizados em vários sistemas

implicam na redução do custo de desenvolvimento e de manutenção individual de cada

sistema.

Aumento de qualidade: os artefatos do núcleo de uma LPS são reutilizados em

vários sistemas. Desta maneira, eles são testados e revisados várias vezes. Ou seja, existe

uma grande chance de detectar falhas e corrigí-las, melhorando assim a qualidade final do

produto.

Redução do tempo de entrega (time-to-market): nas fases iniciais de

desenvolvimento da LPS exige-se mais tempo comparando ao desenvolvimento de um

sistema por processos tradicionais, pois a implementação da LPS segue uma sistemática

para o reuso dos artefatos posteriormente. Após a implementação da LPS, o tempo de

entrega é reduzido, pois muitos componentes previamente desenvolvidos poderão ser

reusados para a geração de produtos. Após a geração de alguns produtos já se obtêm

benefícios em tempo de desenvolvimento (MATOS, 2008).

Esta inovação na forma de desenvolver sistemas de software trouxe à tona a

necessidade de prover métodos, técnicas e ferramentas para produção em larga escala de

famílias de produtos, dando origem à área de engenharia de LPS. O instituto de

engenharia de software (SEI – Software Engineering Institute) da Carnegie Mellow

University estabelece através da iniciativa Product Line Practice, três atividades

essenciais para a prática de uma abordagem de LPS (SEI, 2011): engenharia de domínio,

engenharia de aplicação e gerenciamento de LPS. A Figura 1 ilustra tais atividades.

Na engenharia de domínio, o foco é o desenvolvimento dos artefatos que deverão

ser reusados em todas as fases do desenvolvimento (ou derivação) de um produto

específico da LPS. Na engenharia de aplicação, os artefatos (ativos) reusáveis produzidos

na engenharia de domínio (arquitetura comum, componentes, modelos etc.), são utilizados

no processo de desenvolvimento permitindo a rápida geração de variantes de produtos, ou

de partes de produtos, que podem ser posteriormente customizados visando atender a

alguma especificidade. E por fim o gerenciamento da LPS busca garantir que as atividades

realizadas na LPS estejam de acordo com o planejamento definido.

Page 24: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

9

Figura 1. Atividades essenciais de desenvolvimento de LPS.

2.2 Derivação Automática de Produto

A derivação de produtos em LPS pode ser totalmente automática, completamente

manual, ou semi-automática (CHASTEK; DONOHOE; MCGREGOR, 2004). Um

exemplo de abordagem totalmente manual é o processo de produção baseado em planos

textuais, onde os engenheiros de software seguem um plano com instruções estabelecidas

pelo processo para a derivação de produtos. A derivação automática consiste na

automação do processo de engenharia de produtos, e é implementada com uso de

abordagens ferramentais que utilizam especificações do conhecimento de domínio e de

aplicação, técnicas de implementação de variabilidades e a gerência do conhecimento de

configuração.

A especificação do conhecimento de domínio e de aplicação implementada por

ferramentas de derivação pode ser baseada na abordagem generativa para LPS. A

programação generativa focaliza o estudo e a definição de métodos e ferramentas que

permitam a geração automática de software através de especificações em alto nível como

Page 25: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

10

em modelos (CZARNECKI; EISENECKER, 2000). No contexto da derivação automática

de produtos, a programação generativa orientada a modelagem da LPS promove a

separação de interesses entre espaço do problema e espaço da solução, permitindo abordá-

los independentemente. A Figura 2 apresenta a divisão de abstrações de acordo co m a

abordagem generativa: (i) espaço do problema – inclui conceitos e características

associadas a um domínio específico; (ii) espaço da solução – contém a arquitetura do

software e os artefatos usados para derivar produtos de uma família; e (iii) conhecimento

de configuração – compreende um conjunto de mapeamentos entre o espaço do problema

e o espaço da solução, relacionando principalmente características com artefatos.

Figura 2. Abordagem generativa.

Algumas ferramentas para gerência de variabilidades e derivação automática de

produtos de software têm sido desenvolvidas, tais como, Gears e pure::variants.

Gears, é uma ferramenta comercial para derivação de produtos desenvolvida pela

BigLever Software (KRUEGER, 2007). A ferramenta é composta basicamente por três

elementos: (i) infraestrutura: corresponde aos arquivos e diretórios adicionados aos

artefatos de software que implementam a LPS; (ii) ambiente de desenvolvimento: é

utilizado para criar, organizar e manter as LPS; e (iii) configurador: é responsável por

derivar instâncias de uma LPS. O processo de derivação implementado pela ferramenta é

baseado em descrições de alto nível que apresentam as características configuradas para

um determinado produto.

Page 26: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

11

pure::variants, é uma ferramenta comercial desenvolvida pela pure-systems

GmbH (BEUCHE, 2008). O pure::variants foi desenvolvido para apoiar o

desenvolvimento e a implantação de LPS e famílias de software. O pure::variants provê

suporte no desenvolvimento durante as atividades de análise, modelagem, implementação

e implantação. No processo de derivação de produtos do pure::variants são empregados

dois tipos de modelos: modelo de características e modelo de família. O modelo de

características contém as variabilidades da LPS enquanto o modelo de família descreve a

estrutura interna de cada componente e suas dependências em relação às características.

Essas ferramentas apresentam funcionalidades úteis para a derivação de produtos

de software, mas são, em geral, complexas e pesadas para serem usadas pela comunidade

de desenvolvedores que possuem com pouca familiaridade com vários dos novos

conceitos propostos pela comunidade de LPS. Para o contexto desse trabalho a derivação

automática de produtos está associada principalmente a etapa de extração de informações

para a análise de impacto de mudanças. A nossa abordagem aproveita as informações de

modelagem de LPS geradas por ferramentas de derivação automática para alimentar um

modelo de análise de LPS. Dessa forma, a idéia é reutilizar a infraestrutura de software

que implementa toda a parte de modelagem de LPS. A Seção 2.2.1 apresenta a ferramenta

de derivação automática GenArch, que foi adotada para a importação de informações de

modelagem de LPS, ao final são apresentadas justificativas para esta escolha.

2.2.1 GenArch

GenArch é uma ferramenta baseada em modelos que visa simplificar a derivação

automática (DEELSTRA et al., 2005) de novos membros de uma LPS ou instâncias de

frameworks OO. A ferramenta é baseada nos conceitos de programação generativa

(CZARNECKI et al., 2000). A programação generativa contempla métodos e técnicas que

permitem a geração automática de membros de uma linha de produtos a partir de

especificações de alto nível. Ela motiva a separação do espaço de problema e do espaço de

solução.

GenArch adota três modelos para a representação das variabilidades e elementos de

implementação de uma LPS: (i) modelo de arquitetura; (ii) modelo de características; e

(iii) modelo de configuração (CIRILO, 2008). O modelo de arquitetura define uma

representação visual dos elementos de implementação da LPS (componentes, classes,

Page 27: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

12

aspectos, templates, pastas e outros arquivos) com o objetivo de facilitar o mapeamento

entre os elementos de arquitetura (espaço de solução) e características presentes no

modelo de características (espaço de problema). Esse modelo pode ser automaticamente

criado a partir da leitura de diretórios existentes, indicados pelo engenheiro de domínio, e

que contém os elementos de implementação da arquitetura da LPS. Durante esse processo

de importação, cada pacote Java é convertido para um componente, com o mesmo nome,

no modelo de implementação. Já os outros tipos de elementos de implementação (classes,

interfaces, aspectos, templates ou arquivos) possuem uma representação correspondente

no modelo de arquitetura.

O modelo de característica (KANG et al., 1990) é utilizado na abordagem para

representar os pontos de variabilidade presentes na arquitetura da LPS. Uma versão inicial

do modelo de característica pode ser criada a partir das anotações do tipo @Feature

encontradas no código fonte dos elementos de implementação. Cada anotação @Feature

demanda a criação de uma nova característica no modelo de características com seu

respectivo tipo, descrito pelo atributo type. Se a anotação processada possui o atributo

parent, uma característica pai é criada, desde que ela ainda não exista no modelo, para

agregar a nova característica.

Finalmente, o modelo de configuração define um conjunto de mapeamentos entre

elementos do modelo de implementação da LPS e características do modelo de

características. Este modelo representa o conhecimento de configuração proposto pela

abordagem generativa (CZARNECKI et al., 2000), sendo fundamental para conectar o

espaço do problema (características) ao espaço da solução (elementos de implementação).

Uma versão inicial do modelo de configuração pode ser criada a partir das anotações

@Feature presentes no código-fonte dos elementos de arquitetura. Para cada anotação

@Feature, a ferramenta GenArch adiciona um mapeamento entre as características

anotadas e o respectivo elemento de implementação anotado. A versão atual do modelo de

configuração mostra os mapeamentos em estrutura de árvore, mas com uma indicação

explícita das características que cada um dos elementos depende. Apenas elementos que

dependem explicitamente de alguma característica para serem instanciados são

apresentados no modelo de implementação. Todos os outros são considerados mandatórios

e farão parte de qualquer instância do produto da LPS.

Page 28: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

13

A Figura 3 ilustra a relação dos três modelos GenArch. A representação de um

elemento de implementação no modelo de arquitetura (Figura 3a), uma feature alternativa

no modelo de features (Figura 3c), com a ligação via modelo de configuração (Figura 3b).

Os três modelos foram gerados automaticamente a partir de anotações inseridas no código

de uma aplicação.

Figura 3. Modelos GenArch.

A Figura 4 mostra a estrutura geral da arquitetura de implementação da ferramenta

GenArch. O GenArch adota quatro plug-ins extensíveis da plataforma Eclipse de forma a

Page 29: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

14

atender as suas funcionalidades: (i) a elaboração de Wizards; (ii) a navegação pela árvore

de diretórios de um projeto e funções para manipulação de arquivos e diretórios; (iii) a

manipulação dos modelos; e (iv) a geração de código. Para manipulação de código-fonte

Java e AspectJ, a ferramenta GenArch utiliza os plugins Java Development Toolkit (JDT)

(ECLIPSE FOUNDATION, 2012) e AspectJ Development Toolkit (AJDT) (COLYER,

2004), respectivamente. Tais plugins fornecem um conjunto de ferramentas para

gerenciamento da área de trabalho, visões, editores, compiladores e manipuladores de

código. A Application Program Interface (API) de árvore de sintaxe abstrata (AST)

disponível nesses plugins foi utilizada na manipulação (leitura, escrita e remoção) das

anotações GenArch e na captura da estrutura de cada elemento de arquitetura como

classes, interfaces ou aspectos. Como foi apresentado anteriormente, é através das

anotações no código que a ferramenta gera uma versão inicial dos modelos de derivação.

Figura 4. Arquitetura da ferramenta GenArch.

Page 30: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

15

A infraestrutura para manipulação dos modelos do GenArch foi implementada

usando os recursos do Eclipse Modeling Framework (EMF) (BUDINSKY et al., 2003). O

modelo de características, em particular, é implementado pelo Feature Modelling Plugin

(FMP). Esse plugin permite a modelagem do modelo de característica proposto por

(CZARNECKI et al., 2000). O plugin openArchitectureWare (HAASE et al., 2007) provê

um conjunto de componentes que podem ser utilizados para leitura e instanciação de

modelos, verificação de regras, transformação entre modelos e geração de código. A

geração de código é realizada a partir do processamento de templates escritos em uma

linguagem própria, denominada XPand (HAASE et al., 2007).

A implementação desta dissertação faz uso do GenArch para a importação de

informações dos modelos de configuração, arquitetura e características gerados. Tal

importação é fundamental para permitir a análise de impacto de mudanças durante a

evolução de uma LPS. A escolha do GenArch se deve principalmente pela

disponibilização do código fonte para propósitos acadêmicos, o que não ocorre com as

ferramentas comerciais como pure::variants e Gears.

2.3 Evolução de Software no contexto de LPS

Tradicionalmente na engenharia de software um sistema de software é

desenvolvido conforme um processo de desenvolvimento de software, que prevê um ciclo

de vida organizado em fases. Apesar de existir vários tipos de processos de

desenvolvimento de software (PRESSMAN, 2006), a maioria deles prevê que haverá uma

fase de evolução do software. Após o sistema ser desenvolvido a partir de um conjunto de

requisitos iniciais, este passará para a fase de evolução, na qual poderão surgir novos

requisitos, aprimoramentos e correções de erros, estas atividades são essenciais para que o

software continue funcionando e atendendo as necessidades dos usuários. Para cada

conjunto de alterações relativo à evolução do software, uma nova versão do software é

lançada. Estudos realizados por (SOUZA, 2005) e (HSIANG-JUI; BURCH, 1997)

demonstram que o esforço médio estimado para a fase de evolução é elevado,

correspondendo a até 90% do ciclo de vida de um software.

Na abordagem de LPS, seguindo o mesmo preceito válido para a abordagem

tradicional, a evolução de software também faz parte do ciclo de vida das LPSs.

Entretanto, no caso de LPS há cenários de evolução mais complexos, onde é preciso lidar

Page 31: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

16

com características específicas de LPS. Por exemplo, na engenharia de LPS existem

atividades relativas à modelagem de características e à configuração de produtos que não

existem em softwares tradicionais, estes artefatos de modelagem também sofrem

modificações durante a evolução de LPS. Também existem particularidades nas

arquiteturas de LPS, que são projetadas tendo em vista determinadas propriedades que

favoreçam a derivação de produtos a partir de um conjunto de componentes, tais como, o

baixo acoplamento entre componentes, pontos de extensão para implementação de

componentes customizados, e outros. Além disso, os projetos de LPS podem utilizar

diversas estratégias para implementar variabilidades como anotações de código, templates,

aspectos e geração de código, aumentando a complexidade das atividades de manutenção

e evolução da linha.

Conforme apresentado por (SVAHNBERG; BOSCH, 1999), a evolução em LPS

pode ser categorizada em:

Evolução de requisitos. Afeta a modelagem do espaço do problema e de acordo

com (SVAHNBERG; BOSCH, 1999) pode ser classificada em adição, remoção ou

modificação de requisitos. Podendo ocorrer em três níveis: (i) produto específico – a

modificação foca apenas um produto da LPS; (ii) variabilidade – a modificação de

requisitos ligado a uma característica variável da LPS; (iii) similaridade – as modificações

de requisitos associadas a características comuns da LPS e são válidas para todos os

produtos instanciados. As modificações de requisitos também podem refletir em mudanças

no conhecimento de configuração e no espaço da solução.

Evolução de arquitetura. Mudanças na arquitetura da LPS podem ser motivadas

por requisitos não funcionais, pela necessidade de adaptar-se a mudanças em tecnologias

de implementação ou de hardware, e por mudanças nas interfaces de componentes. As

modificações da arquitetura são classificadas em: divisão da arquitetura da LPS, divisão

de componentes, adição de componentes, remoção de componentes, substituição de

componentes e mudanças no relacionamento entre componentes.

Evolução de componentes. A maioria dos requisitos não afeta a arquitetura da

LPS, mas tem um grande impacto nos componentes da arquitetura. As modificações de

componentes são classificadas em: nova implementação para o componente, modificação

Page 32: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

17

da implementação do componente, agregar funcionalidade ao componente e desagregar

funcionalidade do componente.

A evolução de LPS é guiada principalmente por mudanças nos requisitos, essas

mudanças de requisitos originam-se de várias fontes distintas, como clientes e usuários

dos produtos, necessidades futuras do mercado e a introdução de novas categorias de

produtos na LPS. Para melhor lidar com a evolução de LPS faz-se necessárias práticas

específicas de implementação com objetivo de facilitar a manutenibilidade de LPS.

Exemplos de tais práticas de implementação são (DHUNGANA et al., 2008): pontos de

extensão, interfaces para componentes, separação entre espaço do problema e espaço da

solução, evitar modificações no núcleo da arquitetura, detectar componentes que

implementam as mesmas funcionalidades, evitar adaptar código com o intuito de

reaproveitá-lo, e por fim, evitar assumir decisões de projeto implícitas no código.

No entanto, apesar de úteis, as práticas de implementação apresentadas são

estratégias para tratar apenas alguns aspectos de caráter específico decorrentes de

mudanças em LPS, e por si só não são suficientes para lidar com os diversos fatores de

complexidade envolvidos na evolução de LPS. Existem abordagens discutidas por

(RIEBISCH, 2004) que envolvem análises específicas dos artefatos para lidar com

evolução de LPS, tais como, rastreamento em LPS discutida na Seção 2.3.1, e análise de

impacto de mudanças para LPS apresentada na Seção 2.3.2.

2.3.1 Rastreamento em Linhas de Produto de Software

Com os avanços na área de engenharia de LPS, fomentados principalmente pelo

desafio contínuo de reduzir custos e tempo de desenvolvimento de software, é

imprescindível um suporte voltado à engenharia de LPS com técnicas e ferramentas de

desenvolvimento específicas para apoio aos processos de desenvolvimento de LPS

(ANQUETIL et al., 2008). Um tipo de técnica útil de suporte ao desenvolvimento de LPS

é o uso de técnicas de análise de rastreabilidade orientadas a artefatos de LPS.

O desenvolvimento de software demanda a produção de artefatos de especificação,

documentação e codificação em todos os níveis, tais como: requisitos, arquitetura, projeto,

implementação, testes e integração. Porém, para manter esses documentos consistentes ao

longo do ciclo de vida e iterações de desenvolvimento, é fundamental a disponibilidade de

Page 33: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

18

técnicas e ferramentas com tal propósito. Com o objetivo de simplificar a atualização de

documentos, é necessário uma explícita descrição da relação entre esses documentos e os

artefatos de implementação. Essas informações podem ser agregadas a modelos de

rastreabilidades como apresentado por (GOTEL; FINKELSTEIN, 1994).

A rastreabilidade consiste na análise dos relacionamentos entre artefatos gerados

durante o processo de desenvolvimento de software e na atribuição de um significado para

estes relacionamentos, vinculando também os stakeholders. Os resultados da análise de

rastreabilidade permitem um melhor entendimento da complexidade dos relacionamentos

e dependências existentes entre artefatos gerados durante o desenvolvimento. O uso de

técnicas de rastreabilidade vem sendo empregado com sucesso no suporte ao

desenvolvimento de software baseado em processos tradicionais, apresentando benefícios

para gerência de evolução (CLELAND-HUANG et al., 2007).

No domínio de LPS, a rastreabilidade é reconhecida em muitos estudos como de

grande relevância (AJILA; KABA, et al., 2004). Uma das principais motivações para

empregar técnicas de rastreabilidade em LPS é o desafio de gerenciar e relacionar os

artefatos gerados em diferentes níveis de abstração (engenharia de domínio e aplicação)

durante o desenvolvimento de LPSs, provendo um melhor entendimento dos artefatos e

suas respectivas variabilidades por parte dos stakeholders.

As grandes dificuldades associadas à rastreabilidade no âmbito de LPS são

(JIRAPANTHONG; ZISMAN, 2005): (i) a existência de um grande número e uma grande

variedade de artefatos se compararmos ao desenvolvimento de software tradicional; (ii)

outra preocupação é ter consciência dos impactos de uma variabilidade em diferentes fases

do desenvolvimento; (iii) estabelecer uma relação entres produtos membros da LPS e a

arquitetura, ou o relacionamento entre os produtos; e (iv) ainda não há um bom suporte à

gerência de requisitos e ao tratamento de seus relacionamentos com características.

Para gerar resultados relevantes para o contexto de LPS, a análise de

rastreabilidade deve ser implementada com as seguintes características (BAYER;

WIDEN, 2001): (i) basear-se na semântica dos modelos utilizados para especificar e

modelar a LPS; (ii) deve ser customizada para capturar os tipos de ligações relevantes;

(iii) deve ser capaz de lidar com variabilidades; e (iv) ser automática é imprescindível

dada a escala de variabilidades e produtos distintos que o engenheiro deve lidar.

Page 34: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

19

A identificação e aquisição de ligações e informações de rastreabilidade podem ser

obtidas por diferentes meios, variando com base no nível de automação oferecido pelas

ferramentas de rastreabilidade (SPANOUDAKIS; ZISMAN, 2005). Esses níveis podem

ser: (i) manual – apesar da identificação das relações ser realizada manualmente por um

stakeholder, pode ser apoiada por ferramentas de visualização de artefatos; (ii) semi-

automática – as relações podem ser obtidas com base em ligações pré-definidas pelos

stakeholders ou com bases em ligações estabelecidas pelo processo de software; e (iii)

automática – baseia-se em técnicas de recuperação de informação (ANTONIOL et al.,

2002) (HAYES et al., 2003), regras de rastreabilidade (SPANOUDAKIS; ZISMAN,

2005), e inferência de axiomas (PINHEIRO, 2000). Apesar dos métodos automáticos de

extração, nem todas as relações podem ser inferidas automaticamente, sendo necessário

que o engenheiro de domínio e de aplicação realize uma análise e indique explicitamente

quais as ligações entre os artefatos e qual o tipo de relacionamento (BERG et al., 2005).

O uso de técnicas de rastreabilidade para o suporte a evolução de LPS pode afetar

positivamente a qualidade dos produtos gerados pela LPS. As informações sobre

dependências e restrições providas pelas ligações de rastreabilidade podem ser aplicadas a

um largo escopo de atividades relacionadas à evolução de LPS. As dependências são

informações chaves para entender os impactos de evoluções em LPS, permitindo ao

engenheiro de LPS elaborar soluções estratégicas para problemas decorrentes da evolução.

A rastreabilidade também permite a identificação dos pontos de variação para

aprimoramentos ou modificações da LPS. Em atividades de mudanças e refatoração da

LPS, as informações de dependências podem ser úteis para estimar previamente o esfo rço

de realização de tarefas planejadas, informando quais são os artefatos que potencialmente

serão afetados após alterações específicas em similaridades ou variabilidades da LPS.

2.3.2 Análise de Impacto de Mudanças

A idéia principal da análise de impacto de mudanças é a identificação de quais

serão as consequências decorrentes de mudanças na implementação. Ignorar ou estimar

erroneamente os impactos decorrentes de mudanças pode ocasionar a baixa qualidade do

software resultante após a fase de desenvolvimento, e o alto custo associado à fase de

manutenção, na qual as mudanças são requisitadas e realizadas. A informação fornecida

pela análise de impacto pode ser usada para planejar e realizar mudanças, adaptar e

configurar o software para as mudanças e localizar os seus efeitos. Além de permitir que

Page 35: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

20

os potenciais efeitos da mudança fiquem visíveis antes da sua realização, a análise de

impacto de mudanças pode auxiliar a planejar mudanças, estimar os custos de

implementação de mudanças e também validar o software alterado.

A análise de impacto de mudanças pode ser classificada em dois tipos de

abordagens: análise estática ou análise dinâmica. Também é possível realizar uma análise

hibrida como a descrita por (ERNST, 2003), que combina técnicas das duas abordagens

em busca de resultados mais precisos.

Análise Estática: a abordagem baseia-se em analisar estaticamente os artefatos

sujeitos a mudanças, essas análises verificam a organização estrutural dos artefatos

identificando as dependências entre eles (BINKLEY, 2007). Geralmente esse tipo de

análise é realizada sobre os artefatos de código com ferramentas específicas para análise

estática de código, mas também pode ser realizada sobre outros tipos de artefatos como

modelos ou documentos de projeto gerados pelos processos de software.

Análise dinâmica: as dependências entre as entidades de código também podem

ser criadas dinamicamente em tempo de execução, dessa forma a análise estática de

código não é capaz de identificar essas dependências. A abordagem dinâmica realiza a

análise durante a execução assistida do sistema, extraindo ligações criadas em tempo de

execução.

No contexto de LPS, realizar mudanças demanda considerar um número maior de

restrições em diferentes níveis de abstração. O principal diferencial em análise de impacto

de mudanças focalizada em LPS é a incorporação de artefatos de modelagem de

características e conhecimento de configuração entre os artefatos sujeitos a mudanças e

impactos (AJILA, 2002). Além disso, a análise de impacto deve considerar o elevado

nível de complexidade das restrições entre características com os artefatos que as

implementam.

A análise de impacto de mudanças é um dos temas chave da fundamentação deste

trabalho. Nossa abordagem propõe o suporte ferramental para análise de impacto de

mudanças automática em LPS, adotando a abordagem estática de análise de impacto de

mudanças.

Page 36: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

21

2.4 Análise Estática de Código

Devido à complexidade e as inúmeras variáveis envolvidas na tarefa de

programação, principalmente em grandes sistemas de software, é inevitável a existências

de erros ou anomalias gerados na codificação. A análise estática de código visa facilitar a

detecção dos problemas decorrentes da codificação dos sistemas de software. Além disso,

pode ser utilizada de forma preventiva, obtendo análises da estrutura do código fonte,

sobre o qual engenheiros de software podem tomar decisões para futuras implementações.

Existem diversas técnicas de análise estática de código:

Análise de Fluxo de Controle: análise dos pontos de decisão lógica do sistema,

retornando informações sobre fluxo de controle do sistema;

Análise de Fluxo de Dados: testa os possíveis caminhos ou fluxos de execução,

partindo da definição de uma variável até onde ela possivelmente será utilizada, formando

um par que é chamado de definição-uso (definition-use). Neste método, conjuntos de teste

são gerados para se conseguir 100% de cobertura, para cada par;

Compilação e Padronização de Código: verifica se o código obedece a normas de

codificação, que abrangem tanto aspectos arquiteturais quanto estruturas de programação,

permitindo que o software seja mais manutenível e testável;

Geração de Métricas sobre o Código: durante a análise estática podem ser

geradas métricas de código que irão contribuir para um maior nível de manutenibilidade e

confiança no código. Exemplos de tais métricas são: complexidade ciclomática, tamanho,

número de chamadas a funções, dentre outras;

Análise Estática de Arquitetura: são análises feitas no código para verificar sua

estrutura, como por exemplo: como os módulos e as classes se comunicam, tipos de

retorno, parâmetros, chamadas indevidas, etc.

Um tipo muito comum de análise estática é a inspeção manual de código, na qual

um stakeholder verifica manualmente o código fonte procurando por possíveis problemas

de implementação. Essa abordagem de análise é muito trabalhosa e normalmente é

realizada quando não há ferramentas para a linguagem de programação alvo ou quando as

Page 37: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

22

ferramentas não são capazes de analisar algum aspecto desejado. A inspeção manual de

código também é incluída em alguns processos (OpenUP, 2011) como uma atividade em

que o programador realiza antes de enviar o código para a etapa de testes, e dessa forma

detecta falhas previamente diminuindo a sobrecarga de atividades de testes.

Também existem abordagens automáticas para análise de código. Elas são baseadas

em ferramentas que acessam os artefatos de implementação e realizam uma análise da

estrutura do código. Essas ferramentas de análise são projetadas com o propósito de

analisar algumas características específicas do código. Ainda há frameworks de análise

estática de código que permitem aos usuários construir análises de código, embora os

frameworks também focalizem contextos específicos, eles permitem aos usuários construir

análises customizadas. Algumas ferramentas destacadas:

FindBugs: é um detector de padrões de erros para Java (COLE et. al., 2006).

Utiliza uma série de heurísticas projetadas para balancear a precisão e eficiência da

análise. Uma das principais técnicas utilizadas pelo FindBugs é a comparação da sintaxe

do código com padrões de sintaxe identificados como más práticas de programação. Pode

ser estendido utilizando Java para a construção de análises customizadas.

PMD: realiza análise com base na verificação da sintaxe do código, mas não

analisa o fluxo de dados do programa (COPELAND, 2005). O PMD focaliza em

verificações de convenções de boas práticas de codificação, por exemplo, indica um bloco

de código catch vazio como erro. O PMD pode ser facilmente estendido por

programadores, que podem escrever novos padrões de erros utilizando Java ou XPath.

Soot Framework: é um framework para otimização e análise de código baseado na

sintaxe do código (VALL´EE-RAI et. al., 1999). O Soot provê quatro representações

intermediárias do bytecode Java que podem ser adotadas de acordo com os aspectos que

se deseja analisar. O Soot disponibiliza pontos de extensão que permitem aos usuários

criar análises especializadas.

Checkstyle: analisa o código fonte Java em busca de violações de convenções de

codificação com o objetivo de melhorar a legibilidade do código (BURN, 2011). O

Checkstyle também identifica outros problemas como o alto nível de acoplamento entre

Page 38: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

23

classes e o tamanho excessivo de métodos. O Checksyle provê uma interface para os

usuários escreverem as próprias regras de verificação.

A importância de análise estática de código para a abordagem proposta neste

trabalho é o suporte a extração de dependências de baixo nível de artefatos que

implementam a LPS, ou seja, do espaço da solução. A idéia é utilizar uma ferramenta de

análise estática de código para obter informações sobre a organização estrutural do

código, e dessa forma estabelecer os relacionamentos de dependência que são

imprescindíveis para a análise de impacto de mudanças em LPS.

Nesta seção apresentamos algumas ferramentas de análise de código, no entanto,

para a implementação proposta neste trabalho adotou-se a ferramenta Design Wizard que

é descrita em detalhes a seguir.

2.4.1 Design Wizard

A Design Wizard (BRUNET; GUERRERO; FIGUEIREDO, 2009) é uma API de

inspeção automática de software, na qual as informações são extraídas de artefatos de

programas Java com extensão jar ou class. Design Wizard provê uma série de métodos

que verificam a existência de determinadas propriedades estruturais do código, tais como:

a chamada de métodos, o acesso aos atributos de classe, acessos a classes, acesso a

pacotes, entre outros. Com esses métodos providos pela API é simples checar

dependências entre componentes de código Java. A Design Wizard apóia a verificação de

conformidade arquitetural de softwares, para que estes se tornem mais confiáveis.

Também auxilia o acompanhamento do desenvolvimento de software, checando

propriedades que devem ser mantidas para que não haja diferença entre a arquitetura

inicial proposta e a implementação. A Design Wizard também pode ser utilizada para

controlar a manutenção e a evolução do software, através da verificação de conformidade

da arquitetura com a implementação.

No contexto desta dissertação, a Design Wizard será utilizada para extrair

informações sobre dependências, chamadas e acesso de componentes (classes, interfaces)

presentes no código de LPS implementadas na linguagem Java. Estes dados

complementarão as informações de dependências entre artefatos do Squid Analyser

Model. A Design Wizard é a ferramenta de análise estática de código escolhida para

Page 39: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

24

implementação deste trabalho, principalmente por permitir a extração da relação de

dependências de atributos, métodos, classes e pacotes, diferenciando os tipos de

relacionamentos. Outro fator é a compatibilidade da extensão com o nosso projeto, que é

implementado em Java. A adoção da Design Wizard apenas requer incluir a biblioteca em

um projeto Java e iniciar a análise passando como argumento o caminho do projeto a ser

analisado. Enfim, a Design Wizard atende as necessidades de análise de código

requisitadas para este trabalho, apresenta uma interface de interação objetiva, e é uma

ferramenta gratuita de código-fonte aberto.

2.5 Sumário

Este capítulo apresentou os conceitos fundamentais abordados ao longo da

dissertação. Vimos que linhas de produto de software são famílias de sistemas de um

mesmo domínio que compartilham características comuns e variáveis, a abordagem de LPS

se diferencia do processo de desenvolvimento tradicional de software ao direcionar o foco do

desenvolvimento de sistemas específicos para o desenvolvimento de família de sistemas.

Nesse sentido foram apresentadas técnicas de gerências de variabilidades e algumas

ferramentas para esse contexto, tais como, GenArch, Gears e pure::variants. Em especial,

o GenArch foi apresentado com mais ênfase por ser adotada para o desenvolvimento desse

trabalho.

Outro assunto abordado foi o de evolução de software no contexto de LPS, que

apresenta algumas diferenças em relação à evolução de software no contexto de

desenvolvimento tradicional de sofware. Também foram apresentadas algumas técnicas

conhecidas que auxiliam os engenheiros de LPS a lidar com a evolução, tais como, análise

estática de código e rastreabilidade de características em LPS. No âmbito de análise

estática de código foi apresentada a ferramenta Design Wizard, uma API para análise de

código Java.

Page 40: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

25

3 Squid Analyser: Uma Infraestrutura Extensível de

Análise de Linhas de Produto de Software

Este capítulo apresenta o Squid Analyser, uma infraestrutura extensível para

análise de propriedades de implementações de LPS, uma das contribuições desta

dissertação. A Seção 3.1 apresenta uma visão geral da arquitetura da infraestrutura e seu

funcionamento. A Seção 3.2 descreve o projeto detalhado da infraestrutura apresentando

os componentes de software que a constituem. Por fim, a Seção 3.3 apresenta exemplos de

uso da infraestrutura e como pode ser instanciada para diferentes cenários.

3.1 Arquitetura Geral da Infraestrutura

A arquitetura da infraestrutura Squid Analyser está organizada em três

componentes principais: (i) o componente de extração de artefatos da LPS; (ii) o

componente de extração de dependências entre artefatos da LPS; e (iii) o componente da

análise de propriedades da LPS propriamente dita. A análise de propriedades da LPS pode

envolver a implementação de buscas sobre um modelo que armazena as informações

extraídas, denominado Squid Analyser Model (Seção 3.2.2), bem como visualizações

específicas para os resultados de tais buscas.

A Figura 5 apresenta a estrutura lógica da arquitetura com os componentes

utilizados na infraestrutura. As caixas em cor amarela representam os componentes

internos do Squid, enquanto as caixas de cor azul representam os componentes externos

utilizados pelo Squid. E as caixas de cor verde representam os componentes flexíveis

utilizados pelo Squid, ou seja, podem ser substituídos por outros componentes de acordo

com a instanciação realizada.

Page 41: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

26

Figura 5. Visão Geral da Infraestrutura.

A Figura 6 apresenta um diagrama de componentes que explicita os

relacionamentos entre os componentes da arquitetura. O componente Extrator de Artefatos

da LPS realiza o processo de extração de informações relacionadas aos artefatos da LPS,

bem como quais desses artefatos estão relacionados a similaridades e variabilidades. Em

particular, neste trabalho foi realizada uma instanciação na qual os modelos EMF gerados

pela ferramenta de derivação GenArch provêm as informações para a extração de

variabilidades da LPS. O GenArch representa a LPS em três modelos: Modelo de

Característica, Modelo de Configuração e Modelo de Arquitetura. Estes modelos foram

descritos em detalhes na Seção 2.2.1. Para esta etapa utiliza-se a API fornecida pelo EMF

para manipular, tanto os modelos do GenArch, quanto o Squid Analyser Model, e dessa

forma os dados da LPS são extraídos para o Squid Analyser Model. Este processo é

detalhado na Seção 3.2.3.

Page 42: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

27

Figura 6. Diagrama de Componentes da Infraestrutura.

Em seguida, o componente Analisador de Dependências de Código complementa

as informações relacionadas a variabilidades providas pelo processo anterior, agregando

ao Squid Analyser Model os relacionamentos de dependência entre artefatos de código.

Neste trabalho foram desenvolvidas duas instâncias deste componente baseadas em duas

ferramentas de análise estática de código, uma utilizando a API Design Wizard

(BRUNET; GUERRERO; FIGUEIREDO, 2009), e a outra utilizou a API de manipulação

de árvore sintaxe abstrata oferecida pelo Java Development Tooling (JDT) da plataforma

Eclipse. Apesar de haver duas versões do componente Analisador de Dependência de

Código, apenas uma deve ser selecionada durante a implementação de uma dada

ferramenta na infraestrutura. A motivação para desenvolver duas instâncias é apresentada

na Seção 3.2.4, assim como os detalhes de implementação de ambas.

Page 43: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

28

Após a conclusão das etapas anteriores, o Squid Analyser Model contém

informações suficientes para que o componente de Análise de propriedades da LPS possa

processá-las e obter informações relevantes para apoiar o desenvolvimento e evolução da

implementação da LPS, através da implementação de buscas e visualizações específicas.

A Seção 3.2.5 descreve em detalhes o processo de análise através da realização de buscas

e Seção 3.2.6 o desenvolvimento de visualizações de análises da LPS.

3.2 Projeto Detalhado

Esta seção detalha a implementação da infraestrutura de análise de propriedades da

LPS. A Seção 3.2.1 apresenta o núcleo da arquitetura do Squid, detalhando suas classes e

funcionamento. A Seção 3.2.2 apresenta a definição do modelo e análise do Squid adotado

para armazenar as informações de LPS. A Seção 3.2.3 apresenta a etapa de extração de

artefatos da LPS e um exemplo de sua instanciação, em seguida etapa de análise de

dependências de código é descrita na Seção 3.2.4. A Seção 3.2.5 descreve e exemplifica a

implementação de buscas sobre o Squid Analyser Model, finalmente, as visualizações de

análises são descritas na Seção 3.2.6.

3.2.1 Módulo Núcleo do Squid

A implementação do Squid focaliza uma solução flexível, onde a infraestrutura de

software permite aos usuários desenvolver seus próprios extratores, analisadores de

código, buscas e visualizadores com o objetivo de atender o contexto de aplicação

desejado pelos usuários. Esta implementação também comporta a reutilização de módulos

previamente desenvolvidos por outros usuários, permitindo assim a instanciação da

ferramenta apenas com o reuso de módulos.

A implementação flexível é baseada em pontos de extensões disponibilizados pelas

classes que implementam o núcleo do Squid. A Figura 7 apresenta um diagrama de classes

contendo as classes que compõe o núcleo da infraestrutura, e também as interfaces que

descrevem os pontos de extensão fornecidos. A classe fachada SquidAnalyserFacade é

um ponto fixo da infraestrutura e mantém referências para objetos dos tipos definidos

pelas interfaces Extractor, SourceCodeAnalyser, Query e Visualizer. Cada

interface especifica um ponto flexível, com os métodos que o usuário deve implementar

para que o Squid possa utilizá-lo, tais como, runExtractor(), runCodeAnalyser(),

Page 44: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

29

runQuery() e runVisualizer() que são os métodos de execução invocados pela

classe fachada. A interface Extractor especifica um ponto de extensão para a etapa de

extração de informações dos artefatos da LPS, como artefatos de implementação da LPS,

bem como variabilidades e similaridades da LPS, e respectivo conhecimento de

configuração. O ponto de extensão para a etapa de análise de dependência de código é

descrito pela interface SourceCodeAnalyser, a instância dessa interface deve analisar o

código fonte da LPS para obter informações de dependências entre os artefatos de

implementação. A interface Query descreve um ponto de extensão para o

desenvolvimento de buscas sobre o Squid Analyser Model, em outras palavras, onde o

usuário pode desenvolver as análises específicas sobre as informações de LPS.

Finalmente, a interface Visualizer é um ponto de extensão para a construção de

visualizadores sobre os resultados obtidos pelas buscas.

Figura 7. Diagrama de classes da infraestrutura.

A Figura 8 apresenta um diagrama de interação ilustrando o funcionamento interno

do Squid, onde é explicitada a seqüência de chamadas entre as classes durante o uso da

Page 45: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

30

ferramenta. O usuário deve fornecer as instâncias das interfaces requeridas pela classe

SquidAnalyserFacade, e implementar os métodos de execução (run) que serão

invocados pela classe fachada durante o seu funcionamento. O fluxo de execução é

iniciado com a instanciação da classe fachada onde são passados como argumentos as

instâncias das interfaces Extractor e SoucerCodeAnalyser, também é passada uma

referência para o projeto da LPS a ser analisada. Durante a etapa 2, a classe fachada

executa o extrator invocando o método runExtractor(:IProject), que deverá

retornar uma instância do Squid Analyser Model com as informações básicas da LPS

como: características, conhecimento de configuração e artefatos de implementação. Em

seguida, o analisador de código é executado na etapa 3 da seqüência, através da invocação

do método runCodeAnalyser(:Object, :AnalysisModel), que retorna o Squid

Analyser Model já contendo as dependências entre os artefatos de código. Após realizar a

análise de código, o Squid Analyser Model possui informações relevantes relacionados à

gerência de variabilidades e dependências de artefatos de código que permita realizar

buscas e análises de propriedades da LPS. Dada a sua importância, o modelo é persistido

para ser reutilizado em diferentes buscas de análise.

Figura 8. Diagrama de interação da infraestrutura.

A etapa 4 inicia com a solicitação de execução de uma busca através do método

executeQuery() fornecido pela classe fachada, o método recebe como parâmetro uma

implementação da interface Query e uma implementação da interface Visualizer. Na

Page 46: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

31

etapa 5, a classe fachada executa a busca passada como parâmetro invocando o método

runQuery() que recebe o Squid Analyser Model como parâmetro. A busca deve retornar

um objeto do tipo Object contendo uma estrutura de dados para armazenar o resultado da

busca, este objeto é o queryModel. O queryModel é definido pelo próprio desenvolver

da busca de acordo com as funcionalidades de análise de propriedades da LPS que se

deseja . Por fim, a etapa 6 é a visualização da busca, na qual a classe fachada invoca o

método runVisualizer() passando como parâmetro o resultado da busca armazenado

no queryModel. A função do Visualizer é gerar uma visualização conveniente de

propriedades da própria LPS, de forma a facilitar o seu desenvolvimento e evolução da

LPS. Vale ressaltar que a etapa 4 da sequência pode ser executada mais de uma vez,

realizando várias buscas sobre o mesmo Squid Analyser Model gerado nas etapas

anteriores.

3.2.2 Squid Analyser Model

O Squid Analyser Model (SAM) é um modelo projetado para o propósito de

armazenar as informações úteis para análise em LPS e é adotado pela infraestrutura Squid

Analyser para esse finalidade. O SAM é preenchido com as informações obtidas na etapa

de extração (Seção 3.2.3), o qual será posteriormente utilizado para realizar as buscas de

análise sobre LPS exemplificadas na Seção 3.2.5. Este modelo é organizado seguindo a

estrutura geral de um modelo generativo para LPS, tornando explícita a separação entre

espaço de problema, espaço de solução e conhecimento de configuração. A Figura 9

ilustra a organização das principais abstrações presentes no SAM bem como o

relacionamento entre as mesmas.

As entidades presentes no SAM são abstrações que representam quatro tipos de

informação associadas à modelagem de LPS, sendo elas: (i) características (Feature); (ii)

artefatos de implementação (Asset); (iii) mapeamento (Mapping); e (iv) casos de uso

(UseCase). As informações de características são relativas ao espaço do problema e

modelam as similaridades e variabilidades de uma LPS. Cada característica é expressa por

nome (name) e tipo (type) – opcional, obrigatória e alternativa – e por associações de

agrupamento (groups) e de restrição (constraints) entre características. No espaço do

problema também há a entidade casos de uso (UseCase) que identifica um caso de uso

que pode ser associado a um artefato de implementação por meio de anotações de código.

Page 47: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

32

Figura 9. Squid Analyser Model.

A entidade mapeamento (Mapping) representa o conhecimento de configuração,

responsável por associar abstrações presentes no espaço do problema com abstrações

presentes no espaço da solução. Dessa forma, o mapeamento é importante para obter

rastreabilidade dos elementos que compõem a LPS auxiliando na implementação de

análises relacionadas aos seus artefatos de realização. O mapeamento é descrito por uma

expressão booleana de características (featureExpression), que indica quais são as

características que participam do mapeamento com o artefato. Essa expressão é avaliada

por ferramentas de derivação, e de acordo com a configuração de características do

produto. A avaliação da expressão retorna o valor true se o artefato do mapeamento deve

ser incluso no produto, caso contrário a avaliação retorna o valor false.

A entidade artefato (Asset) está associada ao espaço do problema e representa

todos os artefatos que são utilizados para implementar os diferentes produtos da LPS. Um

artefato é denotado por nome (name), tipo (type) e caminho (path). Esta entidade pode

ser reusada para representar diferentes tipos de artefatos que modelam ou implementam as

características de uma LPS, tais como, pacotes, classes, métodos, atributos, bibliotecas,

arquivos de configuração, arquivos binários, documentação, etc.

Page 48: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

33

O SAM foi elaborado com a finalidade de ser o mais universal possível, podendo

ser especializado para contemplar diferentes tipos de implementações de LPSs. Neste

trabalho foi realizada uma extensão do SAM para melhor atender aspectos de projetos

desenvolvidos no paradigma de orientação a objetos com a linguagem de programação

Java, e assim obter análises focadas neste tipo de estrutura. A Figura 10 apresenta um

diagrama de classes da extensão do SAM.

Figura 10. Extensão do Squid Analyser Model.

O exemplo de extensão do SAM apresentado (Figura 10) foi projetado para

implementações de LPS em linguagens orientadas a objetos, onde um artefato (Asset)

pode ser especializado em classe (Class), método (Method), atributo (Field) ou

fragmento de código (CodePiece), e as dependências continuam sendo expressas pelo

relacionamento de dependências (depends) de artefato (Asset). Por exemplo, os

Page 49: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

34

relacionamentos de dependência de uma classe são as classes abstratas implementadas e

interfaces realizadas. As dependências de um atributo são o tipo de classe declarada,

métodos invocados na inicialização e classe na qual foi declarado. Já as dependências de

um método são expressas pelos métodos invocados, atributos acessados, classe na qual foi

declarado e classes utilizadas. Por fim, um fragmento de código pode possuir

dependências com métodos invocados, atributos acessados, método ao qual foi associado e

classes utilizadas.

3.2.3 Extração de Artefatos da LPS

A extração de artefatos da LPS consiste em obter informações relacionadas aos

diferentes tipos de artefatos que modelam e implementam a LPS, bem como quais desses

elementos representam similaridades ou variabilidades. Tais informações são usadas

posteriormente para a implementação de análises de propriedades de uma LPS. Elas

podem ser obtidas a partir de artefatos que modelam e implementam a LPS, tais como,

modelos, artefatos de implementação, anotações de código e documentação existente.

Conforme explicitado anteriormente (Figura 7), a etapa de extração é um ponto flexível da

infraestrutura que permite a instanciação de extratores específicos para importar diferentes

tipos de informação dos artefatos de modelagem e implementação da LPS. Assim, o

módulo de extração pode ser estendido com a incorporação de componentes de extração

customizados, permitindo assim melhor adequar-se aos diversos tipos de informações.

O componente de extração de artefatos é responsável pela obtenção das seguintes

informações: (i) Extração de Variabilidades: modelagem das características, incluindo os

relacionamentos de restrição entre elas; (ii) Extração de Artefatos de Implementação:

abstrações do espaço de solução, que são os artefatos de implementação da LPS; e (iii)

Extração de Conhecimento de Configuração: abstrações de conhecimento de configuração

que determinam mapeamentos de abstrações pertencentes ao espaço de problema e

solução, tais como, anotações em código (ou diretivas de compilação condicional)

indicando mapeamento de um dado artefato ou trecho de seu código com uma dada

característica obrigatória ou variável da LPS. Ao final, as informações extraídas são

armazenadas dentro do SAM (Seção 3.2.2), no caso dos artefatos de implementação ainda

haverá a etapa de análise dependências de código (Seção 3.2.4) que busca obter

informações detalhadas sobre diferentes tipos de dependência existentes entre artefatos de

código.

Page 50: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

35

A instanciação desse ponto de extensão representando a extração de artefatos da

LPS depende da fonte de origem das informações da LPS. Essas informações podem ser

extraídas de artefatos gerados por ferramentas de gerência de variabilidades e derivação

automática de produtos, tais como, GenArch, CIDE e pure::variants. As ferramentas

citadas realizam a modelagem de variabilidades podendo, portanto, serem reutilizadas

para alimentar o SAM, para isso, basta processar e importar as informações mantidas por

elas para o SAM implementando um extrator específico.

Um exemplo de instanciação do módulo de extração de artefatos foi implementado

nesta dissertação, com o objetivo de obter a modelagem de dados gerada pela ferramenta

de derivação GenArch. Conforme descrito na Seção 2.2.1, o GenArch armazena as

informações de LPS em três modelos EMF: (i) modelo de características: variabilidades

da LPS e seus relacionamentos; (ii) modelo de configuração: conhecimento de

configuração; e (iii) modelo de arquitetura: artefatos de implementação. Nossa

instanciação utilizou a plataforma de manipulação de modelos fornecida pelo EMF para

ler as informações presentes nos modelos gerados pelo GenArch e, posteriormente,

armazená-las no modelo e configuração. Graças à modelagem do GenArch e do Squid

serem baseadas na abordagem generativa para LPS, a correlação entre as entidades

presentes no SAM e as entidades presentes no modelos do GenArch pode ser facilmente

obtida.

A Figura 11 ilustra em vermelho a correspondência das características Music e

PhotoAlbum presentes no Feature Model do GenArch para o Analysis Model mantido

pelo Squid. Pode ainda ser visto em verde, a correspondência do artefato de

implementação método setMainMenu() do ArchitectureModel (GenArch) com o Analysis

Model (Squid). Por fim, pode ser visto em azul, o conhecimento de configuração

representado pelo nome do artefato “setMainMenu(SelectTypeOfMedia)” e a expressão de

características “Music and PhotoAlbum”, observa-se que a entidade Feature Expression do

Configuration Model (GenArch) é sintetizada na entidade Mapping do Analysis Model

(Squid).

Page 51: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

36

Figura 11. Transformação GenArch para Squid.

3.2.4 Analisador de Dependência de Código

A análise de dependência de código é realizada após a extração dos artefatos da

LPS para o SAM. Esta etapa tem como objetivo obter as relações de dependência entre os

artefatos que implementam a LPS, tais como, métodos invocados, classes instanciadas,

atributos acessados, classes abstratas implementadas e interfaces realizadas. Tais relações

de dependência são usadas posteriormente para promover a análise de propriedades

específicas sobre a LPS. Este processo é realizado utilizando uma ferramenta de análise

estática de código, que permita extrair as dependências entre artefatos diretamente do

código-fonte de cada componente da arquitetura. Atualmente existem vários frameworks e

ferramentas que permitem extrair informações relacionadas à análise estática de código,

Page 52: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

37

tais como, TPTP (MATZEN, 2009), PMD (COPELAND, 2005), Checkstyle (BURN,

2011), Find Bugs (COLE et. al., 2006) e SOOT (VALL´EE-RAI et. al., 1999).

Nossa abordagem permite integrar diferentes ferramentas para análise estática de

código, e nesta dissertação foram desenvolvidas duas instâncias de referência deste

módulo, ambas para análise de LPSs implementadas na linguagem Java. A primeira

instância adotou uma estratégia baseada na análise de bytecode Java, com o uso da API

Design Wizard (BRUNET; GUERRERO; FIGUEIREDO, 2009), que por sua vez foi

desenvolvida usando o framework ASM (BRUNETON, E.; LENGLET, R.; COUPAYE,

2002). Já a segunda instância implementada, seguiu uma abordagem de análise do código

fonte Java usando a árvore sintática abstrata (AST) Java fornecida pelo JDT (ECLIPSE

FOUNDATION, 2012). Detalhes destas implementações são apresentados nas Seções

3.2.4.1 e 3.2.4.2, respectivamente. A diferença essencial entre estas abordagens é que na

abordagem baseada em análise de bytecode Java é possível analisar apenas projetos

sintaticamente corretos e que apresentem o bytecode gerado. No entanto, tratando-se de

LPS nem sempre esse panorama é contemplado, as LPS podem ser constituídas por um

conjunto de artefatos que reunidos em um único projeto geram erros sintáticos, porém ao

derivar produtos, a LPS gera produtos sintaticamente corretos. Outra diferença relevante é

a granularidade da análise, usando a versão atual da Design Wizard não é possível realizar

a análise em fragmentos de código isolados que implementam determinadas variabilidades

da LPS, dessa forma não seria possível obter as dependências destas entidades ou

abstrações. Por outro lado, a implementação baseada na manipulação da AST permite a

análise estática em fragmentos de código fonte.

3.2.4.1 Implementação baseada em bytecode Java

Nesta implementação foi utilizada a API Design Wizard, que realiza uma análise

estrutural do bytecode Java, sobre a qual é possível obter informações de relacionamentos

entre artefatos de implementação, e assim, complementar o SAM com as informações de

dependência entre artefatos de implementação. A Figura 12 apresenta código fonte que

demonstra o uso da API Design Wizard para obter dependências de um método.

Page 53: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

38

Figura 12. Código do método extractMethodDependencies.

O código apresentado faz parte da classe ByteCodeAnalyser, que implementa o

ponto de extensão de análise estática de código dentro do Squid. Neste caso, o método

extractMethodDependencies() tem o objetivo de extrair as informações de dependências

de um método de classe. O método aceita dois parâmetros, o primeiro projectLocation é

uma string do caminho do projeto de implementação da LPS, enquanto o segundo

(methodTarget) é uma instância da classe MethodData do SAM, sobre o qual deseja-se

obter as dependências. Na linha 2, cria-se uma instância do analisador de código

(DesignWizard) passando o endereço do projeto onde estão os artefatos de

implementação. Na linha 4, obtêm-se uma instância do método alvo (methodInstance)

indexado pela Design Wizard, o objeto methodInstance possui todas as informações de

dependências resultantes da análise de código, basta acessá-las utilizando os métodos de

acesso disponibilizados. Na linha 6, invoca-se o método getAccessedFields() que retorna

os atributos de classe acessados pelo método alvo. Na linha 7, obtêm-se as dependências

de tipos utilizando o método getCalleeClasses(). Por fim, a linha 8 invoca o método

getCalleeMethods() que retorna todos os métodos invocados pelo método alvo. Todas as

dependências são armazenadas no SAM dentro de uma instância de MethodTarget, a qual

é retornada no final do método.

3.2.4.2 Implementação baseada na Árvore Sintática Abstrata Java

Esta implementação baseia-se na manipulação da AST do plugin JDT do Eclipse.

Tal AST é uma representação estrutural do código fonte de Java na forma de uma

estrutura de dados em árvore, onde cada nó da árvore está associado a uma entidade da

sintaxe de Java. A AST consegue representar a hierarquia e relacionamentos entre os

elementos presentes no código fonte. A Figura 13 mostra uma visualização da AST da

classe AlbumController utilizando o plugin ASTView (ECLIPSE FOUNDATION,

2012) para a plataforma Eclipse. Nesta visualização, podemos observar que a AST provê

Page 54: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

39

diversos tipos de nós dos quais podemos extrair informações úteis para análise, tais como,

pacotes (Package), classes importadas (Imports), interfaces utilizadas

(SuperInterfacesTypes), classes estendidas (SuperclassType), declaração de

métodos (MethodDeaclaration), atributos declarados (FieldDeclaration), blocos

de código (Block), nomes simples (SimpleName), comentários Javadoc (Javadoc),

entre outros. Os nós da árvore podem ser expandidos para obter mais detalhes e os nós

filhos na hierarquia.

Figura 13. Visualização da AST Java pelo plugin ASTView.

Page 55: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

40

A abordagem de análise estática de código fonte utilizando a AST é composta de

cinco atividades, que estão ilustradas no diagrama de atividades apresentado na Figura 14.

A atividade 1 consiste em selecionar uma classe presente no SAM e, em seguida, a

atividade 2 efetua o parser da classe selecionada. O parser retorna uma instância da AST

contendo todos os nós. A terceira atividade consiste em visitar a instância da árvore e

selecionar apenas os nós de tipos relevantes para a análise de dependências, tais como,

MethodDeaclaration, TypeDeclaration, FieldDeclaration, Javadoc e

SimpleName. Os nós selecionados são armazenados na SquidTree, uma estrutura de

dados do tipo árvore similar a estrutura da AST do JDT. A SquidTree foi projetada para

armazenar apenas os nós de interesse da análise de impacto de mudanças ordenando-os

hierarquicamente. A motivação principal para o uso dessa estrutura é necessidade de

expressar o nó fragmento de código que não é nativo AST do JDT, além de simplificar a

manipulação dessas informações.

Figura 14. Atividades da análise de código utilizando a AST Java.

Em seguida, a atividade 4 tem o objetivo de identificar os fragmentos de código

(CodePiece) contidos em métodos. Os fragmentos de código são envolvidos por

anotações em comentários Javadoc, o início do fragmento de código é demarcado pelo

Page 56: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

41

comentário: “/**#Feature(name="[Nome da Feature]", parent="[Nome da

Feature Pai]", type=[Tipo da Feature])*/”, e o fim é demarcado pelo

comentário “/** #endFeature */”. Os nós do tipo Javadoc incluídos na SquidTree

são analisados e os fragmentos identificados, dessa forma, o fragmento é criado e incluído

na árvore substituindo o comentário Javadoc na hierarquia. A Figura 15 apresenta o

código fonte da classe MediaController que faz parte da linha de produtos Mobile

Media [FIGUEIREDO et al, 2008], o método handleCommand(:Command) possui dois

fragmentos, um compreendido entres as linhas 13 e 23, e o outro entre as linhas 17 e 19,

nota-se que o segundo fragmento está aninhado no primeiro fragmento. Ao final da

atividade 4 a SquidTree está completa, ou seja, com todos os nós necessários para análise

de dependências da atividade 5.

Figura 15. Anotações de fragmentos de código.

A atividade 5 analisa a SquidTree identificando as dependências de classes,

métodos, atributos e fragmentos de código, para cada tipo existe uma estratégia diferente.

Para os artefatos do tipo classe, as dependências podem ser classes abstratas estendidas

(SuperclassType) ou interfaces utilizadas (SuperInterfacesTypes). No caso de

dependências de atributos, métodos e fragmentos de código adota-se uma estratégia

baseada na resolução de ligações (resolve bindings), essas ligações analisadas durante o

Page 57: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

42

parser do código e posteriormente são associadas aos nós do tipo SimpleName e um

método de acesso a essa informação é provido pela JDT. O nó do tipo SimpleName da

AST da JDT representa um nome genérico que é utilizado como uma referências para uma

entidade qualquer, que pode ser um atributo declarado, uma classe declarada ou um

método declarado. Para melhor explicar os SimpleName, a Figura 16 apresenta o código

fonte da classe NewLabelScreen do Mobile Media, em que os nomes simples estão

sublinhados de vermelho. Por exemplo, na linha 9 o nome simples cancel está ligado ao

atributo cancel declarado na linha 5, e na linha 10 o nome simples addCommand está

ligado ao método addCommand(:Command) declarado na mesma classe (não está

presente na figura). A linha 4 apresenta um caso especial, onde a primeira ocorrência do

nome simples TextField está ligada a classe TextField, porém a segunda ocorrência

está ligada ao método construtor TextField(:String, :String, :int) declarado

na classe TextField. Após a identificação das dependências entre os artefatos na

SquidTree, a atividade final da análise estática de código é exportar os relacionamentos de

dependências para o SAM, associando-os aos respectivos artefatos.

Figura 16. Código fonte com as entidades do tipo nome simples destacadas.

Nossa instanciação utilizou a API JDT fornecida pela plataforma Eclipse para

realizar o parser do código fonte e ter acesso às informações da AST Java. A Figura 17

apresenta parte do código fonte da classe ASTExplorer, que manipula as informações

retornadas pelo parser. No trecho de código apresentado o construtor da classe recebe

como parâmetro uma referência da classe a ser analisada (classCompilationUnit), e

também uma referência do projeto Java de qual a classe faz parte (iJavaProject).

Page 58: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

43

Inicialmente, o parser é criado (linha 9) passando como argumento a versão da

especificação da linguagem Java desejada no caso JLS3 (Java Language Specification 3).

Em seguida, o parser é configurado para aceitar como entrada um objeto do tipo

ICompilationUnit (linha 10), e a classe a ser analisada é passada para o parser (linha

11). Na linha 12, o parser é configurado para resolver as ligações entre os nós da árvore, e

na linha 13 o projeto Java é passado como parâmetro, para que o parser consiga resolver

ligações com entidades externas à classe a ser analisada. O parser é então executado

(linha 15) e retorna o nó raiz da AST gerada, este nó é armazenado na variável node. Em

seguida, instancia-se o visitor ASTSquidVisitor (linha 17), ao ser executado (linha 18)

o visitor seleciona o nós relevantes para análise e os inclui em uma instância da

SquidTree. Ao final, a instância da SquidTree é armazenada em um atributo da classe

(linha 10), para ser acessada posteriormente durante os processos de identificação de

fragmentos de código e de identificação de dependências.

Figura 17. Código do classe ASTExplorer do analisador estático de código.

3.2.5 Buscas de Análises de Código da LPS

Depois do preenchimento do SAM com informações sobre características, artefatos

de implementação, conhecimento de configuração e relacionamentos de dependências

entre os artefatos de implementação, podem ser implementadas buscas específicas sobre

Page 59: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

44

tal modelo de forma a avaliar alguma propriedade da LPS. As buscas de análise

representam algoritmos que acessam o SAM com a finalidade extrair informação úteis

para o desenvolvimento e evolução de uma LPS. As buscas são desenvolvidas pelos

usuários do Squid que desejam analisar aspectos e propriedades específicas de LPS, o

SAM oferece uma série de informações para esta tarefa. A implementação de buscas é

realizada por meio da extensão do ponto flexível representado pela interface Query, da

infraestrutura oferecida pelo Squid, conforme apresentado na Seção 3.2.1.

A Figura 18 apresenta o código da classe FeatureTraceability, que é um

exemplo de instanciação do ponto de extensão de buscas, que tem o objetivo de obter os

artefatos de implementação relacionados a uma dada característica. Esta classe

implementa a interface Query e declara os métodos requeridos runQuery() e

getName(). O objeto da classe SquidAnalysisModelContent (declarado na linha 4)

é utilizado para a manipulação do SAM. A classe TraceabilityQueryModel,

instanciada na linha 5, é utilizada para armazenar o resultado da busca. O atributo

featureName declarado na linha 6 contém o nome da característica a ser analisada. O

construtor (linhas 8 até 11) recebe o nome da característica e inicializa a variável

queryModel com o nome da busca obtido pela chamada do método getName(). O

método runQuey(:SquidAnalysisModel) é o método invocado pela classe fachada

(SquidAnalyseFacade) que recebe o SAM e cria uma instância da classe

SquidAnalysisModelContent. O método executeQuery() realiza a busca de

rastreabilidade (linha 19), recuperando a instância da característica no SAM utilizando o

método findFeature(:String). Em seguida, utilizando o método

findMappingsOf(:Feature) é obtido uma lista com todas as entidades de

mapeamentos associadas à característica analisada (linha 20). A interação com a lista de

mapeamentos extrai os artefatos (assets) associados e os inclui no queryModel (linhas

21-23). O método getName() (linha 25) retorna o nome da busca concatenando o nome

da classe com o nome da característica analisada. Ao final o método

runQuery(:SquidAnalysisModel) retorna o resultado obtido, que compreende todas

os artefatos que estão mapeados com a característica alvo.

Page 60: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

45

Figura 18. Código da busca FeatureTraceability.

3.2.6 Visualizações de Análise em Linha de Produto

As visualizações do Squid têm o objetivo de apresentar para os engenheiros da

LPS, os resultados de buscas realizadas através de uma interface gráfica que ressalte as

propriedades sendo analisadas da LPS. O usuário da plataforma tem a liberdade de criá-las

fazendo uso de diversas tecnologias, como por exemplo, exibir os resultados usando

representações como gráficos, modelos ou textos em arquivos. O usuário desenvolve

visualizações estendendo o ponto flexível provido pela interface Visualizer, e após

executar as buscas de análise, a classe fachada (SquidAnalyserFacade) invoca o ponto

de extensão executando a visualização.

A Figura 19 apresenta o código fonte da classe

FeatureTraceabilityVisualizer, que exemplifica a implementação de um

visualizador, neste caso a visualização consiste em salvar em um arquivo de texto o

resultado da busca FeatureTraceability, que retorna uma lista de artefatos

Page 61: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

46

associados a uma determinada característica. A Seção 3.2.5 detalhou a implementação de

tal busca. Esta classe implementa o método runVisualizer() que recebe,

respectivamente, como parâmetros: a instância do queryModel com o resultado da busca,

o nome da busca e o caminho do projeto no sistema de arquivos. Inicialmente, o arquivo

de saída é criado com o nome da busca e o caminho do projeto (linha 10) e um cabeçalho

é inserido no arquivo de texto (linha 12). Em seguida, ocorre a interação com os artefatos

listados no queryModel (linhas 13-15), para cada artefato o nome e o caminho são

escritos no arquivo (linha 14). Ao final, todos os artefatos associados à característica

analisada pela busca FeatureTraceability são listados no arquivo de saída gerado

pela visualização.

Figura 19. Código da busca FeatureTraceability.

A Figura 20 apresenta um exemplo do arquivo de gerado pela visualização

FeatureTraceabilityVisualizar como resultado da execução da busca

FeatureTraceability para a característica SMS da versão 6 do Mobile Media. O

arquivo gerado apresenta todos os artefatos mapeados com característica SMS, no entanto

a Figura 20 exibe apenas o cabeçalho e os sete primeiros artefatos.

Page 62: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

47

Figura 20. Código da busca FeatureTraceability.

3.3 Instanciação da Infraestrutura

Uma vez tendo extraído informações relacionada às abstrações do espaço de

problema, conhecimento de configuração e espaço de solução de uma LPS, e armazenado

as mesmas no SAM, a etapa seguinte da abordagem é instanciar a infraestrutura para

promover a análise de propriedades do código da LPS. De forma a contemplar tal

objetivo, ferramentas específicas de análises devem ser desenvolvidas a partir da

infraestrutura.

A instanciação de uma dada ferramenta de análise a partir da infraestrutura envolve

a implementação de novos módulos para seus pontos flexíveis ou o reuso de módulos

previamente implementados para um de seus pontos de extensão. Diferentes ferramentas

ou funcionalidades de análise de implementações de linhas de produto de software podem

Page 63: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

48

ser implementadas usando a nossa infraestrutura. A seguir apresentamos exemplos de

análises que podem ser contempladas pela nossa abordagem:

Rastrear impactos de mudança entre características, casos de uso e artefatos

de implementação. O SAM possui a entidade mapeamento que descreve os

relacionamentos entre as entidades que representam artefatos de implementação, casos de

uso e características. Através dos relacionamentos de mapeamento obtidos é possível

analisar os impactos de mudanças entre as entidades envolvidas, ou seja, podemos inferir

quais serão as entidades afetadas ao realizar alterações em alguma das entidades. Um

exemplo desse tipo de análise é o cenário em que um artefato de código implementa um

conjunto de características, neste caso o conjunto de características pode ser afetado por

modificações realizadas em artefatos que as implementam. O benefício dessa análise de

impacto de mudanças para LPS é prover informações úteis para o planejamento das

alterações a serem realizadas durante o desenvolvimento ou evolução da LPS,

promovendo o rastreamento entre seus diferentes artefatos de modelagem e

implementação.

Identificar restrições entre características por meio de relacionamentos de

artefatos de implementação. As relações de dependências entre artefatos de

implementação no espaço da solução podem gerar dependências entre entidades no espaço

de problema. Por exemplo, características que não possuem uma associação direta podem

estar correlacionadas indiretamente por meio de um relacionamento entre os artefatos que

as implementam. Devido à separação entre espaço do problema e espaço da solução, estas

dependências indiretas dificilmente serão identificadas analisando apenas uma das

abstrações, porém ao realizar consultas no SAM proposto podemos cruzar informações de

mapeamento entre abstrações dos espaços de problema e solução, e assim identificar

relacionamentos indiretos. Esta análise contribui com a descoberta de restrições entre

características, que são difíceis de identificar durante modelagem das características de

uma LPS, ou que são detectadas durante o processo de extração ou engenharia reversa de

uma LPS a partir de artefatos de implementação existentes.

Análise de inconsistências no conhecimento de configuração. O conhecimento

de configuração descreve a coligação entre espaço do problema e espaço da solução. Dada

a complexidade da sua especificação, a modelagem do conhecimento de configuração

pode conter inconsistências, tais como, mapeamentos replicados, artefatos que não

Page 64: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

49

possuem associação com características, características não associadas a algum artefato de

implementação, características que possuem implementações idênticas e outros

problemas. Conforme discutido por (TEIXEIRA; ROHIT; BORBA, 2011), em razão das

inconsistências no conhecimento de configuração, a LPS pode gerar produtos inválidos.

Especificamente, inconsistências no conhecimento de configuração podem criar conflitos

de implementação, como por exemplo, dependências não contempladas, e assim gerar

erros sintáticos que levam a produtos não compiláveis como resultado da derivação. As

inconsistências podem ser detectadas através do desenvolvimento de buscas específicas

sobre o SAM, verificando, por exemplo, mapeamentos duplicados, características ou

artefatos de implementação não mapeados. A principal contribuição desse tipo de análise

é oferecer uma análise de suporte a composição segura de produtos, que diz respeito a

derivar produtos sintaticamente ou semanticamente corretos.

3.4 Sumário

Neste capítulo foi apresentado o projeto e a implementação da infraestrutura de

software Squid Analyser, o propósito da infraestrutua proposta é servir como plataforma

para desenvolvimento de ferramentas de análise de LPS. Em linhas gerais foi detalhada a

arquitetura do Squid Analyser, apresentando e delineando os pontos de extensão

disponibilizados, especificamente, extrator de artefatos de LPS, analisador de dependência

de código, buscas de análise e visualizações de análise. Para cada ponto de extensão foi

apresentado um exemplo de implementação. Além disso, foi especificado o Squid Analyse

Model, modelo adotado pela infraestrutura para armazenar as informações de análise.

Page 65: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

50

4 Squid Impact Analyser: Uma Ferramenta para Análise de

Impacto de Mudanças

Este capítulo apresenta uma ferramenta para análise de impacto de mudanças para

Linhas de Produto de Software. A abordagem da ferramenta é fundamentada na análise de

dependências entre artefatos presentes no espaço da solução em conjunto com

informações de rastreabilidade entre variabilidades do espaço do problema e artefatos de

implementação do espaço da solução. A ferramenta proposta é nomeada Squid Impact

Analyser, e foi desenvolvida através da instanciação da infraestrutura Squid. A Seção 4.1

apresenta uma visão geral explicando o passo a passo executados pela ferramenta. A

Seção 4.2 descreve a arquitetura da ferramenta e como foi realizada a instanciação dos

pontos de extensão da infraestrutura Squid. A Seção 4.3 descreve as buscas de análise de

impacto de mudanças desenvolvidas para a ferramenta, enquanto a Seção 4.4 apresenta

visualizações de análise de impacto providas pela ferramenta.

4.1 Visão Geral do Funcionamento da Ferramenta

O objetivo da ferramenta proposta neste capítulo é estimar quais são os impactos

gerados por mudanças na implementação de artefatos de implementação de uma LPS,

durante o seu desenvolvimento ou evolução. Tais mudanças podem ser decorrentes de:

correções de erros; inserção, remoção ou modificação de funcionalidades; refatorações

para melhoria do código fonte, entre outras. Os impactos resultantes de mudanças em um

dado artefato de implementação podem ocasionar erros em outros, e dessa forma, a LPS

pode gerar produtos com erros de compilação ou semântico como o funcionamento não

adequado de determinadas características.

A ferramenta proposta é baseada na análise de diversos tipos de informações

relacionadas a uma LPS, tais como, características, conhecimento de configuração,

artefatos de implementação, restrições entre características e dependências entre artefatos

de implementação. O objetivo principal da ferramenta é utilizar informações de

relacionamentos entre entidades (características comuns e variáveis) que compõem o

espaço do problema com informações de relacionamentos entre entidades (classes,

interfaces) que compõe o espaço da solução, associando-as por meio do conhecimento de

configuração. Dessa forma, obtêm-se uma cadeia de relacionamentos entre entidades do

Page 66: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

51

espaço do problema e entidades do espaço da solução. E assim, por meio das cadeias de

relacionamento das entidades envolvidas em uma mudança, a análise de impacto de

mudanças estima quais entidades poderão ser afetadas.

A Figura 21 ilustra um exemplo de uma cadeia de relacionamentos envolvendo

entidades do espaço do problema (esquerda) e do espaço da solução (direita) da LPS

Mobile Media. A cadeia apresentada parte da característica Music e prossegue conforme a

sequência de relacionamentos, representados por setas. As setas em vermelho representam

os relacionamentos de mapeamento da característica Music com os artefatos de

implementação, em verde estão os relacionamentos de dependência que outros artefatos

possuem com os artefatos que implementam a característica Music. E por fim, em azul,

está o mapeamento das classes dependentes com características do espaço do problema.

Este exemplo simula uma análise de impacto mudanças, onde a partir da cadeia de

relacionamentos obtida é possível extrair artefatos de implementação e outras

características que podem ser afetados por mudanças na característica Music.

Figura 21. Exemplo de cadeia de relacionamentos.

A Figura 22 apresenta um diagrama de atividade com as quatro atividades que

compreendem a análise de impacto de mudanças realizada pelo Squid Impact Analyser. A

atividade 1 consiste em obter o conjunto semente da mudança . O conjunto semente da

mudança é um conjunto inicial de entidades (características e/ou artefatos de

Page 67: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

52

implementação), das quais se tem um conhecimento prévio que serão modificadas ou

afetadas pela mudança. Tal conjunto semente é usado como ponto de partida para a análise

de impacto de mudanças. O conjunto semente pode ser obtido por diferentes estratégias,

tais como, a partir da documentação do projeto de mudança (casos de uso, descrição da

arquitetura, análise de requisitos, entre outros) elaborado por um engenheiro da LPS, ou

por uma análise prévia que estima quais entidades serão afetadas pela mudança antes de

iniciar o desenvolvimento ou evolução da LPS. O conjunto semente traz apenas uma

previsão inicial das mudanças, e não uma estimativa completa que contempla todas as

entidades que são afetadas. Realizar uma estimativa completa manualmente é uma

atividade complexa que demanda tempo e um grande esforço de análise dos artefatos de

implementação. A busca por uma estimativa completa e mais precisa é justamente o

objetivo da ferramenta de análise de impacto de mudanças, que complementa o conjunto

inicial estimado.

Figura 22. Diagrama de atividades da ferramenta Squid Impact Analyser.

Page 68: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

53

Na atividade 2 da executada pela ferramenta são selecionados quais serão os tipos

de relacionamentos adotados para compor as cadeias de relacionamento. O conjunto de

relacionamentos utilizado é uma variável importante para a análise de impacto de

mudanças, pois interfere no tamanho das cadeias de relacionamento afetando a precisão e

a cobertura da análise. Exemplos de tipos de relacionamentos que podem ser explorados

pela estratégia da ferramenta são: hierarquia de características, interação entre

características (inclusão ou exclusão), dependências entre artefatos de implementação,

hierarquia de artefatos de implementação e mapeamento entre características e artefatos de

implementação.

A atividade 3 tem como objetivo obter as cadeias de relacionamentos que serão

utilizadas posteriormente para extrair as entidades estimadas durante a análise de impacto

de mudanças. As cadeias de relacionamento podem ser representadas por estruturas de

dados que interligam as entidades que compõem a LPS. As relações entre entidades que

podem ser exploradas são justamente aquelas selecionadas na atividade 2. A geração das

cadeias de relacionamento é uma tarefa sistemática, que se inicia obtendo os

relacionamentos das sementes e sucessivamente a análise prossegue obtendo os

relacionamentos subseqüentes. A profundidade dos relacionamentos representa a distância

entre dois elementos em um grafo. Na Figura 23, por exemplo, a distância entre os

vértices A e E é dois, enquanto a distância entre B e D é um. Para este contexto a

profundidade é aplicável aos relacionamentos de dependência, o nível de profundidade

pode afetar o tamanho das cadeias de relacionamento, interferindo na precisão e cobertura

da análise.

Figura 23. Exemplo de grafo.

Page 69: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

54

A atividade 4 compreende a seleção de quais entidades inclusas nas cadeias de

relacionamentos farão parte do Conjunto de Impacto Estimado pela análise. Os critérios

de seleção variam conforme os objetivos da análise. A Figura 21 ilustra, por exemplo, que

se o objetivo for obter os impactos em características geradas por dependências em

artefatos de implementação, o resultado será as características PhotoAlbum e

CopyMedia. Nossa ferramenta gera, portanto, como resultado final, o Conjunto de

Impacto Estimado contendo as entidades - características e artefatos de implementação -

que possivelmente serão afetadas por mudanças no Conjunto Semente.

A ferramenta especificada nesta seção foi elaborada com objetivo de oferecer

diretrizes para uma ferramenta de análise de impacto de mudanças. Não é viável

implementá-la sem o uso de técnicas automatizadas de extração e análise, pois em

aplicações reais o volume e a variedade de informações necessárias para a análise é

elevado, o que demanda tempo e esforço. Nesta dissertação, a ferramenta foi

implementada utilizando a infraestrutura Squid (Capítulo 3) e, dessa forma, propõe-se

uma ferramenta para análise de impacto de mudanças apresentada na seção a seguir.

4.2 Arquitetura

A ferramenta Squid Impact Analyser tem a finalidade de auxiliar os engenheiros de

LPS durante atividades de evolução, apresentando previamente os impactos provocados

por mudanças planejadas, e seu escopo de aplicação compreende as LPS implementadas

usando a linguagem Java de programação orientada a objetos. A ferramenta foi

desenvolvida com base na infraestrutura de software Squid Analyser, e utiliza os modelos

de característica, configuração e arquitetura gerados pela ferramenta de derivação

GenArch como fonte de informações da LPS.

A infraestrutura Squid Analyser foi adotada como base para a ferramenta, pois

apresenta uma infraestrutura flexível e capaz de satisfazer os requisitos necessários para a

ferramenta proposta. Especificamente, o ponto de extensão para extração automática de

informações de artefatos da LPS permite a extração de características, conhecimento de

configuração e artefatos de implementação. Do mesmo modo, o ponto de extensão para

análise estática de código proporciona a obtenção de relacionamentos de dependência

entre artefatos de implementação. Finalmente, o SAM disponibilizado pela infraestrutura

Page 70: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

55

organiza e disponibiliza as informações necessárias para análise. O algoritmo de análise

pode ser implementado no ponto de extensão de buscas de análise, acessando as

informações contidas no SAM através da API de manipulação gerada pelo EMF.

A Figura 24 ilustra a instanciação da ferramenta Squid Impact Analyser a partir da

infraestrutura Squid. O ponto de extensão de extrator é realizado pelo componente

GenArchExtractor, um extrator que extrai informações de artefatos de LPS

provenientes dos modelos gerados pela ferramenta de derivação GenArch. O componente

JavaASTAnalyser realiza o ponto de extensão de análise estática de código. Ele analisa

a árvore sintática abstrata do código fonte para obter os relacionamentos de dependência.

Dessa forma, para a implementação da ferramenta foi promovido o reuso das

instanciações de referência dos pontos de extensão extrator e analisador estático de código

(versão utilizando a AST Java) que foram detalhados, respectivamente, nas seções 3.2.3 e

3.2.4.2. Além disso, também foi adotado o SAM estendido para LPSs desenvolvidas com

linguagens orientadas a objetos, que foi apresentado pela Seção 3.2.2.

Figura 24. Diagrama de componentes de instanciação da infraestrutura.

Com o reuso dos componentes GenArchExtractor e JavaASTAnalyser, o

esforço para a instanciação da ferramenta foi reduzido para o desenvolvimento das buscas

e visualizações. Nesse sentido, a implementação das buscas é a parte mais relevante para a

implementação da ferramenta de análise de impacto de mudanças proposta, pois ela

contempla a estratégia da ferramenta, enquanto os outros módulos oferecem o suporte à

extração de informações requeridas para análise e visualização.

Page 71: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

56

A Figura 25 apresenta um diagrama de atividades que sintetiza o passo a passo da

execução da ferramenta Squid Impact Analyser seguindo o fluxo de execução da

infraestrutura Squid. O fluxo de execução tem início com a seleção da LPS alvo da análise

(atividade 1). Em seguida, é realizada extração das informações de artefatos da LPS alvo

(atividade 2), executando o componente GenArchExtractor e obtendo as

características, conhecimento de configuração e artefatos de implementação (classes,

métodos, atributos e fragmentos de código). Posteriormente, é realizada a análise estática

de código fonte (atividade 3), na qual as dependências são extraídas dos artefatos de

implementação e o SAM é complementado com estas informações.

Figura 25. Atividades da ferramenta Squid Impact Anayser.

Neste ponto do fluxo de atividades, o SAM está completo e contém todas as

informações necessárias para a ferramenta proposta. Assim, as buscas por impacto de

mudanças, implementadas de acordo com a estratégia descr ita neste capítulo, podem ser

executadas. A atividade 4 consiste em selecionar quais serão as entidades que constituem

o Conjunto Semente que alimentará as buscas de análise. Já a atividade 5 executa as

Page 72: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

57

buscas de análise de impacto de mudanças propriamente ditas. Finalmente, a atividade 6

recebe o Conjunto de Impacto Estimado e gera a visualização do resultado da análise

realizada. As implementações das buscas de análise de impacto de mudanças e das

visualizações de análise são detalhadas nas seções a seguir.

4.3 Buscas de Análise de Impacto de Mudanças

Nesta seção são apresentadas quatro buscas de análise de impacto de mudanças que

foram desenvolvidas para demonstrar a instanciação da ferramenta proposta utilizando a

infraestrutura Squid.

4.3.1 Busca de Impactos de Remoção de Características

O propósito desta busca é identificar quais serão os artefatos afetados em uma

situação de remoção de uma característica da LPS. Em determinados momentos da

evolução de uma LPS, pode ser necessário remover uma característica. Uma dada

característica pode ser removida por não atender mais uma necessidade dos usuários, ou a

LPS está sob um processo de redefinição do seu escopo ocasionando a sua reestruturação

em outras LPSs.

O processo para remover uma característica de uma LPS e corrigir os impactos

causados por essa remoção é iniciado com a identificação dos artefatos que são exclusivos

da característica (mapeados apenas com a característica alvo) e deverão ser removidos.

Em seguida, deve-se identificar os artefatos compartilhados com outras características,

que também poderão sofrer impactos, e dessa forma será necessário verificar a

necessidade de modificações afim de evitar problemas com as características associadas

aos mesmos. Outro caso são os artefatos que dependem dos artefatos exclusivos, ou seja,

que estão mapeados diretamente com a característica a ser removida. Tais artefatos

deverão também ser rastreados e verificados, pois seguramente apresentarão problemas

decorrentes da remoção dos artefatos exclusivos, prejudicando o funcionamento de outras

características associadas a eles.

A busca de análise de impacto para remoção de características recebe como

semente uma string com o nome da característica alvo da remoção. A busca retorna como

resultado: a lista de artefatos exclusivos da característica alvo, a lista de artefatos

Page 73: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

58

compartilhados com a característica alvo, a lista de artefatos dependentes dos artefatos

exclusivos e a lista de outras características que podem ter seu funcionamento prejudicado

pela remoção da característica alvo. A Figura 26 apresenta o método

runQuery(AnalysisModel) da classe ImpactOfRemovingFeature que implementa

uma busca e realiza a análise de impacto de remoção de características.

Figura 26. Trecho de código fonte da classe ImpactOfRemovingFeature.

A seguir é descrito o algoritmo da busca de remoção de características conforme o

código fonte apresentado:

1. Linha 6: é criada uma instância da classe SquidAnalysisModelHandler ,

que será utilizada para a manipulação do SAM. A instância é iniciada com a

referência do SAM recebido como parâmetro.

Page 74: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

59

2. Linha 7: obtém-se a referência da característica alvo no SAM, utilizando o

método findFeature(String). O nome da característica foi recebido no

construtor da classe ImpactOfRemovingFeature que está oculto.

3. Linha 14: utiliza-se o método findMappingOf(Feature) para recuperar a

lista de mapeamentos associados a característica alvo.

4. Linhas 16 até 17: são selecionados da lista de mapeamentos, os artefatos que

estão mapeados exclusivamente com a característica alvo, estes serão salvos na

variável exclusiveAssets.

5. Linhas 18 até 19: selecionar da lista de mapeamentos os artefatos que são

compartilhados com outras características e salvá-los na variável

sharedAssets.

6. Linhas 24 até 26: para cada artefato da lista exclusiveAssets, obter os

artefatos que dependem destes utilizando método

getAssetsDependenciesOf(Asset) e salvá-los na variável

dependentAssets.

7. Linhas 28 até 31: Para cada artefato dependente contido na lista

dependentAssets , obter quais as características estão associadas a ele e

incluí-las na variável affectedFeatures.

8. Linha 33: é criado o objeto result da classe RemoveFeatureQueryModel,

que foi projetada para armazenar os resultado da análise de remoção de

característica.

9. Linha 36: ao fim, a análise retorna o objeto result, posteriormente este objeto

será utilizado pelo visualizador para gerar a visualização da análise.

4.3.2 Busca de Impacto de Mudanças de Características em

Profundidade.

O objetivo da busca de impacto de mudanças de características por profundidade é

prever os impactos de mudanças em uma determinada característica, o parâmetro

profundidade delimita até quantos níveis a busca vai avançar no grafo de dependências de

artefatos de implementação. Muitas vezes durante a evolução de uma LPS, uma

determinada característica precisa ser modificada podendo haver a necessidade de

refatorar o seu código. Exemplos que podem motivar este tipo de mudança são:

Page 75: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

60

manutenções para ajustes na lógica de negócio ou no desempenho, erros durante a

execução da característica, erro na geração de produtos com a característica, entre outros.

Para realizar modificações em características, como os casos citados anteriormente,

é preciso saber quais são os artefatos que implementam a característica a ser alterada,

quais outros artefatos que dependem dos artefatos que a implementam, quais as

características que podem ser afetadas pela mudança na característica alvo. A busca de

impactos de mudanças de características recebe como Conjunto Semente o nome da

característica a ser modificada. A busca deve retornar os artefatos de implementação que

serão impactados, e também as características que poderão ser afetadas por uma mudança

na implementação da característica alvo. Esta busca permitirá ao engenheiro da LPS ter

um panorama geral em termos de impactos causados por mudanças na característica alvo,

e assim poder planejar uma estratégia de mudança contando com estas informações. A

seguir é apresentada uma síntese das etapas realizadas nesta busca:

1. Utilizando as informações de conhecimento de configuração, obter artefatos

que implementam a característica alvo e incluí-los na lista de impactos.

2. Para os artefatos de implementação inclusos no passo anterior, procurar as

dependências dos mesmos fazendo uso de uma estratégia recursiva para buscas

de profundidade em grafos. A profundidade é um parâmetro informado pelo

usuário ao criar a busca.

3. Obter outras características que compartilham os artefatos que implementam a

característica alvo e adicioná-los na lista de impactos.

4. Por meio da entidade constraint do SAM, procurar as características que

possuem restrição de inclusão com a característica alvo e incluí-las como

impacto.

5. Incluir como impacto as características que possuam o mesmo pai na hierarquia

da árvore de características.

6. Para cada característica do passo anterior incluir os artefatos mapeados na lista

de impacto de mudança.

7. Ao final, os impactos estimados são armazenados em um objeto apropriado

para essas informações. Depois este objeto será utilizado na etapa de

visualização.

Page 76: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

61

4.3.3 Busca de Impacto de Mudança de Artefatos em Profundidade.

A finalidade da busca de impacto de mudanças de artefatos em profundidade é

estimar quais serão os artefatos e características que serão afetados por mudanças em um

determinado artefato de implementação. A profundidade delimita até quantos níveis a

busca vai avançar no grafo de dependências de artefatos de implementação.

Modificações em artefatos de implementação são atividades corriqueiras na

manutenção e evolução de uma LPS. Exemplos de cenários que levam à modificação de

artefatos de implementação são: correção de erros, adequações às regras arquiteturais,

atualização de tecnologias, entre outros. Essas modificações devem ser realizadas com o

devido cuidado para não inserir erros em outros artefatos de implementação da LPS, para

isso o desenvolvedor deve estar ciente de tudo que será afetado em decorrência da

modificação que realizará. No contexto de LPS, este tipo de modificação pode ter o

agravante do desenvolvedor estar imerso no espaço do solução (artefatos de

implementação) e ter dificuldade de associar às mudanças aos seus respectivos impactos

no espaço de problema (características). Para modificar um artefato de implementação, o

desenvolvedor dever estar ciente tanto dos outros artefatos de implementação que podem

sofrer impactos, quanto das características que podem ser afetadas. Dessa forma, poderá

avaliar estratégias de implementação evitando gerar erros na LPS. A seguir é apresentado

o conjunto de passos executados pela busca de impacto de mudanças em artefatos de

implementação:

1. Buscar artefatos de implementação que dependem do artefato alvo e incluí-los

na lista de impactos estimados. Essa consulta utiliza uma estratégia recursiva

para buscas de profundidade em grafos. A profundidade é um parâmetro

informado pelo usuário ao criar a busca.

2. Consultar as informações de conhecimento de configuração a fim de obter

características associadas ao artefato alvo e aos artefatos obtidos no passo 1.

3. Para cada característica mapeada ao artefato alvo, obter: características que

possuam o mesmo pai na hierarquia, características filhas e características que

possuam o relacionamento de inclusão. Em seguida, incluir tais informações na

lista de impacto.

Page 77: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

62

4. Para cada característica encontrada no passo anterior, incluir na lista de impacto

os artefatos mapeados a elas.

5. Finalmente, salvar a lista de impactos estimados em um objeto que será

retornado como resultado.

4.3.4 Busca de Impacto de Mudanças de Tipo de Característica de

Obrigatória para Opcional

O propósito dessa busca é estimar os impacto gerados por uma mudança no tipo de

uma característica, especificamente neste caso, o tipo alterna de característica obrigatória

para característica opcional. No decorrer da evolução de uma LPS as características

podem ter o seu tipo alterado, neste caso os artefatos que a implementam podem passar a

ser opcionais. Isso significa que todos os artefatos de implementação obrigatórios que o

utilizam (invocam um de seus métodos, por exemplo) devem ser também modificados no

caso em que a característica opcional que determina a inclusão de tal artefato não seja

incluída na derivação de um determinado produto. Dessa forma, os trechos de código onde

esses artefatos (que agora são opcionais) são utilizados, precisarão ser tratados,

possivelmente com a inserção de pontos de variação.

A busca de mudanças de tipo de característica de obrigatória para opcional deve

retornar os artefatos de implementação que estão diretamente ligados à característica

modificada. Uma parcela destes artefatos de implementação deverão ser modificados para

se tornar pontos de variação. De forma discriminada, deverá retornar os artefatos

compartilhados com características obrigatórias, pois estes artefatos serão analisados

separadamente e possivelmente não serão flexibilizados como ponto de variação. A busca

também deve retornar os artefatos que utilizam diretamente os artefatos associados à

característica modificada, parte destes artefatos poderá ter pontos de variação inclusos.

Além disso, as características associadas aos artefatos que dependem dos artefatos que

implementam a característica alvo também serão considerados impactos, pois pode ser

necessário atualizar as restrições com a característica alvo. A seguir é apresentado um

resumo do algoritmo da busca:

1. Utilizando as informações de conhecimento de configuração, buscar e incluir

na lista de impacto estimado todos os artefatos de implementação que estão

mapeados na característica alvo.

Page 78: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

63

2. Para cada artefato do passo anterior procurar os artefatos que possuem

dependência dos mesmos, e incluí-los na lista de impactos.

3. Para cada artefato obtido no passo anterior analisar o conhecimento de

configuração a fim de obter as características mapeadas.

4. Armazenar em um objeto os impactos estimados, descriminando-os em:

artefatos que implementam a característica alvo, artefatos compartilhados com

características do tipo obrigatória, artefatos dependentes e características

afetadas.

5. Retornar o objeto com o resultado da análise.

4.4 Visualizações de Análise de Impacto de Mudanças

Uma funcionalidade de visualização de impacto de mudanças foi elaborada com o

intuito de expor os resultados das buscas de impacto de mudanças apresentadas na Seção

4.3. Além, disso, ela também exemplifica o desenvolvimento de pontos de extensão de

visualizações da infraestrutura de análise Squid. Esta seção apresenta a implementação da

visualização ImpactVisualizerModel, que consiste em um modelo desenvolvido com o

plugin EMF para a plataforma Eclipse. A visualização propriamente dita é desempenhada

pelo visualizador de modelos gerado pelo EMF.

A Figura 27 apresenta o diagrama de classe do modelo de visualização de

impactos. O ImpactVisualizerModel é utilizado pela classe ImpactVisualizer para

exportar os resultados da análise de impactos e assim poderão ser visualizados pelos

usuários por meio do visualizador do modelo. Em uma visualização pode haver um ou

vários conjuntos de resultados (ResultSet), estes conjuntos têm a finalidade de

subdividir os resultados em categorias, que podem ser nomeadas pelo atributo name. Os

conjuntos de resultados podem conter entidades presentes no SAM, especificamente,

características (Feature), conhecimento de configuração (Mapping) e artefatos de

implementação (Asset).

Page 79: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

64

Figura 27. Diagrama de classe do modelo de visualização de impactos.

A Figura 28 apresenta o código fonte da classe RemovingFeatureVisualizer.

Tal classe realiza o ponto de extensão de visualização da infraestrutura Squid. Esta

visualização foi projetada para a busca de impacto de remoção de características explicada

na Seção 4.3.1. Em resumo, a classe RemovingFeatureVisualizer recebe como

parâmetro o objeto RemovingFeatureQueryModel e, em seguida, transcreve as

informações de tal modelo para uma instância do modelo de visualização de impactos

(linhas 11-32). Finalmente, o modelo é salvo em um arquivo do modelo

ImpactVisualizerModel (linha 37).

Page 80: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

65

Figura 28. Código fonte da visualização de impacto de mudanças.

A Figura 29 apresenta a visualização do modelo gerado, onde podemos ver o

resultado subdividido em quatro conjuntos de resultados (ResultSet), seguido pela

quantidade de entidades contidas no conjunto, especificamente: artefatos exclusivos,

artefatos dependentes, artefatos compartilhados e artefatos afetados. Observa-se que os

conjuntos presentes neste modelo estão alinhado com a busca de remoção de

características (ImpactOfRemovingFeature) apresentada na Seção 4.3.1 e com código

da visualização RemovingFeatureVisualizer apresentado na Figura 28.

Page 81: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

66

Figura 29. Vizualização do modelo de impacto de mudanças.

4.5 Sumário

Neste capítulo foi apresentado o projeto de implementação da ferramenta Squid

Impact Analyser que oferece suporte para análise de impacto de mudanças para Linhas de

Produto de Software. A implementação da ferramenta foi apresentada através da

instanciação da infraestrutura de software Squid Analyser para o desenvolvimento da

ferramenta. Além disso, fazendo o uso de diagramas de atividades UML, também foi

explicada a estratégia de análise de impacto de mudanças provida pela ferramenta. Para

finalizar foram apresentadas as implementações de buscas e visualizações desenvolvidas.

Page 82: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

67

5 Avaliação do Squid Impact Analyser

Este capítulo apresenta a avaliação da ferramenta de análise de impacto de

mudanças, o Squid Impact Analyser. De forma a atingir tal objetivo, foram realizados

diversos experimentos de análise de mudanças dentro de cenários de evolução de uma

linha de produto de software. Os experimentos de avaliação buscam sempre comparar os

artefatos impactados retornados pela ferramenta com os artefatos reais modificados dentro

de um dado cenário de evolução. A avaliação proposta procura responder a seguinte

questão de pesquisa:

“Qual a influência do uso simultâneo de informações de mapeamento de

características e informações de dependência entre artefatos de

implementação para a análise de impacto de mudanças em LPS?”

A Seção 5.1 apresenta as métricas utilizadas para comparar a análise de impacto de

mudança no contexto dos experimentos. A Seção 5.2 apresenta a LPS Mobile Media que

foi adotada na nossa avaliação. As Seções 5.3 e 5.4 apresentam os experimentos

realizados.

5.1 Métricas para Avaliação da Análise de Impacto de Mudanças

De forma a permitir a comparação dos resultados da análise de impacto providos

pela ferramenta Squid Impact Analyser com o impacto real nos artefatos durante a

evolução de uma LPS, foi necessário organizar os dados obtidos durante a análise de

impacto de mudança. A Figura 30 apresenta a forma como os dados foram categorizados

em conjuntos para facilitar tal análise. A seguir são descritos os conjuntos obtidos como

resultado da análise de impacto de mudança.

Page 83: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

68

Figura 30. Categorização dos artefatos na análise de impacto de mudanças.

Conjunto de Sementes (CS): é um conjunto inicial de artefatos impactados

(classes, métodos, atributos e fragmentos de código), este conjunto é utilizado como ponto

de partida para a análise de impacto de mudanças.

Conjunto de Impacto Real (CIR): contém todos os artefatos que sofreram

mudanças na evolução. Neste trabalho, o CIR é obtido com uma abordagem semi-

automática, na qual é utilizada uma ferramenta de comparação de código fonte para obter

as diferenças textuais entre artefatos de código. No entanto, é necessária a inspeção

manual do código para verificar quais mudanças apontadas pela ferramenta são relevantes.

Por exemplo, mudanças em comentários ou nome de identificadores não são inseridas no

CIR, enquanto mudanças estruturais são consideradas no CIR.

Conjunto de Impacto Estimado (CIE): é composto pelos artefatos que a

ferramenta de análise de impacto de mudanças estimou como sendo impactados em um

dado cenário de evolução. A estimativa da ferramenta é realizada a partir de informações

de entrada, neste caso o Conjunto Semente, e utilizam-se estratégias para análise de

impacto de mudanças para calcular os artefatos possivelmente afetados.

Conjunto Falso-Positivo (CFP): são os artefatos que foram estimados pela

ferramenta de análise de impacto de mudanças, porém não foram afetados na evolução. Os

Page 84: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

69

artefatos falso-positivos pertencem ao CIE, porém não pertencem ao CIR, ou seja,

representam as estimativas equivocadas.

Conjunto Falso-Negativo (CFN): consiste no conjunto de artefatos que sofreram

mudanças na evolução, entretanto não foram estimados pela análise de impacto de

mudanças. Os falso-positivos são artefatos que pertencem ao CIR, porém não pertencem

ao CIE.

Conjunto Intersecção (CI): compreende os artefatos que foram estimados pela

análise de impacto de mudanças e realmente foram afetados na evolução, ou seja, as

estimativas corretas. O CI é a intersecção entre o CIR com o CIE.

Para permitir a avaliação da qualidade da resposta de análise de impacto de

mudança informada pela ferramenta Squid, foram utilizadas métricas que quantificam a

precisão e cobertura dos resultados retornados pela ferramenta em comparação co m os

artefatos de fato impactados. Tais métricas foram extraídas do estudo apresentado por

[HATTORI; GUERRERO; FIGUEIREDO, 2008], no qual foi proposta a sua utilização

para o contexto de avaliação de ferramentas de análise de impactos de mudanças. A

seguir, é apresentada uma descrição de cada métrica adotada.

Métrica Cobertura: representa o quão eficaz a análise de impacto de mudanças é

em estimar os impactos reais obtendo a menor quantidade de falso-negativos possível, ou

seja, o maior número de estimativas corretas. A cobertura é calculada conforme a seguinte

fórmula: C (Cobertura) =|CI|/|CIR|. Dessa forma, em uma análise de impacto de mudança

em que o valor da métrica Cobertura é 1 equivalendo a 100%, temos que o CIE é igual ao

CI e o CFN é vazio.

Métrica Precisão: avalia o quão eficiente a análise de impacto de mudanças é em

estimar os impactos obtendo a menor quantidade possível de falso-positivos, ou seja, o

menor número de estimativas equivocadas. A precisão é calculada conforme a seguinte

fórmula: P (Precisão) = |CI|/|CIE|. Por exemplo, em uma análise de impacto cujo valor da

métrica precisão é 1 equivalendo a 100%, temos que CI = CIR e CFP é vazio.

Média Harmônica: medida que considera tanto a cobertura como precisão. A

finalidade de usar a média harmônica é relacionar em um número só a cobertura e

Page 85: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

70

precisão, para a média harmônica ser alta, ambas as medidas precisam ser altas. A média

Harmônica é calculada conforme a seguinte fórmula: Média Harmônica = (2CP)/(P+C)

Os valores obtidos como resultado do cálculo das métricas variam de 0 a 1, porém

para uma melhor interpretação esses valores foram convertidos para correspondência em

percentagem, onde o valor 0 equivale a 0% e o valor 1 equivale a 100%.

5.2 Linha de Produto Mobile Media

O Mobile Media é uma linha de produto de software para aplicações de

manipulação de mídias digitais em dispositivos móveis. Ela representa uma LPS

desenvolvida para propósitos científicos, já tendo sido utilizada em diversos estudos de

caso e experimentos de evolução de LPS [FIGUEIREDO et al, 2008] [YOUNG, 2005].

Apesar de ser uma LPS desenvolvida para propósito acadêmico, ela foi derivada a partir

de uma aplicação real [YOUNG, 2005], e foi implementada usando tecnologias e padrões

de projeto comuns dentro do seu domínio de aplicação. A Figura 31 apresenta o modelo

de características da versão 7 do Mobile Media, explicitando suas similaridades e

variabilidades. Os modelos de características das demais versões estão presentes no Anexo

I.

Figura 31. Modelo de características da versão 7 do Mobile Media.

Page 86: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

71

O Mobile Media possui oito versões, as quais, a partir deste ponto são referidas,

respectivamente, no texto como V1, V2, V3, V4, V5, V6, V7 e V8, conforme a sequência

da evolução do Mobile Media. A Tabela 1 resume as alterações realizadas a cada evolução

do Mobile Media. As versões V1 e V2 do Mobile Media não são caracterizadas como

LPS, pois ainda não possuem variabilidades. Elas representam versões do Mobile Photo,

que deu origem ao Mobile Media com a inclusão de variabilidades. Logo, na V3 é inclusa

a variabilidade Sorting, e assim o Mobile Media passa a ser uma LPS. Nossos estudos de

avaliação utilizaram as evoluções do Mobile Media das versões V3 à V7, devido a

limitações de tempo não foi possível realizar a análise para a evolução entre V7 e V8.

Tabela 1. Evoluções do Mobile Media.

Versão Variabilidades Evolução

V1 Nenhuma -

V2 Nenhuma Inclusão de tratamento de exceções

V3 Sorting Inclusão da variabilidade Sorting

V4 Sorting, Favourites Inclusão da variabilidade Favourites

V5 Sorting, Favourites,

Copy Inclusão da variabilidade Copy

V6 Sorting, Favourites,

Copy, Sms Inclusão da variabilidade Sms

V7 Sorting, Favourites,

Copy, Sms, Photo

Flexibilização da característica Photo,

que anteriormente era obrigatória.

Inclusão da variabilidade Music.

V8

Sorting, Favourites, Copy, Sms, Photo,

Video, CapturePhoto,

CaptureVideo

Inclusão das variabilidades Video,

CapturePhoto, CaptureVideo

Para cada versão do Mobile Media, há duas implementações disponíveis: (i) uma

que utiliza programação orientada a objetos em Java combinada com programação

orientada a aspectos [FILMAN et al, 2005] em AspectJ para implementar as

variabilidades; e (ii) a outra que combina programação orientada a objetos em Java com

técnicas de compilação condicional. Nossa avaliação utilizou as implementações baseadas

na abordagem de compilação condicional, pois um de nossos objetivos era avaliar as

dependências entre artefatos de implementação, incluindo os artefatos de granularidade

fina como fragmentos de código. A Tabela 2 apresenta o número artefatos existente em

cada versão do Mobile Media implementado com compilação condicional, nota-se que a

cada evolução há um aumento no número de artefatos.

Page 87: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

72

Tabela 2. Quantidade de artefatos por versão do Mobile Media.

Tipo de

Artefato V3 V4 V5 V6 V7

Classes 25 25 30 37 46

Métodos 140 159 161 202 238

Atributos 71 74 75 107 132

Fragmentos 7 13 15 24 52

Total 243 255 281 370 468

Além dos motivos citados anteriormente, como quantidade de artefatos e aceitação

da comunidade, outra importante motivação para uso do Mobile Media para a avaliação

do Squid Impact Analyser, é a quantidade de versões com código fonte e documentação

disponíveis em [MobileMedia] [KHAN et al, 2010]. Assim, temos um objeto de estudo

relevante no contexto de evolução de LPS para a avaliação da ferramenta.

Tabela 3. Resumo de mudanças de artefatos durante evoluções do Mobile Media.

Evolução ∆ Tipo de Artefato

Total Classe Método Atributo Fragmento

V3-V4

Idêntico 20 133 71 6 230

Modificado 5 7 0 1 13

Adicionado 0 3 3 6 12

Removido 0 0 0 0 0

V4-V5

Idêntico 17 129 76 13 235

Modificado 8 12 0 0 20

Adicionado 5 37 9 7 58

Removido 0 19 8 5 32

V5-V6

Idêntico 23 156 75 12 266

Modificado 7 7 0 3 17

Adicionado 7 39 32 9 87

Removido 0 0 0 0 0

V6-V7

Idêntico 22 170 100 17 309

Modificado 15 32 6 7 60

Adicionado 10 43 31 29 113

Removido 1 7 5 1 14

A Tabela 3 apresenta um resumo da quantidade de artefatos afetados entre as

versões V3 e V7 do Mobile Media. As evoluções do Mobile Media são identificadas por

um nome contendo as versões de início e fim, especificamente, V3-V4, V4-V5, V5-V6 e

V6-V7. Para cada evolução as mudanças são caracterizadas pela coluna ∆ (letra delta do

Page 88: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

73

alfabeto grego) em idêntico, modificado, adicionado ou removido, também são

discriminados os tipos de artefatos em classes, métodos, atributos e fragmentos. A coluna

total apresenta o somatório de cada variação, e assim observa-se que a quantidade de

modificações e adições tende a aumentar a cada evolução.

5.3 Experimento 1

A finalidade do primeiro experimento foi avaliar se o uso de informações

relacionadas às características e ao conhecimento de configuração de uma LPS influencia

na análise de impacto de mudanças orientada a uma estratégia que utiliza apenas

informações sobre dependências de artefatos de código. Para isso, neste experimento foi

realizada uma comparação utilizando o Squid Impact Analyser, sendo executado com duas

configurações diferentes: (i) na primeira a análise considera as informações de

características e conhecimento de configuração; enquanto (ii) na segunda configuração, a

ferramenta utiliza apenas as informações dos artefatos de implementação e suas

dependências. O algoritmo utilizado é essencialmente o mesmo para ambas as estratégias,

porém as informações de características e conhecimento de configuração presente no

modelo de análise são removidas na execução da segunda configuração da ferramenta.

Mais objetivamente, este experimento procura responder a seguinte pergunta:

“A análise de impacto de mudanças em evolução de LPS é mais eficiente ou

eficaz se utilizarmos informações de características e conhecimento de

configuração na estratégia de estimativa dos artefatos impactados?”

Para este experimento, o conjunto semente (CS) utilizado pela ferramenta é obtido

por uma seleção aleatória dos artefatos que compõe o conjunto de impacto real (CIR). A

quantidade de artefatos selecionados para o CS deve corresponder entre 5% e 15% do total

de artefatos contidos no CIR. A idéia do uso do CS como uma amostragem parte da

pressuposição que, os artefatos alterados em uma evolução, correspondem às mudanças

relativas a uma determinada característica da LPS e, portanto, possuem uma correlação

sintática ou semântica entre si. Deste modo, analisando um subconjunto do CIR é possível

obter os outros artefatos que também foram alterados.

Page 89: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

74

5.3.1 Configuração do Experimento

Para cada evolução do Mobile Media foi executado o fluxo de etapas especificado

abaixo. Após a execução do fluxo de etapas utilizando ambas as estratégias, foi possível

comparar os resultados das métricas calculadas.

1. Comparar a versão inicial com a versão final da evolução, e assim determinar o

CIR da evolução.

2. A partir dos artefatos contidos no CIR, selecionar aleatoriamente um

subconjunto entre 5-15% que serão inclusos no CS.

3. Executar a ferramenta de análise de impacto de mudanças utilizando como

entrada o CS obtido na etapa anterior. Ao final é gerado o conjunto de impacto

estimado (CIE).

4. Comparar o CIE gerado pela ferramenta com o CIR, depois categorizar cada

artefato em CI, CFP e CFN.

5. Com os conjuntos computados na etapa anterior, calcular as métricas de

cobertura, precisão e média harmônica da ferramenta de análise de impacto de

mudanças.

5.3.2 Resultados e Avaliação do Experimento

Esta seção apresenta os resultados e a avaliação do experimento. Os conjuntos CIR,

CS, CFP, CFN, CIE e CI, são apresentados em tabelas com o detalhamento da quantidade

de artefatos de cada tipo (classe, método, atributo ou fragmento) em cada evolução do

Mobile Media. Posteriormente são apresentados os resultados do cálculo das métricas

cobertura, precisão e média harmônica. Os comentários da avaliação são apresentados ao

longo da seção.

A Tabela 4 apresenta o CIR para cada evolução, nesse cálculo são considerados

como mudança os artefatos que foram modificados e os artefatos removidos de acordo

com a Tabela 3, pois esses são os tipos mudanças que a ferramenta pode identificar. Os

artefatos adicionados não são considerados no CIR, pois a adição de novos artefatos não

pode ser estimada pelas técnicas de análise implementadas, já que os mesmos não existem

na versão anterior que é aplicada a análise de impacto de mudança. Em seguida, são

Page 90: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

75

apresentadas as sementes selecionadas de cada tipo de artefato, as sementes correspondem

de 5% a 15% do total de artefatos do CIR.

Tabela 4. Conjunto de Impacto Real (CIR) e Conjunto de Sementes (CS).

Tipo de

Artefato V3-V4 V4-V5 V5-V6 V6-V7

Conjunto de

Impacto Real

Classes 5 8 7 16

Métodos 7 31 7 39

Atributos 0 8 0 11

Fragmentos 1 5 3 8

Total 13 52 17 74

Conjunto de

Sementes

Classes 1 1 1 3

Métodos 0 5 1 5

Atributos 0 1 0 2

Fragmentos 1 1 0 1

Total 2 8 2 11

A Tabela 5 apresenta os CIE para as duas estratégias avaliadas. Inicialmente, são

apresentados os resultados para a estratégia orientada a características, em seguida é

apresentada a quantidade de artefatos estimados pela estratégia não orientada a

características. Conforme a análise dos CIE apresentados nota-se que estratégia orientada

a características estimou mais artefatos que a estratégia não orientada a características.

Tabela 5. Conjunto de Impacto Estimado (CIE).

Estratégia Tipo de

Artefato V3-V4 V4-V5 V5-V6 V6-V7

Orientada a

Características

Classes 5 8 7 15

Métodos 11 36 7 53

Atributos 1 11 1 12

Fragmentos 4 8 5 14

Total 21 63 20 94

Não Orientada a

Características

Classes 5 7 6 14

Métodos 7 27 6 37

Atributos 2 8 0 9

Fragmentos 2 3 1 3

Total 16 45 13 63

Após a etapa de comparação entre o CIR com os CIE de ambas as estratégias, foi

calculado entre os artefatos estimados quais pertencem ao conjunto de falso-positivos

(CFP) e quais pertencem ao conjunto de falso-negativos (CFN). A Tabela 6 apresenta os

Page 91: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

76

falso-positivos e falso-negativos encontrados para cada estratégia, observa-se que a

análise da estratégia orientada a características tende a apresentar um número maior de

falso-positivos em relação a falso-negativos, enquanto a estratégia não orientada a

características tende a apresentar um número maior de falso-negativos em relação a falso-

positivos.

Tabela 6. Falso-Positivos e Falso-Negativos.

Estratégia Tipo de

Artefato

V3-V4 V4-V5 V5-V6 V6-V7

FP FN FP FN FP FN FP FN

Orientada a

Características

Classes 0 0 1 1 0 0 1 2

Métodos 4 0 11 6 1 1 16 2

Atributos 1 0 0 2 1 0 5 4

Fragmentos 3 0 0 1 3 1 6 0

Total 8 0 12 10 5 2 28 8

Não Orientada a

Características

Classes 0 0 1 2 0 1 1 3

Métodos 2 2 5 9 0 1 6 8

Atributos 2 0 3 3 0 0 4 6

Fragmentos 1 0 1 3 1 3 0 5

Total 5 2 10 17 1 5 11 22

A Tabela 7 apresenta o resultado final da etapa de comparação, os falso-positivos

são subtraídos dos CIE e assim é obtido o CI, que representam apenas os artefatos que

foram estimados corretamente pela estratégia. Uma observação geral a respeito dos dados

dessa tabela é o fato da estratégia orientada a características apresentar uma quantidade

maior de artefatos estimados corretamente em relação à estratégia não orientada a

características.

Depois de calcular CIE, CFN, CFP e CI para ambas estratégias é possível calcular

as métricas que foram apresentadas e descritas na Seção 5.1. A Tabela 8 apresenta o

resultado do cálculo das métricas de precisão, cobertura e média harmônica para a

estratégia orientada a características. Ao analisar a precisão e a cobertura da estratégia

orientada a características, pode ser notado que os resultados de cobertura são melhores

que os de precisão. Ao longo das evoluções a variação da cobertura se manteve entre 80%

e 100%, enquanto precisão variou entre 60% e 75%, e por fim a média harmônica fico u

entre 69% e 82%.

Page 92: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

77

Tabela 7. Conjunto Intersecção.

Estratégia Tipo de Artefato V3-V4 V4-V5 V5-V6 V6-V7

Orientada a

características

Classes 5 7 7 14

Métodos 7 25 6 37

Atributos 0 6 0 7

Fragmentos 1 4 2 8

Total 13 42 15 66

Não orientada a

características

Classes 5 6 6 13

Métodos 5 22 6 31

Atributos 0 5 0 5

Fragmentos 1 2 0 3

Total 11 35 12 52

Tabela 8. Métricas precisão, cobertura e média harmônica para Estratégia Orientada

a Características.

Métrica Tipo de Artefato V3-V4 V4-V5 V5-V6 V6-V7

Precisão

Classes 100% 87.5% 100% 93.3%

Métodos 63.9% 69.4% 85.7% 69.8%

Atributos - 54.5% - 58.3%

Fragmentos 25% 50% 40% 57.1%

Total de Artefatos 61.4% 60.7% 75% 70.2%

Cobertura

Classes 100% 87.5% 100% 87.5%

Métodos 100% 80.6% 85.7% 94.8%

Atributos - 75% - 63.6%

Fragmentos - 80% 66.7% 100%

Total 100% 80.7% 88.2% 89.1%

Média Harmônica

Classes 100.00% 87.50% 100.00% 90.31%

Métodos 77.97% 74.58% 85.70% 80.40%

Atributos - 63.13% - 60.83%

Fragmentos - 61.54% 50.01% 72.69%

Total 76.08% 69.29% 81.07% 78.53%

A Tabela 9 apresenta os resultados obtidos para análise da estratégia não orientada

a características. A precisão obtida na análise para todas as evoluções analisadas manteve-

se entre 68% e 93%, enquanto a cobertura variou entre 67% e 85%, e finalmente a média

harmônica ficou entre 75% e 80%. Percebe-se que a cobertura da estratégia não orientada

a características apresenta taxas inferiores para os artefatos de granularidade fina como

fragmentos e atributos.

Page 93: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

78

Tabela 9. Métricas precisão, cobertura e média harmônica da estratégia não orientada

a características.

Métrica Tipo de Artefato V3-V4 V4-V5 V5-V6 V6-V7

Precisão

Classes 100% 85.7% 100% 92.8%

Métodos 71.4% 81.4% 100% 83.7%

Atributos -% 62.5% - 55.5%

Fragmentos 50% 66.7% 0% 100%

Total de Artefatos 68.7% 77.7% 92.3% 82.5%

Cobertura

Classes 100% 87.5% 85.7% 81.2%

Métodos 71.4% 70.9% 85.7% 79.4%

Atributos - 62.5% - 45.4%

Fragmentos 100% 40% 0% 37.5%

Total 84.6% 67.3% 70.5% 70.2%

Média Harmônica

Classes 100.00% 86.59% 92.30% 86.61%

Métodos 71.40% 75.79% 92.30% 81.49%

Atributos - 62.5% - 49.94%

Fragmentos 66.67% 50.01% - 54.55%

Total 75.83% 72.13% 79.94% 75.85%

A Figura 32 apresenta um diagrama de barras que demonstra a comparação entre os

valores da métrica precisão para ambas as estratégias. Ao avaliar o diagrama de precisão

observa-se que a análise de impacto de mudanças da estratégia não orientada a

características obteve melhores resultados de precisão para todas as evoluções em relação

à estratégia orientada a característica. Em média, a abordagem que utiliza

simultaneamente informações de mapeamento de características e informações de

dependência entre artefatos de implementação obteve 11% a mais de precisão.

Page 94: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

79

Figura 32. Taxas da métrica precisão.

A Figura 33 apresenta um diagrama de barras que demonstra a comparação da taxa

de cobertura entres as duas estratégias. Ao avaliar o gráfico nota-se que a estratégia

orientada a características alcançou melhores resultados de cobertura para todas as

evoluções comparadas ao compararmos com a estratégia não orientada a características.

Calculando a média da diferença percentual temos que a abordagem que utiliza

simultaneamente informações de mapeamento de características e informações de

dependência entre artefatos de implementação obteve 18.5% a menos de cobertura.

Page 95: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

80

Figura 33. Taxas da métrica cobertura.

A Figura 34 apresenta um diagrama de barras que demonstra a comparação da taxa

da média harmônica obtidas por ambas as estratégias. Pode-se observar que, em geral, em

todas as evoluções analisadas a diferença da média harmônica foi reduzida, exceto para a

evolução V6-V7 na qual a estratégia orientada a características obteve um resultado

visivelmente superior. Ao calcular a média da diferença de percentual da média a

harmônica, a estratégia que utiliza simultaneamente informações de mapeamento de

características e informações de dependência entre artefatos apresenta uma vantagem de

3%.

Page 96: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

81

Figura 34. Média Harmônica.

5.4 Experimento 2

A finalidade do segundo experimento foi avaliar, no contexto de LPS, se as

informações de dependência de artefatos de implementação obtidas pela análise estática

de código afetam positivamente ou negativamente os resultados da análise de impacto de

mudanças no contexto de cenários de evoluções de remoção de característica. Abaixo é

apresentada a pergunta de pesquisa sendo explorada nesse experimento:

“A análise de impacto de mudanças para LPS utilizando, simultaneamente,

informações de mapeamento de características e informações de

dependência entre artefatos de implementação apresenta vantagens ao

estimar os impactos em uma operação de remoção de característica em

Page 97: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

82

comparação com uma estratégia que considera apenas informações de

mapeamento de características?”

Para responder a pergunta de pesquisa proposta foi realizada uma avaliação

utilizando o Squid Impact Analyser em duas configurações: (i) a primeira considerou

informações de mapeamento de características juntamente com informações de

dependência de artefatos de implementação; enquanto (ii) a segunda contou apenas com as

informações de mapeamento de características. A ferramenta será executada utilizando a

LPS Mobile Media que foi adotada para a realização do experimento. No entanto, no

conjunto de evoluções do Mobile Media, não há casos de remoção de características, para

viabilizar o experimento foi realizada uma análise invertida da sequência de evoluções. A

cada evolução em que se inclui uma característica, analisamos a regressão dessa evolução

onde temos a remoção da característica, e assim é possível simular uma mudança de

remoção de característica. Portanto as evoluções analisadas entre a versão V3 e V7 são

V4-V3, V5-V4, V6-V5 e V7-V6.

5.4.1 Configuração do Experimento

Abaixo é apresentado o fluxo de etapas para a execução do experimento, que foi

executado para cada evolução do Mobile Media. Após a execução do fluxo de etapas

utilizando ambas estratégias, foi possível comparar os resultados das métricas calculadas.

1. Comparar o código da versão inicial com a versão final da evolução, e assim

determinar o CIR da evolução.

2. Analisar a evolução a fim de identificar as características removidas e incluí-las

no CS.

3. Executar a ferramenta de análise de impacto de mudanças utilizando como

entrada o CS obtido na etapa anterior. Ao final é gerado o CIE.

4. Comparar o CIE gerado pela ferramenta com o CIR, depois categorizar cada

artefato em CI, CFP e CFN.

5. Com os conjuntos computados na etapa anterior, calcular as métricas de

cobertura, precisão e média harmônica da ferramenta de análise de impacto de

mudanças.

Page 98: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

83

5.4.2 Resultados e Avaliação do Experimento

Esta seção apresenta os resultados e a avaliação do experimento. Este experimento

focalizou a análise das evoluções de remoção de característica, neste caso o CIR é

composto dos artefatos modificados e removidos na evolução. Dado que estamos

analisando as evoluções invertidas do Mobile Media, para o CIR das evoluções inversas,

os artefatos removidos são equivalentes aos artefatos adicionados das evoluções

cronológicas. Por exemplo, conforme a Tabela 3 na evolução V4-V5 foram adicionados

78 artefatos, então a evolução inversa V5-V4 vai contabilizar a remoção de 58 artefatos. A

Tabela 10 apresenta o CIR calculado para as evoluções inversas.

Tabela 10. Conjunto de Impacto Real (CIR).

Tipo de

Artefato V4-V3 V5- V4 V6-V5 V7- V6

Conjunto de Impacto

Real

Classes 5 13 14 25

Métodos 10 49 46 75

Atributos 3 9 32 37

Fragmentos 7 7 12 36

Total 25 78 104 173

Após a execução da ferramenta passando como parâmetro as características a

serem removidas na evolução, é gerado o CIE para ambas as estratégias. A Tabela 11

apresenta o CIE para cada evolução do Mobile Media, a primeira parte da tabela apresenta

os resultados da estratégia orientada a análise de dependência de código, enquanto a

segunda parte apresenta os resultados obtidos pela estratégia não orientada à análise de

dependência de código. Nota-se que a estratégia orientada à análise de dependência de

código estimou mais artefatos para todas as evoluções.

Page 99: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

84

Tabela 11. Conjunto de Impacto Estimado (CIE).

Estratégia Tipo de

Artefato V4-V3 V5-V4 V6-V5 V7-V6

Orientada a análise de

dependência de código

Classes 5 14 15 26

Métodos 12 57 50 89

Atributos 4 14 36 44

Fragmentos 6 6 11 46

Total 27 91 112 205

Não orientada a análise de dependência de

código.

Classes 0 2 2 8

Métodos 5 35 34 57

Atributos 3 9 18 30

Fragmentos 6 2 11 23

Total 14 48 65 118

Depois de executar a ferramenta, os artefatos contidos no CIE são comparados com

o CIR e contabilizados para gerar o CFN e o CFP. A Tabela 12 apresenta o detalhamento

da quantidade de falso-positivos e falso-negativos de cada estratégia. Observa-se que a

estratégia não orientada à análise de dependência de código não gerou falso-positivos,

pois todos os artefatos estimados pela ferramenta são provenientes do mapeamento com a

característica que será removida, e consequentemente são afetados mesmo que as

mudanças sejam apenas de remoções de diretivas de compilação condicional de código.

Em relação aos falso-negativos a estratégia orientada à análise de dependência de código

obteve uma quantidade menor de artefatos.

Tabela 12. Conjunto de Falso-Positivo (CFP) e Conjunto de Falso-Negativo (CFN).

Estratégia Tipo de Artefato V4-V3 V5-V4 V6-V5 V7-V6

FP FN FP FN FP FN FP FN

Orientada a análise de

dependência

de código.

Classes 0 0 2 1 1 0 3 2

Métodos 2 0 14 6 9 5 18 4

Atributos 1 0 6 1 7 3 12 5

Fragmentos 1 2 1 2 3 4 13 3

Total 4 2 23 10 20 12 46 14

Não orientada a

análise de dependência

de código.

Classes 0 5 0 11 0 12 0 17

Métodos 0 5 0 14 0 12 0 18

Atributos 0 0 0 0 0 14 0 7

Fragmentos 0 1 0 5 0 1 0 13

Total 0 11 0 30 0 39 0 55

Page 100: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

85

O CI é apresentado na Tabela 13 e representa o conjunto de artefatos estimados

corretamente pela análise, o cálculo desse conjunto é obtido da comparação do CIR com o

CIE. No caso da estratégia não orientada à análise de dependência de código o CI é igual

ao CIE, pois não houve falso-positivos. Ao analisar e comparar os resultados de ambas

estratégias percebe-se que, apesar de apresentar mais falso-positivos, a estratégia

orientada à análise de dependência de código estimou mais artefatos corretamente.

Tabela 13. Conjunto Intersecção.

Estratégia Tipo de Artefato V4-V3 V5-V4 V6-V5 V7-V6

Orientada a análise de dependência de

código.

Classes 5 12 14 23

Métodos 10 43 41 71

Atributos 3 8 29 32

Fragmentos 5 5 8 33

Total 23 68 92 159

Não orientada a análise de

dependência de

código.

Classes 0 2 2 8

Métodos 5 35 34 57

Atributos 3 9 18 30

Fragmentos 6 2 11 23

Total 14 48 65 118

O cálculo das métricas cobertura, precisão e média harmônica são realizados sobre

os dados dos conjuntos calculados anteriormente. O método de cálculo das métricas está

descrito na Seção 5.1. A Tabela 14 apresenta os resultados das métricas cobertura,

precisão e média harmônica da estratégia orientada à análise de código. Ao avaliar os

resultados da tabela observa-se que na maioria das evoluções o resultado das três métricas

ficou acima de 74%, havendo em média uma melhor taxa de cobertura em relação a

precisão.

Page 101: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

86

Tabela 14. Métricas precisão e cobertura da estratégia orientada a análise de

dependência de código.

Métrica Tipo de Artefato V4-V3 V5-V4 V6-V5 V7-V6

Precisão

Classes 100% 85.7% 93.3% 88.4%

Métodos 83.3% 75.4% 82% 79.7%

Atributos 75% 57.1% 74.3% 72.7%

Fragmentos 83.3% 83.3% 72.7% 71.7%

Total 85.1% 74.7% 82.1% 77.5%

Cobertura

Classes 100% 92.3% 100% 92%

Métodos 100% 87.7% 89.1% 94.6%

Atributos 100% 88.9% 90.6% 86.4%

Fragmentos 71.4% 71.4% 66.7% 91.6%

Total 92% 87.1% 88.4% 91.9%

Média Harmônica

Classes 100.00% 88.88% 96.53% 90.16%

Métodos 90.89% 81.09% 85.40% 86.51%

Atributos 85.71% 69.54% 81.64% 78.96%

Fragmentos 76.89% 76.89% 69.57% 80.44%

Total 88.42% 80.42% 85.13% 84.09%

Tabela 15. Métricas precisão e cobertura da estratégia não orientada a análise de

dependência de código.

Métrica Tipo de Artefato V4-V3 V5-V4 V6-V5 V7-V6

Precisão

Classes 100% 100% 100% 100%

Métodos 100% 100% 100% 100%

Atributos 100% 100% 100% 100%

Fragmentos 100% 100% 100% 100%

Total 100% 100% 100% 100%

Cobertura

Classes 0% 15.4% 14.2% 32%

Métodos 50% 71.4% 73.9% 76%

Atributos 100% 100% 56.2% 81%

Fragmentos 85.7% 28.5% 91.6% 63.8%

Total 56% 61.5% 62.5% 68%

Média Harmônica

Classes 0.00% 26.69% 24.87% 48.48%

Métodos 66.67% 83.31% 84.99% 86.36%

Atributos 100.00% 100% 71.96% 89.5%

Fragmentos 92.30% 44.36% 95.62% 77.90%

Total 71.79% 76.16% 76.92% 80.95%

Page 102: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

87

A Tabela 15 apresenta o resultado do cálculo das métricas cobertura, precisão e

média harmônica da estratégia não orientada à análise de código, nota-se que a precisão se

manteve em 100% por não apresentar nenhum falso-positivo. Em relação à cobertura

observa-se que a estratégia não orientada a análise de dependência de código obteve um

resultado inferior ao estimar os impactos de granularidade grossa, especificamente em

artefatos do tipo classe. Isso se deve ao fato de muitas classes não estarem diretamente

mapeadas com a característica, porém seus métodos e atributos estão mapeados. Esses

relacionamentos de hierarquia não são considerados utilizando apenas a análise de

rastreabilidade de características.

Figura 35. Taxas da métrica precisão.

A Figura 35 apresenta um diagrama de barras que demonstra a taxa de precisão

para as duas estratégias. Ao compararmos as estratégias é notável que a taxa de precisão

da estratégia não orientada a análise de dependência de código ficou em 100% para todas

as evoluções. Conforme explicado anteriormente, no caso da operação de remoção de uma

característica, as informações de mapeamento entre características e artefatos sempre

Page 103: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

88

apontam artefatos que seguramente são impactados. A estratégia orientada a análise de

dependência de código apresentou uma taxa de precisão inferior, pois as estimativas

baseadas em dependências de código retornam uma parcela de falso-positvos entre os

resultados corretos.

A Figura 36 apresenta o diagrama de barras dos resultados da métrica de cobertura.

Ao analisar o gráfico nota-se que a estratégia orientada a análise de código apresentou

resultados superiores para todas as evoluções, ficando entre 87% e 92%. Enquanto para

estratégia não orientada a análise de código os resultados da métrica ficaram entre 56% e

68%. Como a estratégia orientada à análise de código também utiliza as informações de

características, a diferença da taxa de cobertura se deve aos artefatos impactados que são

obtidos por meio da análise de informações de dependência de código fonte. Em média a

estratégia que utiliza simultaneamente informações de mapeamento de características e

informações de dependência entre artefatos apresentar 27,8% a mais de cobertura.

Figura 36. Taxas da métrica cobertura.

Page 104: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

89

Finalmente, a Figura 37 apresenta um diagrama de barras que compara os

resultados da métrica média harmônica de ambas as abordagens, conforme o gráfico nota-

se que a estratégia orientada a análise de código obter melhores resultados para todas as

revoluções avaliadas. A calcular a media da diferença de percentual da média a harmônica

a estratégia que utiliza simultaneamente informações de mapeamento de características e

informações de dependência entre artefatos apresenta uma vantagem de 8%.

Figura 37. Média Harmônica.

5.5 Ameaças à Validade do Experimento

Ameaças à validade do experimento são as variáveis que podem afetar os

resultados das métricas de cobertura, precisão e média harmônica, e dessa forma influir

nas considerações a respeito dos resultados obtidos. Nosso experimentou sofreu das

seguintes ameaças:

1. O cálculo do conjunto de impacto real entre as versões da LPS é realizado

manualmente com o apoio de uma ferramenta de diff textual, o que pode

Page 105: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

90

acarretar em erros no cálculo do conjunto de impacto real devido ao fator

humano envolvido.

2. O sorteio do grupo sementes que foi utilizado na análise de impacto pode

também influenciar nos resultados obtidos, dependendo das sementes

sorteadas as métricas podem apresentar resultados variáveis. Dessa forma,

os resultados obtidos são coletados considerando um conjunto específico de

sementes. Assim, idealmente o experimento deveria considerar o sorteio

aleatório de várias sementes, fazer o cálculo de análise de impacto de

mudança para cada uma destas sementes e fazer uma análise dos valores

obtidos considerando as diferentes sementes (por exemplo, tirando uma

média dos valores obtidos para a análise de impacto de mudança).

5.6 Sumário

Neste capítulo foi apresentado um estudo de avaliação da ferramenta de análise de

impacto de mudanças proposta. Nossa avaliação utilizou implementações que refletem a

evolução da LPS Mobile Media para concepção de experimentos. Dois experimentos

foram apresentados, nos quais a ferramenta foi executada utilizando diferentes

configurações com o propósito de avaliar as estratégias de análise de impacto de

mudanças para LPS.

O primeiro experimento focalizou na análise da influência das informações de

características na análise de impacto de mudanças usadas em conjunto com informações

de dependência de código em contraposição a prover uma análise de impacto de mudança

baseada apenas nas informações de dependência. Os resultados indicaram que o uso de

informações de característica na análise de impacto de mudanças melhora a cobertura da

ferramenta, ao custo da diminuição da precisão.

O segundo experimento avaliou a influência na análise de impacto de mudanças de

informações de dependência de código em conjunto com informações de características

em contraposição a utilização apenas de informações de características. Tal estudo foi

conduzido considerando cenários de evoluções de remoção de características. Os

resultados do estudo indicaram que o uso de informações de dependência de código fonte

também melhora a cobertura da ferramenta, porém como efeito colateral, há a diminuição

da precisão da ferramenta. Em resumo, considerando a média harmônica que faz um

Page 106: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

91

calculo que leva em consideração a cobertura e a precisão, a avaliação demonstrou que o

uso combinado de informações de rastreabilidade de características com informações de

dependência de código leva a uma melhora dos resultados de análise de impacto de

mudança. Essa melhora foi mais contundente no segundo experimento.

Page 107: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

92

6 Trabalhos Relacionados

Este capítulo apresenta e confronta os trabalhos relacionados com os resultados do

trabalho proposto nesta dissertação. A Seção 6.1 discute a ferramenta AMPLE

Traceability Framework (ATF) proposta pelo consórcio AMPLE, que promove a

rastreabilidade entre artefatos de modelagem e implementação de LPS. A

Seção 6.2 apresenta a abordagem Emergent Interfaces proposta por (RIBEIRO et al.,

2011), a qual permite rastrear dependências entre características e artefatos de

implementação de compilação condicional. Finalmente, a Seção 6.3 descreve o trabalho

de (OLIVEIRA, 2011) que propõe uma abordagem para análise de impacto de mudanças

baseada em rastreabilidade.

6.1 AMPLE Traceability Framework

Um dos trabalhos relacionados ao tema desta dissertação é o AMPLE Traceability

Framework (ATF) (Anquetil et al., 2010), um framework dirigido por modelos para

rastreabilidade de artefatos. A proposta principal do ATF é oferecer suporte para

rastreamento de artefatos ao longo do ciclo de vida de desenvolvimento de LPS, através

do uso de técnicas de engenharia dirigida a modelos. O framework é flexível para permitir

adaptações para diferentes cenários de rastreabilidade em LPS.

A aplicação de técnicas de rastreabilidade de artefatos pode apresentar diversos

benefícios ao desenvolvimento de software como: (i) relacionar artefatos com as decisões

de projeto correspondentes; (ii) obter um retorno ao projetistas sobre o estado atual do

desenvolvimento; e (iii) facilitar o entendimento do projeto entre os envolvidos.

Para o contexto de LPS, os benefícios de técnicas de rastreabilidade podem ser

estendidos para suportar seus aspectos particulares, como por exemplo, identificar as

ligações entre artefatos produzidos na engenharia de domínio e engenharia de aplicação. A

análise dessas informações é fundamental para um melhor gerenciamento de

variabilidades de LPSs, auxiliando engenheiros de software a gerenciar o desenvolvimento

e a evolução dos artefatos da LPS.

O ATF foi estruturado como um framework orientado a objetos que define uma

infraestrutura de software que provê serviços de busca e armazenamento de ligações entre

Page 108: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

93

artefatos. A flexibilidade da abordagem é fundamentada em um metamodelo de

rastreabilidade de referência e em um conjunto de pontos de extensão que permite criar

funcionalidades específicas para rastreabilidade em LPS.

Internamente o framework está organizado em quatro módulos extensíveis: (i)

TraceRegister, (ii) TraceStorage, (iii) TraceQuery e (iv) TraceView. O módulo

TraceRegister fornece mecanismos para criar, atualizar, remover e buscar as ligações entre

o modelo de características e os outros artefatos, enquanto o TraceStorage define

mecanismos para persistência das ligações entre os artefatos de LPS. O módulo

TraceQuery permite criar e realizar buscas específicas por ligações armazenadas.

Finalmente, o módulo TraceView tem como finalidade especificar representações visuais

de ligações entre artefatos de uma busca. Os módulos apresentados são compostos de

classes abstratas e interfaces para que os usuários do framework possam especificar

extratores, visualizadores e buscas especiais.

O metamodelo de rastreabilidade formaliza as entidades envolvidas no processo de

rastreabilidade: TraceableArtefact, TraceableArtefactType, TraceLink, TraceLinkType e

TraceContext. A entidade TraceableArtefact representa um artefato comum e esta

associado a um tipo definido pela entidade TraceableArtefactType que especifica um tipo

de artefato e suas propriedades. TraceLink corresponde a uma abstração da relação de um

artefato com outro(s) e está associado a um tipo definido pela entidade TraceLinkType.

Por fim, a entidade TraceContext expressa a justificativa da existência de um artefato ou

de uma relação entre artefatos, esta entidade é opcional.

O ponto de extensão para criar buscas sobre as informações de rastreabilidade

possibilita a construção de análises específicas que inferem em informações relevantes

para o desenvolvimento e controle da evolução de LPS. Como por exemplo, a análise da

cobertura de requisitos por características, a análise de impacto de mudanças e o

rastreamentos de variantes por produto. No caso da análise de impacto de mudanças, é

possível especular sobre quais serão os artefatos afetados após a alteração de um artefato,

com base nas informações de ligações (links) de rastreamento com outros artefatos

mantidos pelo ATF.

Como mencionado anteriormente o ATF é um framework para rastreabilidade de

artefatos LPS, o qual possibilita realizar diversas análises relativas às informações de

Page 109: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

94

rastreabilidades, entre elas a análise de impacto de mudanças. Assim, pode-se dizer que

ATF não foi elaborado com o foco específico em análise de impacto de mudanças, mas

sim procura atender um escopo mais amplo de funcionalidades de rastreamento. Dessa

forma, por exemplo, a abordagem não prevê explicitamente a análise estática de código

com integração de ferramentas e frameworks específicos para tal fim, muito embora seja

possível usar as informações oferecidas por ela para alimentar a base de ligações de

rastreamento do ATF. Também não prevê um suporte especializado para análise da

interação entre características, este ponto é mencionado pelos autores como um possível

trabalho futuro.

Este trabalho de mestrado se diferenciar do framework ATF por apresentar uma

ferramenta de suporte a análise de impacto de mudanças, prevendo o tratamento explícito

de informações de análise estática de código e de análise de interação entre características.

Tanto a análise estática de código como a dependência entre características são usadas

para inferir o impacto de mudança de artefatos na LPS. Assim sendo, a abordagem

proposta neste trabalho está mais preparada para lidar com a análise de impacto de

mudanças em LPS que a proposta originalmente pelo ATF.

Por outro lado, a infraestrutura Squid proposta nesta dissertação tem diversos

pontos comuns com o framework ATF, já que ambos se propõem a gerenciar informações

de dependência de artefatos produzidos para uma LPS. Embora ambas as propostas

permitam o gerenciamento de informações de rastreamento entre os artefatos, a

infraestrutura Squid é orientada a análise de código de implementações de LPS em

combinação com informações de rastreamento de características, incluindo aquelas de

natureza de granularidade fina, tais como, as implementadas através de compilação

condicional.

6.2 Interfaces Emergentes

O trabalho de (Ribeiro et al., 2011) propõe uma ferramenta para oferecer suporte a

evolução de LPS implementadas utilizando técnicas de compilação condicional e a

abordagem de separação virtual de interesses (VSoC – Virtual Separation of Concerns). A

idéia principal da abordagem VSoC é reduzir a poluição no código causada pelas diretivas

de compilação condicional #ifdef e #endif. A estratégia consiste em ocultar os fragmentos

de código fonte das características sobre o qual o programador não está interessado em

Page 110: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

95

trabalhar no momento, permitindo assim concentrar-se apenas no código das

características em que se está trabalhando. Apesar da modularização de código, que busca

organizar os fragmentos com o intuito de diminuir o acoplamento entre eles, estes

fragmentos podem compartilhar componentes de código comuns como variáveis e

método, havendo uma dependência entre os fragmentos. O uso da VSoC oculta essas

dependências entre fragmentos para o desenvolvedor, ao realizar uma modificação no

código fonte de uma característica, o desenvolvedor pode gerar erros que prejudicam o

funcionamento de um fragmento que implementa outra característica. Este tipo de situação

demanda muito tempo em atividades de inspeção do código dos demais fragmentos a

procura de erros propagados. Se o problema não for detectado previamente um erro latente

poderá ocorrer para determinadas configurações de produto.

O trabalho de (RIBEIRO et al., 2011) procura atacar o problema das dependências

entre fragmentos ocultados pela VSoC com uma ferramenta de auxilio ao desenvolvedor

durante as modificações de código. A ferramenta proposta é o CIDE EI2 (CIDE +

Emergent Interfaces), ela atua oferecendo suporte ao desenvolvedor, analisando o fluxo de

dados da LPS e informando quais componentes (classes, métodos) de código de quais

características estão sofrendo impactos ao modificar o código de uma característica

específica.

O CIDE EI2 foi construído como uma extensão da ferramenta Colored Integrated

Development Environment (CIDE), que permite o gerenciamento de variabilidades

baseada na coloração de código. A ferramenta permite que programadores associem cores

aos elementos de código responsáveis pela implementação de uma dada variabilidade. Os

elementos de código são associados a nodos da AST da linguagem fonte e, internamente,

o CIDE agrega informações de características aos elementos da AST.

O CIDE EI2 utiliza o framework SOOT (VALL´EE-RAI et al., 1999) para

otimização e análise de código Java, capturando assim dependências entre elementos a

partir da AST. As informações da análise de dependências obtidas com SOOT são

cruzadas com as informações de características associadas à AST do CIDE. Dessa forma,

a ferramenta avisa ao programador quais os elementos de código de quais características

são impactados por uma mudança.

Page 111: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

96

Apesar do CIDE EI2 oferecer benefícios para rastrear dependências entre

elementos de código que implementam as características, as análises de impacto obtidas

são pouco profundas. A abordagem utiliza apenas as informações de características e

elementos de código para a análise, não permitindo verificar os impactos para outros tipos

de artefatos. A ferramenta também não permite a parametrização das análises, assim como

não oferece ao desenvolvedor uma API para construir buscas específicas. O CIDE IE2 foi

construído para um contexto específico de LPS baseadas em compilação condicional e de

apoio a abordagem VSoC.

A abordagem desta dissertação difere de CIDE IE2 ao propor uma infraestrutura de

software para análise de impacto de mudanças e não uma ferramenta de caráter específico.

A infraestrutura proposta oferece uma API para desenvolvimento de análises de impacto

de mudanças específicas, possibilitando trabalhar com diferentes tipos de informação

associadas à modelagem da LPS. Além disso, ela também permite estender o modelo de

análise para aceitar outros tipos de informação de análise e não depende da técnica

utilizada para implementar variabilidades.

6.3 Análise de Impacto Baseada em Rastreabilidade para LPS

O trabalho de (OLIVEIRA, 2011) apresenta uma abordagem para a análise de

impacto de mudanças em LPS baseada em técnicas de rastreabilidade de artefatos. Ela

também provê uma ferramenta para a abordagem proposta e uma avaliação da análise de

impacto realizada. Na abordagem proposta, as informações de rastreabilidade são

utilizadas para apoiar a análise de impacto de mudanças, através da avaliação das

implicações de mudanças que ocorrem nos sistemas de software por meio dos seus

artefatos.

Esta abordagem oferece suporte para três tipos de artefatos: diagrama de casos de

uso, modelo de características e diagrama de classes. As informações extraídas dos

artefatos são associadas a um modelo de rastreabilidade, o qual foi definido com base no

metamodelo de rastreabilidade de artefatos proposto por (SOUZA et al., 2009). São

definidos três tipos de relação: (i) satisfatibilidade – um artefato A atende os requisitos de

B, por exemplo, as relações de satisfatibilidade entre características e classes, pois as

classes devem implementar a característica expressa pela característica; (ii) dependência –

expressam que um artefato A depende do artefato B se A invoca B, ou se uma mudança

Page 112: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

97

em B reflete em A; (iii) evolução – podem acontecer entre classes, quando uma classe A

evolui para classe B. Isso implica que a classe A foi alterada para classe B durante a

evolução da LPS, geralmente ocorre entre versões diferentes da LPS.

Com base no modelo de rastreabilidade realiza-se a análise de impacto de

mudanças. A análise proposta está dividida em quatro etapas além de uma etapa final de

avaliação. A primeira etapa é “Analisar as Requisições de Mudança” na qual são

analisadas as mudanças propostas para a LPS no nível de documentação de casos de uso.

A atividade “Rastrear Potencial de Impacto” utiliza os resultados da atividade anterior

para estimar quais artefatos poderão sofrer mudanças, obtendo assim o impacto estimado.

Na atividade “Implementar Requisições de Mudança” são identificados os artefatos que

realmente são afetados pela execução das mudanças, resultando no impacto afetado. Por

fim, compara-se o impacto afetado com o impacto estimado com intuito de obter os falsos

positivos e os impactos não identificados. Após a análise de impacto de mudanças é

realizada uma avaliação dos resultados obtidos, na qual são aplicadas métricas para avaliar

se a análise de impacto foi bem sucedida ao estimar os artefatos alterados, calculando a

taxa de erro, taxa de acerto e a precisão da análise de impacto.

A ferramenta Satori foi construída para dar suporte a abordagem proposta. Ela foi

desenvolvida sob a plataforma Eclipse utilizando o EMF para extrair as informações dos

modelos de casos de uso, de classes e de características. Após a extração, o Satori exporta

as informações dos artefatos para uma instância do modelo de rastreabilidade em um

banco de dados relacional, o qual é encarregado de armazenar as informações de

rastreabilidade. A ferramenta também provê uma aplicação web para manipulação das

informações contidas no modelo de rastreabilidade, para simulação de mudanças nos

artefatos e para visualização dos resultados das métricas de avaliação.

Embora a abordagem ofereça suporte ferramental, nem todas as etapas são

automatizadas. As relações de rastreabilidades não podem ser inferidas diretamente

através dos modelos de entrada e exigem a participação dos engenheiros de domínio e de

aplicação da LPS para auxiliar nessa atividade. Essa é uma desvantagem considerável,

pois a cada evolução da LPS, essas relações de rastreabilidade precisam ser atualizadas

para que a ferramenta funcione corretamente. Dentro do contexto de LPSs de larga escala,

esta atividade pode ser muito dispendiosa.

Page 113: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

98

Por adotar modelos no quais os elementos de granularidade mais fina são as

classes, a abordagem não consegue lidar com situações onde há várias características

implementadas por uma mesma classe. Por exemplo, o Satori identifica uma mudança

realizada em uma determinada classe como impacto para todo o conjunto de

características associadas àquela classe, porém a modificação pode estar relacionada a

apenas uma das características associadas. Esse tipo de situação prejudica a precisão da

análise de impacto de mudanças inserindo muitos falsos positivos no resultado, esta

condição foi verificada no experimento apresentado.

Em relação a este trabalho de mestrado, (OLIVEIRA, 2011) realiza a análise de

impacto de mudanças apenas com base em informações de rastreabilidade de artefatos de

alto nível, não havendo nenhum tipo de análise de dependência de artefatos de código.

Conforme comentado anteriormente, o uso de tais informações de dependência de código,

pode ajudar a melhorar a previsão da análise de impacto de mudança. De forma similar a

(RIBEIRO et al., 2011), este trabalho não se preocupa em oferecer uma solução flexível

preparada para receber extensões que venham permitir aos engenheiros de LPS customizar

as estratégias de análise de impacto, de acordo com as suas necessidades.

Page 114: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

99

7 Considerações Finais

Essa dissertação envolveu o projeto e implementação de uma infraestrutura de

software para a instanciação de ferramentas de análise de implementações de linhas de

produto de software, usando como base informações relacionadas as suas variabilidades

bem como dependências entre artefatos de código. A infraestrutura oferece pontos

flexíveis que podem ser concretizados para: (i) extração de informações de características

de artefatos de modelagem e implementação de LPS; (ii) extração de dependências de

artefatos de implementação; (iii) buscas sobre um modelo de análise que agrega as

informações extraídas dos artefatos da LPS; e (iv) visualizações específicas para os

resultados das buscas. A dissertação também apresentou implementações de referência dos

pontos de extensão providos pela infraestrutura.

Como forma de instanciação da infraestrutura Squid foi desenvolvida uma

ferramenta de análise de impacto de mudanças em LPS, denominada Squid Impact

Analyser. A ferramenta propõe um conjunto de estratégias de análise de impacto de

mudanças para o contexto de LPS implementadas na linguagem Java, fazendo uso

combinado de informações de características de LPS e de dependência de artefatos de

implementação. As informações de dependência de artefatos de implementação são

obtidas através de um módulo da infraestrutura Squid que realiza análise estática de

código fonte da LPS para extrair dependência entre elementos de implementação

incluindo trechos de código anotados com compilação condicional.

Finalmente, a dissertação também apresentou uma avaliação sistemática da

ferramenta Squid Impact Analyser, através da realização de experimentos de análise de

impacto de mudança no contexto de evolução da LPS Mobile Media. Foram realizados

dois experimentos, o primeiro focalizou a avaliação da influência do uso de informações

de características na análise de impacto de mudanças em LPS, enquanto o segundo

investigou a influência simultâneo de informações de mapeamento de características e

informações de dependência entre artefatos na análise de impacto de mudanças. Para a

avaliação e análise dos resultados foram adotadas métricas para análise de impacto de

mudanças. Os resultados dos experimentos de avaliação mostraram que:

Page 115: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

100

(I). Em ambos experimentos nota-se que parte dos impactos de mudança estimados

corretamente é proveniente de informações de rastreabilidade de características,

enquanto a outra parte é proveniente de informações da análise estática de

código. Esse resultado demonstrou que o uso combinado de informações de

dependência entre artefatos de implementação e informações de mapeamento

de características nos artefatos da LPS, induzem a uma melhora da taxa de

cobertura da análise de impacto de mudanças, porém o seu efeito colateral foi

uma diminuição da taxa de precisão da análise.

(II). No caso de evolução de remoção de características de LPS, o uso de

informações de dependências contribuiu para o aumento na cobertura da análise

ao custo da redução na precisão da ferramenta.

(III). Os resultados do segundo experimento mostraram que, para o contexto da

análise de impacto de remoção de características, as informações de

rastreabilidade das características apontam artefatos que certamente sofrem

impactos de mudança para este tipo de evolução.

(IV). Os resultados da métrica média harmônica demonstram que o uso simultâneo

de informações de mapeamento de características e informações de

dependência entre artefatos na análise impacto de mudanças se reflete um

melhor resultado ao uso isolado dessas informações. A diferença pode ser

observada de forma mais contundente no experimento 2, no qual houve uma

diferença media de 8%.

7.1 Contribuições

A seguir apresentamos as contribuições diretas resultantes do desenvolvimento

deste trabalho:

(I). Projeto e implementação do Squid – uma infraestrutura de software extensível

para o desenvolvimento de ferramentas de análise de implementações de LPSs;

(II). Projeto e implementação da ferramenta Squid Impact Analyser que define

estratégias de análise de impacto de mudanças no contexto de evolução de

LPSs implementadas em Java;

(III). Avaliação das estratégias de impacto de mudança da ferramenta Squid Impact

Analyser no contexto de cenários de evolução da LPS Mobile Media, através do

Page 116: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

101

desenvolvimento de experimentos de análise da cobertura, precisão e média

harmônica de tais estratégias;

(IV). Projeto e implementação de um módulo de extração para a plataforma Squid de

informações de modelos de características, conhecimento de configuração e

artefatos de implementação da ferramenta de derivação GenArch. Assim como,

extensão do GenArch para oferecer suporte para anotações de características

em atributos, métodos e trechos de código.

(V). Projeto e implementação de dois módulos de extração de informações de

dependência de artefatos de implementação, um baseado no DesignWizard e

um baseado no JDT/Eclipse. Sendo que este último foi implementado para

extrair informações de dependência entre trechos de código em variabilidades

de granularidade fina.

(VI). Modelo de análise extensível do Squid – que pode ser estendido para prover

diferentes tipos de análise ou promover o armazenamento e interoperabilidade

de informações de características, conhecimento de configuração e

dependências de artefatos de código no contexto de ferramentas de linhas de

produto de software.

7.2 Trabalhos Futuros

A seguir são apresentados trabalhos futuros que podem ser realizados como

desdobramentos desta dissertação:

(I). Estender a ferramenta Squid Impact Analyser para levar em consideração na

sua estratégia de análise também os tipos de características (opcionais, OR-

features e alternativos);

(II). Implementar novos visualizadores para a ferramenta Squid Impact Analyser

que permitam fazer consultas interativas sobre resultados informados da busca;

(III). Realizar novos estudos experimentais com o objetivo de avaliar o Squid Impact

Analyser no contexto de evolução de outras LPSs e também comparar seus

resultados com ferramentas industriais de análise de impacto de mudança;

(IV). A infraestrutura Squid e o modelo de análise podem ser estendidos para

acrescentar a manipulação de diversos tipos de informações relacionadas aos

requisitos, arquitetura e implementação da LPS, assim ampliando o escopo de

Page 117: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

102

possibilidades de ferramentas de análise. Exemplos de análise que poderiam

ser desenvolvidas com a plataforma são: análise de impactos de mudanças em

casos de uso em LPS, rastreamento de requisitos ou componentes arquiteturais

em LPS, análises de inconsistências no conhecimento de configuração da LPS,

entre outros.

(V). Avaliar o uso do modelo de análise do Squid na interoperabilidade entre

ferramentas de modelagem de LPS. Em especial, comparar tal modelo com a

especificação da Variability Common Language (VCL) proposta recentemente

pela Object Management Group (OMG), que está sendo desenvolvida com tal

propósito;

(VI). Extensão do analisador de código fonte para incorporar outras informações de

análise como: tratamento de exceções, organização arquitetural da LPS,

anotações de casos de teste entre outros.

(VII). Realizar outros estudos experimentais (estudos de casos e experimentos

controlados) sobre a influência de outros tipos de informações de modelagem

(casos de uso, requisitos, regras de negócio entre outros) na análise de impacto

de mudanças em código-fonte.

Page 118: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

103

REFERÊNCIAS

AJILA, S.A. Change Management: Modeling Software Product Lines Evolution. In Proceedings of the

6th World Multiconference on Systemics, pp.492-497, Cybernetics and Informatics, Orlando, Florida.

2002.

AJILA, S.A.; KABA, A.B. Using traceability mechanisms to support software product line evolution.

In The 2004 IEEE International Conference on Information Reuse and Integration (IEEE IRI-2004),

pp. 157–162, November 8–10, 2004, Las Vegas, NV, USA. 2004.

ANQUETIL, N.; GRAMMEL, B.; GALVÃO, I.; NOPPEN, J.; KHAN, S.S.; ARBOLEDA, H.;

RASHID, A.; GARCIA, A. Traceability for model driven, software product line engineering. In

Proceedings of the ECMDA Traceability Workshop (ECMDA-TW), pp.77–86. Sintef, Trondheim.

2008.

ANQUETIL, N·; KULESZA, U·; MITSCHKE, R.; MOREIRA, A.; ROYER, J.C.; RUMMLER, A.;

SOUSA, A. A model-driven traceability framework for software product lines. In Software and

Systems Modeling. 2010.

ANTONIOL, G.; CANFORA, G.; CASAZZA, G.; DE LUCIA, A.; MERLO, E. Recovering

Traceability Links between Code and Documentation. In IEEE Trans. Softw. Eng., pp. 970-983. 2002.

BAYER, J.; WIDEN, T. Introducing traceability to product lines. In Fourth International Workshop on

Product Family Engineering (PFE-4), pp.399-406. 2001.

BERG, K.; BISHOP, J.; MUTHIG, D. Tracing Software Product Line Variability - From Problem to

Solution Space. In Proceedings of the South African Institute of Computer Scientists and Information

Technologists (SAICSIT), pp.111-120. 2005.

BEUCHE, D. Modeling and Building Software Product Lines with pure::variants. In SPLC, pp.358.

IEEE Computer Society. 2008.

BINKLEY, D. Source Code Analysis: A Road Map. In Proceedings of the 2007 Future of Software

Engineering (FOSE '07), pp.104-119. 2007.

BRUNET, J.; GUERRERO, D.; FIGUEIREDO, J. Design Tests: An Approach to Programmatically

Check your Code Against Design Rules. In Proceedings of the 31st International Conference on

Software Engineering (ICSE 2009), New Ideas and Emerging Results, Vancouver, Canada. 2009.

Page 119: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

104

BRUNETON, E.; LENGLET, R.; COUPAYE, T. ASM: A code manipulation tool to implement

adaptable systems. In Proceedings of Adaptable and extensible component systems. 2002.

BUDINSKY, F.; STEINBERG, D. et al. Eclipse Modeling Framework, Addison-Wesley. 2003.

BURCH, E.; KUNG, H. Modeling Software Maintenance Requests: A Case Study. In Proceedings

IEEE Int"l Conf. Software Maintenance, pp. 40-47. 1997.

BURN, O. Checkstyle. Disponível em: http://checkstyle.sourceforge.net. Acesso em: 22 de novembro

de 2011.

CHASTEK, G.; DONOHOE, P.; MCGREGOR, J. D. A Study of Product Production in Software

Product Lines. Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University. 2004.

CIRILO, E. GenArch: “Uma Ferramenta Baseada em Modelos para Derivação de Produtos de

Software”. Dissertação (Mestrado em Informática) - Pontifícia Universidade Católica do Rio de

Janeiro, Rio de Janeiro. 2008.

CLELAND-HUANG J.; BERENBACH B.; CLARK S.; SETTIMI R.; ROMANOVA E. Best practices

for automated traceability. In IEEE Comp., pp.27–35. 2007.

CLEMENTS, P.; NORTHROP, L. Software Product Lines: Practices and Patterns. Addison-Wesley,

Boston, MA, USA. pp.563. 2002.

COHEN, S., Product Line State of the Practice Report. Technical Note CMU/SEI-2002-TN-017,

Carnegie Mellon University, Software Engineering Institute. 2002

COLE, B.; HAKIM, D.; HOVEMEYER, D.; LAZARUS, R.; PUGH, W.; STEPHENS, K. Improving

your software using static analysis to find bugs. In Companion to Proceedings of OOPSLA'06, pp.673-

674. 2006.

COLYER, A. Eclipse AspectJ: Aspect-Oriented Programming with AspectJ and the Eclipse AspectJ

Development Tools, Addison-Wesley. 2004.

COPELAND, T. PMD Applied. Centennial Books, November. 2005.

CUSUMANO, M.A.; SELBY R.W. Microsoft Secrets. Simon & Schuster, New York. 1998.

CZARNECKI, K.; EISENECKER, U. W. Generative Programming: Methods, Tools, and

Applications. Boston: Addison-Wesley. 2000.

Page 120: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

105

D’ANJOU, J.; FAIRBROTHER, S.; KEHN, D. et al. The Java developer’s guide to eclipse. Addison-

Wesley. 2005.

DEELSTRA, S.; SINNEMA, M.; BOSCH, J. Product derivation in software product families; a case

study. In Journal of Systems and Software, pp. 173–194. 2005.

DHUNGANA, D.; NEUMAYER, T.; GRUENBACHER, P.; RABISER, R. Supporting the Evolution

of Product Line Architectures with Variability Model Fragments. In Proceedings of the Seventh

Working IEEE/IFIP Conference on Software Architecture (WICSA 2008), p.327-330, February 18-21.

2008.

DONOHOE, P. Software Product Lines: Experience and Research Directions. Kluwer, Dordrecht,

Netherlands. 2000.

ECLIPSE FOUNDATION. Java Development Tools. URL:

http://www.eclipse.org/jdt/ui/astview/index.php. Acesso em: 18 de março de 2012.

ECLIPSE FOUNDATION. Abstract Syntax Tree View. URL:

http://www.eclipse.org/jdt/ui/astview/index.php. Acesso em: 18 de março de 2012.

ERNST, M.D. Static and dynamic analysis: synergy and duality. In Proceedings of WODA’2003

(ICSE Workshop on Dynamic Analysis), Portland. 2003.

FIGUEIREDO, E. et al. Evolving software product lines with aspects: an empirical study on design

stability. In Proceedings of the 30th International Conference on Software engineering, May 10-18,

Leipzig, Germany. 2008.

FILMAN, R. et al. Aspect-Oriented Software Development. Addison-Wesley. 2005.

GODFREY, M.W.; GERMAN, D.M.; The past, present, and future of software evolution. In 24th Intl.

Conf. Software Maintenance. 2008.

GOTEL, O.C.Z.; FINKELSTEIN A.C.W. An analysis of the requirements traceability problem. In

Proceedings of the 1st Int. Conference on Requirements Engineering (ICRE), pp.94–101, Colorado

Springs. 1994.

HAASE, A.; VÖLTER, M.; EFFTINGE, S.; KOLB, B. Introduction to openArchitectureWare 4.1.2.

In Model-Driven Development Tool Implementers Forum (co-located with TOOLS 2007). 2007.

Page 121: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

106

HATTORI, L.; GUERRERO, D.; FIGUEIREDO, J. On the Precision and Accuracy of Impact

Analysis Techniques. In Proceedings of the 7th IEEE International Conference on Computer and

Information Science. Washington, DC, USA: IEEE Computer Society, 2008.

HAYES, J.H., DEKHTYAR A., OSBORNE J. Improving Requirements Tracing via Information

Retrieval. In Proceedings of the 11th IEEE International Requirements Engineering Conference,

Monterey. 2003.

JIRAPANTHONG, W.; ZISMAN, A. Supporting Product Line Development through Traceability. In

Proceedings of the 12th Asia-Pacific Software Engineering Conference (APSEC 2005),Taiwan. 2005.

KANG, K.; COHEN, S.; HESS J.; NOWAK W.; PETERSON S. Feature-Oriented Domain Analysis

(FODA) Feasibility Study. Technical Report, CMU/SEI-90-TR-21, In Software Engineering Institute,

Carnegie Mellon University, Pittsburgh, PA, November. 1990.

KHAN, S. S. et al, “Usecases for MobileMedia Application”.

URL: http://www.comp.lancs.ac.uk/~shakilkh/MMData/docs/MMusecases.pdf. Acesso em: 3 de maio

de 2010.

KRUEGER, C. BigLever software gears and the 3-tiered SPL methodology. In Proceedings of the

Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA’07),

ACM, pp. 844–845, Montreal, Quebec, Canada. 2007.

KRUEGER, C.W. Easing the Transition to Software Mass Customization, Revised Papers from the

4th International Workshop on Software Product-Family Engineering, p.282-293. 2001.

LINDEN, F.; SCHMID, K.; ROMMES, E. Software Product Lines in Action: The Best Industrial

Practice in Product Line Engineering. Springer-Verlag New York, Inc., Secaucus, NJ, USA, 2007.

MAIA, M.C.O.; BITTENCOURT, R.A.; DE FIGUEIREDO, J.C.A.; GUERRERO, D.D.S.; The

Hybrid Technique for Object-Oriented Software Change Impact Analysis. In Software Maintenance

and Reengineering (CSMR), Madrid, Spain. 2011.

MATOS, P. Analisys of Techniques for Implementing Software Product Lines Variabilities.

Dissertação de mestrado, Universidade Federal de Pernambuco, Recife, Brasil. 2008.

MATZEN, M. Testing, Profiling and Monitoring using Eclipse with the Test & Performance Tools

Platform Project. Seminar Eclipse Technologien. 2009.

MITSCHKE, R.; EICHBERG, M. Supporting the evolution of software product lines. In Proceedings

Traceability Workshop (ECMDA-TW), pp. 87–96. 2008.

Page 122: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

107

OpenUP. OpenUP Process. URL: http://www.eclipse.org/epf/. Acesso em: 29 de novembro de 2011.

PAULK, M. C.; WEBER, C. V.; CURTIS, B.; CHRIS- SIS, M. B. The Capability Maturity Model-

Guidelines for Improving the Software Process. Addison-Wesley, Reading, MA. 1997.

PINHEIRO, F. Formal and Informal Aspects of Requirements Tracing. Position Paper In Proceedings

of 3rd Workshop on Requirements Engineering (III WER), Rio de Janeiro. 2000.

POHL, K.; BÖCKLE, G. et al. Software Product Line Engineering: Foundations, Principles and

Techniques, Springer, 2005.

PRESSMAN, R.S. Engenharia de software, 6a edição. Mcgraw Hill. 2006.

PUSSINEN, M. A Survey of Software Product-Line Evolution. Technical Report, Tampere University

of Technology. 2002.

RIEBISCH, M. Supporting evolutionary development by feature models and traceability links. In

Proceedings of the 11th International Conference on Engineering of Computer-Based Systems

(ECBS), pp. 370–377, Brno, Czech Republic, May. 2004

SCHACH, S.R.; TOMER, A. Development/Maintenance/Reuse: Software Evolution in Product Lines.

In Proceedings of the First Software Product Line Conf., pp. 437-450. 2000.

SEI - Software Engineering Institute. A framework for software product line practice, version 5.0.

Pittsburgh. Disponível em: http://www.sei.cmu.edu/productlines/frame_report/PL.essential.act.htm.

Acesso em: 29 de novembro de 2011.

SOMMERVILLE, I. Engenharia de Software. Harlow, UK, Addison-Wesley. 2007.

SOUSA, A.; KULESZA, U.; RUMMLER, A.; ANQUETIL, N.; MOREIRA, R.M.A.; AMARAL, V.;

ARAÚJO, J.A. A model-driven traceability framework to software product line development. In

Proceedings of the ECMDA Traceability Workshop (ECMDA-TW) 2008, pp. 97–109. Sintef,

Trondheim. 2008.

SOUZA, S.; ANQUETIL, N.; OLIVEIRA, K.M. A Study of the Documentation Essential to Software

Maintenance. In Proceedings of the International Conference on Design of Communication:

Documenting and Designing for Pervasive Information, pp. 68-75. 2005.

SPANOUDAKIS, G.; ZISMAN, A. Software Traceability: A Roadmap, Handbook of Software

Engineering and Knowledge Engineering, Vol. III: Recent Advancements, Chang S. K., World

Scientific Publishing. 2005.

Page 123: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

108

SVAHNBERG, M.; BOSCH, J. Characterizing evolution in product-line architectures. In Proceedings

of the 3rd International Conference on Software Engineering and Applications (IASTED). 1999.

SVAHNBERG, M.; BOSCH, J. Evolution in Software Product Lines. Journal of Software

Maintenance–Research and Practice, pp.391–422. 1999.

TEIXEIRA, L.; ROHIT G.; BORBA, P. Safe Composition of Configuration Knowledge-based

Software Product Lines. In 25th Brazilian Symposium on Software Engineering (SBES). 2011.

VALL´EE-RAI, R.; CO, P.; GAGNON, E.; HENDREN, L.; LAM, P.; SUNDARESAN, V. Soot - a

java bytecode optimization framework. In Proceedings of CASCON’99. IBM Press. 1999.

YOUNG, T. Using AspectJ to Build a Software Product Line for Mobile Devices. Dissertação.

University of British Columbia, 2005.

Page 124: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

109

ANEXO I

Este anexo contém as figuras dos modelos de características a partir da versão 3 do

Mobile Media.

Figura 38. Modelo de características da versão 3 do Mobile Media.

Page 125: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

110

Figura 39. Modelo de características da versão 4 do Mobile Media.

Page 126: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

111

Figura 40. Modelo de características da versão 5 do Mobile Media.

Page 127: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

112

Figura 41. Modelo de características da versão 6 do Mobile Media.

Figura 42. Modelo de características da versão 7 do Mobile Media.

Page 128: SQUID IMPACT ANALYSER: UMA FERRAMENTA PARA ANÁLISE … · de métricas de cobertura, precisão e média harmônica nos resultados de buscas de análise de impacto de mudança da

113

Figura 43. Modelo de características da versão 8 do Mobile Media.