Você está na página 1de 41

FeatureIDE

LU CA S D E OL IVE IR A AM OR I M
LU CA S R IB E IR O  R AG G I
NE LS ON G OM ES N ETO
WAG N ER D A SILVA FO NT ES
Agenda
• FOSD;
• Introdução a FeatureIDE;
• FeatureIDE: ferramentas de auxílio a FOSD;
• FeatureIDE: Live Demo.
FOSD
DE SE NVO LV IME NTO DE S OF T WA R E O R IE NTAD O A F EAT UR E S
Desenvolvimento de software orientado a
features (FOSD)
• FOSD pode ser usado para planejar e implementar SPLs;
• Fases do FOSD:
• Análise de domínio;
• Implementação de domínio;
• Análise de requisitos;
• Geração de software.
Modelagem e configuração de feature
• Nem todas combinações de features levam a softwares úteis;
• Modelo de features define combinação valida de features;
• Modelos de features podem ser representadas como diagramas de features;

• Configuração é um subconjunto de todas as features definidas no modelo;


Técnica de implementação de SPL
• Principal objetivo
• Prover mapeamento entre features e código-fonte.

• Quatro implementações principais


• Feature-oriented programming;
• Delta-oriented programming;
• Aspect-oriented programming;
• Preprocessors.
Feature-oriented programming
• Proposto como uma extensão à orientação a objetos;
• Classes são decompostas em módulos de features;
• Um módulo de feature pode conter métodos ou campos de diversas
classes;
• Módulos de feature podem ser compostos para formar um programa.
Feature-oriented
programming

Caso a feature Wonderful


seja escolhida:
>>Hello_wonderful_world
Delta-oriented
programming

Caso a feature Wondeful


seja escolhida:
>>Hello_wonderful_world
Feature-oriented Delta-oriented
Aspect-oriented
programming
and
Preprocessors

Caso a feature Wondeful


seja escolhida:
Aspect-oriented Preprocessors >>Hello_wonderful_world
FeatureIDE
IN TR O DU ÇÃO AO U S O DA FE AT U RE ID E PAR A AUX Í LI O AO FO SD
FeatureIDE
• Framework de código aberto do Eclipse para o desenvolvimento de
software orientado a recursos;
• Suporte a várias técnicas de implementação do FOSD;
• Suporte a todas as fases do FOSD;
• Foco em cobrir todo o processo de desenvolvimento e incorporar
ferramentas para a implementação de SPL's;
ANÁLISE DE DOMÍNIO
F ER R AM EN TAS PAR A ANÁ LIS E D E D OM ÍNI O
Editor gráfico
• Na FeatureIDE, podemos construir um modelo graficamente usando o
editor;
• Como modelos podem mudar muito com o passar do tempo, é
permitido mover features, incluindo as subfeatures, para uma nova
feature pai;
• Modelos são armazenados em XML, que apresenta vantagens
• Editar textualmente, caso o usuário não goste do editor gráfico;
• Interpretação facilitada para outros programas que queiram usar os modelos.

• Permite exportar e importar modelos em formatos comuns, por


exemplo, GUIDSL.
Editor Gráfico
Permite construir modelos de
features
Editor de restrições
• A FeatureIDE permite criar restrições além das possíveis diretamente
na árvore (chamadas de cross-tree constraints);
• Para isso, temos o editor de restrições, que pode validar diversas
expressões. Algumas das verificações feitas:
• Desbalanceamento de chaves;
• Features que nunca serão utilizadas, devido às restrições;
• Restrições impossíveis de serem satisfeitas;
• Restrições redundantes;
• Tautologias;
• Contradições.
Editor de
restrições
Permite adicionar restrições além
daquelas possíveis no modelo
ANÁLISE DE REQUISITOS
F ER R AM EN TAS PAR A ANÁ LIS E D E R E QU IS ITOS
Editor de configurações
• O usuário pode marcar as features necessárias para o requisito
e salvar a escolha em um arquivo de configuração;
• Na FeatureIDE, podemos usar o editor de configurações para realizar
a análise de requisitos;
• O editor utiliza o modelo de features da análise de domínio como
entrada e disponibiliza as configurações disponíveis;
• Múltiplas configurações podem ser criadas;
• Deve-se marcar uma como ativa,  que será usada pela FeatureIDE na
composição e compilação do código.
Editor de configurações
• O editor ajuda os desenvolvedores a criar somente configurações
válidas;
• Baseado nas restrições criadas na análise de domínio, o editor de
configurações pode dizer se uma configuração é válida em um dado
momento;
• Somente configurações compatíveis com o modelo são dadas. Por
exemplo, uma feature obrigatória não pode ser eliminada;
• Features cuja seleção ou eliminação torna uma configuração inválida
em uma válida são marcadas com uma cor diferente, ajudando o
usuário na criação de configurações válidas.
Impossível selecionar, pois somente uma pode ser
marcada na alternativa

Por serem features obrigatórias, não é possível desmarcá-las

