Code-Qualität und Komplexität überprüfen und verbessern

Wenn die Qualität von Software vernachlässigt wird, führt dies schnell zu überflüssigem Code, auch Cruft genannt, der dann die Weiterentwicklung von Funktionen bremst. Das passiert auch großen Teams, die keine Zeit für die Pflege einer hohen Codequalität aufwenden dürfen. Eine hohe Codequalität reduziert Cruft auf ein Minimum und ermöglicht es dem Team, Funktionen mit weniger Aufwand, Zeit und Kosten hinzuzufügen. Es gibt zwar einige Indikatoren, die zur Messung der internen Qualität herangezogen werden können, diese können jedoch nur einen ersten Hinweis auf die weitere Produktivität geben. Eine kürzlich durchgeführte Studie zeigt jedoch, dass die Korrektur von Code mit niedriger Qualität mehr als doppelt so lange dauert wie die von Code mit hoher Qualität, und dass die Fehlerdichte bei Code mit niedriger Qualität 15 Mal höher ist.

Im Folgenden zeige ich euch einige Code-Smells und Design-Prinzipien und dann einige Tools, mit denen ihr automatisierte statische Analysen durchführen und den Code neu formatieren könnt. Einige dieser Tools könnt ihr sowohl in euren Editor wie auch über das pre-commit-Framework einbinden. Zum Schluss stelle ich euch noch Rope vor, ein Tool, das euch bei Refactorings unterstützt.

Checker

flake8

ist ein Wrapper um PyFlakes, pycodestyle und McCabe. Eine automatische Formatierung, mit Black, ist jedoch noch bequemer.

Mypy

ist ein statischer Typ-Checker.

Pytype

ist ein statisches Analysewerkzeug, das Typen aus eurem Python-Code ableitet, ohne dass Typ-Annotationen erforderlich sind.

Wily

ist ein Kommandozeilenwerkzeug zur Überprüfung der Komplexität von Python-Code in Tests und Anwendungen.

Pystra

analysiert die strukturelle Zuverlässigkeit von Python-Code und fasst sie in einem Bericht zusammen.

Pysa

führt eine Taint-Analyse durch, um potenzielle Sicherheitsprobleme zu identifizieren. Pysa verfolgt Datenströme von ihrem Ursprung bis zu ihrem Endpunkt und identifiziert verwundbaren Code.

check-manifest

ist ein Werkzeug, mit dem ihr schnell überprüfen könnt, ob die Datei MANIFEST.in für Python-Pakete vollständig ist.

Formatter

Black

formatiert euren Code in ein schönes und deterministisches Format.

isort

formatiert eure import-Anweisungen in separaten und sortierten Blöcken.

prettier

bietet automatische Formatierer für andere Dateitypen.

Refactoring

Rope

ist eine Python-Bibliothek zum Refactoring.