• Nenhum resultado encontrado

No trabalho desenvolvido porOlszak e Jørgensen (2012) é apresentada uma abor- dagem para melhorar a distribuição de implementações de features em código-fonte de

softwares legados, visando facilitar a compreensão de programas numa perspectiva baseada

em features. Para isso, é proposta uma remodularização orientada a features de programas Java legados que estabelece representações explícitas de features em estruturas de pacotes típicas de programas orientados a objetos. A abordagem inclui 3 fases: (i) localização de features, (ii) representação de features e (iii) transformação reversa. A localização de features é realizada por meio da anotação em código-fonte dos pontos de entrada de

features que ativam o rastreamento dos artefatos de implementações das features em

tempo de execução. Na representação de features as classes do programa são realocadas em uma nova estrutura de pacotes, onde cada single-feature package reúne somente classes exclusivas para a implementação de uma feature particular, e multi-feature packages contém classes compartilhadas por várias features. Por fim, a transformação reversa restabelece o programa ao seu estado original a partir de anotações de metadados gravadas nos artefatos. A abordagem é avaliada por meio de dois estudos de caso, onde dois programas reduziram o entrelaçamento e espalhamento das implementações das features após a remodularização orientada a features.

Como a restruturação em código-fonte realizada pelo trabalho deOlszak e Jørgensen (2012) reorganiza as classes sob a perspectiva de features para transformar um programa em uma LPS, uma divisão completa de features pode não ser alcançada já que a abordagem ainda preserva o conteúdo original delas, o que acaba transferindo para o programador uma parte da responsabilidade para utilizar mecanismos de separação de features mais avançados do que o agrupamento das suas implementações em pacotes. Dessa forma, a separação de features da abordagem ocorre com sucesso para features que podem ter seus artefatos implementados em estrutura de pacote, mas acaba deixando para o programador implementações de features que ocorre em nível de classe, métodos de classes ou de instruções de código individuais. Esta dissertação complementa o trabalho de Olszak e Jørgensen (2012) ao oferecer diretrizes para justamente implementar features nesses níveis

não cobertos. A identificação de features a partir de artefatos de requisitos de software que podem ser encontrados em cenários com aplicações em produção também é citada no trabalho de Olszak e Jørgensen (2012). Diretrizes para identificação de features a partir de modelos de casos de uso também são citadas, no entanto, o trabalho aborda a formação de features por meio de agrupamentos semânticos de casos de uso em torno de conceitos de domínio, isto é, casos de uso que representam operações sobre uma mesma entidade de domínio, normalmente expressas através de verbos, poderiam ser agrupados e transformados em uma única feature, por meio de substantivos. Como exemplo, para uma entidade fictícia Contato, os casos de uso Cadastrar Contato, Alterar Contato, Listar Contato e Remover Contato, poderiam ser mapeados para a feature Gerenciamento Contato. Diferente destas diretrizes, as diretrizes de identificação de features a partir de modelos de casos de uso do método apresentado nesta dissertação, analisam detalhes desses modelos em busca de achar variabilidades entre casos de uso de sistemas distintos, afim de mapeá-las para os tipos de features conhecidos, não tratados por Olszak e Jørgensen (2012): obrigatórias, opcionais, alternativas e ou-inclusivas.

Ademais, o trabalho deOlszak e Jørgensen (2012) também não mostra a derivação de produtos, que poderia ser feita removendo ou refatorando as decomposições do programa remodularizado para gerar produtos específicos, e não oferece mecanismos para tratar os tipos de features que uma LPS pode possuir para contemplar seus produtos, como

features obrigatórias, opcionais e agrupamentos alternativos e ou-inclusivos. Por outro

lado, o trabalho de Olszak e Jørgensen(2012) também pode complementar esta dissertação melhorando a localização e depois o mapeamento dos artefatos de implementação com as

features correspondentes a partir de um esforço manual para anotar os pontos de entrada

das features em código-fonte. Por fim, o trabalho aplica a abordagem para um programa Java, quando o cenário mais encontrado na indústria indica a adoção de LPS quando existem vários softwares similares em produção (BERGER et al., 2013), o que é tratado no método proposto nesta dissertação.

