thiago delgado pinto – tpinto@inf.puc-rio.br
um estudo exploratório sobre a
identificação de aglomerações de interesses em alto nível
outubro, 2014
inf2921 – introdução à engenharia de software experimental – puc-rio prof. alessandro garcia
introdução
2
introdução
requisitos são obtidos a partir dos interessados (stakeholders)
papéis desempenhados por pessoas
os interesses identificados tem vários graus de relevância
há, em muitos casos, interesses conflitantes
ex.: desempenho vs. segurança
especificação de requisitos
introdução
decisão arquitetural – iso/ieee
Rozanski, Nick.; Woods, Eóin;. Software Systems Architecture: Working with Stakeholders using Viewpoints and Perspectives. 2011. 2nd ed. Pearson. 4
introdução
rationale arquitetural – iso/ieee
Rozanski, Nick.; Woods, Eóin;. Software Systems Architecture: Working with Stakeholders using Viewpoints and Perspectives. 2011. 2nd ed. Pearson.
introdução
ao evoluir, um software passa por mudanças evoluções
correções
sua modularidade é afetada
seu design projetado sofre mudanças evolução
6
introdução
ao evoluir, funcionalidades e interesses se espalham pelo código
gerando dificuldades em mantê-lo
o desenvolvedor precisa estar ciente
de todos os módulos responsáveis por cada funcionalidade e por cada interesse;
e de como a manutenção pode afetá-los espalhamento
Nguyen, 2011. Aspect Recomendation for Evolving Software. International Conference on Software Enginering (ICSE). 2011. pp 361-370.
motivação
8
o uso de técnicas para localizar no código
os módulos que implementam determinado interesse pode ser útil
para tratar problemas de manutenção;
para rastreabilidade da implementação em relação aos requisitos
motivação
Nguyen, 2011. Aspect Recomendation for Evolving Software. International Conference on Software Enginering (ICSE). 2011. pp 361-370.
similarmente, há técnicas que identificam aglomerados (clusters) de interesses espalhadas pelo código
técnicas baseadas no fan-in*
ex.: Marin et al. (2007), Zhang et al. (2008)
técnicas baseadas na similaridade de código
ex.: Nguyen et al. (2011), Adams et al. (2014)
motivação
*fan-in é uma métrica que computa o número de classes que referenciam determinada classe. 10
conhecendo a localização dos interesses no código, um desenvolvedor pode
verificar se a modularidade da implementação está adequada e optar por refatorá-la;
identificar módulos que deveriam estar
implementando determinado interesse e não estão;
detectar interesses emergentes, que surgiram com novos requisitos e não tiveram sua implementação planejada.
motivação
definições
12
definições
interesse entrecortante (cross-cutting concern) funcionalidade que pode não estar bem
alinhada com a modularização do sistema e que precisa ser espalhada por vários módulos
contêiner de interesse (concern container)
unidade de código que compartilha um interesse entrecortante.
principais definições [1/2]
definições
implementadores de interesse (concern implementors)
fragmentos de código que implementam um interesse entrecortante
principais definições [2/2]
14
definições
exemplo – sistema bancário online
15
classe BankAccount
com métodos deposit e withdraw
métodos mantêm a integridade no acesso concorrente ao banco de dados através de mecanismos de travamento (locking)
métodos lock e unlock
preocupação
definições
exemplo – sistema bancário online
16
interesse
entrecortante
(LOCKING)
entrecruza os métodos deposit e withdraw
definições
exemplo – sistema bancário online
contêineres de interesse
definições
exemplo – sistema bancário online
18
db.lock() e db.unlock()
são os implementadores do interesse
estudo anterior
19
estudo anterior
implementa a abordagem de Nguyen et al. (2011) detecta aglomerações de interesses no código
mais especificamente, detecta pares de interesse
premissa: "métodos que têm interações similares em um sistema (ex.: chamam ou são chamados por métodos similares, em contextos similares) tendem a compartilhar alguns interesses entrecortantes."
a ferramenta xscan
20
estudo anterior
aplicações OO
JHotDraw : software para desenho vetorial JEdit : editor de código
Columba : cliente de e-mail
JFreeChart : framework para criação de gráficos (charts) Tomcat : uma implementação de Java Servlet e JSP Jarp : analisador de redes petri
aplicações OA
AJHotDraw : versão orientada a aspectos do JHotDraw HealthWatcher: software para a área médica
a ferramenta xscan
21
estudo anterior
resultados originais da xscan [2/5]
22
estudo anterior
resultados originais da xscan [3/5]
estudo anterior
verificar se esta abordagem, baseada em similaridades de código, apresentava variações significativas (de precisão e cobertura) se aplicadas em versões menos maduras dos softwares avaliados no trabalho original
objetivos iniciais
24
estudo anterior
a abordagem gerou resultados muito diferentes dos apresentados no trabalho
cobertura
original : 89 – 100 % experimentos : 43 – 57 %
precisão
original : 90 – 100 % experimentos : 39 – 73 %
achados [1/5]
estudo anterior
os aglomerados apresentados relacionam métodos de diferentes classes que, intencionalmente ou não, implementam determinado interesse
não é feita uma análise sobre possíveis relações entre esses aglomerados, o que poderia culminar em uma verificação de mais alto nível, podendo facilitar o trabalho de um desenvolvedor
achados [2/5]
26
estudo anterior
a ferramenta identificou um grupo de classes que possuem o método addNotify() usado em contextos semelhantes
também identificou a presença do método
removeNotify() nessas mesmas classes
como esses métodos estão relacionados e são utilizados em contextos similares, a abordagem poderia sugerí-los como sendo participantes da mesma abstração
achados – exemplo [3/5]
estudo anterior
como a ferramenta não analisava os aglomerados sugeridos, relacionando-os, acabamos precisando agrupar vários desses aglomerados sob um mesmo interesse, para então poder compará-los aos nossos
ex.: no JEdit 4.3pre1 identificamos um interesse que chamamos de Buffer. Esse mesmo interesse foi identificado pela ferramenta, mas em vários grupos distintos, o que tornou nosso trabalho de análise e comparação dos resultados mais oneroso
achados [4/5]
28
estudo anterior
os arquivos dos aglomerados de contêineres de interesse relacionados à um interesse de alto nível são praticamente os mesmos na maioria dos casos
em geral, esse arquivos detectados em um aglomerado são idênticos aos de outro aglomerado ou são um subconjunto deste
isso reforça nossa intuição de que a realização de agrupamentos de alto nível é viável
achados [5/5]
estudo atual
30
estudo atual
(i) identificar se as abordagens de localização e de aglomeração de preocupações no código-fonte
conseguem agrupar essas
preocupações em níveis de abstrações altos
ex.: nível de classe/componente
que podem ser mais úteis ao programador para compreender a arquitetura atual de um software
(ii) avaliar se essas abstrações podem ser realmente úteis para um desenvolvedor, em relação à identificação de métodos isolados.
objetivos
estudo atual
(i) As abordagens de aglomeração atuais não fornecem um nível alto de abstração (ex: em nível de classes ou componentes, ao invés de somente métodos);
(ii) O agrupamento de pares de interesse semelhantes em classes é mais útil para o desenvolvedor, para que ele possa compreender uma arquitetura existente.
hipóteses
32
andamento
33
andamento
foram pesquisadas abordagens que pudessem ter o nível de abstração desejado
a grande maioria dos artigos encontrados foi lida
a abordagem mais promissora encontrada foi a COMMIT (Adams et al.)
autores da ferramenta foram contatados e forneceram os scripts usados
o que foi feito
34
andamento
colocar os scripts para funcionar
adaptar para a linguagem Java (atualmente é C)
avaliar as saídas geradas e o nível de abstração dos aglomerados de interesse identificados
analisar se o nível de abstração pode ajudar um desenvolvedor
próximos passos
bibliografia
36
fim
Adams, Brian; Jiang, Z. M.; Hassan, A. E. Identifying crosscutting concerns using historical code changes. International Conference on Software Enginering (ICSE) 2010, pages 305–
314. ACM Press, 2010.
Nguyen, T. T.; Nguyen, H. V.; Nguyen, H. A.; Nguyen, T. N.; Aspect recomendation for evolving software. In International Conference on Software Enginering (ICSE). 2011. pp 361-370.
Nunes, Camila; Garcia, Alessandro; Lucena, Carlos; Lee, Jaejoon. Heuristic expension of feature mappings evolving program families. Software Practice and Experience, 2013.
Rozanski, Nick.; Woods, Eóin;. Software systems architecture: working with stakeholders using viewpoints and perspectives. 2011. 2nd ed. Pearson Education.
37
Thiago Delgado Pinto tpinto@inf.puc-rio.br