Rémy Schumm blog ingénieur

Code-Sensing for the poor Man (lecturer)

publiziert am 16. 04. 2020 um 10:00

Praktischer Bericht aus dem Alltag als Software-Dozent: Wie kann man mit möglichst wenig Aufwand möglichst viele Infos und Übersicht über viel Code erlangen?
Ein kleine Sammlung von Tipps.

Wieder ein Post aus dem Alltag als Software-Dozent: Betreut man Praktika, kann es passieren, dass man plötzlich vor einem Haufen kleiner (oder grösserer) Projekte steht, und Noten geben muss für Dingen wie: Wurde hohe Kohäsion eingehalten? Wie die Kopplung? Sind Namenskonventionen eingehalten? Wie die Test-Abeckung? Sind irgendwo böse Hunde begraben?
Hier ist eine kleine Zusammenstellung von schnellen, nützlichen Tools für die Code-Übersicht.

Abhägigkeiten mit IntelliJ

Benutzt man IntelliJ, emfehle ich die Abhängigkeits-Matrix zu benutzen: da sieht man auf einen Blick, welche Klassen von welcher abhängig sind, in welchem Mass - und ob es zyklische Abhängigkeiten gibt.

matrix

etwas ähnliches macht das Java Tool jdeps, siehe auch diesen spannenden Artikel

Code Smells: Analyse mit IntelliJ

Auch nützlich ist das in IntelliJ eingebaute Tool «Inspect Code…. » Es wertet verschiedene statische Metriken aus, die sehr nützlich sein können.

inspect

Code Smells: Analyse mit SonarQube

SonarQube wird oft in Unternehmen im grossen Stil eingesetzt. Es kann aber sehr einfach auch auf einer lokalen Maschine benututz werden und liefert nützlich Metrikn für kleinere Bugs und Unschönheiten im Code.
Mit dem ausführlichen Get Started ist man in ein paar Minuten dabei:

[luna:sonarqube-8.2.0.32929/bin/macosx-universal-64] rschumm% ./sonar.sh console

Im Wesentlichen geht es darum, auf einem Projekt ein maven-goal laufenzulassen, nachdem man im Admin-UI einen Auth. Token gelöst hat:

[luna:~/SoftwareDev/schufi] rschumm% mvn sonar:sonar -Dsonar.projectKey=schufi -Dsonar.host.url=http://localhost:9000 -Dsonar.login=7499a52e606blabla

Mit Gradle ist es «ein bisschen» schwieriger: man muss leider ein plugin einbauen:

plugins {

    id "org.sonarqube" version "2.7"
}

…und dann laufenlassen:

[luna:p1-racetrack-nachmittags/g5-dumbo-tutoring/gruppe05-dumbo-projekt1-racetrack] rschumm% gradle sonarqube -Dsonar.projectKey=gruppe05-dumbo-projekt1-racetrack -Dsonar.host.url=http://localhost:9000 -Dsonar.login=7499a52e606blabla -x test

SonarQube erstellt automatisch ein Projekt, falls es noch keines gibt.
Nach der kurzen Analyse können verschiedene Probleme und «Code Smells» (engl. für stinkender Code) analysiert werden.
Bemerkung: SonarQube lässt nicht selber UnitTests und CodeCoverages laufen, sondern stellt nur das, was beim letzten Build da war. Wenn man also CodeCoverage will, muss man selber etwas einbauen, z.B. JaCoCo.

sonar

Anstatt SonarQube zu installieren, kann man natürlich auch SolarLint benutzen, aber ich fand das so schöner.

Hinweis: dieser Blog wiederspiegelt meine persönliche Meinung und hat nichts mit meiner Anstellung als Dozent der zhaw noch mit anderen Anstellungen zu tun.


zurück zum Seitenanfang