7 Tipps, mit denen du deine Codequalität verbessern kannst

7 Tipps, mit denen du deine Codequalität verbesserst

Avatar von Tobias Mogdans

Welcher Entwickler kennt es nicht: Dein Chef möchte eine Änderung an einem bestehenden Programm – am liebsten gestern – und im Quellcode findet sich ein unverständlicher Haufen Code, teilweise Jahre alt, mit seitenlangen, auskommentierten Funktionen. Darüber Kommentare, die einerseits unverständlich formuliert wurden, andererseits nicht mehr im Mindesten zu dem Wust darunter passen. Garniert wird das Ganze mit der einen oder anderen To-do-Anmerkung, an die aber niemals wieder jemand gedacht hat und die mittlerweile auch komplett obsolet geworden sind.

Aber muss das sein? Geht das nicht auch anders? Die gute Nachricht: Aber ja! Es geht natürlich anders. Und einige der zahlreichen Tools und Techniken, die man einsetzen kann, um diesem Chaos zu entgehen, möchte ich dir gerne vorstellen.

Pair Programming

Vier Augen sehen mehr als zwei. Das gilt auch beim Entwickeln. Pair Programming ist eine starke Technik, um Probleme beim Entwickeln zu lösen, Bugs zu vermeiden und Wissen über den Quellcode zu verbreiten. Zudem profitieren die Teilnehmer gegenseitig vom Wissen des jeweils anderen.

Bei Mayflower gibt es einige Teams, die ausschließlich nach diesem Prinzip entwickeln. In anderen Teams wird Pair Programming auf Anfrage eingesetzt. Das hilft von Anfang an die bestmögliche Codequalität für unsere Projekte und damit für unsere Kunden zu erzielen. Fehler werden früher entdeckt und behoben. Darüber hinaus hilft dieser Ansatz dabei, neue Kollegen sehr schnell einzulernen.

Code Review

Eine weitere Maßnahme zur Qualitätssicherung in der Softwareentwicklung ist das Code Review, eine systematische Analyse des Programms auf Fehler, Lesbarkeit und der Einhaltung festgelegter Kodierungskonventionen. Das Code Review wird durch einen zweiten Entwickler durchgeführt (Vier-Augen-Prinzip).

Hierfür gibt es eine Reihe technischer Hilfsmittel, die den Prozess erleichtern: So besitzen die gängigen Versionierungstools, wie beispielsweise GitLab oder GitHub, Werkzeuge, um sich die unterschiedlichen Dateiversionen anzeigen zu lassen. In diesen Tools können Fehler/Mängel direkt am Code kommentiert werden, was gegebenenfalls zu einem anderen Problem führen kann: 

Es ist der eigene Stolz, der sich regt, wenn jemand an dem Code, den ich in meiner Genialität geschrieben habe, Kritik übt.

Du musst lernen, diese Kritik zu akzeptieren, denn sie ist nichts Negatives. Diese Kritik kommt von jemanden, der dir gleichgestellt ist – einem anderen Entwickler. Zumeist hat dieser einen anderen Blickwinkel auf die Problematik und möglicherweise einen anderen Lösungsansatz, wodurch man einerseits etwas Neues lernt, sowie der Kollege andererseits mit seiner Kritik wahrscheinlich sogar recht hatte, wenn man ehrlich ist.

Persönliche Verfassung

Bist du gestresst oder müde? Ist es in deiner Umgebung recht laut oder stören dich beständig Kollegen, weil sie etwas von dir möchten? Jeder kennt diese Situationen und weiss, wie lästig sie sind.

Schaffe also diese Hindernisse ab!

  • Schlafe ausreichend, denn dein Gehirn funktioniert nur gut, wenn du ausgeruht bist.
  • Wenn du krank bist, bleib daheim! Die allerwenigsten Entwickler schreiben mit Grippe oder heftigen Kopfschmerzen guten Code.
  • Schließe Slack, stell das Handy auf stumm und bitte deinen Kollegen, dich für die nächsten Stunden nicht zu stören, da du eine wichtige Aufgabe abschließen musst.
  • Wenn du die Möglichkeit hast, ziehe dich an einen ruhigen Ort zurück; in größeren Büroräumen kann es helfen, sich Kopfhörer aufzusetzen (aber ohne Musik!).

Typisierung

Solltest du mit einer stark typisierten Sprache arbeiten, kannst du diesen Punkt überspringen. Sobald du jedoch eine Sprache wie PHP oder JavaScript verwendest, hast du die Wahl, ob du Typen verwendest oder nicht.

Der Pro-Tipp an dieser Stelle lautet: verwende unbedingt Typen!

Seit PHP 7 kamen die skalaren Typen stringintfloat sowie bool hinzu. Sie lassen sich sowohl bei den Methoden-Properties einsetzen, als auch als Rückgabewert. Skalare Typen sind eine Ergänzung zu Klassenname, Interface, array und callable, die schon in PHP 5 vorhanden waren.

Vermeide assoziative Arrays, um Daten herumzureichen, nutze lieber Data Transfer Objects (DTO) oder Value Objects. Das sind im einfachsten Fall dumme Objekte, welche die benötigten Daten in aussagekräftig benannten Attributen halten. Verwende Setter, die mit dem korrekten Typhinweis ausgestattet sind. So kannst du sicher sein, dass deine Werte auch vom richtigen Typ sind. Als netten Bonus kannst du bei den Methoden-Properties der empfangenden Methode dieses Objekt wiederum als Typhinweis verwenden.

