Refactoring Fat Interfaces
Using a Genetic Algorithm
Vinícius Garcia
Fat Interfaces
• Many methods
• Users use only part of the included methods.
Interface Segregation Principle (ISP)
Prosposta do Artigo
• Cumprir as metas do princípio ISP é díficil.
• O autor propõe um algoritmo genético para
refatoração de Fat Interfaces em interfaces
menores.
Métrica: Interface Usage Cohesion
• J = usuario
• I = API
• N = numero de usuários.
• Métrica varia de 0(baixa coesão) até 1(alta coesão).
Algoritmo Genético
(multi-objective Clustering)
• Objetivos (multi-objective):
– Maximizar IUC.
– Minimizar o número de sub-APIs geradas.
Algoritmo Genético
(multi-objective Clustering)
Algoritmo Genético
(multi-objective Clustering)
Random Search
•
•
•
•
Gera-se sub-conjuntos aleatórios de métodos.
Avalie-os com o método de fitness do AG.
Salve o melhor encontrado.
Pare após X iterações.
Multi-Objective Simulated Annealing
• Busca local – Inicia a partir de uma solução
aleatória.
• A cada iteração escolhe uma das soluções
vizinhas com base na função:
• O algoritmo para ao estabilizar em um ótimo
local ou após X iterações.
Multi-Objective Simulated Annealing
• Encontra vizinhos desta solução utilizando
mutação (a mesma do GA).
• Compara soluções vizinhas (i,j) utilizando a
média da fitness das soluções.
Experimento
• O algoritmo foi testado em 42,318 APIs Java
disponíveis de forma pública e mineradas a
partir do repositório Maven.
• Pergunta da pesquisa:
– O algoritmo genético proposto consegue dividir
Fat APIs em APIs com IUC melhores?
– Esse método é melhor que o random search e o
simulated annealing?
Experimento
• Binários .class foram escaneado com o ASM
Java bytecode manipulation and analysis
framework.
Resultados
Resultados
Download

Document