Outra abordagem de reengenharia de sistemas legados para LPS é a refatoração orientada a features (FOR) proposta por (LIU; BATORY; LENGAUER, 2006) para decompor e modularizar programas legados em features. Desde então, diversos trabalhos tem sido desenvolvidos com tal abordagem (SCHULZE et al.,2012) (TRUJILLO; BATORY; DIAZ, 2006) (LOPEZ-HERREJON; MONTALVILLO-MENDIZABAL; EGYED, 2011)). Esta abordagem busca a separação completa de features, onde uma feature não pode compartilhar artefatos com outra feature. Esse fato evidencia uma diferença clara para este trabalho, onde artefatos podem ser compartilhados por mais de uma feature, principalmente aqueles que fazem parte do núcleo da LPS.

Programação orientada a aspectos (POA) é outro paradigma utilizado em pesquisas que tratam da migração de sistemas legados para linhas de produtos. POA foi introduzido

Capítulo 5. Trabalhos relacionados 80

por Kiczales et al. (1997) para permitir representar claramente os programas na forma de aspectos, incluindo isolamento, composição e reutilização apropriadas do código-fonte destes aspectos. Com isso, abordagens de adoção extrativa e reativa de LPS utilizaram POA para modularizar features transversais em um sistema na forma de aspectos, de forma a evitar o entrelaçamento e dispersão destas features com outras em um software (CALHEIROS et al., 2007) (KASTNER; APEL; BATORY, 2007) (ALVES et al., 2005). Para programas legados desenvolvidos em Java, existe uma extensão da linguagem Java para suportar a introdução de aspectos, chamada, AspectJ. No entanto, um esforço inicial é necessário para aprendizado do paradigma de orientação a aspectos e também do funcionamento do

AspectJ. Para o método proposto nesta dissertação, não é exigido aprendizado adicional

6 Considerações Finais

Esta dissertação de mestrado apresentou um método sistemático para implemen- tação e evolução de linhas de produtos de software no contexto de programas legados desenvolvidos em Java. O método provê atividades que auxiliam os responsáveis pela extração de uma LPS desde a elicitação das similaridades e variabilidades dos sistemas existentes, passando pelo refatoração de um dos sistemas visando implementar as variabili- dades para contemplar as variações apresentadas nos produtos, até os procedimentos de testes em que é validado o funcionamento dos produtos extraídos da LPS. Três atividades foram propostas no contexto do método (Figura 2): (i) Modelar features da LPS, (ii) Projetar e implementar LPS através da refatoração de sistemas existentes e (iii) Realizar Testes para cada um dos produtos atuais existentes. Nestas atividades foram fornecidas diretrizes concretas para atingir o objetivo definido por cada uma delas.

O método proposto neste trabalho foi extraído de um cenário ambientado na UFRN a partir de dois sistemas existentes desenvolvidos na linguagem Java e usados para controle de espaços físicos em dois setores distintos. A primeira atividade do método, Modelar features da LPS, cria a primeira representação da LPS por meio de diretrizes que comparam diagramas de casos de uso dos sistemas encontrados e geram, a partir destas comparações, um diagrama de casos de uso representativo da LPS, bem como um modelo de features, já que este é um modelo mais adequado e difundido para visualização das features de uma LPS. Com estes artefatos criados, a próxima atividade do método, Projetar e implementar LPS através da refatoração de sistemas existentes, que a partir das variabilidades detectadas nos sistemas e estabelece soluções objetivas para implementa-las de acordo com o tipo de problema que geram. Estas soluções fornecem diretrizes de refatoração a se aplicar no código-fonte da LPS, o que gera como saída os artefatos devidamente refatorados e prontos para a atividade seguinte. Na atividade posterior, Realizar Testes para cada um dos produtos atuais existentes, os pontos do código-fonte que sofreram refatorações são testados para verificação da conformidade com os requisitos estabelecidos anteriormente. E após estes testes mais localizados, os produtos extraídos da LPS são testados para garantir o funcionamento adequado do produto como um todo, com todas as partes refatoradas trabalhando em conjunto.

Após a aplicação do método no contexto extrativo de adoção de LPS, ele ainda é utilizado para adequar a LPS aos novos requisitos de novos produtos incorporados. Mais uma vez as mesmas atividades definidas para extração da LPS são executadas. No entanto, algumas observações são destacadas nas diretrizes das atividades para integração correta das novas variabilidades ao código da linha de produtos, proporcionando assim, a aplicação adequada do método neste contexto de evolução da LPS.

Capítulo 6. Considerações Finais 82

6.1

Contribuições

As contribuições a seguir, são resultados do desenvolvimento deste trabalho: • Definição de um método sistemático para implementação de LPS: Neste

trabalho foi proposto um método que apresenta atividades concretas que conduzem a implementação de LPS em contextos extrativos e reativos de adoção. Com tais atividades, profissionais da indústria tem uma visão prática do que precisa ser feito para extrair e evoluir uma LPS, tendo uma visão da importância de cada atividade e dos artefatos trabalhados e gerados por elas.

• Diretrizes para identificar similaridades e variabilidades de sistemas lega- dos usando casos de uso: O presente documento também apresentou diretrizes para extrair similaridades e variabilidades de diagramas de casos de uso para criar modelos de features de LPS. Diagramas de casos de uso são artefatos que podem ser encontrados em contextos de adoção de LPS, visto que são amplamente utilizados para representar sistemas em termos de funcionalidades para seus usuários. De forma análoga, um modelo de features oferece uma visualização simples e com o detalhamento dos relacionamentos e classificações das features relevantes de uma LPS para seus clientes.

• Diretrizes para projeto e implementação de variabilidades: Esta dissertação também apresentou diretrizes concretas para implementação de variabilidades de acordo os problemas por elas gerados. Técnicas como, padrões de projeto, repositório de parâmetros, compilação condicional, são utilizadas nas soluções destes problemas a fim de realizar estas variabilidades.

• Aplicação do método em um estudo de caso: Como forma de avaliação preli- minar do método proposto, ele foi aplicado a um estudo de caso na indústria, onde uma LPS foi extraída e evoluída a partir de sistemas web. O estudo de caso permi- tiu avaliar de forma preliminar a viabilidade de aplicação do método em cenários encontrados na indústria.

6.2

Limitações do trabalho

Apesar das contribuições deste trabalho, algumas limitações encontradas em seu desenvolvimento merecem destaque:

• Aplicação do método proposto em apenas uma única LPS e de mesmo domínio, necessitando expandir sua utilização para LPSs de domínios diferentes.

• Aplicação do método foi restrito aos autores do trabalho, evidenciando a necessidade de condução de novos estudos com o seu uso de forma independente por outros desenvolvedores.

• As atividades de testes propostas no método foram pouco exploradas, no entanto, o uso do método por outras equipes possibilitaria o surgimento de propostas de melhorias nessas atividades, por meio das experiências de uso relatadas.

6.3

Trabalhos futuros

Para dar continuidade à pesquisa desenvolvida nesta dissertação, alguns trabalhos futuros podem ser listados, tais como:

• Extensão das diretrizes de projeto e implementação de LPS proposto neste trabalho para outras tecnologias e linguagens de programação, objetivando atender outros cenários que podem ser encontrados na indústria;

• Avaliação sistemática qualitativa e quantitativa deste método com outros métodos e abordagens de extração de LPS em contextos com sistemas ou LPS em produção, através de estudos de caso e experimentos controlados;

• Proposta de outras diretrizes para resolver problemas de variabilidades em LPSs de outros domínios não cobertos por este trabalho.

84

Referências

AGGARWAL, K. K. et al. Software reuse metrics for object-oriented systems. In: Third

ACIS Int’l Conference on Software Engineering Research, Management and Applications (SERA’05). [S.l.: s.n.], 2005. p. 48–54. Citado na página 13.

ALFÉREZ, M. et al. Multi-view composition language for software product line requirements. In: Proceedings of the Second International Conference

