• info@noobygames.de

Category ArchiveTutorial

sonarqube_gopher

Statische Code Analyse mit Sonarqube

Jeder der sich um Code Qualität sorgt, hat sich schon einmal Gedanken gemacht, wie er das ganze Analysieren kann um ein Gesamtbild zu bekommen. Nun kann man den ganzen Quellcode durchschauen und sich dabei Notizen machen, oder Tickets erstellen für Stellen im Code, die nicht so geil sind, oder man benutzt ein statisches Codeanalysetool. Ich habe mich für eine statische Code Analyse mit Sonarqube entschieden. Sonarqube gibt es als OnPremise und als Cloud variante.

Aufsetzen von Sonarqube

Was braucht man dafür? Natürlich lasse ich das erst mal in einem Docker Container laufen. Dafür tippt man, vorausgesetzt Docker ist installiert, einfach die folgenden 2 Befehle ein:

1
docker pull sonarqube
1
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube:latest

Anschließend wartet man einen kurzen Moment, bis der Container hochgefahren ist. Das hat bei mir so 5-10 Sekunden gedauert. Jetzt könnt ihr die Sonarqube Instanz bereits unter localhost:9090 finden

Erstellen eines Projekts

Ruft im Browser den Link http://localhost:9000 auf.
Loggt euch anschließend mit folgenden Credentials ein:

Username: admin
Password: admin

login_create_project

login_create_project

Anschließend könnt ihr ein neues Projekt erstellen. Vergebt dafür einfach einen Namen, bestätigt und anschließend klickt ihr auf Generate.

Plugin Herunterladen

Ladet euch nun das Plugin für eure Programmiersprache herunter, entpackt es an einen beliebigen Ort und fügt den Pfad zum bin Ordner dem Umgebungspfad hinzu.

install plugin

install plugin

Analyse Starten

Startet nun die analyse im folgenden Beispiel habe ich als projectkey „gocloak“ gesetzt, da ich ein Projekt mit dem key „gocloak“ angelegt habe. Dies müsst ihr durch euren Key austauschen und anschließend im project-root ausführen. Den Login Wert müsst ihr durch den key austauschen, den ihr zuvor erstellt habt.

1
sonar-scanner -Dsonar.projectKey=gocloak -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000 -Dsonar.login=8f032266ebed7ca4ec79e22f464b8649455bad77

Alternativ könnt ihr als Login auch folgendes verwenden:

1
sonar-scanner -Dsonar.projectKey=gocloak -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000 -Dsonar.login=admin -Dsonar.password=admin

Ist der Befehl erfolgreich durchgelaufen könnt ihr euch das Ergebnis auf Sonarqube anschauen.

sonar result

sonar result

How To: ScriptableObject automatisch erstellen

Wie kann man eigentlich ein ScriptableObject automatisiert erzeugen?

Diese Fragen und weitere werde ich mit kleinen Tutorials hier im Blog beantworten. Ich habe mir für diesen Zweck ein Plugin organisiert, welches Code-Embedding vereinfacht. Nun wenden wir uns aber den ScriptableObject zu.

 

1. Erstellen eines ScriptableObjects

Zuerst benötigen wir ein ScriptableObject. Dazu habe ich beispielhaft ein sehr simples erzeugt. Unser ScriptableObject muss natürlich von ScriptableObject erben. Dazu habe ich noch 2 float Felder für den Schaden und die Geschwindigkeit eingefügt, sowie ein Feld, welches das ParticleSystem hält.

1
2
3
4
5
6
7
8
9
10
// MetaData for all Projectiles in the game
public class ProjectileMetaData : ScriptableObject {
// Damage of the Projectile
public float Damage = 1;</div>
// Speed of the Projectile
public float Speed = 10;

// ParticleSystem of the Projectile
public GameObject ParticleSystem;
}

 

2. Erstellen des EditorScripts

Das folgende Snippet sorgt dafür, dass im UnityEditor ein neuer Tab(„ScriptableObjects“) eingefügt wird. Dort gibt es die unterpunkte „Create“ und „Projectile“. Klickt man nun auf Projectile wird die Methode „CreateMyAsset“ ausgeführt.

Tab

Tab

namespace Editor.ProjectileCreater {

public class MakeScriptableObject {
  [MenuItem("ScriptableObjects/Create/Projectile")]
  public static void CreateMyAsset() {
    // Erzeugt eine Instanz vom Typ "ProjectileMetaData".
    ProjectileMetaData asset = ScriptableObject.CreateInstance<ProjectileMetaData>();
    // Erzeugt ein Asset mit hilfe der gerade erzeugten Instanz.
    // Wichtig: Die gesamte Ordnerstruktur muss im Projekt existieren, sonst gibt es einen Fehler.
    AssetDatabase.CreateAsset(asset, "Assets/Scripts/Projectiles/ScriptableObjects/NewScriptableObject.asset");
    // Schreibt das Asset auf die Festplatte
    AssetDatabase.SaveAssets();
    // Setzt den Fokus
    EditorUtility.FocusProjectWindow();
    // Selektiert das gerade erzeugte Objekt
    Selection.activeObject = asset;
  }
}
}

 

3. Das Ergebnis

Das ScriptableObject wurde als Asset im gewünschten Pfad erzeugt und kann nun benutzt werden. Das ist auch schon die gesamte Magie daran. Das obige Script kann angepasst werden um beliebige ScriptableObjects zu erzeugen. Dafür muss nur der generische Typparameter gegen einen anderen getauscht werden und falls notwendig kann der Pfad angepasst werden.

ProjectView

ProjectView

%d Bloggern gefällt das:

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklären Sie sich damit einverstanden.

Schließen