Über patterntesting-check

PatternTesting Check (patterntesting-check) ist ein Framework, dass die automatische Überprüfung von Architektur- und Design-Empfehlungen ermöglicht. Es erkennt eine Reihe bekannter Anti-Patterns (wie z.B. die Verwendung von System.out für's Logging), unterstützt aber auch das Testen.

Einführung

2002 war PatternTesting Check der Ausgangspunkt der gesamten PatternTesting-Komponenten. Es war (und ist) einer der ersten AspectJ-Bibliotheken, das einige bekannte Anti-Patterns für Java erkennt. Einige der Prüfungen wie die System.out- oder System.err-Erkennung finden während der Compilierung statt, andere Überprüfungen wie die Aufdeckung von Null-Übergabe von Argumenten finden während der Laufzeit (Runtime) statt.

Seit 2009 wurde PatternTesting Check aufgeteilt in:

  • PatternTesting Check.CT für die Prüfungen zur "Compile Time",
  • PatternTesting Check.RT für die Prüfungen zur "Runtime".

Gründe für die Aufteilungen waren vor allem Performance-Probleme mit Eclipse 3.3. Die inkrementelle Compilierung dieser Version ist über 30 Mal langsamer als in Eclipse 3.4. Daher wurde der statische Teil (Check.CT) als eigene Komponente herausgezogen. Der interessantere Teil ist allerdings der Runtime-Teil. Nun kann man wählen, ob man nur den Runtime-Teil verwenden will oder beide.

Empfehlungen

Verwende mindestens Eclipse 3.4 - es ist um Längen schneller als Eclipse 3.3 (siehe Performance Boost with Eclise 3.4 / AJDT 1.6.3).

Einige der statischen Überprüfungen kann auch von anderen Tools wie FindBugs oder PMD durchgeführt werden. Der Vorteil von PatternTesting Check.CT ist hier, dass es Teil des Compilier-Vorganges ist - der Benutzer sieht also die Warnung unmittelbar.
Nachteil: der Compile-Prozess wird dadurch etwas langsamer.

Hello World

Ein einfaches Hello-World-Beispiel (noch mit PatternTesting 0.6) findet sich in Oli's Blog.

Ein aktuelles Hello-World-Beispiel für PatternTesting ist im PatternTesting Wiki dokumentiert.

Weitere Beispiele

Weitere Beispiele finden sich in PatternTesting-Samples.