Kodierungskonventionen - Coding conventions
| Software-Entwicklung |
|---|
Codierungskonventionen sind eine Reihe von Richtlinien für eine bestimmte Programmiersprache , die Programmierstile , Praktiken und Methoden für jeden Aspekt eines in dieser Sprache geschriebenen Programms empfehlen . Diese Konventionen decken normalerweise Dateiorganisation, Einrückungen , Kommentare , Deklarationen , Anweisungen , Leerräume , Namenskonventionen , Programmierpraktiken , Programmierprinzipien , Faustregeln für die Programmierung , Best Practices für die Architektur usw. ab. Dies sind Richtlinien für die strukturelle Qualität von Software . Softwareprogrammierern wird dringend empfohlen, diese Richtlinien zu befolgen, um die Lesbarkeit ihres Quellcodes zu verbessern und die Softwarewartung zu vereinfachen. Codierungskonventionen gelten nur für die menschlichen Betreuer und Peer-Reviewer eines Softwareprojekts. Konventionen können in einem dokumentierten Regelwerk formalisiert werden, das ein ganzes Team oder Unternehmen befolgt, oder können so informell sein wie die gewohnheitsmäßigen Codierungspraktiken eines Einzelnen. Codierungskonventionen werden von Compilern nicht erzwungen .
Software-Wartung
Die Reduzierung der Kosten für die Softwarewartung ist der am häufigsten genannte Grund für die Einhaltung von Codierungskonventionen. In ihrer Einführung in die Codekonventionen für die Programmiersprache Java liefert Sun Microsystems die folgende Begründung:
Codekonventionen sind aus mehreren Gründen für Programmierer wichtig:
- 40–80 % der Lebenszeitkosten einer Software entfallen auf die Wartung.
- Kaum eine Software wird ein Leben lang vom ursprünglichen Autor gepflegt.
- Codekonventionen verbessern die Lesbarkeit der Software und ermöglichen es Ingenieuren, neuen Code schneller und gründlicher zu verstehen.
- Wenn Sie Ihren Quellcode als Produkt versenden, müssen Sie sicherstellen, dass er genauso gut verpackt und sauber ist wie jedes andere von Ihnen erstellte Produkt.
Qualität
Software-Peer-Review beinhaltet häufig das Lesen des Quellcodes. Diese Art von Peer - Review ist in erster Linie eine Defekt Erkennung Aktivität. Per Definition hat nur der ursprüngliche Autor eines Codestücks die Quelldatei gelesen, bevor der Code zur Überprüfung eingereicht wird. Code, der nach einheitlichen Richtlinien geschrieben wurde, ist für andere Prüfer leichter zu verstehen und zu verarbeiten, wodurch die Effizienz des Fehlererkennungsprozesses verbessert wird.
Selbst für den ursprünglichen Autor erleichtert eine konsistent codierte Software die Wartbarkeit. Es gibt keine Garantie dafür, dass sich eine Person noch lange nach dem ursprünglichen Schreiben des Codes an die genaue Begründung erinnern wird, warum ein bestimmter Code auf eine bestimmte Weise geschrieben wurde. Kodierungskonventionen können helfen. Die konsequente Verwendung von Leerzeichen verbessert die Lesbarkeit und verkürzt die Zeit, die zum Verständnis der Software benötigt wird.
Codierungsstandards
Wo Codierungskonventionen speziell für die Erstellung von qualitativ hochwertigem Code entwickelt und dann formell übernommen wurden, werden sie zu Codierungsstandards. Bestimmte Stile, unabhängig davon, ob sie allgemein verwendet werden, erzeugen nicht automatisch Code von guter Qualität.
Reduzierung der Komplexität
Komplexität ist ein Faktor, der der Sicherheit entgegensteht.
Das Komplexitätsmanagement beinhaltet folgendes Grundprinzip: Minimieren Sie die Menge an Code, die während der Projektentwicklung geschrieben wird. Dies verhindert unnötige Arbeit, wodurch unnötige Kosten vermieden werden, sowohl im Vorfeld als auch im Nachhinein. Dies liegt einfach daran, dass bei weniger Code weniger Aufwand nicht nur für die Erstellung der Anwendung, sondern auch für deren Wartung erforderlich ist.
Komplexität wird sowohl in der Entwurfsphase (wie das Projekt architekturiert ist) als auch in der Entwicklungsphase (durch einfacheren Code) verwaltet. Wenn die Codierung einfach und einfach gehalten wird, wird die Komplexität minimiert. Sehr oft bedeutet dies, dass die Codierung so „physisch“ wie möglich gehalten wird – eine Codierung auf eine sehr direkte und nicht sehr abstrakte Weise. Dies erzeugt optimalen Code, der leicht zu lesen und zu befolgen ist. Komplexität lässt sich auch einfach dadurch vermeiden, dass für einfache Aufgaben keine komplizierten Werkzeuge verwendet werden.
Je komplexer der Code ist, desto wahrscheinlicher ist es, dass er fehlerhaft ist, desto schwieriger sind die Fehler zu finden und desto wahrscheinlicher sind versteckte Fehler.
Refactoring
Refactoring bezieht sich auf eine Softwarewartungsaktivität, bei der Quellcode modifiziert wird, um die Lesbarkeit zu verbessern oder seine Struktur zu verbessern. Software wird oft umgestaltet, um sie nach ihrer ersten Veröffentlichung in Übereinstimmung mit den angegebenen Codierungsstandards eines Teams zu bringen. Jede Änderung, die das Verhalten der Software nicht verändert, kann als Refactoring betrachtet werden. Häufige Refactoring-Aktivitäten sind das Ändern von Variablennamen, das Umbenennen von Methoden, das Verschieben von Methoden oder ganzen Klassen und das Aufteilen großer Methoden (oder Funktionen ) in kleinere.
Agile Softwareentwicklungsmethoden planen ein regelmäßiges (oder sogar kontinuierliches) Refactoring und machen es zu einem integralen Bestandteil des Softwareentwicklungsprozesses im Team .
Aufgabenautomatisierung
Codierungskonventionen ermöglichen es Programmierern, einfache Skripte oder Programme zu verwenden, deren Aufgabe darin besteht, Quellcode zu einem anderen Zweck zu verarbeiten, als ihn in eine ausführbare Datei zu kompilieren. Es ist gängige Praxis, die Softwaregröße ( Quellcodezeilen ) zu zählen, um den aktuellen Projektfortschritt zu verfolgen oder eine Basis für zukünftige Projektschätzungen zu erstellen .
Konsistente Codierungsstandards können wiederum die Messungen konsistenter machen. Spezielle Tags in Quellcodekommentaren werden oft verwendet, um Dokumentation zu verarbeiten, zwei bemerkenswerte Beispiele sind javadoc und doxygen . Die Tools spezifizieren die Verwendung eines Satzes von Tags, aber ihre Verwendung innerhalb eines Projekts wird durch Konventionen bestimmt.
Codierungskonventionen vereinfachen das Schreiben neuer Software, deren Aufgabe es ist, vorhandene Software zu verarbeiten. Die Verwendung der statischen Codeanalyse hat seit den 1950er Jahren stetig zugenommen. Ein Teil des Wachstums dieser Klasse von Entwicklungs - Tools ergibt sich aus erhöhten Reife und Raffinesse der Praktizierenden selbst (und die moderne Fokus auf Sicherheit und Sicherheit ), sondern auch von der Art der Sprachen selbst.
Sprachfaktoren
Alle Software-Praktiker müssen sich mit dem Problem auseinandersetzen, eine große Anzahl von manchmal komplexen Anweisungen zu organisieren und zu verwalten. Bei allen außer den kleinsten Softwareprojekten wird der Quellcode (Anweisungen) in separate Dateien und häufig in viele Verzeichnisse aufgeteilt . Für Programmierer war es selbstverständlich, eng verwandte Funktionen (Verhalten) in derselben Datei zu sammeln und verwandte Dateien in Verzeichnissen zu sammeln. Als sich die Softwareentwicklung von der rein prozeduralen Programmierung (wie in FORTRAN ) zu objektorientierten Konstrukten (wie in C++ ) verlagerte , wurde es zur Praxis, den Code für eine einzelne (öffentliche) Klasse in einer einzigen Datei zu schreiben (die 'eine Klasse pro Datei' Konvention). Java ist noch einen Schritt weiter gegangen - der Java-Compiler gibt einen Fehler zurück, wenn er mehr als eine öffentliche Klasse pro Datei findet.
Eine Konvention in einer Sprache kann in einer anderen erforderlich sein. Sprachkonventionen wirken sich auch auf einzelne Quelldateien aus. Jeder Compiler (oder Interpreter), der zum Verarbeiten von Quellcode verwendet wird, ist einzigartig. Die Regeln, die ein Compiler auf die Quelle anwendet, schaffen implizite Standards. Python-Code ist beispielsweise viel konsistenter eingerückt als beispielsweise Perl, da Whitespace (Einrückung) für den Interpreter tatsächlich von Bedeutung ist. Python verwendet nicht die geschweifte Syntax, die Perl verwendet, um Funktionen abzugrenzen. Einrückungsänderungen dienen als Trennzeichen. Tcl , das eine geschweifte Syntax ähnlich wie Perl oder C/C++ verwendet, um Funktionen abzugrenzen, lässt Folgendes nicht zu, was einem C-Programmierer ziemlich vernünftig erscheint:
set i = 0
while {$i < 10}
{
puts "$i squared = [expr $i*$i]"
incr i
}
Der Grund dafür ist, dass geschweifte Klammern in Tcl nicht nur zur Abgrenzung von Funktionen verwendet werden, wie in C oder Java. Allgemeiner gesagt werden geschweifte Klammern verwendet, um Wörter zu einem einzigen Argument zusammenzufassen. In Tcl nimmt das Wort while zwei Argumente an, eine Bedingung und eine Aktion . Im obigen Beispiel fehlt während sein zweites Argument, seine Aktion (weil die Tcl auch das Zeilenumbruchzeichen verwendet, um das Ende eines Befehls zu begrenzen).
Gemeinsame Konventionen
Es gibt eine Vielzahl von Kodierungskonventionen; siehe Codierungsstil für zahlreiche Beispiele und Diskussionen. Gängige Codierungskonventionen können die folgenden Bereiche abdecken:
- Kommentar Konventionen
- Konventionen für Einzugsstile
- Zeilenlänge Konventionen
- Namenskonventionen
- Programmierpraktiken
- Programmierprinzipien
- Konventionen des Programmierstils
Zu den Codierungsstandards gehören der CERT C Coding Standard , MISRA C , High Integrity C++ , siehe Liste unten.
Siehe auch
- Vergleich von Programmiersprachen (Syntax)
- Ungarische Notation
- Einzugsstil
- Liste der Tools zur statischen Codeanalyse
- Liste der Softwareentwicklungsphilosophien
- MISRA
- Programmierstil
- Softwaremetriken
- Softwarequalität
- Die Macht der 10 Regeln
Verweise
- ^ "EditorConfig hilft Entwicklern, konsistente Codierungsstile zwischen verschiedenen Editoren und IDEs zu definieren und zu pflegen" . EditorConfig .
- ^ "Codekonventionen für die Programmiersprache Java: Warum Codekonventionen haben" . Sun Microsystems, Inc. 1999-04-20.
- ^ Robert L. Glass: Fakten und Irrtümer der Softwaretechnik; Addison Wesley, 2003.
- ^ Tom Gillis. "Komplexität ist der Feind der Sicherheit" .
- ^ Jeffries, Ron (2001-11-08). "Was ist Extreme Programming? : Design Improvement" . XP-Magazin. Archiviert vom Original am 15.12.2006.
- ^ Hoff, Todd (2007-01-09). "C++-Codierungsstandard: Benennen von Klassendateien" .
- ^ FIFE-Codierungsstandards
- ^ van Rossum, Guido (2006-09-19). Fred L. Drake, Jr. (Hrsg.). "Python-Tutorial: Erste Schritte zur Programmierung" . Python Software Foundation. Archiviert vom Original am 28.09.2008 . Abgerufen 2014-08-17 .
- ^ Raymond, Eric (2000-05-01). "Warum Python?" . Linux-Journal.
- ^ Tcl-Entwickler Xchange. "Zusammenfassung der Tcl-Sprachsyntax" . Aktiver Zustand.
- ^ Staplin, George Peter (2006-07-16). "Warum kann ich keine neue Zeile vor einer geschweiften Gruppe beginnen" . 'das Tcler-Wiki'.
Liste der Codierungsstandards
Codierungskonventionen für Sprachen
- ActionScript: Flex SDK-Codierungskonventionen und Best Practices
- Ada: Ada 95 Quality and Style Guide: Richtlinien für professionelle Programmierer
- Ada: Leitfaden für die Verwendung der Programmiersprache Ada in Systemen mit hoher Integrität (ISO/IEC TR 15942:2000)
- Ada: NASA Flight Software Branch — Ada Coding Standard
- Ada: ESA Ada Coding Standard - BSSC(98)3 Ausgabe 1. Oktober 1998
- Ada: Softwareentwicklung und Standardisierung der Europäischen Weltraumorganisation
- C: CERT-C-Codierungsstandard CERT-C-Codierungsstandard (SEI)
- C: Eingebetteter C-Codierungsstandard (Barr Group)
- C: Firmware-Entwicklungsstandard (Jack Ganssle)
- C: MISRA C
- C: TIOBE C-Standard
- C++: C++-Kernrichtlinien ( Bjarne Stroustrup , Herb Sutter )
- C++: Quantensprünge C/C++-Codierungsstandard
- C++: C++-Programmierung/Programmiersprachen/C++/Code/Stilkonventionen
- C++: C++-Programmierstilrichtlinien von GeoSoft
- C++: Googles C++-Styleguide
- C++: C++ mit hoher Integrität
- C++: MISRA C++
- C++: C++-Codierungsstandard von Philips Healthcare
- C/C++: C/C++ Coding Guidelines von devolo
- C#: C#-Codierungskonventionen (C#-Programmierhandbuch)
- C#: Designrichtlinien für die Entwicklung von Klassenbibliotheken
- C#: Brad Abrams
- C#: Philips Healthcare oder Philips Healthcare C# Coding Standard
- D: Der D-Stil
- Dart: Der Dart-Styleguide
- Erlang: Erlang-Programmierregeln und Konventionen
- Flex: Codekonventionen für das Flex SDK
- Java: Ambysofts Coding Standards for Java
- Java: Codekonventionen für die Programmiersprache Java (Nicht aktiv gepflegt. Neueste Version: 1999-APR-20.)
- Java: Java-Programmierungsstilrichtlinien von GeoSoft
- Java: Java-Codierungsstandards bei Curlie
- Java: TIOBE Java-Standard
- Java: Codierungskonventionen von SoftwareMonkey für Java und andere Sprachen mit geschweifter Syntax
- JavaScript: Codekonventionen für die Programmiersprache JavaScript
- Lisp: Riastradhs Lisp-Stilregeln
- MATLAB: Neurobat-Codierungskonventionen für MATLAB, archiviert 2014-10-14 auf der Wayback Machine
- Object Pascal: Object Pascal-Styleguide
- Perl: Perl Style Guide
- PHP::PEAR: PHP::PEAR-Kodierungsstandards
- PHP::FIG: PHP-Framework-Interop-Gruppe
- PL/I: PL/I-Styleguide
- Python: Styleguide für Python-Code
- Ruby: Das inoffizielle Ruby-Gebrauchshandbuch
- Ruby: GitHub Ruby-Styleguide
- Shell: Googles Shell Style Guide
Codierungskonventionen für Projekte
- C-Sprachstilhandbuch für Apache-Entwickler
- Drupal PHP-Kodierungsstandards
- GNU-Kodierungsstandards
- "GNAT-Codierungsstil: Ein Leitfaden für GNAT-Entwickler" . GCC-Online-Dokumentation . Free Software Foundation . Abgerufen 2009-01-19 .( PDF )
- Linux-Kernel-Coding-Style (oder Documentation/CodingStyle im Linux-Kernel-Quellbaum)
- Mozilla Coding Style Guide
- Mono: Programmierstil für Mono
- Styleguide für OpenBSD-Kernel-Quelldateien (KNF)
- C++-Richtlinien des Road Intranet
- Styleguides für von Google stammende Open-Source-Projekte
- Der NetBSD-Quellcode-Styleguide (früher bekannt als BSD Kernel Normal Form)
- Zend Framework-Codierungsstandards
- ZeroMQ C-Sprachstil für Skalierbarkeit (CLASS)
- ^ "TIOBE - C-Kodierungsstandard" . tics.tiobe.com . Abgerufen 2021-03-11 .
- ^ „C++-Codierungsstandard“ . tics.tiobe.com . Abgerufen 2021-03-11 .
- ^ „C#-Codierungsstandard“ . tics.tiobe.com . Abgerufen 2021-03-11 .
- ^ "TIOBE - Java-Codierungsstandard" . tics.tiobe.com . Abgerufen 2021-03-11 .