Sollte mein Team einen allgemein anerkannten Codierungsstandard als Grundlage für seinen eigenen verwenden?


9

Das Forschungs- und Entwicklungsteam, in dem ich bin, hat beschlossen, einen Codierungsstandard einzuführen. Wir haben uns erst vor kurzem gebildet und haben zu wenig Code und eigene gemeinsame Codierungszeit, um unser Dokument zu Standards / Konventionen auf die organischen Entwicklungen in unserem Team und auf gute Beispiele aus unserem eigenen Code usw. zu stützen.

Jetzt hat jeder von uns Erfahrung mit früheren Arbeitsplätzen - obwohl keiner von uns in der Lage ist zu sagen: "Nehmen wir dieses hier umfassende Dokument an, das ich für die Art der Arbeit, die wir hier leisten, als geeignet befunden habe" (*). Außerdem haben einige von uns (einschließlich ich) nur Erfahrung von Orten ohne offiziellen Codierungsstandard oder schreiben in verschiedenen Sprachen in einer anderen Umgebung (Hochdruck-Produktionsumgebung mit wöchentlicher Veröffentlichung im Gegensatz zu stärker forschungsorientierter Entwicklungsarbeit).

Eine der Optionen, über die ich nachgedacht habe, besteht darin, ein relativ bekanntes und angesehenes Dokument zu verwenden, das abzuschneiden, was uns nicht wichtig ist, und einige Änderungen vorzunehmen, die auf unseren Vorlieben basieren.

Ist das eine gängige Praxis? Glauben Sie, dass dies eine gute Idee ist? Wenn ja, was wäre ein vernünftiger "Baseline" -Codierungsstandard (sagen Sie mir nicht, welcher der beste ist, ich möchte hier keinen religiösen Konflikt beginnen; weisen Sie nur darauf hin, was umfassend oder "neutral" genug wäre, um darauf aufzubauen .)

Anmerkungen:

  • Wir erwarten, mit C, C ++, OpenCL, CUDA, Python zu arbeiten.
  • Wir sind ein Team von 4 Personen + Manager, von dem erwartet wird, dass es innerhalb eines Jahres auf etwa 5-6 wächst.
  • In unserem Unternehmen sind die Teams fast vollständig autonom und interagieren normalerweise überhaupt nicht (nicht einmal durch die Verwendung des Codes des jeweils anderen - die Arbeit umfasst ganz andere Projekte). Also - keine unternehmensweiten Überlegungen anzustellen.
  • In Bezug auf Tools wissen wir derzeit, dass wir Eclipse verwenden werden , sodass der Code-Formatierer mindestens ein Tool sein wird. Strg + Umschalt + F ist seit langem mein Freund
  • Wenn ich Java schreibe, habe ich die Praxis übernommen, Blochs effektives Java so genau wie möglich einzuhalten . Nun, das ist kein Kodierungsstandard, aber Sie könnten einige Ziegel, Zement und Mörtel als Kodierungsstandard bezeichnen. Ich dachte darüber nach, möglicherweise so etwas als Teil des 'Mix' aufzunehmen (wobei ich bedachte, dass wir kein Java machen).
  • Ich meine Codierungsstandards im weiteren Sinne des Wortes, z. B. die Übernahme von Vorschlägen, die in den Antworten auf diese P.SE-Frage gemacht wurden .
  • Ich habe eine große Liste von C ++ - Codierungsstandarddokumenten gefunden . Vielleicht sollte ich meine unsere Grundlinie abbauen.
  • (*) Das stimmt nicht ganz, aber ich möchte diese Frage nicht mit zu vielen Einzelheiten komplizieren.

9
Die Verwendung eines extern erstellten Codierungsstandards hilft dabei, heilige Kriege um bestimmte Codierungsstile zu reduzieren.
Gort the Robot

4
Welche Richtlinie Sie verwenden, spielt keine Rolle. Was zählt ist, dass Sie eine verwenden und dass jeder damit einverstanden ist, dieselbe zu verwenden . Dieser letzte Teil ist einfacher zu machen, wenn Sie einen vernünftigen wählen.
Joachim Sauer

3
Namenskonventionen werden überbewertet. Wenn Sie ein Modul haben, in dem Funktionen CamelCase sind, und ein anderes, in dem sie snake_case sind, ist es keine große Sache, wenn Sie zustimmen, zumindest die bereits für jede Komponente geltende Konvention zu befolgen. Wenn der heilige Krieg zu heiß wird, stoppen Sie ihn einfach und lassen Sie ihn inkonsistent.
Jan Hudec

1
Ich habe sehr wenig Erfahrung mit Eclipse, aber Code Standard (nicht Stil) Enforcer für Eclipse kann hilfreich sein
Dan Pichelman

