Analyzing Dependency Distribution Changes Arising from Code Smell Interactions

Deze studie analyseert 116 open-source Java-systemen en concludeert dat interacties tussen codegeuren vaak leiden tot een significante toename van statische afhankelijkheden, wat nuttige inzichten biedt voor het verbeteren van detectie, prioritering en refactoringstrategieën.

Zushuai Zhang, Elliott Wen, Ewan Tempero

Gepubliceerd 2026-03-05
📖 5 min leestijd🧠 Diepgaand

Each language version is independently generated for its own context, not a direct translation.

Stel je voor dat software een enorme, levende stad is. Elke gebouwen (de modules) hebben wegen die ze met elkaar verbinden. Als je een klein raam in één gebouw vervangt, kan dat soms leiden tot een reeks onverwachte gevolgen in de hele stad: verkeer stopt, leidingen breken, en buren klagen. In de programmeertaal noemen we deze "wegen" afhankelijkheden. Hoe meer wegen er zijn, hoe moeilijker en duurder het is om de stad te onderhouden.

De onderzoekers van dit paper (Zhang, Wen en Tempero) hebben zich afgevraagd: Wat zorgt ervoor dat er steeds meer wegen worden aangelegd?

Ze kijken niet naar de gebouwen zelf, maar naar de "geur" van de straten. In de programmeerwereld noemen we slechte ontwerpen code smells (letterlijk: code-stank). Het zijn geen fouten die de software laten crashen, maar ze voelen "raar" aan, zoals een gebouw dat te veel kamers heeft of een kamer die te veel werk doet.

Het Grote Geheim: De "Stank-Interactie"

Tot nu toe hebben onderzoekers vooral gekeken naar één soort stank op zichzelf. Maar de onderzoekers ontdekten iets interessants: Stank is er zelden alleen.

Stel je voor:

  • God Class: Een gebouw dat zo groot is dat het de hele stad bestuurt.
  • Feature Envy: Een kamer die jaloers is op de meubels van de buren en daar constant heen kijkt.
  • Data Class: Een gebouw dat alleen maar dozen met spullen bevat, maar zelf niets doet.

Als je alleen een "God Class" hebt, is het al lastig. Maar wat gebeurt er als die "God Class" jaloers is op de "Data Class"? Of als een "Brain Method" (een kamer die te veel denkt) samenwerkt met een "Feature Envy"?

De onderzoekers hebben 116 grote, openbare softwaresteden (Java-projecten) onder de loep genomen. Ze zochten naar momenten waar deze "stank-gebouwen" met elkaar in contact kwamen via de wegen (afhankelijkheden).

Wat vonden ze? (De Simpele Vertaling)

1. Stank trekt stank aan (en maakt de wegen dichter)
Ze ontdekten dat wanneer twee soorten "stank" met elkaar interageren, er veel meer wegen worden aangelegd tussen de gebouwen.

  • Analogie: Als een jaloerse burenman (Feature Envy) constant contact zoekt met een voorraadkast (Data Class), bouwen ze een tunnel, een telefoonlijn, een brievenbus en een lift. Het wordt een wirwar van verbindingen.
  • Conclusie: Interacties tussen slechte ontwerpen zorgen voor een explosie aan complexiteit. Het is niet alleen "een beetje" slechter, het is veel, veel erger.

2. Het patroon is voorspelbaar
Niet alleen werden er meer wegen aangelegd, maar ze deden dit op een heel specifiek, voorspelbaar patroon.

  • Sommige "stank-gebouwen" zijn altijd de gevers (ze geven data).
  • Andere zijn altijd de nemers (ze vragen data).
  • Als een "Nemer" (zoals Feature Envy) contact zoekt met een "Gever" (zoals Data Class), ontstaan er specifieke soorten wegen (zoals directe lijnen naar de voorraadkast).
  • De onderzoekers hebben een soort "stank-kaart" gemaakt die voorspelt: "Als je deze twee soorten stank bij elkaar ziet, dan zullen ze waarschijnlijk op deze manier met elkaar verbonden zijn."

3. Waarom is dit belangrijk voor jou?
Stel je voor dat je een stadsherstelproject hebt. Je hebt niet genoeg geld om alle gebouwen te renoveren. Waar begin je?

  • Vroeger: Je zou kijken naar het grootste gebouw of het oudste gebouw.
  • Nu: Je kijkt naar de interacties. Als je twee gebouwen ziet die "stank" hebben en die met elkaar verbonden zijn, moet je die eerst aanpakken.
  • Waarom? Omdat het oplossen van die interactie niet alleen één probleem oplost, maar een hele bundel van verkeerde wegen tegelijk weghaalt. Het is alsof je een verkeersknooppunt oplost in plaats van alleen een stoplicht.

De Praktische Tips (De "Gouden Raad")

De onderzoekers geven drie concrete adviezen aan programmeurs en managers:

  1. Prioriteit geven: Pak niet zomaar een "stank" aan. Zoek naar de paren die met elkaar praten. Die zijn het gevaarlijkst voor de stabiliteit van je software.
  2. Slimmer renoveren: Als je een "jaloerse kamer" (Feature Envy) ziet die constant naar een "voorraadkast" (Data Class) kijkt, verplaats die kamer dan naar het gebouw van de voorraadkast. Dan hoef je geen wegen meer te bouwen; de kamer zit er gewoon in. De software wordt dan schoner en simpeler.
  3. Betere detectie: Software-tools die op zoek gaan naar fouten, kunnen nu slimmer worden. Als ze zien dat een gebouw veel contact heeft met een "voorraadkast", kunnen ze waarschuwingslichten aantonen dat er waarschijnlijk een "jaloerse kamer" schuilgaat, zelfs als ze die nog niet direct hebben gezien.

Samenvattend

Deze studie zegt eigenlijk: "Slechte ontwerpen zijn gevaarlijker als ze met elkaar bevriend zijn."

Het is alsof je een huis hebt met één lekkende kraan. Dat is vervelend. Maar als die kraan lekt en tegelijkertijd de vloerbedekking nat maakt en de muren beschadigt, dan heb je een ramp. De onderzoekers hebben bewezen dat deze "rampen" (interacties) zorgen voor een enorme toename aan complexiteit. Door deze interacties te herkennen en op te lossen, kunnen we software veel makkelijker, goedkoper en veiliger houden.