Identifying and analyzing software concerns from third-party components’ metadata - Carvalho, Luis Paulo da Silva (2020)
Sistemas bem modularizados são mais fáceis de manter e evoluir. No entanto, não é fácil atingir uma boa modularidade. Sistemas devem ser modularizados sob diversas perspectivas e, frequentemente, existem interesses importantes que ficam espalhados ou entrelaçados entre vários módulos, os chamados interesses transversais. Logging, Acesso a Banco de Dados e Automação de Testes são exemplos de interesses transversais. Os estudos sobre interesses frequentemente recorrem à identificação manual dos mesmos. Infelizmente, a identificação manual tende a ser subjetiva e imprecisa, além de exigir muito esforço. Documentos de Requisitos de Software (DRSs) e Documentos de Arquitetura de Software (DASs) podem ser usados como recursos auxiliares na análise de interesses, mas eles não são comuns. Idealmente, os desenvolvedores precisam confiar em abordagens automáticas para identificar e processar informações sobre interesses a partir de código fonte. Nesse contexto, este trabalho utiliza a injeção de componentes em projetos de software para definir um método de localização de interesses. Em sistemas modernos, os desenvolvedores implementam módulos para lidar com as regras de negócios centrais, mas geralmente injetam componentes de terceiros na base de código para materializar interesses relacionados aos aspectos secundários do sistema. Por serem estes os tipos de interesse que mais se dispersam e se entrelaçam nos módulos dos sistemas, vimos a oportunidade de propor um método para apoiar a sua identificação e análise. Nosso método identifica interesses a partir dos metadados que os desenvolvedores usam para injetar componentes. Em seguida, ele avalia como estes interesses se espalham e evoluem ao longo do tempo na base de código. Desenvolvemos uma ferramenta chamada Architectural Knowledge Suite (AKS) para automatizar o método. Usamos essa ferramenta para conduzir um estudo de pesquisa-ação com a ajuda de especialistas em desenvolvimento de software para avaliar e refinar o método. Executamos três outros estudos para caracterizar e entender como os desenvolvedores implementam interesses no mundo real. Entre os resultados obtidos, destacamos que o método correspondeu moderadamente às expectativas dos especialistas. Notamos que é possı́vel otimizar a captura de interesses a partir do código fonte de sistemas, se eles forem agrupados considerando similaridades entre seus contextos de uso. Percebemos que, durante a evolução dos sistemas, artefatos de código tendem a não se dedicar à implementação de interesses especı́ficos. Identificamos oportunidades de adaptação do método para tornar possı́vel sua aplicação sob diferentes cenários de utilização de tecnologias de desenvolvimento.