toplogo
サインイン

Java-Klassen mit den Suffixen "-Er" und "-Utils" haben eine höhere Komplexität


核心概念
Klassen mit den Suffixen "-Er/-Or" und "-Utils" weisen im Durchschnitt eine mehr als 2,5-mal höhere Komplexität auf als andere Klassen.
要約

Die Studie analysierte 13.861 Java-Klassen aus 212 Open-Source-GitHub-Repositorys und untersuchte die Komplexität und Kohäsion von Klassen mit den Suffixen "-Er/-Or" und "-Utils" im Vergleich zu anderen Klassen.

Die Ergebnisse zeigen:

  • Klassen mit den Suffixen "-Er/-Or" und "-Utils" haben im Durchschnitt eine 2,5-mal höhere zyklomatische Komplexität (CC) und kognitive Komplexität (CoCo) als andere Klassen.
  • Die Kohäsionsmetrik LCOM5 ist für Klassen mit den Suffixen "-Er/-Or" und "-Utils" deutlich schlechter, was auf eine geringere Kohäsion hindeutet.
  • Die Kohäsionsmetrik NHD zeigt für Klassen mit dem "-Utils"-Suffix sogar eine leicht bessere Kohäsion als für andere Klassen.

Insgesamt deuten die Ergebnisse darauf hin, dass Klassen mit den untersuchten Suffixen eher ein Anzeichen für schlechtes Design sind, da sie tendenziell komplexer und weniger kohäsiv sind.

edit_icon

要約をカスタマイズ

edit_icon

AI でリライト

edit_icon

引用を生成

translate_icon

原文を翻訳

visual_icon

マインドマップを作成

visit_icon

原文を表示

統計
Die durchschnittliche zyklomatische Komplexität (CC) beträgt für Klassen mit dem Suffix "-Er/-Or" 14,26, für Klassen mit dem Suffix "-Utils" 15,444 und für alle anderen Klassen 5,983. Die durchschnittliche kognitive Komplexität (CoCo) beträgt für Klassen mit dem Suffix "-Er/-Or" 20,106, für Klassen mit dem Suffix "-Utils" 20,931 und für alle anderen Klassen 7,731.
引用
"Funktor-Klassen stellen ein Problem für die Wartbarkeit dar, da sie typischerweise lediglich Aggregate von Prozeduren sind, die kaum miteinander in Beziehung stehen." "Klassen mit Namen, die auf '-Er/-Or' oder '-Utils' enden, werden oft kritisiert, da sie die objektorientierten Entwurfsprinzipien verletzen und das Design weniger strukturiert machen."

抽出されたキーインサイト

by Anna Sukhova... 場所 arxiv.org 03-27-2024

https://arxiv.org/pdf/2403.17430.pdf
Java Classes with "-Er" and "-Utils" Suffixes Have Higher Complexity

深掘り質問

Welche anderen Metriken könnten verwendet werden, um die Qualität des Designs von Klassen mit spezifischen Suffixen noch genauer zu untersuchen?

Zusätzlich zu den in der Studie verwendeten Metriken wie Cyclomatic Complexity (CC), Cognitive Complexity (CoCo), LCOM5 und Normalized Hamming Distance (NHD) könnten weitere Metriken zur Untersuchung der Qualität des Designs von Klassen mit spezifischen Suffixen nützlich sein. Einige dieser Metriken könnten sein: Kopplungsmetriken: Metriken, die die Abhängigkeiten zwischen Klassen messen, wie z.B. Anzahl der eingehenden und ausgehenden Klassenbeziehungen. Größe und Komplexität von Methoden: Metriken, die die Größe und Komplexität der Methoden innerhalb einer Klasse bewerten, wie z.B. Anzahl der Zeilen pro Methode, Anzahl der Verzweigungen, Tiefe der Verschachtelung usw. Testabdeckung: Die Testabdeckung einer Klasse kann auch als Metrik verwendet werden, um die Qualität des Designs zu bewerten, da gut gestaltete Klassen normalerweise eine höhere Testabdeckung aufweisen. Zyklomatische Komplexität von Methoden: Anstatt die gesamte zyklomatische Komplexität einer Klasse zu betrachten, könnte die Analyse auf die zyklomatische Komplexität einzelner Methoden innerhalb der Klasse ausgeweitet werden. Durch die Integration dieser zusätzlichen Metriken könnte eine umfassendere Bewertung der Qualität des Designs von Klassen mit spezifischen Suffixen erreicht werden.

