title: An open-source tool for detecting violations of object-oriented design principles in Java
Creators: name: Oberweger, Roland
Publisher: name: TU Wien
Year: 2020
Subjects: subject: Designprinzipien
subject: Softwarequalität
subject: Designqualität
subject: design principles
subject: software quality
subject: design quality

description: Designprinzipien helfen Entwicklern beim Erstellen von Designs, welche leicht implementiert und gewartet werden können. Designprinzipien sind aber nur Heuristiken. Eine Verletzung eines Designprinzips zu finden hat zwei Vorteile. Erstens hat eine Designprinzip-Verletzung, im Gegensatz zu einer Metrik, eine genaue Stelle im Programmcode. Zweitens ist das Designprinzip selbst schon die Anleitung, um das Problem zu beheben. Normalerweise wird die Einhaltung von Designprinzipien manuell überprüft, weil es wenig bis gar keine Toolunterstützung gibt, vor allem im Open-Source Bereich. Verfügbare Tools konzentrieren sich auf Metriken, häufige Programmierfehler und ein paar wenige Best-Practices, bringen diese aber nie in Verbindung mit Designprinzipien. Die meiste bestehende Literatur im Bereich der Designqualität und ihrer Messbarkeit fokussiert sich auf Metriken, aber es wurde auch schon daran geforscht Verletzungen von Designprinzipien zu finden. Designprinzipien können in Design-Best-Practices zerlegt werden, welche konkret genug sind, damit ihre Verletzungen mittels statischer Code-Analyse gefunden werden können. In dieser Arbeit analysieren wir die Erkennbarkeit von Verletzungen von 23 Designprinzipien. Wir schauen uns alle Prinzipien an die bei einer Websuche aufscheinen und häufig diskutiert werden. Weil Designprinzipien vage sind, beschreiben wir sie genau. Für manche Designprinzipien gibt es bereits Erkennungsstrategien in der Literatur, für die restlichen haben wir selbst welche entwickelt. Um die Erkennungsstrategien zu evaluieren führen wir ein statisches Code-Analyse-Tool ein, welches die Erkennungsstrategien implementiert. Das neue Tool lassen wir über Open-Source Projekte laufen und analysieren das Ergebnis, um die Eignung der Erkennungsstrategien und das Tool selbst zu bewerten. Unsere Evaluierung legt nahe, dass Verletzungen von 13 der analysierten Designprinzipien automatisch erkannt werden können. Wir finden heraus, dass Verletzungen von sieben Designprinzipien grundsätzlich nicht automatisch erkennbar sind. Bei zwei Prinzipien waren wir von ihrer automatischen Erkennbarkeit überzeugt, müssen diese Annahme aber aufgrund unserer Evaluierung wieder verwerfen. Für ein Designprinzip haben wir zu wenig Information um eine sichere Aussage treffen zu können. Wir denken die automatische Erkennung von Verletzungen von Designprinzipien ist hilfreich, um die Designqualität eines Projekts zu bestimmen. Die Anzahl an gefundenen Verletzungen ist ein Indikator für die Gesamtqualität. Weiters denken wir, dass die Typen von Verletzungen Aufschluss darüber geben, welche Designaspekte vernachlässigt wurden.
description: Design principles help developers to create designs which are easy to implement and maintain but they are only heuristics. Finding a violation of a design principle has two benefits. First, unlike a metric a design principle violation has a location in the source code. Second, the the design principle itself is already the guidance on how to fix the problem. Usually, compliance with design principles is reviewed manually because there exists little to none tool support, especially in the open-source field. Available static code analyzers concentrate on metrics, common programming flaws and some design best practices but do not bring them into relation with design principles. Most existing research in the field of design quality and its measurement is focused on metrics but some research was already conducted on how to find violations of design principles. Design principles can be broken down into design best practices which in turn are concrete enough for static code analyzers to detect violations of them. In this thesis, we analyze the automatic detectability of violations of 23 design principles. We take all design principles into account which come up via a web search and are frequently discussed. Because design principles are vague we describe them in detail. For some principles there are already detection strategies described in the literature, for others we come up with strategies ourselves. To evaluate the detection strategies we introduce a static code analyzer that implements the found strategies. We run the new tool against open-source projects and analyze the output to assess the appropriateness of the detection strategies and the tool itself. Our evaluation suggests the automatic detectability of violations of 13 of the analyzed principles. We find violations of seven design principles are inherently not automatically detectable. Two of the principles we thought to be automatically detectable, but had to reject our assumption after the evaluation. For one principle we do not have enough information to make an informed statement. We find the automatic detection of violations of design principles useful to assess the quality of software projects because the amount of violations is an indicator for the overall design quality. We also think the types of violations give hints about the design aspects that got neglected.