on Software Language Engineering. Berlin, Heidelberg: Springer-Verlag, 2010.

(SLE’09), p. 103–122. ISBN 3-642-12106-3, 978-3-642-12106-7. Disponível em: <https://doi.org/10.1007/978-3-642-12107-4_8>. Citado na página 72.

ALVES, V. et al. Extracting and evolving mobile games product lines. Software Product

Lines, Springer, p. 70–81, 2005. Citado na página 80.

ANDERSEN, N. et al. Efficient synthesis of feature models. In: ACM. Proceedings of the

16th International Software Product Line Conference-Volume 1. [S.l.], 2012. p. 106–115.

Citado na página 20.

ARNOLD, R. S. Software restructuring. Proceedings of the IEEE, v. 77, n. 4, p. 607–617, Apr 1989. ISSN 0018-9219. Citado na página23.

ASSUNÇÃO, W. K. G. et al. Reengineering legacy applications into software product lines: a systematic mapping. Empirical Software Engineering, p. 1–45, 2017. ISSN 1573-7616. Disponível em: <http://dx.doi.org/10.1007/s10664-017-9499-z>. Citado 3 vezes nas páginas 15, 75e 76.

BERG, K.; BISHOP, J.; MUTHIG, D. Tracing software product line variability: From problem to solution space. In: Proceedings of the 2005 Annual Research Conference of

the South African Institute of Computer Scientists and Information Technologists on IT Research in Developing Countries. Republic of South Africa: South African Institute for

Computer Scientists and Information Technologists, 2005. (SAICSIT ’05), p. 182–191. ISBN 1-59593-258-5. Disponível em: <http://dl.acm.org/citation.cfm?id=1145675.1145695>. Citado na página 13.

BERGER, T. et al. A survey of variability modeling in industrial practice. In:

Proceedings of the Seventh International Workshop on Variability Modelling of

Software-intensive Systems. New York, NY, USA: ACM, 2013. (VaMoS ’13), p. 7:1–7:8.

ISBN 978-1-4503-1541-8. Disponível em: <http://doi.acm.org/10.1145/2430502.2430513>. Citado na página 79.

BONIFáCIO, R.; BORBA, P. Modeling scenario variability as crosscutting mechanisms. In: Proceedings of the 8th ACM International Conference on Aspect-oriented Software

Development. New York, NY, USA: ACM, 2009. (AOSD ’09), p. 125–136. ISBN

978-1-60558-442-3. Disponível em: <http://doi.acm.org/10.1145/1509239.1509258>. Citado na página 72.

CALHEIROS, F. et al. Product line variability refactoring tool. p. 32–33, 01 2007. Citado na página 80.

CHIKOFSKY, E. J.; CROSS, J. H. Reverse engineering and design recovery: a taxonomy.

IEEE Software, v. 7, n. 1, p. 13–17, Jan 1990. ISSN 0740-7459. Citado na página 23.

CLEMENTS, P. Being proactive pays off. IEEE Software, v. 19, n. 4, p. 28, 30–, Jul 2002. ISSN 0740-7459. Citado na página 14.

CLEMENTS, P.; NORTHROP, L. Software Product Lines: Practices and Patterns. [S.l.]: Addison-Wesley Professional, 2001. Citado 2 vezes nas páginas13 e19.

CZARNECKI, K. Generative Programming: Principles and Techniques of Software

Engineering Based on Automated Configuration and Fragment-Based Component Models.

Tese (Doutorado) — Technical University of Ilmenau, Germany, out. 1998. Citado na página 21.

CZARNECKI, K.; KIM, C. H. P. Cardinality-based feature modeling and constraints: A progress report. In: International Workshop on Software Factories. [S.l.: s.n.], 2005. p. 16–20. Citado na página20.

DEMEYER, S.; DUCASSE, S.; NIERSTRASZ, O. Object-Oriented Reengineering

Patterns. [S.l.]: Square Bracket Associates, Switzerland, 2009. Version of 2013-11-27.

Citado na página 23.

