Detecting Object-Oriented Code Smells through Social Network Analysis
Dit artikel stelt een nieuwe aanpak voor voor het detecteren van objectgeoriënteerde code smells door softwarecomponenten en hun interacties te modelleren als sociale netwerken en Social Network Analysis (SNA) metrieken toe te passen op vier Java open-source projecten om verborgen ontwerpfouten te onthullen.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (https://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
Software wordt gebouwd uit talloze kleine instructies die samenwerken, vergelijkbaar met hoe een stad wordt opgebouwd uit individuele gebouwen en de wegen die hen verbinden. Wanneer een stad goed gepland is, verloopt het verkeer soepel en kunnen er nieuwe wijken worden toegevoegd zonder chaos. In de wereld van computerprogrammeren wordt deze organisatie "objectgeoriënteerd ontwerp" genoemd, waarbij code wordt gegroepeerd in zelfstandige eenheden die met elkaar interageren. Echter, net zoals een stad kan lijden onder overvolle kruispunten of verlaten gebouwen, kan software structurele gebreken ontwikkelen die bekend staan als "code smells" (codegeuren). Dit zijn geen fouten die ervoor zorgen dat een programma crasht, maar eerder tekenen dat het ontwerp rommelig, moeilijk te begrijpen of lastig te repareren wordt. Als deze geuren onbehandeld blijven, maken ze software kwetsbaar en duur in onderhoud, waardoor ontwikkelaars meer tijd kwijt zijn aan het ontwarren van knopen dan aan het bouwen van nieuwe functies.
Decennialang hebben onderzoekers geprobeerd deze gebreken automatisch te vinden, vaak door het tellen van regels code of het meten van hoeveel variabelen een enkel gedeelte gebruikt. Hoewel dit nuttig is, missen deze traditionele methoden soms het grotere plaatje, omdat ze er niet in slagen te zien hoe verschillende onderdelen van het systeem op complexe wijze op elkaar steunen. Een nieuwe benadering, die gedetailleerd wordt in een recente studie van Mohamed Maddeh van de King Saud University, suggereert om naar software niet alleen te kijken als een verzameling bestanden, maar als een sociaal netwerk. In dit visie is elke klasse code een persoon, en elke keer dat een stuk code een ander stuk code gebruikt, is dat een sociale interactie. Door dezelfde wiskundige instrumenten toe te passen die worden gebruikt om vriendschappen en invloed in menselijke gemeenschappen in kaart te brengen, heeft de onderzoeker een manier ontwikkeld om deze structurele zwakheden met grotere helderheid op te sporen.
De studie richtte zich op vier bekende, open-source softwareprojecten geschreven in de programmeertaal Java: JUnit, Spring, Apache Commons BCEL en Guava. Deze projecten variëren aanzienlijk in omvang, van enkele honderden tot meer dan vierduizend afzonderlijke code-eenheden. Om ze te analyseren, extraheerde de onderzoeker eerst elke klasse binnen deze projecten en bracht exact in kaart hoe zij met elkaar interageerden. Als een klasse gegevens of een functie van een andere klasse nodig had, werd er een lijn tussen hen getrokken, wat een massief web van verbindingen creëerde. Dit web werd vervolgens geïmporteerd in een gespecialiseerde visualisatietool genaamd Gephi, die de onderzoeker in staat stelde om de gehele structuur van de software te zien als een enkele, onderling verbonden kaart.
Zodra de software als een netwerk werd gemodelleerd, paste de onderzoeker specifieke metingen toe om de "smells" te identificeren. In een sociaal netwerk is een persoon die iedereen kent en in het centrum van veel gesprekken zit, zeer verbonden. In software duidt een klasse die met te veel andere klassen interacteert vaak op een "God Class", een eenheid die te veel verantwoordelijkheden op zich heeft genomen en alles probeert te doen. Omgekeerd is een persoon die niemand kent en alleen aan de rand van de kaart zit, een vertegenwoordiger van "Dead Code" (dode code), een stuk software dat niet langer wordt gebruikt. Andere patronen, zoals een groep mensen die alleen met elkaar praten maar nooit met de buitenwereld, of een enkel persoon die fungeert als de enige brug tussen twee aparte groepen, onthulden gebreken zoals "Data Classes" die informatie vasthouden zonder iets te doen, of "Shotgun Surgery", waarbij een enkele wijziging aanpassingen vereist op veel verschillende plaatsen.
De resultaten toonden aan dat deze netwerkgebaseerde methode effectief de overgrote meerderheid van de gezonde code kon wegfilteren, waardoor ontwikkelaars met een veel kortere lijst van verdachten overbleven om te inspecteren. In het grootste bestudeerde project, dat meer dan vierduizend klassen bevatte, markeerde de methode slechts ongeveer 17 procent als potentieel problematisch. In een ander project met bijna duizend klassen identificeerde het ongeveer 35 procent dat aandacht nodig had. De visualisatietools maakten deze bevindingen direct en intuïtief; de "God Classes" verschenen als grote, felgekleurde hubs in het midden van de kaart, terwijl de "Dead Code" en "ongebruikte klassen" verschenen als kleine, doffe knooppunten die naar de uiterste randen werden geduwd, vaak geïsoleerd in hun eigen losgekoppelde eilanden.
Deze benadering beweert geen menselijk oordeel te vervangen of elk enkelvoudig gebrek perfect en foutloos te identificeren. In plaats daarvan dient het als een krachtig triage-instrument, een manier om de overweldigende taak van het beoordelen van een volledige codebase terug te brengen tot een beheersbare lijst van de meest structureel ongewone onderdelen. Door zich te richten op de relaties tussen stukken code in plaats van alleen op hun interne inhoud, biedt de methode een fris perspectief op een oud probleem. Het suggereert dat de gezondheid van een softwaresysteem vaak zichtbaar is in het patroon van de verbindingen, en dat door deze patronen in kaart te brengen, ontwikkelaars de verborgen zwakheden kunnen vinden die de stabiliteit van hun digitale creaties bedreigen voordat deze onbeheersbaar worden.
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.