What Characterizes Pairwise Modular Smells?
Deze studie karakteriseert Pairwise Modular Smells door 19 paarrelatiekenmerken te identificeren, machine learning-modellen te trainen op meer dan 6 miljoen entiteitparen uit 11 Java-projecten om inapt separated en collocated paren met significante verbeteringen in nauwkeurigheid te voorspellen, en de resultaten te interpreteren om specifieke invloedrijke factoren zoals afhankelijkheden en semantische gelijkenis te onthullen die deze architecturale gebreken aansturen.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Stel je voor dat je de manager bent van een enorme, drukke bibliotheek. Het doel van een goede bibliotheek is om boeken te organiseren in logische secties: "Koken," "Geschiedenis," "Wetenschap," enzovoort. Dit maakt het makkelijk voor mensen om te vinden wat ze nodig hebben en voor bibliothecarissen om de boel netjes te houden.
In de wereld van software worden deze "secties" modules genoemd. Een "goede" module groepeert bestanden die nauw met elkaar samenwerken (hoge cohesie) en houdt ze gescheiden van bestanden die niet echt met elkaar communiceren (lage koppeling).
Na verloop van tijd wordt een bibliotheek echter rommelig. Boeken raken in de verkeerde bakken beland. In software wordt deze rommel een "Smell" (geur) genoemd. Het is geen slechte geur, maar een teken dat er structureel iets mis is, wat later voor hoofdpijn kan zorgen.
Het Probleem: De "Pairwise Modular Smell" (PairSmell)
In een eerdere studie introduceerden de auteurs een nieuwe manier om dit soort rommel te vinden, genaamd PairSmell. In plaats van naar de hele bibliotheek tegelijk te kijken, kijken ze naar paren van boeken (bestanden).
Ze stellen een simpele vraag: "Horen deze twee bestanden in dezelfde sectie thuis, of zouden ze in verschillende secties moeten zitten?"
Om dit te beantwoorden, gebruiken ze een panel van "expert-bibliothecarissen" (geautomatiseerde softwaretools). Als alle experts het erover eens zijn dat Bestand A en Bestand B bij elkaar horen, maar de bibliotheek heeft ze momenteel in verschillende secties geplaatst, dan is dat een probleem. Dit wordt InSep (Inappropriate Separation/Onjuiste Scheiding) genoemd.
Omgekeerd, als de experts zeggen dat ze in verschillende secties thuishoren, maar de bibliotheek heeft ze juist samen in dezelfde doos gestopt, dan is dat ook een probleem. Dit wordt InCol (Inappropriate Collocation/Onjuiste Samenvoeging) genoemd.
De Kloof: De vorige studie kon deze problemen vinden, maar kon niet gemakkelijk uitleggen waarom ze een probleem vormden. Het was alsof een arts zegt: "U heeft koorts," maar niet uitlegt of dit wordt veroorzaakt door de griep, een infectie of gewoon door te veel in de zon te zitten. Ontwikkelaars hadden moeten weten waarom een paar problematisch was, zodat ze het correct konden oplossen.
De Oplossing: Het Onderzoeken van de "Persoonlijkheid" van de Paren
Dit nieuwe artikel vraagt: Welke specifieke eigenschappen maken een paar bestanden waarschijnlijk om op de verkeerde plek te zitten?
De auteurs benaderden dit als een detectiveverhaal. Ze verzamelden een lijst van 19 "persoonlijkheidskenmerken" (eigenschappen) die beschrijven hoe twee bestanden met elkaar in relatie staan. Deze kenmerken bevatten onder andere:
- Dependencies (Afhankelijkheden): Hoeveel andere bestanden spreekt dit bestand aan?
- Shared Words (Gedeelde Woorden): Gebruiken ze dezelfde technische woordenschat?
- Size (Grootte): Hoe groot zijn de bestanden?
- Complexity (Complexiteit): Hoe moeilijk zijn ze te begrijpen?
Vervolgens voedden ze deze kenmerken aan een Machine Learning "Brein" (een computermodel) dat getraind is op meer dan 6 miljoen paren bestanden uit 11 verschillende open-source softwareprojecten (zoals Kafka, Hadoop en Druid).
De Bevindingen: Wat Maakt een Paar "Smelly"?
De computer leerde de "smells" met hoge nauwkeurigheid te herkennen. Belangrijker nog, de auteurs vroegen de computer om uit te leggen welke kenmerken de grootste rode vlaggen waren.
1. Voor Bestanden Die Bij Elkaar Horen Maar Gescheiden Zijn (InSep)
Het model vond dat gescheiden bestanden waarschijnlijk "smelly" (verkeerd gescheiden) zijn als:
- Ze te veel "uitgaande" verbindingen hebben: Stel je twee mensen voor in verschillende kamers die constant instructies naar dezelfde groep mensen in de gang schreeuwen. Als zij zwaar leunen op dezelfde externe bronnen, is het waarschijnlijk beter dat ze in dezelfde kamer zijn om de coördinatie te verbeteren.
- Ze te veel woorden delen met de rest van het systeem: Als beide bestanden constant over dezelfde concepten praten als de rest van de gebouwen, zijn ze waarschijnlijk onderdeel van hetzelfde "team" en zouden ze niet geïsoleerd moeten zijn.
- Ze erg simpel zijn (weinig velden): Als twee bestanden klein en simpel zijn maar wel op elkaar afhankelijk zijn, is het apart houden ervan alsof je een linker- en een rechterschoen in verschillende dozen legt. Ze zijn te simpel om een scheiding te rechtvaardigen.
2. Voor Bestanden Die Samen Zijn Maar Apart Horen Te Zijn (InCol)
Het model vond dat bestanden die bij elkaar vastzitten "smelly" (verkeerd gegroepeerd) zijn als:
- Ze spreken niet dezelfde taal (Lage Semantische Gelijkenis): Als het ene bestand over "Koken" gaat en het andere over "Geschiedenis", maar ze zitten in dezelfde doos, dan is dat een fout. Het model controleert of ze vergelijkbare technische termen gebruiken; zo niet, dan horen ze niet bij elkaar.
- Ze niet veel woorden met elkaar delen: Zelfs als ze in dezelfde doos zitten, als ze nooit dezelfde zaken noemen, zijn ze waarschijnlijk ongerelateerd.
- Ze te veel "ingangse" verbindingen hebben: Stel je één kantoor voor waar 50 verschillende mensen van andere afdelingen naartoe komen om werk af te leveren. Als twee bestanden in dezelfde module constant worden bestookt met verzoeken van overal, is die module waarschijnlijk te druk en moet deze worden opgesplitst om de werklast aan te kunnen.
Waarom Dit Belangrijk Is
De auteurs bieden een "Gebruikershandleiding" voor ontwikkelaars. Nu in plaats van alleen een rood vlaggetje te zien dat zegt "Dit is fout", kan een ontwikkelaar zien waarom:
- "Oh, deze twee bestanden zijn gescheiden, maar ze zijn allebei afhankelijk van dezelfde 50 andere bestanden. Ik moet ze bij elkaar brengen."
- "Oh, deze twee bestanden zijn samen, maar het ene is een hulpmiddel en het andere is een business logic tool, en ze hebben geen gedeelde woordenschat. Ik moet ze splitsen."
De Kern van het Verhaal
Dit artikel neemt een complex softwareprobleem — uitzoeken waarom softwaremodules rommelig zijn — en breekt dit af in eenvoudige, begrijpelijke kenmerken. Door een "detective"-aanpak met machine learning te gebruiken, hebben de auteurs de specifieke "persoonlijkheidskenmerken" (zoals hoeveel verbindingen een bestand heeft of hoeveel woorden het deelt) geïdentificeerd die een ontwerpfout signaleren. Dit helpt ontwikkelaars niet alleen om de rommel te vinden, maar ook om de oorzaak te begrijpen, zodat ze het effectief kunnen opruimen.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.