Kommt Ihnen die folgende Situation bekannt vor: In einem Projekt ändern sich einige Anforderungen an eine bestehende Software. Die Änderungen erscheinen Ihnen minimal und schnell durchführbar, bis Sie den vorhandenen Programmiercode öffnen. Im Editor sehen Sie ein wirres Durcheinander von Codezeilen ohne jegliche Struktur: Die Variablen besitzen seltsame Namen, Methoden haben mehr als fünfhundert Zeilen mit unzähligen ineinander verschachtelten Kontrollstrukturen und einer hohen Anzahl von Übergabeparametern.
Schlechter Programmiercode führt zu enormen Kosten
In Unternehmen führt schlechter Programmiercode zu einer riesigen Anzahl von verlorenen Stunden und ganze Entwicklungsabteilungen in einen Teufelskreis: Ein neue Software entsteht in Eile in einem schlechten Programmcode. Die Arbeit findet unter hohem Druck statt, sodass keine Zeit für die notwendige Codeüberarbeitung (Refactoring) bleibt. Das Management besitzt keine Programmierkenntnisse und versteht die Risiken von schlechtem Code nicht. Je mehr zusätzliche Funktionalität die Programmierer ergänzen, desto größer wird das Chaos. Der anfangs schnelle Projektfortschritt verlangsamt sich immer mehr. Jede Änderung am Code führt zu weiteren Anpassungen in anderen Modulen und zu neuen Fehlern. Korrekturen werden immer mehr zu einem unüberwindlichen Hindernis, da die Programmierer alle Komponenten verstehen müssen. Der Programmiercode entwickelt sich zu einem Wirrwarr an Verzweigungen, die im Laufe der Zeit nicht mehr zu bereinigen sind. Am Ende ist die gesamte Entwicklung gelähmt und die Produktivität geht gegen null. Das Management beruft zusätzliches Personal zum Steigern der Produktivität, und vergrößert das Problem dadurch weiter. Die neuen Leute verstehen das vorhandene Softwaresystem nicht, sodass immer mehr Chaos entsteht.
Saubere Programmieren ist von unschätzbarem Wert
Eine zentrale Aufgabe beim Programmieren ist es, korrekten, sauberen und einfach gestalteten Programmcode abzuliefern. Dafür existieren in der Praxis zahlreiche Gründe: Auftretende Fehler sind einfacher zu finden und können schneller beseitigt werden. Änderungen in den Anforderungen der Software sind zügiger im Code umsetzbar. Zusätzliche Komponenten und Module sind mit geringerem Aufwand zu integrieren, sodass Codeanpassungen an anderen Stellen zu deutlich weniger Folgefehlern führen. Verständlicher Code ist für neue Teammitglieder schneller zu begreifen und benötigt deutlich weniger Aufwand für die Dokumentation.
Die wichtigsten Programmierrichtlinien
Folgenden Richtlinien zum sauberen Programmieren versetzen Sie in die Lage, dass Sie erstens guten Code von schlechtem Code unterscheiden, und zweitens schlechten Code in guten Code umwandeln können:
- Groß- und Kleinschreibung beachten:
Schreiben Sie Variablen- und Methodennamen klein und Klassennamen mit einem Großbuchstaben.
Für die bessere Lesbarkeit bezeichnen Sie alle Wortanfänge im Namen groß.
Konstanten bestehen in der Regel vollständig aus Großbuchstaben.
- Aussagekräftige Variablennamen:
Benennen Sie Variablen, Methoden und Klassen mit konsistenten, aussagekräftigen, aussprechbaren
und unterscheidbaren Namen.
Verwenden Sie kurze Verben oder Verben plus Substantive für Methodennamen
(z.B. schreibeDaten) und prägnante (beschreibende) Substantive für Klassennamen
(z.B. FirmenKonto).
- Übersichtliche Klammersetzung:
Von großer Relevanz ist die vernünftige Einrückung des Programmtextes.
Schreiben Sie öffnende und schließende Klammern in einem Codeblock zur besseren Lesbarkeit untereinander.
Durch die korrekte Einrückung des Codes sparen Sie viel Zeit bei der Suche nach vermeidbaren Fehlern.
- Fehleranfällige Konstrukte vermeiden:
Verwenden Sie in ihrem Programmcode keine genialen Programmiertricks, die nur sehr schwer nachzuvollziehen sind.
Gestalten Sie logische Aussagen ohne Negationen auf die einfachste Art und Weise.
Stark verschachtelte Kontrollanweisungen sind zu vermeiden, da diese schwer zu testen und zu verstehen sind.
- Leerstellen und Leerzeilen einfügen:
Für die bessere Lesbarkeit schreiben Sie jede Anweisung in eine neue Zeile.
Jede Zeile im Code stellt einen Ausdruck und jede Gruppe von Zeilen einen vollständigen Gedanken dar.
Wie Absätze in Artikeln trennen Sie diese durch eine Leerzeile.
Verwenden Sie Leerstellen, um Anweisungen übersichtlicher zu gestalten,
beispielsweise mit einem Leerzeichen vor und nach dem Gleichheitszeichen.
- Werte mit Variablen anlegen:
Viele Programme enthalten Codezeilen, bei der feste Zahlengrößen miteinander verrechnet werden.
Diese Werte können sich im Laufe der Zeit durch neue Anforderungen verändern.
Legen Sie unbedingt für jeden Wert in einem Programm eine eigene Variable an, damit Sie später
keine Zeit zum Suchen und Auswechseln der Werte verschwenden müssen.
Mehrfach verwendete Werte sind außerdem schwer zu finden,
sodass vergessene Änderungen den Programmcode fehlerhaft machen.
Definieren Sie die notwendigen Variablen eng bei dem Ort der Verwendung.
- Eine Aufgabe pro Methode:
Vermeiden Sie große und unstrukturierte Programme, da diese unübersichtlich und schwer wartbar sind.
Sie erhalten keinen guten Code, wenn Sie nur Unmengen von Anweisungen aneinanderreihen.
Die wichtigste Aufgabe beim Programmieren besteht darin, Aufgaben in kleine Teilaufgaben zu zerlegen.
Schreiben Sie für jede dieser einzelnen Aufgabe eine Methode (ca. 20-100 Zeilen).
- Duplizierende Codezeilen sind verboten:
Vermeiden Sie unbedingt beim Programmieren das kopieren und duplizieren von Codezeilen.
Unterteilen Sie wiederholende Teilaufgaben in passende Hilfsmethoden mit geeigneten Übergabeparametern.
Das Hauptprogramm ruft hauptsächlich die einzelnen Unterprogramme auf.
- Geringe Anzahl von Methodenargumenten:
Vermeiden Sie viele Übergabeparameter in Methoden, um aufwendige Testfälle zu umgehen.
Befördern Sie ggf. diese Argumente zu Instanzvariablen, wenn sie
mehr als drei Parameter besitzen.
Wenn eine Methode ein Eingabeargument transformiert, sollte das Ergebnis der Rückgabewert darstellen.
Verwenden Sie möglichst keine verkomplizierenden Flag-Argumente mit true oder false,
sondern teilen Sie die Methode in zwei separate auf.
- Strukturierter Aufbau von Quelldateien:
Der Code in einer Klasse sollte wie eine Erzählung von oben nach unten lesbar sein.
Schreiben Sie zusammengehörige Fakten stets enge beieinander.
Im oberen Teil der Quelldatei sollten die Instanzvariablen und die wichtigsten Konzepte stehen.
Die Detailtiefe nimmt nach unten hin zu, wobei am Ende die Hilfsmethode stehen.
Sinnvoll ist es hinter jeder Methode die Methode auf der nächsttieferen Abstraktionsebene zu schreiben.
Die aufrufende Methode sollte möglichst über der aufgerufenen Methode stehen.
Typischerweise sollte die Größe einer Datei nicht 500 Zeilen überschreiten.
- Objektorientiert Programmmieren:
Objektorientierte Programme bestehen aus einer Menge von interagierenden Elementen.
Fassen Sie zusammengehörige Daten und die darauf arbeitende Programmlogik in eine Klasse zusammen.
Schränken Sie die Sichtbarkeit von Variablen ein, sodass keine Fehlanwendungen möglich sind.
Erstellen Sie passende Schnittstellen mit Getter- und Settermethoden
für die Rückgabe und Veränderungen einzelner Variablen.
Benutzen Sie geeignete Programmierparadigmen und Entwurfsmuster zum Modellieren von
flexiblen und wiederverwendbaren Klassen.
- Jedes Objekt eine Klasse:
Jede Klasse besitzt eine Verantwortlichkeit und einen einzigen Grund zur Änderung.
Teilen Sie eine Klasse auf, wenn diese mehrere Verantwortlichkeiten hat, oder gewisse Methoden
nur bestimmte Variablen benutzen.
Erstellen Sie eine Klasse in der Form, dass diese möglichst mit wenigen anderen Klassen zusammenarbeitet,
um das gewünschte Verhalten zu erreichen.
Jede Klasse sollte eine überschaubare Anzahl von Instanzvariablen besitzen.
- Angemessene Kommentare:
Für die Verständlichkeit des Codes muss dieser ausreichend und einheitlich kommentiert sein.
Ausdrucksfähiger Code mit wenigen Kommentaren ist besser, als komplizierter Code mit vielen Kommentaren.
Kommentieren Sie keinen schlechten Code, sondern schreiben sie diesen um.
Benutzen Sie für Kommentare eine korrekte Grammatik mit sorgfältig gewählten Wörtern.
Eine gute Kommentierung hat die Aufgabe zu informieren, Absichten zu erklären, Bestandteile zu unterstreichen,
vor Konsequenzen zu warnen oder ToDo-Vermerke zu erstellen.
Auskommentierter Code verwirrt und ist zu entfernen.
- Teamregeln festlegen:
Ein Softwaresystem besteht aus einem Satz von ähnlich aufgebauten Quelldateien mit gleichen Formatierungsregeln.
Legen Sie die zentralen Codierungsregeln fest, wenn sie in einem Team programmieren.
Klammersetzung, Größe der Einrückungen, Bezeichnung der Klassen, Methoden, usw.
Jedes Mitglied des Teams sollte anschließend diesen Stil benutzen, sodass der gesamte Code konsistent ist.
Fazit: Schlechter Code führt in Unternehmen zu hohen Entwicklungszeiten und enormen Kosten. Am Ende bleibt ein Ausweg übrig: Alles markieren und die Entf-Taste drücken. Mit den richtigen Codierungsrichtlinien ist diese Situation vermeidbar.
Die Übersicht dieser Codierungsrichtlinien finden Sie als
PDF-Dokument im Downloadbereich in der Rubrik
Programmieren.