Design pattern detection tools: review-based comparison and survey studies - Rodrigo André Ferreira Moreira (2023)
Contexto: Padrões de projeto são soluções para problemas recorrentes de design de software. Ferramentas de Detecção de Padrões de Projeto (DPP) existentes suportam padrões de projeto e linguagens de programação específicas. Diversas ferramentas foram propostas para automatizar o processo de DPP em sistemas. No entanto, escolher a ferramenta mais adequada pode ser difícil. Objetivo: Conduzimos um estudo sistemático para entender quais são as ferramentas existentes e suas características, como é o desempenho de DPP dessas ferramentas, por que as ferramentas foram propostas para contextos específicos e como potenciais usuários as percebem. Método: Conduzimos uma revisão sistemática da literatura sobre as ferramentas de DPP desenvolvidas nos últimos 20 anos e suas características. Em seguida, comparamos o desempenho de quatro ferramentas na detecção de seis padrões em relação a precisão, cobertura, F-measure e concordância. Por último, conduzimos duas enquetes: a primeira com objetivo de capturar os motivos para a escolha dos dos desenvolvedores por contextos específicos a serem atendidos pelas ferramentas; a segunda visando descrever o quão úteis são essas ferramentas na visão de potenciais usuários. Resultados: Identificamos 42 ferramentas de DPP e listamos suas características, tais como os padrões de projeto detectáveis e as linguagens de programação suportadas. Os resultados do estudo comparativo sugerem que algumas ferramentas são mais adequadas para detectar certos padrões com precisão e cobertura satisfatórios. Também observamos uma baixa concordância entre os resultados de detecção obtidos por ferramentas distintas. Em relação às enquetes, percebemos que os desenvolvedores de ferramentas geralmente escolhem apoiar a detecção de padrões específicos devido às estruturas internas, enquanto que linguagens de programação são geralmente escolhidas pela sua popularidade na indústria de software. Exemplos de benefícios esperados do uso de ferramentas de DPP incluem a compreensão de sistemas de software e o apoio à realização de tarefas como limpeza de código-fonte. No entanto, ferramentas que são difíceis de utilizar tendem a ser descartadas por potenciais usuários.