Im folgenden Beispiel würde der PHP-Interpreter meckern, wenn man versuchen würde, einen falschen Typ zu übergeben:

class NameDto
{
    /** @var string **/
    private $name;
 
        /**
         * @param string $id
         */
    public function setName(string $name): void
    {
        $this->name = $name;
    }
 
        /**
         * @return string
         */
    public function getName(): string
    {
        return $this->name;
    }
}
 
...
public function findByName(NameDto $nameDto): User
{
    echo $nameDto->getName(); // hier können wir sicher sein, dass ein string zurückgegeben wird
    ...
}
...

Gute Nachrichten im übrigen für alle PHP-Nutzer: Ende November 2019 sollen mit der Version 7.4 typisierte Eigenschaften eingeführt werden. Damit können die DocBlocks über den Properties entfallen. Es werden alle Typen bis auf void und callable unterstützt.

class User
{
    private int $id;
    private string $name;
    private Email $email;
}

Solltest du mit JavaScript unterwegs sein, dann wirf einen Blick auf TypeScript, ein Superset für Javascript, das auch da Typisierung einführt.

Clean Code

Davon mag man halten, was man will, aber einige der Dogmen helfen durchaus bei der Verbesserung der Codequalität. Zum Beispiel halten sprechende Variablennamen und aussagekräftige Methodenbezeichnungen den Quellcode sauber und lesbar.

Ich denke Beispiel, dass jeder schon einmal so etwas gesehen hat:

$n = 'Hans';
$p = 'test123';
 
if($n == $usr->n) {
    ...
}

So lässt es sich doch sicherlich einfacher lesen:

$name = 'Hans';
$password = 'test123';
 
if($name === $user->name) {
    ...
}

Speicherplatz ist heutzutage nicht mehr so sehr ein Problem, deshalb spricht nichts dagegen, Variablen entsprechend auszuschreiben. Du wirst es dir selbst danken, wenn du nach einem halben Jahr zu dieser Codestelle zurückkehrst und so einfach herausfinden kannst, was du damals gemeint hast.

Quality Assurance Tools

Von diesen Tools gibt es eine Menge und für jede modernere Sprache gibt es sicherlich auch die entsprechenden Tools. An dieser Stelle nenne ich stellvertretend ein paar Tools, die wir bei Mayflower für die Webentwicklung mit PHP einsetzen.

PHPStan

Dieses Static-Analysis-Tool für PHP übernimmt einen Teil der Aufgaben eines Compilers und prüft den Code auf mögliche Fehler, z. B. bei verwendeter Typisierung oder einfach nur auf die falsche Verwendung von Funktionen. Dabei treten Laufzeitfehler zu Tage, noch bevor der Code jemals den Produktivserver erreicht hat.

PHPCS

PHPCS überprüft den Codestyle anhand von definierbaren Regeln. Als Schmankerl lassen sich die meisten Codestyle-Fehler sogar automatisch beheben.

PHPUnit

Das wohl bekannteste Testing-Framework im PHP-Ökosystem für Unit Tests. Wenn du noch nicht mit Unit Tests gearbeitet hast: Schreib‘ dir das auf deine ToDo-Liste für das kommende Jahr.

Automatisierte Build-Strecken

Automatisierte Build-Strecken (CI, Continous Integration) eignen sich hervorragend, um die Codequalität in einem Softwareprojekt hoch zu halten, denn es lassen sich Tools wie PHPCS, PHPStan, Jest, etc. hervorragend einbinden und bei jedem Push automatisch ausführen. So werden nur noch Commits gemerged, die den vorgegebenen Qualität-Standards entsprechen.

Unterm Strich

Wie du siehst gibt es eine ganze Menge an Tools und Techniken, um besseren Quellcode zu schreiben und ihn auch sauber zu halten, damit es nicht jedesmal eine Qual ist, Anpassungen vorzunehmen oder neue Features einzufügen. Und wenn ein Entwicklerteam die Disziplin aufbringt, einige (oder vielleicht auch alle) dieser Tipps zu beachten, macht das Entwickeln auch mehr Spaß.

Und das war doch sicherlich einer der Hauptgründe, der uns alle zum Entwickeln geführt hat: Der Spaß am Coden!

Avatar von Tobias Mogdans

Kommentare

2 Antworten zu „7 Tipps, mit denen du deine Codequalität verbesserst“

  1. PHPUnit ist zwar das Werkzeug der Wahl im PHP-Bereich, es fehlt mir aber Test Driven Development. Es ist eine deutlich mächtigere Vorgehensweise, die für mich immer besseres Code-Design zur Folge gehabt hat und damit die Wartungs-/Veränderungskosten erheblich gesenkt hat!

    Sonst eine sehr schöne Liste mit Ideen und Anstößen :)!

    1. Avatar von Tobias Mogdans
      Tobias Mogdans

      Hallo Sebastian, vielen Dank für deinen Kommentar.
      Ja, du hast recht, TDD ist eine wichtige Technik für hohe Codequalität. Ich werde bei Gelegenheit noch einen Absatz dazu einfügen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.