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