2014-05-05 3 views
8

Ich verwende SonarQube für meine Java-Projekte und möchte Code-Duplikationen so weit wie möglich aus unserem Code entfernen.Kann SonarQube Code-Duplikationsdetektor parametrisiert werden, um an Methodengrenzen zu stoppen?

Mein Problem ist, dass SonarQube 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 example. Klicken Sie im oberen rechten Listenfeld auf Datei MavenArtifactRepository.java und schauen 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?

+0

Schauen Sie sich unser CloneDR-Tool an; Es wird ein AST-basiertes Matching durchgeführt, das Codestrukturgrenzen wie Methoden implizit berücksichtigt. Siehe meine Biographie. (Ich würde einen Link bereitstellen, aber SO scheint meine Tool-Links zu hassen). –

Antwort

4

Derzeit können Sie dies nicht erreichen, indem Sie SonarQube selbst konfigurieren. Sie können jedoch unser Tool SourceMeter mit seiner SonarQube plug-in testen, das eine AST-basierte Klonerkennung implementiert und daher syntaktisch kohärente Duplikationen in SonarQube darstellt. Für ein Beispiel können Sie sich die online demo ansehen.

2

Das Problem, das Sie erwähnen, ist in der Clone-Forschungsgemeinschaft wohlbekannt und eines der Hauptprobleme, warum nicht viele Leute die Klonerkennung in der Praxis verwenden. SonarQube implementiert einen ziemlich einfachen und naiven Algorithmus, der Code-Duplikation basierend auf Sequenzen von Tokens erkennt und daher kein Verständnis dafür hat, was eine Methode ist (neben einer Reihe anderer Probleme). Also die Antwort auf Ihre Frage ist keine.

Eine Lösung wäre, nach einem Klon-Erkennungsalgorithmus zu suchen, der Code-Duplizierung auf der Basis von 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 Nachbearbeitungsschritte. 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.

+0

Ich glaube, dass das zuvor erwähnte CodeAnalyzer-Plugin tatsächlich AST-basierte Klonerkennung verwendet. – Rhino666

Verwandte Themen