Detailseite
Projekt Druckansicht

Bad Smells in langlebigen Systemen - Empirische Untersuchungen zur Auswirkung und Evolution von Bad Smells

Fachliche Zuordnung Softwaretechnik und Programmiersprachen
Förderung Förderung von 2014 bis 2018
Projektkennung Deutsche Forschungsgemeinschaft (DFG) - Projektnummer 242915193
 
Erstellungsjahr 2019

Zusammenfassung der Projektergebnisse

Bad Smells im Quelltext von Softwareprogrammen sind ein regelmäßig auftretendes Phänomen. Sie treten häug durch Missachtung grundlegender Programmierprinzipien auf. Die Gründe für diese Quelltextanomalien sind vielfältig. Ein weit verbreiteter Glaube ist es, dass Bad Smells die Wartbarkeit von Softwaresystemen negativ beeinflussen und sich Softwareentwickler aus diesem Grund aktiv um diese kümmern sollten - solche Tätigkeiten werden unter dem Begriff Bad-Smell-Management zusammengefasst. Für diese Annahme konnte die Forschung eine Reihe von Indizien sammeln, es gibt jedoch keinen abschließenden Beweis für stets negative Auswirkungen. Für eine hinreichende Bewertung der Effekte von Bad Smells auf die Wartbarkeit von Software sowie eine Kosten-Nutzen-Analyse von aktivem Bad-Smell-Management müssen noch weitere empirische Studien Aufschluss geben. Ein Problem existierender Forschungsarbeiten ist, dass nur wenige Bad Smells und Programmiersprachen bei der Evaluation berücksichtigt werden. Hierzu wurden in diesem Projekte neue Methoden und Werkzeuge entwickelt, die Analysen weiterer Typen von Bad Smells in mehreren weiteren Programmiersprachen und insbesondere auch ihrer Versionshistorie und weiterer Meta-Daten ermöglichen. In diesem Projekt wurde eine technische Infrastruktur entwickelt, die das Erkennen von Bad Smells in C, C++ und Java-Programmen ermöglicht. Basierend auf der Generierung abstrakter Syntaxbäume, die mit Hilfe des Spoon-Projekts um weitere Daten angereichert wurden, haben wir Detektoren für viele weitere Bad Smells implementiert. Mit Hilfe der Infrastruktur können weitere metrikbasierte Bad Smells einfach ergänzt werden. Für jeden Bad Smell muss lediglich das Besucherentwurfsmuster auf dem vorhandenen AST implementiert werden. Bei der Implementierung kann man sich an den bestehenden Detektoren orientieren. Neben der Identifizierung von Bad Smells in nur einer Version eines Software Systems, haben wir auch eine inkrementelle Analyse über viele Versionen hinweg ermöglicht. Dabei werden alle Bad Smells zweier aufeinander folgender Versionen erkannt und individuelle Bad Smells aufeinander abgebildet, wenn sie in beiden Versionen vorhanden sind. Mit Hilfe der Abbildung von Bad Smells lässt sich ihre Evolution nachverfolgen und daraus neue Erkenntnisse gewinnen. Die Abbildung von Bad Smells zwischen zwei Versionen findet während des Erkennungsprozesses statt und ist kein nachgelagerter Schritt. Auf diese Weise lässt sich die Effizienz steigern, damit das Verfahren auch für große Systeme mit langer Historie skaliert. Zudem stellen wir dadurch sicher, dass nach der Analyse jeder Version alle bis dahin gesammelten Daten vollständig sind und die Analyse zwischenzeitlich beendet und zu einem späteren Zeitpunkt wieder aufgenommen werden kann. So lassen sich auch Analysen auf bereits gesammelte Daten durchführen, da diese zu jedem Zeitpunkt valide sind. Die gesamte Infrastruktur zur Erkennung und Verfolgung von Bad Smells haben wir in dem Werkzeug LibVCS4j implementiert und frei verfügbar gemacht. Um die Kooperation und den Datenaustausch zwischen Forschern auf dem Gebiet der Bad Smells zu fördern, haben wir eine Datenbank entworfen, die als Meta-Modell genutzt werden kann. Statt ein einheitliches Modell und Datenformat zu entwerfen, das existierende spezialisierte Modelle und Formate ersetzen soll, bieten wir definierte Schnittstellen zum Auslesen und Schreiben von Daten aus bzw. in die Datenbank. Der Entwurf ist flexibel und kann nach Bedarf erweitert werden, ohne die Kompatibilität zu älteren Versionen zu verlieren. Aktuell werden bereits Modelle und Datenformat weit verbreiteter Bad Smell Erkenner unterstützt - sowohl für Analysen einzelner als auch mehrerer Versionen eines Systems. Auch das inkrementelle Vorgehen von LibVCS4j wird bereits unterstützt, so dass evolutionäre Analysen auch unterbrochen und die Daten trotzdem in die Datenbank geschrieben und verwendet werden können. Der Austausch von Forschungsergebnissen ist ein wichtiger Aspekt der Datenbank und vereinfacht beispielsweise Replikationen von existierenden Studien und bietet einen großen Datenpool für empirische Studien. In zwei umfassenden empirischen Studien haben wir verschiedene Aspekte von mehreren Bad Smells in der Evolution quelloffenen Projekten untersucht. Ergebnisse der Studie haben gezeigt, dass Bad Smells ein häufig vorhandenes Phänomen in Quelltext ist. Die Menge identifizierter Bad Smells unterschied sich jedoch zwischen den System teilweise deutlich, so dass keine allgemeine Aussage zu der Rate über alle untersuchten Bad Smells und Systeme getroffen werden kann. Interessanterweise hat die Studie gezeigt, dass die Rate der Bad Smells nicht linear mit der Systemgröße wächst und für einige Systeme zumindest vorübergehend sogar sinkt (trotz wachsender Gesamtgröße gemessen in Quelltextzeilen). Wie vorangegangene Studien konnten unsere Ergebnisse bestätigen, dass die meisten Bad Smells sehr langlebig und eher selten von Änderungen betroffen sind. Dies ist ein interessanter Aspekt mit Hinblick auf die Wartbarkeit von Software und sollte in zukünftigen Studien weiter vertieft werden, um die Einfluss von Bad Smells auf die Wartbarkeit zu messen. Schließlich haben wir den Ort einzelner Bad Smells lokalisiert und einen klaren Trend über alle Bad Smells und Systeme gefunden, dass Bad Smells mehrheitlich verstreut im Verzeichnisbaum eines Systems identifiziert wurden und somit, bis auf wenige Ausnahmen, nicht als lokal eingegrenztes Problem betrachtet werden können. Aktuell erweitern wir unsere Studie, um mögliche Korrelationen zwischen einzelnen Bad Smells zu untersuchen und welche Konsequenten sich, insbesondere auf die Wartbarkeit eines Systems, daraus ergeben.

