Ich verwende SonarQube für meine Java-Projekte und möchte Code-Duplikationen so weit wie möglich aus unserem Code entfernen.
Mein Problem ist, dass SonarQubes Code-Duplikationserkennung Methodengrenzen nicht berücksichtigt. Sie listet identische Dateiteile als Duplikate auf, und oft beginnt eine Duplizierung mitten in einer Methode und endet in der Mitte einer anderen. Diese können kaum refaktoriert werden.
Hier ist ein Beispiel . Klicken Sie auf die Datei MavenArtifactRepository.java im oberen rechten Listenfeld und sehen Sie sich den vierten Duplizierungsblock im unteren Teil der Seite an.
Gibt es eine Möglichkeit, das Code-Duplizierungs-Detektor-Plug-in zu parametrisieren, um Duplikate zu zeigen, die syntaktisch kohärent sind?
Derzeit können Sie dies nicht erreichen, indem Sie SonarQube selbst konfigurieren. Sie können jedoch unser Tool SourceMeter mit dem SonarQube plug-in , das eine AST-basierte Klonerkennung implementiert und daher syntaktisch kohärente Duplikationen in SonarQube darstellt. Ein Beispiel können Sie einen Blick auf die Online-Demo .
Das Problem, das Sie erwähnen, ist in der Clone-Research-Community bekannt und eines der Hauptprobleme, warum nicht viele Leute die Klonerkennung in der Praxis verwenden. SonarQube implementiert einen relativ einfachen und naiven Algorithmus, der Code-Duplikation basierend auf Token-Folgen erkennt und daher nicht versteht, was eine Methode ist (neben einer Reihe anderer Probleme). Die Antwort auf Ihre Frage lautet also no .
Eine Lösung wäre, nach einem Klon-Erkennungsalgorithmus zu suchen, der Code-Duplikation basierend auf abstrakten Syntaxbäumen (AST) erkennt. Aber meines Wissens gibt es kein solches Tool kostenlos.
Eine alternative Lösung wäre, ConQAT zu verwenden. ConQAT verwendet ebenfalls einen Token-basierten Klon-Erkennungsansatz, hat aber ziemlich komplizierte Nachverarbeitungsschritte. Eine davon ist die sogenannte "AST-Ausrichtung", bei der doppelte Codefragmente nach der Erkennung mit den syntaktischen Einheiten (wie Methoden) innerhalb des Quellcodes ausgerichtet werden. Dies sollte genau das sein, was Sie suchen.
Tags und Links java sonarqube code-duplication