1
Sie haben also die Wahl, einen vorhandenen Standard zu verwenden oder Zeit und Geld zu investieren, um einen zu erstellen? Ich sehe hier keine Wahl. Gehen Sie mit der kostenlosen Option.
Ramhound

Antworten:


9

Anders ausgedrückt, Sie fragen sich, ob Sie die Codierungsstandards Ihres Teams beschleunigen sollen, indem Sie externe Standards ausleihen, die Sie gefunden haben. Es hört sich nicht so an, als ob irgendjemand im Team (noch) sehr starke Meinungen darüber hat, wie diese Standards aussehen sollten.

Die Antwort lautet eindeutig Ja.

Ein extern bezogener Standard ist nichts überlegen. Schauen Sie sich die Antworten unter " https://softwareengineering.stackexchange.com/q/84203/53019 " an, um einige der Vorteile eines Standards zu sehen. Konsistenz und eine Basis, von der aus man sich ändern kann, sind aus Ihrer Sicht von entscheidender Bedeutung.

Schauen Sie sich auch " Umgang mit Codierungsstandards bei der Arbeit (ich bin nicht der Chef) " an, da hier einige der Teamdynamiken behandelt werden, die Ihr Team bei der Auswahl der Standards berücksichtigen muss. Das Team muss seine Codierungsstandards besitzen, damit jeder bereitwillig die Einschränkungen einhält, die es für die Codierung jeder Person auferlegt.

Sie haben auf diese Frage verlinkt, aber es lohnt sich, auf die beste Antwort hinzuweisen und sich darauf zu konzentrieren, zu verstehen, warum die Anforderungen vorhanden sind. Wenn Sie einen externen Standard verwenden, ist es für Ihr Team schwierig, die Grundlage für all diese Anforderungen zu verstehen. Wenn Sie jedoch akzeptieren, dass sie da sind, nur weil Ihr Team zunächst etwas brauchte, können Sie diesen externen Standard leicht in etwas ändern, das für Ihr Team besser funktioniert.

Wenn Sie einen Standard haben, können Sie die Formatierungsregeln, die Sie für Ihre IDE verwenden (in Ihrem Fall Eclipse), ausfüllen. " Vor- und Nachteile der Neuformatierung von erzwungenem Code " befasst sich mit den Vorteilen für alle im Team, die mit dem Code, an dem sie arbeiten, übereinstimmen, und bietet Ihnen die Möglichkeit, Snippets neu zu formatieren, die Sie möglicherweise aus anderen Projekten ausleihen. Ein zusätzlicher Vorteil der Verwendung eines externen Standards besteht darin, dass dieser möglicherweise bereits im Code-Formatierungsteil Ihrer IDE vorab ausgefüllt ist.

Jemand im Team wird sich wahrscheinlich über einen bestimmten Teil des Standards beschweren und die Tatsache dafür verantwortlich machen, dass Sie einen externen Standard als Basis verwendet haben. Lassen Sie sie lesen:
- Ich hasse einen unserer Codierungsstandards und es macht mich wahnsinnig, wie ich ihn verarbeiten soll?
- Wie überwinden Sie Ihre eigenen Codierungsverzerrungen, wenn Sie Legacy-Code übergeben?
und dann erkennen sie, dass sie sich wahrscheinlich über etwas innerhalb des Standards beschwert hätten, egal woher es kam. Bei der Anzahl der Teams, an denen ich gearbeitet habe, habe ich noch keinen Standard gefunden, den alle a) allgemein mochten und b) mit jedem Teil des Standards einverstanden waren. Verweisen Sie auf einige der frühen Links, um zu sehen, wie Sie mit diesen Bedenken umgehen können.


Nachtrag, Sie fragten nach "welches" Sie verwenden sollten. Ich werde das ausdrücklich nicht beantworten, da jede Antwort möglicherweise mit Meinungs-Flammenkriegen behaftet ist. Sie können sich jedoch Ihre IDE (Eclipse) ansehen und sehen, welche Optionen sie als Standardkonfiguration bietet. Ich würde auch ein bisschen suchen und sehen, ob es Projekte gibt, die in Ihre IDE eingebunden sind und zusätzliche Standardoptionen zur Auswahl bieten. Richtig oder falsch, diese Standards sind bereits für Sie festgelegt und können Ihrem Team viel Arbeit bei der Konfiguration für alle ersparen.


6

Ich würde mit Python beginnen. Python hat Codierungsrichtlinien, denen fast jeder einzelne Python-Programmierer folgt. Sie sind Teil der offiziellen Dokumentation PEP8 .

C / C ++ ist aus historischen Gründen ein großes Durcheinander, aber da dies bei Python nicht der Fall ist, würde ich empfehlen, dass Sie aus Gründen der Konsistenz auch die Python-Namenskonvention in C / C ++ befolgen.

