Reuso Estratégico com Linhas de Produtos de Software
Professor: Paulo Borba
Monitores: Carlos Pontual (ceplc), Fernanda d'Amorim (frsa), Leopoldo Teixeira (lmt), Márcio Ribeiro (mmr3), Rodrigo Bonifácio (rba2)
Nome oficial: Tópicos Avançados em Engenharia de Software (graduação), Tópicos Avançados em Engenharia de Software 2 (pós-graduação)
Lista de email: if722-l,
assine já! (para assuntos particulares, escreva diretamente para phmb com TAES no subject)
Cronograma
- 9/3 (12hs, na sala D-001): Apresentação da disciplina, discutir conceitos básicos de linhas de produtos de software, definir equipe e estudo de caso a ser utilizado na disciplina
- assinar lista de email da disciplina
- enviar email com nomes dos membros da equipe e estudo de caso escolhido (ver opções no final da página)
- estudar os slides da apresentação e dos conceitos básicos
- estudar Capítulos 1 e 2 do livro Software Product Line Engineering: Foundations, Principles, and Techniques, de Klaus Pohl, Günter Böckle, and Frank van der Linden
- estudar On the Design and Development of Program Families, de David Parnas, IEEE Transactions on Software Engineering, 2(1), pp. 1-9, March 1976. {pós}
- estudar Structured Programming, de Edsger W. Dijkstra. EWD 268, August 1969. {pós}
- 11/3 (12hs, na sala D-001): Discutir mecanismos para implementação de variações
- estudar os slides
- estudar, instalar e testar o pré-processador Antenna, para suporte a compilação condicional
- estudar e testar o suporte de Java (Properties) a manipulação de arquivos de propriedade (texto ou XML)
- estudar e testar o suporte de Java (Generics) a polimorfismo paramétrico
- estudar padrões de AOM {pós}
- 16/3 (12hs, na sala D-001): Discutir mais mecanismos para implementação de variações
- estudar os slides
- estudar e testar a implementação de padrões de projeto (pelo menos template method, strategy, bridge, e factories) em Design Patterns: Elements of Reusable Object-Oriented Software, de Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
- estudar artigo sobre componentes OSGi
- estudar artigo sobre dependency injection (ver explicações adicionais e código)
- estudar e testar o suporte do Eclipse (extension points) para componentes (para mais informações, estudar o capítulo 17 do livro Eclipse: Building Commercial-Quality Plug-Ins) (ver explicações adicionais e código)
- estudar e testar o suporte a geração e transformação do JaTS ou Velocity
- estudar e testar o suporte de AspectJ a implementação de variações com aspectos
- estudar Getting started with AspectJ, de Gregor Kiczales et al, Communications of the ACM, 44(10), pp. 59-65, October 2001. {pós}
- estudar o artigo I want my AOP!, de Ramnivas Laddad, JavaWorld.com, 2002, partes 1 e 2
- instalar e usar o AJDT
- estudar material básico sobre mixins em CaesarJ {pós}
- 18/3 (12hs, no laboratório G2 - C019): Resolver exercícios
- partindo da versão inicial da calculadora de expressões disponível aqui, implementar as seguintes variações:
- usando compilação condicional (Antenna), adicionar a possibilidade de imprimir ou não a expressão fornecida como entrada antes do resultado final;
- usando arquivos de propriedades (Properties), adicionar no parser a possibilidade de trocar o idioma das mensagens exibidas;
- usando polimorfismo de subtipo, adicionar as operações de multiplicação e divisão;
- usando polimorfismo paramétrico (Generics), adicionar a possibilidade de trabalhar com valores double.
- 23/3 (12hs, no laboratório G4 - C019): Resolver exercícios
- partindo da versão inicial da calculadora de expressões disponível aqui, implementar a seguinte variação:
- usando programação orientada a aspectos (AspectJ), adicionar a possibilidade de imprimir ou não a expressão fornecida como entrada antes do resultado final
- 25/3 (12hs, no laboratório G3): Resolver exercícios
- partindo da versão inicial da calculadora de expressões disponível aqui (ou da sua versão modificada durante as duas últimas aulas), implementar as seguintes variações:
- usando transformações de programa (geração de código) (Velocity), adicionar a possibilidade de trabalhar com valores double
- usando o mecanismo do Eclipse para componentes (extension points), adicionar a possibilidade de trocar o idioma das mensagens exibidas.
- analisar implementação de mixins com AHEAD {pós}
- 30/3 (12hs, na sala D-001): Discutir modelos de decisão para linhas de produtos de software
- estudar os slides
- estudar em detalhe os modelos de decisão abaixo:
- Multi-Paradigm Design, PhD thesis de James Coplien, Vrije Universiteit Brussel, Etterbeek, Belgium, July 2000. {pós}
- Implementing Product Line Variabilities, de Michalis Anastasopoulos and Cristina Gacek, In Proceedings of the 2001 Symposium on Software Reusability (SSR'01), pages 109-117, New York, NY, USA, 2001. ACM Press.
- Product Line Implementation Technologies, de Thomas Patzke and Dirk Muthig, Technical Report 057.02/E, Fraunhofer Institut Experimentelles Software Engineering, 2002. (focar na seção 4) {pós}
- Restructuring Test Variabilities in Software Product Lines, MSc thesis de Márcio Ribeiro, Universidade Federal de Pernambuco, Recife, Brasil, 2008 (focar no capítulo 4 e na figura 4.18) {pós}
- Analysis of Techniques for Implementing Variabilities in Software Product Lines, 2008, MSc thesis de Pedro Matos Jr., Universidade Federal de Pernambuco, Recife, Brasil, 2008 (focar no capítulo 4)
- 1/4 (12hs, na sala D-001): Discutir modelos (de feature, configuração, etc.) para linhas de produtos de software
- estudar os slides
- estudar em detalhe Refactoring product lines, de Vander Alves, Rohit Gheyi, Tiago Massoni, Uirá Kulesza, Paulo Borba, e Carlos Lucena. In Proceedings of the 5th ACM International Conference on Generative Programming and Component Engineering (GPCE'06). ACM Press, Oct 2006.
- resolver exercício (e enviar resposta até antes da próxima aula): criar o feature model da calculadora de expressões, contemplando todas as variações exercitadas em sala durante as aulas de exercício.
- 8/4 (12hs, na sala D-001): Discutir práticas e processos para desenvolvimento de linhas de produtos de software
- estudar os slides
- estudar em detalhe Extracting and evolving mobile games product lines, de Vander Alves, Pedro Matos Jr, Leonardo Cole, Paulo Borba, and Geber Ramalho. In Proceedings of the 9th International Software Product Line Conference (SPLC'05), volume 3714 of Lecture Notes in Computer Science, pages 70-81. Springer-Verlag, Sep 2005. {pós}
- estudar em detalhe Extracting and evolving code in product lines with aspect-oriented programming, de Vander Alves, Pedro Matos Jr, Leonardo Cole, Alexandre Vasconcelos, Paulo Borba, e Geber Ramalho. Transactions on Aspect-Oriented Software Development (TAOSD): Special Issue on Software Evolution, 2007.
- 13/4 (12hs, no laboratório G5 [B018]): Discutir ferramenta para extração, reestruturação, gerenciamento e evolução de linhas de produtos de software
- estudar em detalhe os slides
- para utilizar a ferramenta, seguir roteiro de instalação do FLiP
- 15/4 (12h, no laboratório G5 [B018]): Discutir identificação de código duplicado através do uso de ferramentas e exercitar o uso do FLiP
- para utilizar o FLiP, seguir roteiro de instalação. Baixar o projeto EPL e extrair a feature Print para aspectos, refatorando o feature model durante o processo.
- estudar em detalhe os slides
- baixar a ferramenta de detecção de códigos duplicados aqui, descompactar o arquivo e executar o arquivo bin/gemx.bat. Maiores informações no site do CCFinder (último acesso em 13 de Abril de 2009).
- 20/4: Implementar (extrair, reestruturar, eliminar duplicação de código) linha de produto
- analisar a documentação e código do estudo de caso escolhido e
- identificar features existentes e possíveis features
- desenhar o modelo de features
- para cada feature, identificar pontos de variação e variações associadas
- identificar se há interação entre features
- para cada ponto de variação e variações associadas, identificar mecanismos de variação utilizados e avaliar se eles são os mais adequados (segundo os modelos de decisão apresentados); se para um determinado ponto nenhum mecanismo é usado ainda, avaliar qual seria o mais adequado
- coletar métricas de pontos de variação, variações associadas, e mecanismos usados (de forma adequada e inadequada)
- usar a ferramenta pure-variants para desenhar o modelo de features e especificar o configuration knowledge
- usar a ferramenta de detecção de clones de código
- mostrar o gráfico de clones de código, gerado pela ferramenta
- mostrar exemplos de clones encontrados
- detalhar os parâmetros usados para configuração da ferramenta, quantidade de clones encontrados, associações entre variações e clones
- extrair linha de produto a partir do seu estudo de caso
- para extrair o código, usar a ferramenta FLiP, e estendê-la com novos refactorings necessários para a extração
- adicionar variações a pontos de variação existentes
- adicionar novos pontos de variação, e variações associadas
- reestruturar estudo de caso para usar mecanismos de variação mais adequados
- registrar, passo-a-passo, extrações aplicadas (de forma manual ou com o FLiP), dificuldades e problemas encontrados, tempo necessário para cada extração, totalizações de tempo, extrações e outras métricas da primeira parte do projeto
- colocar resultados de todas as partes do projeto no item Projetos realizados mais abaixo
- 22/4: Implementar linha de produto
- Os monitores estarão disponíveis para tirar dúvidas durante o horário da aula (12h-14h), na Sala de Reunião 2.
- 27/4: (12h, no laboratório G5 [B018]): Acompanhamento dos projetos com os monitores. Atividade obrigatória para todos os grupos.
- 29/4: Implementar linha de produto
- 4/5: Implementar linha de produto
- 5/5 Enviar os resultados da implementação da linha de produtos
- 6/5 (12hs, no laboratório de sua escolha): Apresentar resultados da atividade anterior seguindo os templates
- planejar a sua apresentação para 20 minutos
- disponibilizar resultados na página do projeto, antes da aula
- os templates estão organizados da seguinte maneira:
- lps-modelo.ppt: apresentação;
- detalhamento_features.xls: representa o resultado geral do projeto. Nele, deverá haver o desenho do feature model e o detalhamento das features (pontos de variação, variações, qual mecanismo foi utilizado como sugestão de algum modelo de decisão, o mecanismo utilizado para modularizar a feature, o mecanismo utilizado na decisão das variações etc). Adicionalmente, neste template deverão ser colocados os valores das métricas. Exemplos: (a) quantidade de vezes que compilação condicional foi utilizada; (b) quantidade de vezes que polimorfismo de subtipo foi utilizado junto com if-else (pra decidir, por exemplo, qual subclasse instanciar); (c) quantidade de vezes que arquivos de propriedade foram usados sem utilizar if-else (exemplo, o arquivo possui uma propriedade que aponta pra uma classe, LOOK_AND_FEEL = com.sun.java.swing.plaf.windows.WindowsLookAndFeel. Assim pode-se utilizar reflection e o if-else não é necessário); (d) quantidade de features opcionais, alternativas e OR; (e) quantidade de variações cujo binding time é dinâmico.
- 11/5 (12hs, no laboratório de sua escolha): Continuação da apresentação de resultados da atividade anterior
- 13/05 (12hs, na sala D-001): Discutir mecanismos para especificação de variações em requisitos
- estudar os slides
- estudar as abordagens de variação de requisitos
- PLUSS (artigos publicados em SPLC05 e CACM06)
- MSVCM (artigo publicado em AOSD'09)
- ver exemplos da smart home product line
- 18/05 (12hs, no laboratório G3 - B024): Refatorar especificações de produtos em LPS (eShop)
- ver o roteiro e usar o sistema (disponível durante as aulas)
- estudar a especificação nao estruturada do eShop
- Identificar os pontos comuns e variáveis da especificação
- extrair variações para tornar as especificações reusáveis (usando a técnica MSVCM)
- definir o mecanismo de composição (parametrização, extensões de cenários, etc.)
- definir modelos de configuração
- 20/05 (12hs, no laboratório G3 - B024): Refatorar especificações de produtos em LPS (eShop)
- ver o roteiro e usar o sistema (disponível durante as aulas)
- estudar a especificação nao estruturada do eShop
- Identificar os pontos comuns e variáveis da especificação
- extrair variações para tornar as especificações reusáveis (usando a técnica PLUSS)
- definir o mecanismo de composição (parametrização, extensões de cenários, etc.)
- definir modelos de configuração
- 25/05 (12hs, no laboratório): Refatorar especificações de produtos em LPS (Easy Chair)
- ver detalhes no roteiro e usar o sistema (disponível durante as aulas)
- estudar a especificação nao estruturada do Easy Chair
- Identificar os pontos comuns e variáveis da especificação
- extrair variações para tornar as especificações reusáveis
- definir o mecanismo de composição (parametrização, extensões de cenários, etc.)
- definir modelos de configuração
- 27/05 (12hs, no laboratório): Refatorar especificações de produtos em LPS (Smart Home)
- ver detalhes no roteiro e usar o sistema (disponível durante as aulas)
- estudar a especificação nao estruturada do Smart Home
- Identificar os pontos comuns e variáveis da especificação
- extrair variações para tornar as especificações reusáveis
- definir o mecanismo de composição (parametrização, extensões de cenários, etc.)
- definir modelos de configuração
- 01/06 (12hs, no laboratório G1): Apresentação dos resultados iniciais para os alunos
- Ver os slides usados na aula
- Reforçar os critérios observados na extração (corretude, reúso, facilidade de evolução, etc.)
- Apresentar alguns problemas identificados nas especificações geradas em aulas anteriores
- Identificar os pontos de melhoria a serem seguidas nas próximas atividades
- Disponibilizar relatórios das especificações (atividade 1 e atividade 2)
- Disponibilizar especificações de referência dos estudos seguidos nas aulas anteriores
- 03/06 (12hs, no laboratório G1): Aula prática sobre extração de especificações em LPS
- 08/06 (12hs, no laboratório G1): Refatorar especificações de produtos em LPS (Crisis Management System)
- ver detalhes no roteiro e usar o sistema (disponível durante as aulas)
- estudar a especificação não estruturada do Crisis Management System
- Identificar os pontos comuns e variáveis da especificação
- extrair variações para tornar as especificações reusáveis
- definir o mecanismo de composição (parametrização, extensões de cenários, etc.)
- definir modelos de configuração
- 10/06 (12hs, no laboratório G1): Refatorar especificações de produtos em LPS (Mobile Media)
- ver detalhes no roteiro e usar o sistema (disponível durante as aulas)
- estudar a especificação não estruturada do Mobile Media
- Identificar os pontos comuns e variáveis da especificação
- extrair variações para tornar as especificações reusáveis
- definir o mecanismo de composição (parametrização, extensões de cenários, etc.)
- definir modelos de configuração
- 15/06 (12hs, no laboratório): Evoluir especificações de produtos em LPS
- Ver detalhes no roteiro e usar o sistema (disponível durante as aulas)
- Evoluir especificões da LPS de acordo com o primeiro cenário de evolução
- Identificar o impacto das alterações sugeridas
- atualizar especificações, modelos de feature e modelos de configuração
- 17/06 (12hs, no laboratório): Evoluir especificações de produtos em LPS
- Ver detalhes no roteiro e usar o sistema (disponível durante as aulas)
- Evoluir especificões da LPS de acordo com o segundo cenário de evolução
- Identificar o impacto das alterações sugeridas
- atualizar especificações, modelos de feature e modelos de configuração
Projeto
- Opções de estudos de caso:
- Do estudo de caso escolhido, deve-se analisar 3 a 4 KSLOC. O mesmo estudo de caso pode ser analisado por mais de uma equipe, desde que as equipes analisem partes diferentes do código.
--
RodrigoBonifacio - 17 Jun 2009
--
RodrigoBonifacio - 15 Jun 2009
--
RodrigoBonifacio - 02 Jun 2009
--
RodrigoBonifacio - 01 Jun 2009
--
RodrigoBonifacio - 27 May 2009
--
RodrigoBonifacio - 25 May 2009
--
RodrigoBonifacio - 18 May 2009
--
LeopoldoTeixeira - 14 May 2009
--
LeopoldoTeixeira - 30 Apr 2009
--
RodrigoBonifacio - 30 Apr 2009
--
LeopoldoTeixeira - 15 Apr 2009
--
MarcioRibeiro - 14 Apr 2009
--
RodrigoBonifacio - 07 Apr 2009
--
LeopoldoTeixeira - 07 Apr 2009
--
PauloBorba - 07 Apr 2009
--
PauloBorba - 30 Mar 2009
--
LeopoldoTeixeira - 30 Mar 2009
--
PauloBorba - 24 Mar 2009
--
CarlosEduardoPontual - 24 Mar 2009
--
CarlosEduardoPontual - 23 Mar 2009
--
PauloBorba - 23 Mar 2009
--
LeopoldoTeixeira - 23 Mar 2009
--
CarlosEduardoPontual - 23 Mar 2009
--
LeopoldoTeixeira - 17 Mar 2009
--
CarlosEduardoPontual - 16 Mar 2009
--
PauloBorba - 16 Mar 2009
--
PauloBorba - 11 Mar 2009
--
PauloBorba - 09 Mar 2009