Projektbezogene Publikationen (Auswahl)

  • Effect of Clone Information on the Performance of Developers Fixing Cloned Bugs. In: Conference on Source Code Analysis and Manipulation, IEEE Computer Society Press, 2014, S. 1-10
    Bazrafshan, Saman ; Koschke, Rainer
    (Siehe online unter https://doi.org/10.1109/SCAM.2014.10)
  • Large-Scale Inter-System Clone Detection Using Sux Trees and Hashing. In: Journal of Software: Evolution and Process 26 (2014), August, Nr. 8, S. 747-769
    Koschke, Rainer
    (Siehe online unter https://doi.org/10.1002/smr.1592)
  • The Vision of Software IEEE Conference on Software Maintenance, Clone Management: Past, Present and the Future. In: Reengineering and Reverse Engineering (CSMR-WCRE), 2014 Software Evolution Week, IEEE Computer Society Press, 2014, S. 18-33
    Roy, Chanchal K. ; Zibran, Minhaz F. ; Koschke, Rainer
    (Siehe online unter https://doi.org/10.1109/CSMR-WCRE.2014.6747168)
  • An Arc-Based Approach for Visualization of Code Smells. In: IEEE International Conference on Software Analysis, Evolution and Reengineering, IEEE Computer Society Press, Februar 2017, S. 397-401
    Steinbeck, Marcel
    (Siehe online unter https://doi.org/10.1109/SANER.2017.7884641)
  • A Controlled Experiment on Spatial Orientation in VR-Based Software Cities. In: IEEE Working Conference on Software Visualization, IEEE Computer Society Press, September 2018, S. 21-31
    Rüdel, Marc-Oliver ; Ganser, Johannes ; Koschke, Rainer
    (Siehe online unter https://doi.org/10.1109/VISSOFT.2018.00011)
  • Erosion von Software: Was kann uns die Wissenschaft heute dazu sagen? In: Proceedings of the Embedded Software Engineering, 2018; number of pages: 14
    Koschke, Rainer ; Harder, Jan ; Bazrafshan, Saman
 
 

Zusatzinformationen

Textvergrößerung und Kontrastanpassung