DUBINSKY, Y. et al. An exploratory study of cloning in industrial software product lines. In: 2013 17th European Conference on Software Maintenance and Reengineering. [S.l.: s.n.], 2013. p. 25–34. ISSN 1534-5351. Citado 2 vezes nas páginas 24e 71.

EASTERBROOK, S. et al. Selecting empirical methods for software engineering research. In: . Guide to Advanced Empirical Software Engineering. London: Springer London, 2008. p. 285–311. ISBN 978-1-84800-044-5. Disponível em: <https://doi.org/10.1007/978-1-84800-044-5_11>. Citado na página 17.

ERIKSSON, M.; BÖRSTLER, J.; BORG, K. The pluss approach – domain modeling with features, use cases and use case realizations. In: . Software Product Lines:

9th International Conference, SPLC 2005, Rennes, France, September 26-29, 2005. Proceedings. Berlin, Heidelberg: Springer Berlin Heidelberg, 2005. p. 33–44. ISBN

978-3-540-32064-7. Disponível em: <https://doi.org/10.1007/11554844_5>. Citado na página 72.

FOWLER, M. et al. Refactoring: improving the design of existing code. [S.l.]: Addison-Wesley Professional, 1999. Citado na página 23.

KANG, K. et al. Feature-Oriented Domain Analysis (FODA) Feasibility Study. Pittsburgh, PA, 1990. Disponível em: <http://resources.sei.cmu.edu/library/asset-view.cfm?AssetID= 11231>. Citado 2 vezes nas páginas20 e21.

KASTNER, C.; APEL, S.; BATORY, D. A case study implementing features using aspectj. In: IEEE. Software Product Line Conference, 2007. SPLC 2007. 11th International. [S.l.], 2007. p. 223–232. Citado na página 80.

KICZALES, G. et al. Aspect-oriented programming. In: . ECOOP’97 —

Object-Oriented Programming: 11th European Conference Jyväskylä, Finland, June 9–13, 1997 Proceedings. Berlin, Heidelberg: Springer Berlin Heidelberg, 1997. p. 220–242. ISBN

978-3-540-69127-3. Disponível em: <https://doi.org/10.1007/BFb0053381>. Citado na página 80.

Referências 86

KRUEGER, C. Easing the transition to software mass customization. In: . Software

Product-Family Engineering: 4th International Workshop, PFE 2001 Bilbao, Spain, October 3–5, 2001 Revised Papers. Berlin, Heidelberg: Springer Berlin Heidelberg, 2002. p. 282–293.

ISBN 978-3-540-47833-1. Disponível em: <http://dx.doi.org/10.1007/3-540-47833-7_25>. Citado 4 vezes nas páginas 14, 21, 22e 75.

KRUEGER, C. W. Software reuse. ACM Comput. Surv., ACM, New York, NY, USA, v. 24, n. 2, p. 131–183, jun. 1992. ISSN 0360-0300. Disponível em: <http://doi.acm.org/10.1145/130844.130856>. Citado na página 13.

LINDEN, F. J. v. d.; SCHMID, K.; ROMMES, E. Software Product Lines in Action: The

Best Industrial Practice in Product Line Engineering. Secaucus, NJ, USA: Springer-Verlag

New York, Inc., 2007. ISBN 3540714367. Citado na página 13.

LIU, J.; BATORY, D.; LENGAUER, C. Feature oriented refactoring of legacy applications. In: Proceedings of the 28th International Conference on Software Engineering. New York, NY, USA: ACM, 2006. (ICSE ’06), p. 112–121. ISBN 1-59593-375-1. Disponível em: <http://doi.acm.org/10.1145/1134285.1134303>. Citado 2 vezes nas páginas 15e 79. LOPEZ-HERREJON, R. E.; MONTALVILLO-MENDIZABAL, L.; EGYED, A. From requirements to features: An exploratory study of feature-oriented refactoring. In: 2011

15th International Software Product Line Conference. [S.l.: s.n.], 2011. p. 181–190. Citado

na página 79.

MARTINEZ, J. et al. Bottom-up adoption of software product lines: A generic and extensible approach. In: Proceedings of the 19th International Conference on Software