Für C ++ ist es jetzt tatsächlich wichtiger, sich auf gemeinsame Redewendungen zu einigen und sicherzustellen, dass jeder einen vernünftigen modernen C ++ - Stil versteht als Kriege gegen Namenskonventionen. Sie sollten mit C ++ - Codierungsstandards beginnen und in Online-Ressourcen die C ++ - FAQ lesen .


Eigentlich glaube ich, dass wir für C, C ++ und Python unterschiedliche Namenskonventionen haben werden - zumindest für Dinge wie Großschreibung, Verwendung von Unterstrichen usw. MyTypeNameist C ++ wohl besser als my_type_name_t, und das Gegenteil gilt für C. Aber danke für die Referenzen.
Einpoklum

Für C ++ können Sie den von der STL und dem Boost verwendeten Standard verwenden. Nicht jeder mag es, aber da Sie mit Sicherheit einige stl-Container verwenden werden, wird es damit übereinstimmen.
Laurent Bourgault-Roy

@einpoklum: Für Nicht-Typen verwenden alle C-, C ++ - Standardbibliotheken und Python "snake_case". kein Unterschied da. Der einzige Unterschied besteht darin, ob Sie "MixedCase" für Typen oder auch "snake_case" verwenden möchten. C- und C ++ - Bibliothek verwenden "snake_case", ansonsten ist "MixedCase" sehr verbreitet.
Jan Hudec

@einpoklum Verwenden Sie den von der Standardbibliothek für C ++ festgelegten Standard.
Miles Rout

3

Sie können dieses Thema nicht einmal diskutieren, ohne zwischen einem Codierungsstandard und einem Codierungsstilstandard zu unterscheiden .

Ein Codierungsstandard besteht aus einer Reihe von Regeln, die definieren, welche Sprachmechanismen Sie verwenden dürfen, welche Sie nicht verwenden dürfen und wie Sie sie verwenden. Mit anderen Worten, Sie definieren eine Teilmenge der verwendeten Sprache und / oder eine Obermenge, wenn der Codierungsstandard bestimmte nicht standardmäßige Erweiterungen anspricht.

Ein Codierungsstilstandard befasst sich nur mit kosmetischen Problemen: wo Klammern und Leerzeichen platziert werden, wie Bezeichner benannt werden, wie Kommentare platziert werden usw.

Diese beiden unterschiedlichen Dinge befinden sich möglicherweise im selben Dokument. Die schwerwiegendsten Codierungsstandards befassen sich jedoch nicht mit dem Stil - die unten empfohlenen nicht. Höchstwahrscheinlich, weil der Codierungsstil sehr subjektiv ist und daher viel Reibung verursacht, wenn Meinungen kollidieren.

Für C / C ++ sind die Codierungsstandards mit dem besten Ruf die von MISRA . Sie sind in erster Linie für sicherheits- und geschäftskritische Anwendungen konzipiert. Da der Schlüssel zur Sicherheit von Programmen darin besteht, Fehler zu entfernen und zu vermeiden, gelten die MISRA-Standards für alle Programmierzweige, in denen Fehler nicht erwünscht sind.

Die Standards von CERT sind ebenfalls ziemlich bekannt und eher auf Desktop-Programmierung und Software-Sicherheit (anstatt auf Sicherheit) ausgerichtet. CERT hat Standards für C, C ++, Java und Perl, und die Standards sind kostenlos.

Ich würde mich zunächst mit MISRA und CERT befassen und nicht mit einem zufälligen Garagenstandard, der im Internet zu finden ist.


1
Ich habe noch nie von MISRA gehört und sehe nicht, dass seine Bestandteile übermäßig bedeutende Akteure sind. Können Sie ihren Ruf erklären? Können Sie in Bezug auf die CERT-Dokumente klarstellen, ob dies speziell Standards für sichere Programme oder allgemeinere Standards sind?
Einpoklum

@einpoklum Zunächst wird MISRA-C von so ziemlich jedem Autohersteller auf der Welt verwendet. Es wird zu einem "De-facto" -Standard für die C-Programmierung in der gesamten Branche der eingebetteten Systeme, wo es am bekanntesten ist. Das MISRA-Dokument enthält jedoch nichts, was die Verwendung in irgendeiner Form von C-Programm verhindert. Sowohl MISRA als auch CERT sind ziemlich allgemein gehalten und zielen letztendlich darauf ab, die Anzahl von Fehlern, schlechten Praktiken und Schwachstellen in einem Programm zu reduzieren. Diese Standards fördern auch die statische Code-Analyse.

1

Die Verwendung eines vorhandenen Standards als Grundlage für Ihren eigenen hat mehrere Vorteile. Ihr Code wird wahrscheinlich dem externen Code ähnlicher sein, was das Lesen / Integrieren von Code erleichtert. Wenn Sie sich für einen guten Standard entscheiden, wurde dieser von Experten geprüft, die gute Gründe hatten, sich für ihre jeweiligen Regeln zu entscheiden. Solange niemand in Ihrem Team besonders an einen Standard gebunden ist, gibt es wenig Grund, einen bestehenden Standard nicht als Grundlage für Ihren eigenen zu verwenden.

