Clean Code: Definition und Prinzipien
Alles über Clean Code: seine Definition, seine Herkunft, seine Grundprinzipien und wie man ihn konkret umsetzt.
Softwareentwicklung bezieht sich auf den Prozess der Erstellung, des Designs, des Einsatzes und der Unterstützung von Software. Seit den Anfängen der Informatik haben sich die Technologien stark weiterentwickelt, doch eine Voraussetzung ist geblieben: Die Qualität des Codes ist entscheidend. Das Konzept des „Clean code“, des sauberen Codes, ist wie ein Leitfaden für Entwickler durch die Komplexität der Computerwelt. In diesem Artikel untersuchen wir diese Philosophie des sauberen Codes, seine Prinzipien und seine Auswirkungen auf verschiedene Programmiersprachen.
Lassen Sie uns gemeinsam den Clean Code definieren, zu seinen Ursprüngen zurückkehren und seine konkreten Grundlagen erforschen. Qim info und die Abteilung Custom Software Development stehen Ihnen gerne zur Verfügung, um sich mit Ihnen über dieses Thema auszutauschen.
Die einfache Definition von "Clean Code"
Clean Code unfassteine Reihe von Methoden zur Erzeugung von verständlichem, effizienten und intuitiv zu verwendendem Code..
Die Aufgabe eines Entwicklers/einer Entwicklerin ist es, verständlichen Code mit Hilfe von Maschinen zu schreiben. Allerdingsgenügt es in der Industrie nicht, von Maschinen verstanden zu werden: In der überwiegenden Mehrheit der Projekte, an denen wir mitwirken, wird ein und derselbe Quellcode von mehreren Personen bearbeitet. Und hier wird es kompliziert: Von Menschen verstanden zu werden, ist nicht so einfach wie von Maschinen verstanden zu werden.
Es ist so: Damit eine Anwendung richtig skalieren kann, muss ihr Code von jedem Entwickler verstanden, angepasst und verändert werden können. Wenn dies nicht der Fall ist, werden die Kosten für die Weiterentwicklung der Anwendung mit der Zeit exponentiell steigen… Hier kann man zwischen effizientem und sauberem (clean) Code unterscheiden. Jeder von ihnen konzentriert sich auf unterschiedliche Aspekte des Programmierprozesses: Während sauberer Code vor allem auf die Verbesserung der Lesbarkeit und Wartbarkeit abzielt, konzentriert sich der effiziente Code auf die Leistung und die Optimierung der Programmausführung.
Wie misst man überhaupt die Lesbarkeit von Code?
Die Lesbarkeit des Codes messen
Wie kann man feststellen, ob ein Code sauber ist? Oder eher: Wie sauber ist ein Code? Zu denken ist hier vor allem an Sonar, das mit der Programmiersprache Java verwendet wird und Hinweise auf die Komplexität, die Anfälligkeit und die Testabdeckung des geschriebenen Codes gibt.
Ein computergestütztes Werkzeug wird jedoch nicht wirklich feststellen können, wie verständlich der Code für einen anderen Entwickler ist, es wird nur Hinweise geben: Der beste Indikator dafür ist WTF/M, wie wir noch sehen werden.
Über das Meme hinaus zeigt die Illustration das Ziel, das der Clean Codierer anstrebt: die WTFs/Minuten-Rate zu senken, d. h. die Lesbarkeit seines Codes zu erhöhen.
Es gibt jedoch einige Maßnahmen, die Sie ergreifen können, um die Lesbarkeit Ihres Codes zu verbessern:
- Dokumentieren und kommentieren Sie Ihren Code, ohne ihn mit zu vielen überflüssigen Kommentaren zu belasten.
- Bleiben Sie bei Ihrem Einrückungsstil konsequent.
- Verringern Sie den Verschachtelungsgrad.
- Bewahren Sie verschlüsselte Zeilen nicht „für alle Fälle“ auf.
So ist ein sauberer Code für möglichst viele Entwickler lesbar, wodurch später Missverständnisse vermieden werden. Dies ist ein guter Zeitpunkt, um zu den Ursprüngen des Clean Codes zurückzukehren.
Clean code: das Buch
Größen der Softwareentwicklung haben versucht, die Frage nach Standards für saubere Codierung zu beantworten. Einer der bekanntesten, Robert C. Martin (alias Uncle Bob), befasste sich in seinem Buch mit den Prinzipien, die einen qualitativ hochwertigen Quellcode ausmachen. Clean Code: A Handbook of Agile Software Craftsmanship., veröffentlicht 2008. Zwar ist dieses Buch nicht neu, aber es hat Generationen von Codierern inspiriert und tut es immer noch.
Die in diesem Buch entwickelten Prinzipien sind allgemeine Prinzipien, die agnostisch gegenüber der verwendeten Programmiersprache sind. Dabei handelt es sich nicht um strikt anzuwendende Regeln, sondern vielmehr um Hilfen oder Inspirationen.
Zusammenfassung zu Clean Code: A Handbook of Agile Software Craftsmanship
Robert C. Martin schlägt uns eine Reihe von Prinzipien vor, die wir umsetzen sollten, um sicherzustellen, dass unser Code sauber (clean) ist:
- Beachten Sie anerkannte Konventionen, um einen möglichst universellen Code zu erhalten.
- Hinterlassen Sie den Code sauberer, als Sie ihn vorgefunden haben, ein Prinzip, das auch als „.die Pfadfinderregel„bekannt ist.
- Halten Sie sich an grundlegende Designregeln, z. B. Daten auf hoher Ebene konfigurierbar zu halten oder eine Überkonfiguration der Funktionen zu vermeiden.
- Fördern Sie das Verständnis des Codes durch Konsistenz, Explizitheit und Sichtbarkeit der Abhängigkeiten zwischen verschiedenen Funktionen.
- Halten Sie sich an die Regeln der Namensgebung : keine Mehrdeutigkeit bei Funktions- und Variablennamen, aussagekräftige Namen und klare Unterscheidungen zwischen Einheiten.
- Einrichten vonkurzen Funktionen, die nur einmalig verwendet werden, ohne Seiteneffekte und mit möglichst wenigen Argumenten.
- Pflegen Sie die KommentareSie sollten klar und prägnant sein, Redundanzen und unnötiges Gerede vermeiden.
- Strukturieren Sie den Quellcode, indem Sie besonders auf Einrückungen achten, Variablen deklarieren und den Code strukturell zusammenhalten, z. B. indem Sie interne Strukturen ausblenden, um die Lesbarkeit zu erhöhen.
- Führen Sie schnelle, unabhängige, nützliche, wiederholbare und leicht durchzuführende Tests durch.
Robert C. Martin nennt uns auch die 6 Indikatoren für einen nicht ausreichend sauberen CodeDiese werden als „Code Smells“ bezeichnet und sollten daher überwacht und vermieden werden. So lautet der Smells-Code:
- Starr und daher schwer zu verändern
- Anfällig,weist zahlreiche Mängel auf
- UnbeweglichDas heißt, es ist schwierig oder unmöglich, ihn für andere Projekte wiederzuverwenden.
- Unnötig komplex
- Repetitiv
- Undurchsichtig, schwer zu verstehen.
Die SOLID-Prinzipien
Dies ist eine Untermenge der von Robert C. Martin geförderten Prinzipien, die sich auf 5 Grundprinzipien für die objektorientierte Programmierung beziehen:
- Single Responsibility Principle (Prinzip der alleinigen Verantwortung) oder Prinzip der alleinigen Verantwortung: Jede Komponente hat nur eine einzige Verantwortung.
- Open Closed PrincipleDieses Prinzip besagt, dass jede Komponente offen für Erweiterungen und geschlossen für Änderungen sein muss.
- Liskov Substitution PrincipleDas Liskov-Substitutionsprinzip besagt, dass jede Tochterklasse ohne Konsequenzen durch ihre Mutterklasse ersetzt werden können muss.
- Interface Segregation PrincipleDas Prinzip der Schnittstellensegregation: Kein Objekt sollte von Methoden abhängig sein, die es nicht verwendet.
- Dependency Inversion Principle, das Prinzip der Umkehrung der Abhängigkeit: Hochrangige Komponenten sollten nicht von niedrigrangigen Komponenten abhängen.
Clean Code: die Prinzipien
Was lässt sich aus all diesen Prinzipien lernen? Wie lassen sich Standards für Clean Code festlegen? Wir entscheiden uns dafür, drei absolut entscheidende zu behalten:
Der Code muss einfach sein.
Dies ist das erste Merkmal für Clean Code. Es sollte möglichst vermieden werden, den Code komplexer zu machen, indem man sich fragt, ob die implementierte Lösung die einfachste ist, um die Anforderung zu erfüllen. Je einfacher der Code ist, desto besser ist er lesbar und damit künftigzu warten. Es gibt es ein Akronym, das uns hilft, uns an dieses Prinzip zu erinnern: KISS (Keep It Simple Stupid).
Zu diesem Zweck sollte eine Überkonfigurierbarkeit vermieden und alles, was „für den Fall der Fälle“ geschrieben wird, verboten werden.
Der Code muss zielgerichtet (focused) sein.
Ein Stück Code muss geschrieben werden zur Lösung eines einzigen Problems. Dies gilt auf allen Abstraktionsebenen des Codes: Methode, Klasse, Paket oder Modul. Die Denkarbeit rund um die Aufteilung des Codes soll helfen, die richtigen Abstraktionen zu bestimmen.
„Bad abstraction is worse than duplication“ (Schlechte Abstraktion ist schlimmer als Verdopplung).
Zwei Codestücke können identisch sein: Wenn sie jeweils unterschiedliche Konzepte repräsentieren, ist es besser, diese „zufällige“ Verdoppelung beizubehalten. In diesem Fall gilt das DRY-Prinzip (Don’t Repeat Yourself) nicht.
So werden die Verantwortlichkeiten für jedes Stück Code korrekt verteilt. Hier finden sich die SOLID-Prinzipien, insbesondere das „Single Responsibility Principle“, wieder.
Der Code muss testbar sein.
Wenn der Code einfach ist und nur eine einzige Verantwortung hat, sollte er leicht zu testen sein. Die Tests stellen eine Absicherung gegen Rückschritte dar, die bei der Weiterentwicklung des Codes auftreten können. Sie bilden auch die Dokumentation, die es anderen Entwicklern ermöglicht, die Funktionsweise des getesteten Codes zu verstehen. Sie sollten vorzugsweise vor dem produktiven Code (TDD) geschrieben werden und nach Möglichkeit automatisiert sein.
Man kann das Akronym FIRST vorstellen, das die „sauberen“ Tests kennzeichnet: Fast (schnell), Independent (unabhängig), Repeatable (wiederholbar), Self-Validating (selbstvalidierend), Timely(zeitnah).
Wenden wir uns nun einer konkreten Methode zu, wie Sie Clean Code in Ihr Unternehmen integrieren können.
6 Schritte zur Integration von Clean Code in Ihr Unternehmen
Wenn Sie die Clean Code-Methode in die Arbeitsweise Ihres Unternehmens einführen möchten, kann es sinnvoll sein, sich von Experten auf diesem Gebiet beraten zu lassen. Qim info hat den Berater/die Beraterin, die Ihrem speziellen Bedarf entsprechen.
Hier finden Sie eine Reihe von Empfehlungen, wie Sie Ihre Softwareproduktion mithilfe von Clean Code optimieren können:
- Erinnern Sie die Entwickler/innen an die Prinzipien des Clean Code, damit alle Ihre Teams auf der gleichen Wellenlänge sind. Dies ist auch der richtige Zeitpunkt, um eine Schulung oder ein Seminar zu diesem Thema in Betracht zu ziehen.
- Implementieren Sie eine Clean-Code-Richtlinie, indem Sie die wichtigsten Prioritätsregeln im Rahmen Ihrer Tätigkeit klar definieren. Zum Beispiel, indem Sie die Namen von Variablen oder Funktionen, die Sie regelmäßig verwenden, vereinheitlichen.
- Dokumentieren Sie den von Ihren Teams erstellten Code, damit er im Laufe der Zeit lesbar bleibt.
- Integrieren Sie einen LinterDas ist ein Dienstprogramm, das es Ihnen ermöglicht, einen einheitlichen Code auf der Grundlage von Regeln zu pflegen, die Sie konfiguriert und vordefiniert haben. Es gibt mehrere davon für die verschiedenen Kodierungssprachen.
- Organisieren Sie eine Nachbereitung, indem Sie Ihre Entwickler bitten, ihren eigenen Code regelmäßig auf Sauberkeit zu überprüfen, und indem Sie Teamfokussierungen organisieren.
- Überarbeiten Sie alte Codes. Nur weil sie vorher nicht clean waren, heißt das nicht, dass sie Ihre Umstellung nicht mitmachen sollen!
Clean Code auf verschiedene Sprachen angewandt
Die Regeln für sauberen Code sind bei allen Computersprachen gleich, aber es gibt für jede Sprache einige Besonderheiten.
Python
Am wichtigsten ist die Benennung von Funktionen und Variablen sowie die Vermeidung von doppelten Verneinungen.
Java
In Java gibt es zwar keine Standardprojektstruktur, dennoch wäre es sinnvoll, einer von Ihnen vorgegebenen Struktur zu folgen, die konstant bleibt.
Javascript
Die Benennung der einzelnen Elemente ist das Wichtigste, damit Sie Clean Code auf Javascript entwickeln können.
C#
Bei C# ist es besonders wichtig, auf Code-Duplikate zu achten.
html
Redundante und doppelte Tags sind Ihre größten Feinde auf html für einen sauberen Code.
Ruby on rails
Der Name der Variablen ist wieder einmal von entscheidender Bedeutung. Insbesondere empfehlen wir Ihnen, für ähnliche Variablen das gleiche Vokabular zu verwenden.
Es gibt übrigens nützliche Tools für Clean Code, von denen einige sprachspezifisch sind.
Die besten Tools für "Clean Coding"
Es gibt kein Tool, das Clean Code implementieren oder Ihre Produktionen automatisch bereinigen kann, aber es gibt einige Tools, die Ihnen die Aufgabe erleichtern und Ihnen Hinweise geben, die Sie befolgen können.
- Linters : Wie bereits erwähnt, sind dies Dienstprogramme, mit denen Sie Regeln vordefinieren können, die Ihr Code einhalten muss. Es gibt Dutzende von ihnen für jede Sprache: checkstyle für Java, clinton für Javascript, htmlhint für html, flake8 für Python,…
- Maven ist ein Tool zur Strukturierung von Code für Java
- Rubocop analysiert und formatiert Ihren Code auf Ruby on Rails
- Prettier automatisiert die Formatierung Ihres Codes
- SonarQube analysiert den Code während der Kompilierungsphase und wird mit den in der Softwareentwicklung am häufigsten verwendeten Programmiersprachen (Python, C#, Java…) verwendet.
- Jenkins (oder ein anderes Tool zur kontinuierlichen Integration). : Kontinuierliche Integration und Testautomatisierung helfen dabei, die Qualität des Codes über den gesamten Entwicklungszyklus hinweg aufrechtzuerhalten.
- JUnit (oder ein anderes Framework für Unit-Tests) : Das Schreiben von Unit-Tests ist eine Schlüsselkomponente von Clean Code. JUnit ist ein beliebtes Framework für Unit-Tests in Java.
Clean-Code-Methoden sind somit Leitfäden, mit denen Sie Ihren Code benutzerfreundlicher, lesbarer und zukunftssicherer machen können. Worauf warten Sie also noch, um auch mit Clean Code zu beginnen? Unsere Expert/innenen werden Ihnen zuhören und Sie bei Ihrem Vorhaben beraten. Um mehr darüber zu erfahren, empfehlen wir Ihnen, unseren Artikel über die Schritte zur Entwicklung einer maßgeschneiderten Software zu lesen.
Benoît.