Wie lassen sich die Erkenntnisse dieser Studie auf andere objektorientierte Programmiersprachen übertragen?

Die Erkenntnisse dieser Studie zur höheren Komplexität und geringeren Kohäsion von Klassen mit bestimmten Suffixen wie "-Er/-Or" und "-Utils" können auf andere objektorientierte Programmiersprachen übertragen werden, da die zugrunde liegenden Designprinzipien und Probleme in verschiedenen Sprachen ähnlich sind. Hier sind einige Möglichkeiten, wie diese Erkenntnisse auf andere Sprachen angewendet werden könnten: Namenskonventionen: Entwickler in anderen Sprachen könnten ähnliche Namenskonventionen verwenden, die auf die Probleme mit Funktorklassen hinweisen, und ähnliche Designprobleme verursachen. Kohäsion und Komplexität: Die Konzepte von Kohäsion und Komplexität sind in allen objektorientierten Sprachen relevant. Entwickler können die Ergebnisse dieser Studie nutzen, um die Qualität des Designs in anderen Sprachen zu bewerten und zu verbessern. Refactoring-Techniken: Die in der Studie diskutierten Refactoring-Techniken zur Verbesserung des Designs von Klassen können auch in anderen Sprachen angewendet werden, um ähnliche Probleme anzugehen. Durch die Anwendung der Erkenntnisse dieser Studie auf andere objektorientierte Programmiersprachen können Entwickler ein besseres Verständnis für die Auswirkungen bestimmter Designentscheidungen gewinnen und die Qualität ihres Codes verbessern.

Welche Designprinzipien und Refactoring-Techniken könnten Entwickler anwenden, um die Probleme mit Funktor-Klassen zu adressieren?

Um die Probleme mit Funktor-Klassen anzugehen und die Qualität des Designs zu verbessern, könnten Entwickler verschiedene Designprinzipien und Refactoring-Techniken anwenden. Hier sind einige Vorschläge: Einzelverantwortungsprinzip (Single Responsibility Principle): Entwickler sollten sicherstellen, dass Klassen nur eine einzige Verantwortung haben und nicht überladen sind. Dies kann dazu beitragen, die Kohäsion zu verbessern und die Komplexität zu reduzieren. Refactoring von Utility-Klassen: Utility-Klassen sollten aufgeteilt werden, um spezifische Funktionalitäten zu isolieren und die Wiederverwendbarkeit zu verbessern. Dies kann durch die Erstellung von spezifischeren Klassen oder die Anwendung von Entwurfsmustern wie dem Fassadenmuster erreicht werden. Verwendung von Interfaces: Durch die Verwendung von Interfaces können Entwickler die Abhängigkeiten zwischen Klassen lockern und die Flexibilität des Codes erhöhen. Dies kann dazu beitragen, die Kopplung zu reduzieren und die Wartbarkeit zu verbessern. Code Reviews und Pair Programming: Regelmäßige Code-Reviews und Pair Programming-Sitzungen können dazu beitragen, Designprobleme frühzeitig zu erkennen und zu beheben, bevor sie zu größeren Problemen führen. Durch die Anwendung dieser Designprinzipien und Refactoring-Techniken können Entwickler die Qualität des Designs von Funktor-Klassen verbessern und die Wartbarkeit ihres Codes erhöhen.
0
star