Wenn Sie sich nicht sicher sind, welche Codierungsstandards Sie verwenden sollen, gibt es einige offensichtliche ideale erste Wahl. In keiner bestimmten Reihenfolge:
1. Welcher Standard bereits von Ihrer IDE unterstützt wird. Dies ist wahrscheinlich konfigurierbar.
2. Welcher Standard auch immer vom Autor Ihres Compilers verwendet / empfohlen wird.
3. Welcher Standard auch immer vom Autor Ihres primären Frameworks verwendet / empfohlen wird (falls vorhanden).
4. Welcher Standard auch immer von den Autoren / Designern Ihrer Programmiersprache verwendet / empfohlen wird.
5. Welcher Standard auch immer von einem sehr großen Unternehmen verwendet / empfohlen wird.

Ich empfehle jemandem mit technischem Fachwissen, den Standard zu lesen, den Sie als Grundlage für Ihren eigenen Standard verwenden. Ein guter Standard hat oft eine Begründung für jede Regel, die Ihnen hilft, den Standard so zu ändern, dass er Ihren Anforderungen am besten entspricht.


0

Ein Standard hilft normalerweise bei der Kommunikation und Wartung. Meiner Meinung nach sollte es ein Geben und Nehmen geben, insbesondere in kleinen Teams, und sich weiterentwickeln. Es kann hilfreich sein, sie als Richtlinien zu bezeichnen :-)

Lassen Sie sich von den Google-Richtlinien inspirieren.


5
Es ist sehr subjektiv, welche Codierungsrichtlinien für C / C ++ zu wählen sind. Und wenn es eine gibt, die ich nicht wählen würde, dann ist es die von Google. Sie verbieten viele Dinge, die von anderen normalerweise als guter moderner C ++ - Stil angesehen werden, wie z. B. Boost.
Jan Hudec

1
Wie geht Ihre Antwort auf die Bedenken des OP hinsichtlich der Verwendung eines externen Standards ein? Das Vorschlagen einer Namensänderung für die Codierungsstandards hilft nicht bei den Kernproblemen, die sie angehen müssen.

1
@ JanHudec Ich stimme zu. Eines der Dinge, die es verbietet, ist die Verwendung von Ausnahmen.
BЈовић

-3

NEIN, ich würde mich nicht darum kümmern - ich denke, der einzige Vorteil wäre, wenn Ihr Team an einen Ort ziehen würde, an dem auch diese Standards verwendet wurden, was nicht das ist, was Sie wollen :)

Standards dienen nur dazu, die Zusammenarbeit zu vereinfachen. Wenn Sie also wissen, dass ein # define-Makro immer in Großbuchstaben geschrieben ist, haben Sie eine gute Vorstellung davon, dass es sich um ein Makro handelt, wenn Sie eine Großbuchstaben-ID im Code sehen. In ähnlicher Weise erinnern Sie andere Namens- oder Stilkonventionen daran, womit Sie es zu tun haben.

Ich finde Standards wie Dateispeicherort und -name nützlicher1 als die Code-Standards (schließlich gibt es Code in allen Formen und Größen, und Sie müssen ihn noch lesen), obwohl Sie nicht wissen, dass sich die Datei readme.txt in / bin / doc / debug befindet / release / documents ist ein echter Schmerz (wie so ein beschissener Weg, aber das ist eine andere Geschichte).

Ich würde empfehlen, dass Sie Ihre eigenen Standards aufstellen, während Sie fortfahren. Auf diese Weise erhalten Sie nicht nur diejenigen, die Sie alle mögen, sondern auch diejenigen, die definitiv für Sie, Ihr Team und Ihre Arbeit geeignet sind. Wenn Sie entscheiden, dass es Ihnen egal ist, wie eine while-Schleife aussieht, oder dass case-Anweisungen auf bestimmte Weise eingerückt werden müssen, sind Sie gut. Wenn Sie entscheiden, dass ++ - Operatoren gesperrt sind, ist das auch gut. Alle Ihre eigene Wahl.

Sie müssten es einfach machen, es zu finden und zu aktualisieren, vielleicht ein Wiki oder eine automatisch generierte Webseite aus einer Textbeschreibung, aber ansonsten - machen Sie es. Standards haben eine mythische Einstellung von einigen Leuten, die mehr daran interessiert sind, dem Standard fanatisch zu folgen als guten Code zu schreiben. Seien Sie nicht so wie sie - machen Sie Ihren eigenen Standard, der Ihnen hilft, wo Sie ihn brauchen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.