Codequalität
Mit Codequalität wird in der Programmierung das Maß bezeichnet, mit dem der Quellcode eines Programms bestehende, die formale Gestaltung betreffende Anforderungen erfüllt.
Codequalität ist ein Teilaspekt von Softwarequalität, mit dem insbesondere nicht-funktionale Anforderungen wie Konformität, Verständlichkeit, Analysierbarkeit, Modifizierbarkeit, Anpassbarkeit, Prüfbarkeit (so z. B. benannt und definiert nach ISO/IEC 9126) erfüllt bzw. unterstützt werden sollen.
Im Sprachgebrauch werden für denselben Sachverhalt auch die Ausdrücke Programmierstil oder Codierstil benutzt, weitere Synonyme sind z. B. Codestruktur, Codeformat(ierung) etc.
Allgemein
Als Teil des gesamten Qualitätsbegriffs für Software, der „die Gesamtheit der Merkmale und Merkmalswerte eines Softwareprodukts [umfasst], die sich auf dessen Eignung beziehen, festgelegte oder vorausgesetzte Erfordernisse zu erfüllen“,[1] bezieht sich „Codequalität“ auf die nicht-funktionalen und eher formalen Anforderungen, die durch die Gestaltung des Quelltextes zu erfüllen sind.
Eine hohe Codequalität fördert die Verständlichkeit und Wartbarkeit des Quelltextes. Alleine der Einsatz von Komplexitätsmetriken und die Verbesserung der damit aufgezeigten Codeteile führen zu ca. 20 % höherer Produktivität in der Softwarewartung.[2] Generell wird die verbesserte Verständlichkeit und Wartbarkeit durch formale Sauberkeit und eine verständliche Struktur erreicht.[3]
Da es sich bei der Software-Entwicklung um einen kreativen Prozess handelt,[4] ist eine explizite Unterteilung in „guten“ oder „schlechten“ Code nicht einfach möglich. Zwar existieren quasi-standardisierte Methodenkonzepte, nach denen Software entwickelt wird; für das Erstellen von Code jedoch lassen sich häufig nur sogenannte Best practices, Entwurfsmuster (inkl. identifizierter Antimuster) oder auf den Quellcode bezogene Style-Guides mit fakultativem Charakter finden. Dennoch lässt sich Codequalität beschreiben, unter anderem mit geeigneten Softwaremetriken wie beispielsweise Komplexitätsmetriken.
Mit Werkzeugen zur Quelltextformatierung kann Programmcode automatisch an bestimmte Formatvorgaben angepasst werden.
Kriterien
„Guter Code“ zeichnet sich in erster Linie durch ein klar definiertes und von außen sichtbares Erscheinungsbild aus. Mit undurchdachtem oder unter Zeitdruck niedergeschriebenem Quelltext wird oft versucht, mehrere Aufgaben auf einmal zu erfüllen, der Code verliert somit die Fähigkeit, den Auftragsinhalt klar zu kommunizieren und zeichnet sich infolgedessen häufig durch sogenannte Code-Smells aus. Auf diese Weise wird die Ausdruckskraft, Kontrolle und Erweiterbarkeit vermindert beziehungsweise erschwert.[4]
Auf Basis dieser Feststellung lassen sich verschiedene Unterscheidungskriterien formulieren, die auch für die Testgetriebene Entwicklung von Interesse sind:
- Lesbarkeit – Wie gut lässt sich der Code von anderen Entwicklern nachvollziehen?
- Testbarkeit – Inwiefern ist der Code für automatisiertes Testen geeignet und vorbereitet?
- Änderbarkeit – Wie leicht macht der Code es anderen Programmierern ihn zu erweitern?
Hierbei handelt es sich nicht um objektiv messbare Kriterien. Dennoch lassen sich Quelltexte mit Hilfe dieser drei Qualitätsmerkmale unterscheidend bewerten.[5]
Unter gewissen Voraussetzungen kann auch die Portierbarkeit von Code ein Kriterium für dessen Qualität sein. Dies betrifft allerdings nur solchen Code, dessen Interpretation und Ausführung von der CPU-Familie bzw. vom Prozessortyp des Rechners, auf welchem der Code zum Laufen gebracht werden soll, abhängt. Man spricht auch von „maschinenabhängigem Code“, der für die Portierbarkeit eine Bedeutung besitzt. In plattformübergreifenden Software-Projekten, in welchen mit niederen Programmiersprachen gearbeitet wird, spielt Portierbarkeit in vielen Fällen eine Rolle.[6]
Ebenso ist die anzustrebende Codequalität davon abhängig, inwieweit die Qualitätskriterien situationsbedingt von Bedeutung sind. Geringere Bedeutung kommt den Kriterien z. B. zu, wenn die Software nur einmalig (im Gegensatz zu dauerhaft) benutzt werden soll; oder im privaten Bereich (im Ggs. zu einem unternehmerischen Umfeld mit ggf. vielen Softwareentwicklern). Die in solchen Fällen geringeren Anforderungen können sich dementsprechend auch im Programmcode widerspiegeln.
Qualitätssichernde Maßnahmen
Beispiele für Maßnahmen zur Herstellung „guten Programmcodes“ können u. a. sein:
- Erstellung und Verabschiedung von Programmierrichtlinien
- Schulungsmaßnahmen zur Vermittlung der darin enthaltenen Festlegungen
- Coaching / Unterstützung noch unerfahrener Programmierer beim Programmieren (Codieren)
- Verwendung von Codegeneratoren (die zum Teil eine grafische Ablaufdarstellung bieten) und/oder anderer Programmierstandards
- Einsatz von Verfahren zur Strukturverbesserung von Quellcode, z. B. Refactoring
- Code-Reviews zur regelmäßigen Prüfung der Codequalität
- Führen von Softwaremetriken als Teilmaßnahme der Qualitätssicherung
Literatur
- Sebastian Kübeck: Software-Sanierung - Weiterentwicklung, Testen und Refactoring bestehender Software. mitp-Verlag, Heidelberg 2009, ISBN 978-3-8266-5072-7.
- Robert C. Martin: Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code. mitp-Verlag, Heidelberg 2009, ISBN 978-3-8266-5548-7.
- Frank Westphal: Testgetriebene Entwicklung mit JUnit und FIT. dpunkt.verlag, Heidelberg 2005, ISBN 3-89864-220-8.
Einzelnachweise
- ↑ Helmut Balzert: Lehrbuch der Softwaretechnik. Teil 2: Softwaremanagement, Software-Qualitätssicherung, Unternehmensmodellierung. 1998, ISBN 3-8274-0065-1, S. 257.
- ↑ Capers Jones: Software Assessments, Benchmarks, and Best Practices. Addison-Wesley, 2000, ISBN 978-0-201-48542-4 (englisch).
- ↑ Donis Marschall, John Bruno: Solid Code. 2009, ISBN 978-3-86645-664-8.
- ↑ a b Robert C. Martin: Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code. 2009, ISBN 978-3-8266-5548-7, S. 43–44.
- ↑ Jan Brennenstuhl: Saubere Software durch TDD? – Wie testgetriebenes Entwickeln zu besserer Codequalität führt. 2012.
- ↑ Brian Hook: Portabler Code: Einführung in die plattformunabhängige Softwareentwicklung. Open Source Press, München 2006, ISBN 3-937514-19-8.