Editor de
configurações
Ajuda o desenvolvedor a criar
configurações válidas
Implementação de domínio
F ER R AM EN TAS PAR A IM PL EM ENTAÇ ÃO D E D OM ÍNI O
Mapeamento
• Com as features obtidas a partir da análise de domínio, o usuário
pode realizar a implementação desse domínio;
• A implementação de domínio trata da implementação dos sistemas
de softwares desejados com um mapeamento entre artefatos e
features;
• O mapeamento é necessário para gerar um software baseado na
seleção de features, de forma automática;
• O mapeamento pode ser feito de várias formas, e quem determina
isso é a técnica de implementação SPL.
Mapeamento
• A FeatureIDE suporta várias ferramentas de implementação SPL:
FeatureHouse
• Dentre as várias ferramentas, focaremos na FeatureHouse;
• Uma das ferramentas com maior suporte às funcionalidades da
FeatureIDE:
• Realçamento de sintaxe;
• Assistente de conteúdo para features;
• Tela de resumo para features;
• Resumo da FeatureIDE;
• Diagrama de colaboração;
• Propagação de erro.

• Infelizmente, não suporta verificação de erros on-the-fly;


Tela de resumo e Resumo da FeatureIDE
• Quem já usou o eclipse antes, conhece a tela de resumo (outline view);
• Tela que mostra um resumo geral da classe, com os métodos e atributos
disponíveis;
• Problema: A tela de resumo no FeatureHouse somente mostra membros
da feature sendo editada, por mais que existam outros membros da
mesma classe em outras features.
Tela de resumo
Note que o membro start, presente
em outras features, não aparece na
tela de resumo ou no assistente de
conteúdo
Tela de resumo e Resumo da FeatureIDE
• Solução: A FeatureIDE disponibiliza o próprio componente de
resumo, que leva em conta todos os membros de todas as features,
que facilita a navegação em geral pelo projeto;
Resumo da
FeatureIDE
Disponibiliza uma visualização de todos
os membros, assim como as features nas
quais esses estão.
O membro start, anteriormente invisível
na tela de resumo, agora torna-se visível.
Diagrama de colaboração
• Um dos métodos mais usados para visualizar mapeamentos entre
features e artefatos de código é o diagrama de colaboração;
• Basicamente, é uma tabela onde as linhas representam features e as
colunas representam classes;
• No FOSD, uma célula representa uma função, por exemplo, os
campos e métodos que aquela feature introduz a uma certa classe;
• A possibilidade de filtrar o diagrama para exibir somente
subconjuntos de classes ou features é importante para projetos
grandes.
Diagrama de colaboração
Geração de código
Geração de código
• Usando todos os recursos descritos nas etapas anteriores, sistemas de
software podem ser automaticamente gerados usando a FeatureIDE;
• O processo de build é realizado de forma usual pelo Eclipse;
• O código-fonte são compostos e compilados sempre que um dos
arquivos é atualizado;
• Para manter a compatibilidade com outras ferramentas de
desenvolvimento da linguagem sendo usada, a FeatureIDE compõe os
arquivos em uma pasta separada;
• Tal pasta é usada como ponto de entrada para o compilador.
Propagação de erro
• Trata da habilidade de localizar a linha que causou um erro de
compilação nos arquivos de código-fonte;
• Em primeira-mão, só temos a linha do código gerado em que o erro
foi causado;
• Entretanto, o número dessa linha quase sempre não bate com a linha
do código-fonte;
• O FeatureHouse foi extendido para suportar propagação de erro na
FeatureIDE.
Erros de
compilação
Na direita, temos os erros de
compilação criados pelo JDT no código
gerado.
Na esquerda, o erro propagado para o
código-fonte original.
Geração e compilação de todos os produtos
• Na FeatureIDE, todos os códigos-fonte são gerados e compilados em
plano de fundo para apenas uma configuração em particular;
• Mas, outras configurações válidas podem conter erros de compilação;
• Duas opções para visualizar esses erros:
• O usuário pode ativar a geração e compilação automática de código para todos
os produtos (todas as configurações válidas de dado modelo);
• Desvantagem: normalmente só funciona com SPLs pequenas, uma vez que o
número de produtos pode ser exponencial em relação ao número de features;
• O usuário pode também habilitar a geração e compilação automática de código
para todas as configurações criadas manualmente, o que ajuda a reduzir a
quantidade de produtos a serem compilados.
Integração
IN TE G R AÇÃO D E TO D AS AS FAS ES D O F O SD N A FE ATU R EI DE
Integração
• Mostramos anteriormente várias fases do FOSD em separado;
• A FeatureIDE suporta dependências entre certas fases do FOSD, além de
poder tratar cada uma em separado;
• Ao alterar o modelo de features, todas as configurações são validadas
novamente;
• Quando features são renomeadas, a mudança é propagada para as
configurações e para a implementação de domínio;
• Ao editar o modelo de features e as configurações simultaneamente, a
FeatureIDE sincroniza as alterações;
• Ao referenciar uma feature na implementação de domínio, a FeatureIDE
verifica se aquela feature de fato existe no modelo.
DEMO
B R EVE DE MO NS T RAÇ ÃO D O F UN CI ON AME NTO DA F EAT UR E ID E
OBRIGADO
FeatureIDE
LU CA S D E OL IVE IR A AM OR I M
LU CA S R IB E IR O  R AG G I
NE LS ON G OM ES N ETO
WAG N ER D A SILVA FO NT ES

Você também pode gostar