Google CodePro Analytix - Code Analysis
Name
Google CodePro Analytix - Code Analysis
Homepage
https://developers.google.com/java-dev-tools/codepro/doc/features/audit/audit
Lizenz
https://developers.google.com/java-dev-tools/codepro/doc/tos
Untersuchte Version
7.1.0 (letztes Update: 27.03.12)
Letzter Untersuchungszeitpunkt
09.08.12
Kurzbeschreibung
Mithilfe des Tools CodeAudit können Java-Programme auf verschiedenste Qualitätsmerkmale überprüft werden.
Fazit
Das Code Analyse-Tool von Google ist sehr umfangreich und bietet zahlreiche Möglichkeiten beim Überprüfen von Java-Programmen.
Im Gegensatz zu den meisten Code-Analyse-Tools kann das Code-Audit-Tool von Google die Warnungen bzw. Fehler im Code auf verschiedenste Weisen ansprechend darstellen, sodass sie weiterverarbeitet werden können.
Einsatzgebiete
Das Code-Analyse-Tool von Google kann sehr gut auch in größeren Firmen genutzt werden, um Programmierstile zu überwachen bzw. QS zu betreiben. Durch die Möglichkeit einer ansprechenden Darstellung der Ergebnisse des Tools können Ergebnisse auch an unerfahrene Mitarbeiter weitergegeben und leichter verarbeitet werden.
Einsatzumgebungen
CodePro Analytix ist mit Eclipse ab Version 3.4 kompatibel.
Auf der Dokumentationsseite sind zwar nur Downloads bis Eclipse-Version 3.7 (Indigo) angegeben, diese funktioniert aber auch einwandfrei mit der Eclipse-Version 4.2 (Juno).
Installation
Google CodePro Analytix lässt sich recht einfach in Eclipse einbinden.
Es muss lediglich der jeweilige Link (abhängig von der installierten Eclipse-Version) von https://developers.google.com/java-dev-tools/download-codepro ausgewählt und bei Eclipse unter Help -> Install new Software
eingetragen werden (falls Eclipse-Version >3.7: Indigo-Version auswählen). Anschließend ist ein Neustart von Eclipse erforderlich. Google CodePro Analytix ist jetzt einsatzbereit.
Eine Installationsanleitung kann man auf https://developers.google.com/java-dev-tools/codepro/doc/install abrufen.
Dokumentation
Die offizielle Dokumentation ist einfach geschrieben und benutzerfreundlich gestaltet. Auch Benutzer ohne QS-Erfahrung können sich leicht einarbeiten.
Wartung der Projektseite
Das neueste Update der Seite gab es am 27.März 2012. Da es sich um ein Google-Tool handelt, kann man mit bleibender Aktualität rechnen.
Nutzergruppen und Support
Neben den Tutorialseiten gibt es ein Nutzerforum auf welches man bei Fragen zurückgreifen kann.
Intuitive Nutzbarkeit
Außer ein Grundwissen über Eclipse wird nichts weiter benötigt. Das Tool sollte für erfahrene Eclipse-Nutzer auch ohne Dokumentation gut nutzbar sein.
Einführendes Beispiel
Das einfachste Beispiel, um die Wirkungsweise des Code Audit Tools zu zeigen ist eine Klasse mit einer leeren main-Funktion:
public class CodeProAnalytix_simpleExample{
public static void main(String[] args) {
}
}
Um den Code nun zu testen, muss man nun einen Rechtsklick auf den Code, dann im Kontextmenü "CodePro Tools" -> "Audit Code Using..." anwählen und dann "Effective Java" ausgewählt werden (in diesem Beispiel soll gezielt "Effective Java" genutzt werden, um die Wirkungsweise des Tools deutlicher zu machen). Mit einem Klick auf "OK" starten wir die Analyse.
Im unteren Bildschirmbereich erscheint nun das Ergebnis im Audit-Window:
Es sollten 3 mittelschwere Warnungen angezeigt werden. Mit Klick auf die jeweilige Warnung erhält man weitere Informationen. In diesem Fall wird darauf hingewiesen, dass die "CodeProAnalytix_simpleExample"-Klasse keine toString()-Methode und keinen Javadoc-Kommentar besitzt. Auch die main()-Funktion benötigt ein Javadoc-Kommentar.
Eine äquivalente, aber "saubere" Klasse sähe nach "Effective Java"-Kriterien dann ungefähr so aus:
/**
* Eine einfache Klasse zum Testen der Wirkungsweise des Audit-Tools von Google CodePro Analytix
*
* @author Adrian Gehrke
* @version 0.1
*/
public class CodeProAnalytix_simpleExample{
/**
* Die main-Methode
*
* @param args Kommandozeilenparameter
*/
public static void main(String[] args) {
}
/**
* Die toString-Methode
*
* @return gibt "CodeProAnalytix_simpleExample" zurück
*/
public String toString(){
return "CodeProAnalytix_simpleExample";
}
}
Nun sollte das Analyse-Ergebnis so aussehen:
Detaillierte Beschreibung
Das Code-Analysis-Tool aus der "Google CodePro Analytix"-Reihe bietet viele Einstellungsmöglichkeiten. Einige davon werden in diesem Abschnitt erläutert.
-
Dynamic Auditing
Es gibt die Möglichkeit, die Analyse des Codes dynamisch durchführen zu lassen. Dies hat den Vorteil, dass die Analyse automatisch beim Klick auf Speichern ausgeführt wird.
Um "Dynamic Auditing" einzustellen, muss im Audit-Menü (in Eclipse: "CodePro" -> "Preferences" -> "Audit") der Reiter "Dynamic Auditing" und dort das Häkchen bei "Dynamically audit code" gesetzt werden. Unter "Use the audit rule set:" sollte für dieses Beispiel dann wieder "Effective Java" ausgewählt werden.
-
Export Violations
Um die Analyseergebnisse ansprechend zu exportieren, muss lediglich im Kontextmenü des Audit-Windows (Rechtsklick ins Audit-Window) unter "Export Violations" die jeweilige Dateiendung ausgewählt werden. Danach wird die Datei am angegebenen Speicherort gespeichert. Die HTML-Ausgabe sieht (für unser einfaches Beispiel) in etwa so aus:
-
E-mail Report
Sind richtige SMTP-Einstellungen (in Eclipse: "CodePro" -> "Preferences" -> "CodePro" -> "Mail") getroffen, besteht die Möglichkeit, Analyseergebnisse direkt per Mail zu versenden.
-
E-mail Report
Sind richtige SMTP-Einstellungen (in Eclipse: "CodePro" -> "Preferences" -> "CodePro" -> "Mail") getroffen, besteht die Möglichkeit, Analyseergebnisse direkt per Mail zu versenden.
-
Rules / Rule Sets
Ob (und welche) Warnung bei der Analyse angezeigt werden, geben die "Rules" an. Diese Regeln können unter "CodePro" -> "Preferences" -> "Audit" -> "Rules" angeschaut werden. Die "Rule Sets" (z.B. "Effective Java") fassen verschiedene Rules zusammen. Die meisten voreingestellten Rule Sets sind "locked", das bedeutet, dass sie nicht verändert werden können. Deshalb bietet es sich an, im "Rule Set"-Reiter ein eigenes Rule Set zu erstellen und seinen Anforderungen anzupassen.
-
Autofix
Das Code Analysis Tool bietet die hilfreiche Funktion, Fehler automatisch zu fixen. Der "Autofix" kann für die jeweilige Regel beim Reiter "Autofix" ein- bzw. ausgestellt werden.
Im folgenden Code-Beispiel soll die Wirkungsweise des Analyse-Tools verdeutlicht werden:
Beispiel mit Fehlern:
public class codeProAnalytix_detailedExample_withErrors_andLongTitle{
String s1 = new String("a");
int CONSTANT = new Integer(4);
static final int constant_1 = 5;
public static void main(String[] args) {
codeProAnalytix_detailedExample_withErrors_andLongTitle t1 = new codeProAnalytix_detailedExample_withErrors_andLongTitle();
t1.toManyParameters(1,2,3,4,5,6);
}
public codeProAnalytix_detailedExample_withErrors_andLongTitle(){
System.out.println(s1);
returnsNull();
overload(3);
overload(3.3);
emptyCatch();
}
private int[] returnsNull(){ return null; }
private void overload(int a){ return; }
private void overload(double a){ return; }
@Override protected void finalize() throws Throwable
{
try {
}
finally {
super.finalize();
}
}
private int toManyParameters(int a, int b, int c, int d, int e, int f){
return a+b+c+d+e+f;
}
private void emptyCatch(){
try{}
catch(Exception e){}
}
}
Verbessertes Beispiel:
/**
* verbesserte Fehler:
* Klassenname muss großgeschrieben werden
* Klassenname darf nicht zu lang sein
* Klassenname muss JavaDoc-Kommentar besitzen
* Klasse muss toString()-Methode besitzen
*
* @author Adrian Gehrke
* @version 0.1
*/
public class CodeProAnalytix_woErrors{
/**
* alle Membervariablen müssen JavaDoc-Kommentar besitzen
* Strings sollten nicht per "new String()" erzeugt werden
*/
String s1 = "a";
/**
* Falls Integer mit "new Integer()" erstellt sollte die Variable als Konstante definiert werden
*/
static final int CONSTANT = new Integer(4);
/**
* Konstantennamen dürfen nicht mit einer Zahl enden
*/
static final int CONSTANT_ONE = 5;
/**
* Die main-Methode
*
* @param args Kommandozeilenparameter
*/
public static void main(String[] args) {
CodeProAnalytix_woErrors t1 = new CodeProAnalytix_woErrors();
t1.toManyParameters(1,2,3,4,5);
}
/**
* Konstruktor
*/
public CodeProAnalytix_woErrors(){
System.out.println(s1);
returnsNull();
overload(3);
overload_two(3.3);
emptyCatch();
}
/**
* eine Methode sollte nicht "null" zurückgeben
*
* @return gibt jetzt ein Array zurück
*/
private int[] returnsNull(){
int returnArr[] = new int[5];
return returnArr;
}
/**
* erste Methode mit dem Namen "overload"
*
* @param a Integer-Variable
*/
private void overload(int a){ return; }
/**
* Methoden, die überladen werden (gleicher Methodenname, gleiche Parameteranzahl) sollten vermieden werden
*
* @param a Integer-Variable
*/
private void overload_two(double a){ return; }
// finalize sollte nicht verwendet werden
/*
@Override protected void finalize() throws Throwable
{
try {
}
finally {
super.finalize();
}
}
*/
/**
* Methoden sollten maximal 5 Parameter haben
*
* @param a Integer-Variable
* @param b Integer-Variable
* @param c Integer-Variable
* @param d Integer-Variable
* @param e Integer-Variable
*
* @return gibt Summe der Parameter zurück
*/
private int toManyParameters(int a, int b, int c, int d, int e){
return a+b+c+d+e;
}
/**
* Catch-Blöcke sollten nicht leer sein
*/
private void emptyCatch(){
try{}
catch(Exception e){}
}
/**
* Die toString-Methode
*
* @return gibt "CodeProAnalytix_simpleExample" zurück
*/
public String toString(){
return "CodeProAnalytix_simpleExample";
}
}
Durch dieses Beispiel wird deutlich, dass das Code-Analyse-Tool sehr viel Wert auf sauberen und gut nachvollziehbaren Code legt.
Zurück zur Werkzeugübersicht
Zurück zur CSI-Hauptseite