Tags:
tag this topic
create new tag
,
view all tags
---+ Reuso Estratégico com Linhas de Produtos de Software *Professor:* Paulo Borba *Monitores:* Carlos Pontual, Fernanda d'Amorim, Leopoldo Teixeira, Márcio Ribeiro, Rodrigo Bonifácio *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, [[http://ferreiros.cin.ufpe.br/mailman/listinfo/if722-l][assine já!]] ---+++ Cronograma * *4/8 (10hs, na sala B-001):* Apresentação da disciplina * *6/8:* Definir equipe e estudo de caso a ser utilizado na disciplina * enviar email com nomes dos membros da equipe e estudo de caso escolhido (ver opções no final da página) * *11/8 (10hs, na sala B-001):* Discutir conceitos básicos de linhas de produtos de software * estudar os [[%ATTACHURL%/ConceitosBasicosDeLPS.pdf][slides]] * 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 [[http://ieeexplore.ieee.org/iel5/32/35892/01702332.pdf?isnumber=35892&prod=JNL&arnumber=1702332&arSt=+1&ared=+9&arAuthor=Parnas%2C+D.L.][On the Design and Development of Program Families]], de David Parnas, IEEE Transactions on Software Engineering, 2(1), pp. 1-9, March 1976. * estudar [[http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD268.PDF][Structured Programming]], de Edsger W. Dijkstra. EWD 268, August 1969. * *13/8 (8hs, na sala B-001):* Discutir mecanismos para implementação de variações * estudar os [[%ATTACHURL%/VariabilityImplementationMechanisms.pdf][slides]] * estudar, instalar e testar o pré-processador [[http://antenna.sourceforge.net/wtkpreprocess.php][Antenna]], para suporte a compilação condicional * estudar e testar o suporte de Java ([[http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html][Properties]]) a manipulação de arquivos de propriedade (texto ou XML) * estudar padrões de [[http://www.adaptiveobjectmodel.com/WICSA3/ArchitectureOfAOMsWICSA3.pdf][AOM]] * estudar e testar o suporte de Java ([[http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf][Generics]]) a polimorfismo paramétrico * *18/8 (10hs, na sala B-001):* Discutir mais mecanismos para implementação de variações * estudar os [[%ATTACHURL%/VariabilityImplementationMechanisms2.pdf][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 [[http://martinfowler.com/articles/injection.html][artigo]] sobre _dependency injection_ (ver [[ExemploVariacaoInjecaoDeDependencia][explicações adicionais e código disponível]]) * estudar [[http://caesarj.org/index.php/ProgrammingGuide/MixinComposition][material básico]] sobre mixins em <nop>CaesarJ (ver [[ExemploVariacaoCaesarJ][exemplos adicionais]]) (ver [[ExemploVariacaoAhead][exemplos adicionais de mixins usando ahead]]) * estudar [[http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html][artigo]] sobre componentes OSGi * estudar e testar o suporte do Eclipse ([[http://www.eclipsezone.com/eclipse/forums/t93753.html][extension points]]) para componentes (para mais informações, estudar o capítulo 17 do livro _Eclipse: Building Commercial-Quality Plug-Ins_) (ver [[ExemploVariacaoExtensionPoints][explicações adicionais e código disponível]]) * estudar e testar o suporte a geração e transformação do [[http://www.cin.ufpe.br/~jats/][JaTS]] ou [[http://velocity.apache.org/][Velocity]] (ver [[ExemploGeracaoTransformacao][exemplos adicionais]]) * estudar e testar o suporte de <nop>AspectJ a implementação de variações com aspectos (ver [[ExemploVariacaoAspectJ][exemplos adicionais]]) * estudar [[http://portal.acm.org/ft_gateway.cfm?id=383858&type=pdf&coll=ACM&dl=ACM&CFID=23693523&CFTOKEN=32691340][Getting started with AspectJ]], de Gregor Kiczales et al, Communications of the ACM, 44(10), pp. 59-65, October 2001. * estudar o artigo _I want my AOP!_, de Ramnivas Laddad, <nop>JavaWorld.com, 2002, partes [[http://www.javaworld.com/javaworld/jw-01-2002/jw-0118-aspect.html][1]] e [[http://www.javaworld.com/javaworld/jw-03-2002/jw-0301-aspect2.html][2]] * instalar e usar o [[http://www.eclipse.org/ajdt/][AJDT]] * *20/8:* Usar no seu estudo de caso cada um dos mecanismos para implementação de variações apresentados nas aulas anteriores * escolher conjunto mínimo de variações para que, sempre que possível, a mesma variação seja implementada com diferentes mecanismos, gerando diferentes versões do sistema * *25/8:* Usar no seu estudo de caso cada um dos mecanismos para implementação de variações apresentados nas aulas anteriores * *27/8:* Usar no seu estudo de caso cada um dos mecanismos para implementação de variações apresentados nas aulas anteriores * *1/9:* Usar no seu estudo de caso cada um dos mecanismos para implementação de variações apresentados nas aulas anteriores * *3/9 (8hs, no laboratório Grad 4):* Apresentar resultados seguindo o [[%ATTACHURL%/lps-modelo-parte1.ppt][template]] * antes estudar em detalhe e seguir as [[http://research.microsoft.com/Users/simonpj/papers/giving-a-talk/giving-a-talk.htm][dicas de apresentação]] do Simon Peyton Jones * planejar a sua apresentação para 20 minutos * disponibilizar resultados na página do projeto, *antes* da aula * ao disponibilizar na página, organizar os projetos em pastas com base nas técnicas. Por exemplo, vocês podem criar as pastas aop, mixins, generics etc. Cada pasta iria conter as implementações das variações na referida técnica. Se houver um projeto com mais de uma técnica (Exemplo, um projeto implementa uma variação com diversas técnicas em pacotes diferentes), criar o nome da pasta deste projeto com os nomes das técnicas. * Exemplo: implementação da variação X * aop (1 projeto somente com a técnica AOP) * mixins (1 projeto somente com a técnica Mixins) * dp-ep-osgi (1 projeto com 3 técnicas: Design Patterns, Extension Points e OSGi. Neste caso, cada implementação de uma determinada técnica deve estar em pacotes diferentes das outras) * *8/9 (10hs, na sala B-001):* Discutir modelos de decisão para linhas de produtos de software * estudar os [[%ATTACHURL%/Decision_Models_for_Variability_Implementation.pdf][slides]] * Estudar em detalhe os modelos de decisão abaixo: * [[%ATTACHURL%/couplien-phd-thesis.pdf][Multi-Paradigm Design]], <nop>PhD thesis de James Coplien, Vrije Universiteit Brussel, Etterbeek, Belgium, July 2000. * [[http://portal.acm.org/ft_gateway.cfm?id=375269&type=pdf&coll=GUIDE&dl=GUIDE&CFID=2115697&CFTOKEN=17980396][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. * [[http://vg00.met.vgwort.de/na/891b009fa90cfa4f862a?l=http://publica.fraunhofer.de/eprints/urn:nbn:de:0011-n-146844.pdf][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) * [[http://twiki.cin.ufpe.br/twiki/pub/SPG/GenteAreaThesis/ribeiro-msc-thesis.pdf][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) * [[http://twiki.cin.ufpe.br/twiki/pub/SPG/GenteAreaThesis/matosjr-msc-thesis.pdf][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) * *10/9 (8hs, na sala B-001):* Discutir modelos (de _feature_, configuração, etc.) para linhas de produtos de software * estudar em detalhe [[http://twiki.cin.ufpe.br/twiki/pub/SPG/AspectProductLine/gpce40-alves.pdf][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. * estudar os [[%ATTACHURL%/ModelsForProductLines.pdf][slides]] * *15/9 (10hs, na sala B-001):* Discutir práticas e processos para desenvolvimento de linhas de produtos de software * estudar os [[%ATTACHURL%/PracticesAndProcessesForProductLines.pdf][slides]] * estudar em detalhe [[http://twiki.cin.ufpe.br/twiki/pub/SPG/AspectProductLine/AlvesSPLC05.pdf][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. * estudar em detalhe [[http://twiki.cin.ufpe.br/twiki/pub/SPG/AspectProductLine/camera-ready.pdf][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. * *17/9 (8hs, no laboratório Grad4):* Discutir ferramenta para extração, reestruturação e evolução de linhas de produtos de software * estudar os [[%ATTACHURL%/FLiPDemo.pdf][slides]] * para utilizar a ferramenta, seguir [[RoteiroInstalacaoFLiP][roteiro]] de instalação do <nop>FLiP * *22/9 (10hs, no laboratório Grad4):* Discutir identificação de código duplicado através do uso de ferramentas * seguir [[http://twiki.cin.ufpe.br/twiki/bin/viewfile/TAES/Aspectos200801?rev=1;filename=ccfinder.html][roteiro]] de instalação da ferramenta de detecção de códigos duplicados * estudar em detalhe os [[%ATTACHURL%/Detectando_Cdigos_Clonados_-_LPS.pdf][slides]] * *24/9:* 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 [[https://sourceforge.net/projects/captainfeature][Captain Feature]] para desenhar o modelo de _features_ * 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 [[http://flip.cesar.org.br/][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 * contrastar resultados obtidos com resultados (modelos, tabelas, métricas, etc.) da primeira e segunda partes do projeto * registrar, passo-a-passo, extrações aplicadas (de forma manual ou com o <nop>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 * *29/9:* Implementar linha de produto * *1/10:* Implementar linha de produto * *6/10:* Implementar linha de produto * *8/10 (8hs, na sala B-001):* Apresentar resultados da atividade anterior seguindo os [[%ATTACHURL%/templates-lps.zip][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-parte2.ppt:* apresentação; * *detalhamento_refactorings.doc:* representa o detalhamento de refactorings que foram necessários pra criar/alterar pontos de variação e suas variações. Por exemplo, "ao criar um novo ponto de variação e suas respectivas variações, a classe X e seus métodos m, n e k precisaram ser refatorados pra receber a interface tal etc." * *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. * *13/10 (10hs, na sala B-001):* Discutir mecanismos para especificação de variações em requisitos * estudar os [[%ATTACHURL%/variacoes-em-requisitos.pdf][slides]] * estudar as abordagens de variação de requisitos * PLUSS (artigos publicados em [[%ATTACHURL%/PLUSS-SPLC05.pdf][SPLC05]] e [[%ATTACHURL%/PLUSS-CACM06.pdf][CACM06]]) * Scenario Variability as Crosscutting (enviar e-mail solicitando artigo) * ver exemplos da _smart_ _home_ _product_ _line_ * *15/10 (8hs, no laboratório Grad3):* Discutir como refatorar linhas especificações em LPS * estudar a especificação nao estruturada do SmartHome * 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 * *20/10(10hs, no laboratório Grad4):* Refatorar especificações de produtos em LPS * refatorar a especificação da [[RefatorarRequisitosPrimeiraParte][Primeira Parte]] do projeto usando as abordagens sugeridas (PLUSS e Crosscutting) * 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 * *22/10(8hs, no laboratório Grad4):* Refatorar especificações de produtos em LPS * refatorar a especificação da [[RefatorarRequisitosSegundaParte][Segunda Parte]] do projeto usando as abordagens sugeridas (PLUSS e Crosscutting) * 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 * *29/10(08hs, no laboratório Grad4):* Evoluir especificações das linhas de produtos * Evoluir especificões da LPS de acordo com o [[PrimeiroCenarioEvolucaoRequisitos][primeiro cenário de evolução]] * Identificar o impacto das alterações sugeridas * atualizar especificações, modelos de feature e modelos de configuração * *3/11(10hs, no laboratório Grad4):* Evoluir especificações das linhas de produtos * 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 * *5/11 (8hs, no laboratório Grad 4):* Apresentar resultados * disponibilizar resultados na página do projeto, *antes* da aula * *10/11 (10hs, no laboratório Grad 4):* Apresentar resultados * *12/11:* Fazer exame escrito ---+++ Projeto * Opções de estudos de caso: * [[http://www.mozilla.com/en-US/thunderbird/][Thunderbird]] * [[http://flip.cesar.org.br/][FLiP]] * [[http://www.comp.lancs.ac.uk/~greenwop/tao/][HealthWatcher]] * Linha de produtos de jogos para celular * Um dos estudos da página do [[http://www1.cs.columbia.edu/~eaddy/concerntagger/][ConcernTagger]] * [[https://sourceforge.net/projects/jats-project/][JaTS]] * [[https://sourceforge.net/projects/mobilemedia/ ][MobileMedia]] * Outro sistema ou linha de produtos não trivial, [[http://www1.cs.columbia.edu/~eaddy/concerntagger/Study%20Candidates.xls][open source]] ou desenvolvido por você * 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. %INCLUDE{ProjetosLPS200802}% ---+++ Avaliação * Participação efetiva nas aulas, questionando, comentando, criticando e pensando em como adaptar e aplicar as idéias vistas * Projetos e apresentações, em dupla para a parte relativa a implementação, e individual para a parte relativa a especificação * Exame escrito * A nota da primeira unidade corresponde à nota do exame escrito; a nota da segunda unidade é definida pela participação em sala e pelas notas dos projetos e apresentações. -- Main.RodrigoBonifacio - 29 Oct 2008 -- Main.RodrigoBonifacio - 21 Oct 2008 -- Main.RodrigoBonifacio - 19 Oct 2008 -- Main.MarcioRibeiro - 01 Oct 2008 -- Main.FernandaDamorim - 30 Sep 2008 -- Main.MarcioRibeiro - 22 Sep 2008 -- Main.MarcioRibeiro - 19 Sep 2008 -- Main.LeopoldoTeixeira - 16 Sep 2008 -- Main.PauloBorba - 10 Sep 2008 -- Main.MarcioRibeiro - 08 Sep 2008 -- Main.FernandaDamorim - 02 Sep 2008 -- Main.LeopoldoTeixeira - 02 Sep 2008 -- Main.MarcioRibeiro - 02 Sep 2008 -- Main.CarlosEduardoPontual - 27 Aug 2008 -- Main.MarcioRibeiro - 27 Aug 2008 -- Main.PauloBorba - 20 Aug 2008 -- Main.PauloBorba - 18 Aug 2008 -- Main.PauloBorba - 12 Aug 2008 -- Main.PauloBorba - 06 Aug 2008 -- Main.PauloBorba - 05 Aug 2008 -- Main.PauloBorba - 04 Aug 2008
Edit
|
Attach
|
P
rint version
|
H
istory
:
r50
<
r49
<
r48
<
r47
<
r46
|
B
acklinks
|
V
iew topic
|
Raw edit
|
More topic actions...
Topic revision: r47 - 2008-10-29
-
RodrigoBonifacio
Home
Site map
APG web
CINCodingDojo web
CInBTCResearchProject web
LabPS web
Main web
PROBRAL web
InternalArea web
ProjetoProcad web
SPG web
Sandbox web
TAES web
TWiki web
TestProductLines web
TAES Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
Register User
Edit
Attach
Copyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback