← Últimos artigos
💻 computer science

What Characterizes Pairwise Modular Smells?

Este estudo caracteriza os Pairwise Modular Smells ao identificar 19 características de relacionamento de pares, treinar modelos de aprendizado de máquina em mais de 6 milhões de pares de entidades de 11 projetos Java para prever pares inaptamente separados e colocalizados com melhorias significativas de acurácia, e interpretar os resultados para revelar fatores influentes específicos, como dependências e similaridade semântica, que impulsionam essas falhas arquiteturais.

Autores originais: Chenxing Zhong, Daniel Feitosa, Paris Avgeriou, Huang Huang, Wei Song, He Zhang

Publicado 2026-06-23
📖 5 min de leitura🧠 Leitura aprofundada

Autores originais: Chenxing Zhong, Daniel Feitosa, Paris Avgeriou, Huang Huang, Wei Song, He Zhang

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você é o gerente de uma biblioteca enorme e movimentada. O objetivo de uma boa biblioteca é ter livros organizados em seções lógicas: "Culinária", "História", "Ciência", etc. Isso torna fácil para as pessoas encontrarem o que precisam e para os bibliotecários manterem tudo organizado.

No mundo do software, essas "seções" são chamadas de módulos. Um "bom" módulo agrupa arquivos que trabalham de perto uns com os outros (alta coesão) e mantém separados arquivos que não conversam muito entre si (baixo acoplamento).

Com o tempo, as bibliotecas podem ficar bagunçadas. Livros são colocados nas caixas erradas. No software, essa bagunça é chamada de "Smell" (um "cheiro"). Não é um odor ruim, mas um sinal de que algo está estruturalmente errado e pode causar dores de cabeça mais tarde.

O Problema: O "Pairwise Modular Smell" (PairSmell)

Em um estudo anterior, os autores introduziram uma nova maneira de encontrar essas bagunças chamada PairSmell. Em vez de olhar para a biblioteca inteira de uma vez, eles olham para pares de livros (arquivos).

Eles fazem uma pergunta simples: "Estes dois arquivos pertencem à mesma seção ou deveriam estar em seções diferentes?"

Para responder a isso, eles usam um painel de "bibliotecários especialistas" (ferramentas de software automatizadas). Se todos os especialistas concordam que o Arquivo A e o Arquivo B devem estar juntos, mas a biblioteca atualmente os tem em seções diferentes, isso é um problema. Isso é chamado de InSep (Separação Inapropriada).

Da mesma forma, se os especialistas dizem que eles deveriam estar em seções diferentes, mas a biblioteca os mantém presos juntos na mesma caixa, isso também é um problema. Isso é chamado de InCol (Colocação Inapropriada).

A Lacuna: O estudo anterior conseguia encontrar esses problemas, mas não conseguia explicar facilmente por que eram problemas. Era como um médico dizendo: "Você está com febre", mas sem explicar se é causada pela gripe, uma infecção ou apenas pelo sol. Os desenvolvedores precisavam saber por que um par estava bagunçado para poderem consertá-lo corretamente.

A Solução: Investigando a "Personalidade" dos Pares

Este novo artigo pergunta: Quais traços específicos tornam um par de arquivos propenso a estar no lugar errado?

Os autores trataram isso como uma história de detetive. Eles reuniram uma lista de 19 "traços de personalidade" (características) que descrevem como dois arquivos se relacionam entre si. Esses traços incluem:

  • Dependências: Com quantos outros arquivos este um conversa?
  • Palavras Compartilhadas: Eles usam o mesmo vocabulário técnico?
  • Tamanho: Qual o tamanho dos arquivos?
  • Complexidade: Quão difíceis são de entender?

Eles então alimentaram esses traços em um "Cérebro" de Aprendizado de Máquina (um modelo de computador) treinado em mais de 6 milhões de pares de arquivos de 11 projetos de software de código aberto diferentes (como Kafka, Hadoop e Druid).

As Descobertas: O Que Torna um Par "Smelly"?

O computador aprendeu a detectar os "cheiros" com alta precisão. Mais importante ainda, os autores pediram ao computador para explicar quais traços eram os maiores sinais de alerta.

1. Para Arquivos Que Deveriam Estar Juntos, Mas Estão Separados (InSep)

O modelo descobriu que arquivos separados são provavelmente "smelly" (erroneamente separados) se:

  • Eles têm muitas conexões "de saída": Imagine duas pessoas em salas diferentes que estão constantemente gritando instruções para o mesmo grupo de pessoas no corredor. Se elas dependem fortemente dos mesmos recursos externos, provavelmente deveriam estar na mesma sala para coordenar melhor.
  • Eles compartilham muitas palavras com o resto do sistema: Se ambos os arquivos estão constantemente falando sobre os mesmos conceitos que todos os outros no edifício, é provável que façam parte da mesma "equipe" e não devam estar isolados.
  • São muito simples (poucos campos): Se dois arquivos são pequenos e simples, mas dependem um do outro, mantê-los separados é como colocar um sapato esquerdo e um direito em caixas diferentes. Eles são simples demais para justificar serem separados.

2. Para Arquivos Que Estão Juntos, Mas Deveriam Estar Separados (InCol)

O modelo descobriu que arquivos presos juntos são provavelmente "smelly" (erroneamente agrupados) se:

  • Eles não falam a mesma língua (Baixa Similaridade Semântica): Se um arquivo é sobre "Culinária" e o outro é sobre "História", mas estão na mesma caixa, isso é um erro. O modelo verifica se eles usam termos técnicos semelhantes; se não usarem, não deveriam estar juntos.
  • Eles não compartilham muitas palavras entre si: Mesmo que estejam na mesma caixa, se eles nunca mencionam as mesmas coisas, provavelmente não são relacionados.
  • Eles têm muitas conexões "de entrada": Imagine um único escritório onde 50 pessoas de diferentes departamentos vêm constantemente para entregar trabalho. Se dois arquivos no mesmo módulo estão sendo bombardeados por solicitações de todos os lugares, esse módulo provavelmente está muito lotado e precisa ser dividido para lidar com a carga.

Por Que Isso Importa

Os autores fornecem um "Manual do Usuário" para os desenvolvedores. Agora, em vez de apenas ver um sinal vermelho dizendo "Isso está errado", um desenvolvedor pode ver o porquê:

  • "Ah, estes dois arquivos estão separados, mas ambos dependem dos mesmos 50 outros arquivos. Eu deveria movê-los para junto."
  • "Ah, estes dois arquivos estão juntos, mas um é uma ferramenta utilitária e o outro é uma ferramenta de lógica de negócio, e eles não possuem vocabulário compartilhado. Eu deveria separá-los."

A Conclusão

Este artigo pega um problema complexo de software — descobrir por que os módulos de software estão bagunçados — e o decompõe em traços simples e compreensíveis. Ao usar uma abordagem de "detetive" com aprendizado de máquina, eles identificaram os "traços de personalidade" específicos (como o número de conexões que um arquivo possui ou quantas palavras ele compartilha) que sinalizam um erro de design. Isso ajuda os desenvolvedores não apenas a encontrar a bagunça, mas a entender a causa raiz para que possam limpá-la de forma eficaz.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →