23
1

1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz [email protected] Filipe Motta [email protected]

Embed Size (px)

Citation preview

Page 2: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

2

Reuso Estratégico com Linhas de Produtos de SW

Implementação de linha de produto no

SW Memoranda

Carla [email protected] [email protected]é Antô[email protected]

Page 3: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

3

Resumo Parte 1

• Memoranda: ferramenta, “open-source” e multi-plataforma que tem o objetivo de gerenciar a programação de projetos pessoais.

• Variação identificada: Funcionalidade de Notas

• Técnicas usadas: Conditional Compilation Properties file Aspects Subtype Polymorphism

Page 4: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

4

Modelo de Features

Page 5: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

5

Features mais importantes

• Notes Mecanismo:

• Compilação Condicional e Aspectos.

• Event Creation Mecanismo:

• Compilação Condicional. Nova variação:

• Criação de Full Event.

• Idioma Mecanismo:

• Arquivo de Propriedades. Nova variação:

• Idioma português.

Page 6: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

6

Extrações: FLIP

• Primeira abordagem Projeto com a técnica de compilação condicional. Extrair aspectos com o FLIP. Funcionalidade Add FLIP Nature não funcionou corretamente.

• Segunda abordagem Criar novo projeto de tipo FLIP. Extraír a feature da interface gráfica:

WorkPanel.java AppFrame.java PreferencesDialog.java

Page 7: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

7

Restruturação

• Refactorings: Nas aplicações que trabalham com Swing, em muitos

casos a ordem não é importante e essa característica foi aproveitada para fazer alguns refactorings.• Exemplo:

• O código não podía ser removido com aspectos então foi colocado no final do método para usar o extractor After Execution.

Page 8: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

8

Restruturação

• Refactorings: Foram acrescentados/alterados vários métodos para

darem suporte a novas variações implementadas em novos pontos de variações. Segue abaixo alguns exemplos de codigos acrescentados e alterados:

Page 9: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

9

Dificuldades

• Ferramenta FLIP: Instalação do plug-in Trechos de código que não podiam ser removidos com aspectos e

não podia ser feito um refactoring porque a ordem era importante.• Exemplos:

Page 10: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

10

Dificuldades

• Ferramenta FLIP (cont): Foi determinado que a ordem de extração dos elementos é

importante.• Ex: o seguinte trecho de código não podia ser extraído:

porque a propriedade JMenuEdit já tinha sido removida ao aspecto:

• Mudando a ordem de extração o código foi extraído sem problemas. Dificuldade em extrair os aspectos a partir de um projeto já criado e

alterado, mesmo utilizando a opção Add/Remove Feature Nature

• Ferramenta CCFinder: Instalação da ferramenta

Page 11: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

11

Detecção de Clones: CCFinder

• Abordagem: Divisão das classes do projeto em grupos:

• Classes de Negócio

• Classes de UI

• Classes de UTIL

Default minimum code length: 60Default minimum TKS (size of token set): 14

Default minimum code length: 70Default minimum TKS (size of token set): 14

Default minimum code length: 50Default minimum TKS (size of token set): 12

Page 12: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

12

Detecção de Clones: CCFinder

• Projeto completo

Page 13: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

13

Detecção de Clones: CCFinder

• Classes de NegócioEventsManagerNotesListImpl

NotesListImpl

Page 14: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

14

Detecção de Clones: CCFinder Código duplicado entre EventsManager.java e

NoteListImpl.java

Page 15: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

15

Detecção de Clones: CCFinder Código duplicado dentro da classe NotesListImpl.java

Page 16: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

16

Detecção de Clones: CCFinder

• Classes de UI

EventDialogPreferencesDialog

EventsPanelTaskPanel

Page 17: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

17

Detecção de Clones: CCFinder Código duplicado entre as classes EventsPanel.java e

TaskPanel.java

Page 18: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

18

Detecção de Clones: CCFinder

• Classes de UTIL

AppList

Page 19: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

19

Detecção de Clones: CCFinder Código duplicado dentro da classe AppList.java

Page 20: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

20

Atividades: Tempo

Atividade Técnica Tempo

Identificação de features 3 horas

Desenho do modelo de features

1 hora

Identificação de clones e análise

4 horas

Extração da feature Notas FLiP 6 horas

Inclusão do ponto de variação (Novo idioma)

Manualmente ½ hora

Adição da variação Events CC 4 horas

Reestruturação dos pontos de variação

--

Montagem do configuration knowledge

--

Page 21: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

21

Conclusões

• O FLIP é mais útil quando a variação é mais homogênea. A variação de Notas está espalhada pelo código.

• Foi complicado usar a ferramenta FLIP e podemos

concluir que neste caso não é recomendável seu uso.

• Foi menos complicado extrair os aspectos manualmente (como foi feito na primeira parte do projeto).

Page 22: 1. 2 Reuso Estratégico com Linhas de Produtos de SW Implementação de linha de produto no SW Memoranda Carla Ruiz cvrc@cin.ufpe.br Filipe Motta famb@cin.ufpe.br

22

Conclusões

• Acrescentar novos pontos de variações e suas consequentes variações exige bem mais trabalho que acrescentar uma nova variação em um ponto já existente.