Product Line. New York, NY, USA: ACM, 2015. (SPLC ’15), p. 101–110. ISBN

978-1-4503-3613-0. Disponível em: <http://doi.acm.org/10.1145/2791060.2791086>. Citado 3 vezes nas páginas 15, 76e 77.

MENS, T. Introduction and roadmap: History and challenges of software evolution. In: . Software Evolution. Berlin, Heidelberg: Springer Berlin Heidelberg, 2008. p. 1–11. ISBN 978-3-540-76440-3. Disponível em: <http: //dx.doi.org/10.1007/978-3-540-76440-3_1>. Citado na página 13.

OLSZAK, A.; JøRGENSEN, B. N. Remodularizing java programs for improved locality of feature implementations in source code. Science of Computer Programming, v. 77, n. 3, p. 131 – 151, 2012. ISSN 0167-6423. Feature-Oriented Software Development (FOSD 2009). Disponível em: <http://www.sciencedirect.com/science/article/pii/S0167642310001917>. Citado 3 vezes nas páginas 15, 78e 79.

POHL, K.; BöCKLE, G.; LINDEN, F. J. v. d. Software Product Line Engineering:

Foundations, Principles and Techniques. Secaucus, NJ, USA: Springer-Verlag New York,

Inc., 2005. ISBN 3540243720. Citado 2 vezes nas páginas 19e 20.

RUBIN, J.; CHECHIK, M. Combining related products into product lines. In: .

Fundamental Approaches to Software Engineering: 15th International Conference, FASE 2012, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2012, Tallinn, Estonia, March 24 - April 1, 2012. Proceedings. Berlin, Heidelberg:

Springer Berlin Heidelberg, 2012. p. 285–300. ISBN 978-3-642-28872-2. Disponível em: <https://doi.org/10.1007/978-3-642-28872-2_20>. Citado na página 15.

RUBIN, J.; CHECHIK, M. A framework for managing cloned product variants. In:

Proceedings of the 2013 International Conference on Software Engineering. Piscataway, NJ,

USA: IEEE Press, 2013. (ICSE ’13), p. 1233–1236. ISBN 978-1-4673-3076-3. Disponível em: <http://dl.acm.org/citation.cfm?id=2486788.2486971>. Citado na página 19. RUBIN, J.; CZARNECKI, K.; CHECHIK, M. Cloned product variants: from ad-hoc to managed software product lines. International Journal on Software Tools for

Technology Transfer, v. 17, n. 5, p. 627–646, Oct 2015. ISSN 1433-2787. Disponível em:

<https://doi.org/10.1007/s10009-014-0347-9>. Citado na página 15.

SAMETINGER, J. Software engineering with reusable components. [S.l.]: Springer Science & Business Media, 1997. Citado na página 13.

SANTOS, J. et al. Execução condicional: Um padrão para implementação de variabilidades de granularidade fina. In: Proceedings of the 9th Latin-American Conference on Pattern

Languages of Programming. [S.l.]: SugarLoafPLoP, 2012. Citado na página 24.

SCHULZE, S. et al. Variant-preserving refactoring in feature-oriented software product lines. In: Proceedings of the Sixth International Workshop on Variability Modeling of

Software-Intensive Systems. New York, NY, USA: ACM, 2012. (VaMoS ’12), p. 73–81.

ISBN 978-1-4503-1058-1. Disponível em: <http://doi.acm.org/10.1145/2110147.2110156>. Citado na página 79.

TRUJILLO, S.; BATORY, D.; DIAZ, O. Feature refactoring a multi-representation program into a product line. In: Proceedings of the 5th International Conference

on Generative Programming and Component Engineering. New York, NY, USA:

ACM, 2006. (GPCE ’06), p. 191–200. ISBN 1-59593-237-2. Disponível em: <http://doi.acm.org/10.1145/1173706.1173736>. Citado na página 79.

XUE, Y. Reengineering legacy software products into software product line. Tese (Doutorado) — National University of Singapore, 2012. Citado 3 vezes nas páginas 15,77