Ich arbeite mit einem Team, das in weniger als einem Jahr von 2 Entwicklern auf 10 gewachsen ist. Ich war Nummer 3 und der erste, der ein Problem mit den Codierungsstandards ansprach. Die beiden ursprünglichen Entwickler hatten einige Jahre lang Seite an Seite gearbeitet und einen gemeinsamen Standard angenommen, der mir fremd vorkam. Wir hatten genau dieselben Probleme, die Sie beschreiben.
Was wir gemacht haben war:
Forschungscodierungsstandards
Wir haben ein paar Tage damit verbracht, etablierte Open-Source-Projekte auszuprobieren. Wir wussten, dass das Team schnell wachsen würde und wir suchten nach echten Lösungen, die auf echten Projekten basierten und nicht auf allgemeinen Richtlinien. Wir haben uns auch nicht um die optimalen Codierungsstandards gekümmert, sondern um eine Reihe von Regeln und Richtlinien, die sinnvoll sind und nicht das Refactoring unserer gesamten Codebasis erfordern. Wir haben nach einem Hack für Codierungsstandards gesucht, wenn Sie so wollen.
Wir drei entschieden, dass die besten Codierungsstandards für ein etabliertes PHP-Projekt die von Zend Framework befolgten sind. Glücklicherweise stellen die Zend Framework-Mitarbeiter ein sehr umfassendes Dokument mit Codierungsstandards zur Verfügung .
Erstellen eigener Codierungsstandards
Natürlich hat es keinen Sinn ergeben, die Codierungsstandards eines anderen Projekts auf unser Projekt anzuwenden. Wir verwenden das Zend Framework Dokument als Vorlage:
- Zuerst haben wir alles entfernt, was für unser Projekt nicht zutraf
- Dann haben wir alles, was wir als eine Frage des Stils wahrgenommen haben, in unseren Stil geändert
- Und zum Schluss haben wir alles aufgeschrieben
Wir hatten also ein ziemlich großes Dokument zur Hand, das in unserem schicken Wiki gespeichert war. Es war eine nette Lektüre, der wir uns alle einig waren. Und für sich genommen völlig nutzlos.
Bleiben Sie unserem Versprechen treu
Unsere Codebasis war zu dieser Zeit ungefähr 1 * 10 ^ 6 sloc. Wir wussten, dass wir, seit wir formale Codierungsstandards verabschiedet hatten, damit beginnen mussten, unseren Code umzugestalten, aber zu der Zeit waren wir mit anderen Problemen konfrontiert. Deshalb haben wir uns entschlossen, nur unsere Kernbibliotheken umzugestalten, nur 5 * 10 ^ 3 sloc.
Wir haben einen von uns zum Kodierungsstandard-Master ernannt (wir haben anstelle des Masters lokale Profanität verwendet ), der für die Überprüfung und Durchsetzung der Standards verantwortlich ist. Wir recyceln die Rolle alle paar Sprints. Ich war der Erste und es war eine Menge Arbeit, da ich fast jedes Commit überwachen musste.
Während meiner Amtszeit hatten wir einige neue Diskussionen und kleine Ergänzungen zum Originaldokument, und schließlich hatten wir ein etwas stabiles Dokument. Wir ändern es von Zeit zu Zeit, aber die meisten dieser Änderungen betreffen neue Funktionen der Sprache, da PHP 5.3 bis auf den Namen eine Hauptversion war.
Umgang mit dem Neuen
Als der nächste Neuzugang kam, war es an der Zeit, unsere Codierungsstandards auf den Prüfstand zu stellen. Nach einer kleinen Einführung in unsere Codebasis haben wir ihn gebeten, unser Codierungsstandards-Dokument zu bewerten. Er hätte fast geweint. Es schien, dass er alles anders machte.
Da ich zu dieser Zeit der Meister der Kodierungsstandards war, war es an mir, seine Eingaben zu bewerten und das Dokument entsprechend zu überarbeiten. Seine Vorschläge waren:
- Fragen des persönlichen Stils (kurzerhand abgewiesen)
- Standards, die für seinen Java-Hintergrund Sinn machten, aber mit PHP nicht so viel (verworfen)
- Konventionen, die er aus seiner kurzen Erfahrung mit PHP mitbrachte (einige wurden abgewiesen, aber viele erwiesen sich als beliebte Konventionen, an die wir in unseren ersten Nachforschungen nie gedacht oder sie nicht entdeckt hatten)
Für die nächsten Wochen wurde ihm eine einfache Aufgabe übertragen: Einige Teile unserer Codebasis mit den Standards auf den neuesten Stand zu bringen. Ich musste diese Teile sorgfältig anhand einiger Regeln auswählen:
- Code sollte für jemanden, der mit unserer Codebasis (und PHP im Allgemeinen) nicht vertraut ist, relativ einfach sein
- Code sollte auf dem stehen, wofür er angeheuert wurde
Ich habe seinen Prozess überwacht und er hat gute Arbeit geleistet. Wir haben verschiedene Codeteile identifiziert, die nicht in unser Dokument passen, und entsprechend überarbeitet (Code und / oder Standards, je nachdem, was sinnvoller ist).
Und dann kam ein anderer neuer Typ. Wir haben den Vorgang wiederholt (diesmal ein anderer Meister) und es hat wieder funktioniert. Und wieder.
Abschließend
- Erstellen Sie ein Dokument mit Codierungsstandards, stellen Sie jedoch sicher, dass Ihre Standards nicht ausschließlich Ihre eigenen sind, sondern die allgemeinen Standards in der breiteren Community Ihrer Plattform widerspiegeln.
- Weisen Sie unserem Kodierungsstandard-Master eine ähnliche Rolle zu. Jemand, der zumindest neuen Code überwacht, insbesondere neuen Code von neuen Mitgliedern. Bereite die Rolle auf, da es extrem langweilig ist.
- Bewerten Sie immer die Eingaben eines neuen Mitglieds. Überarbeiten Sie Ihre Standards immer, wenn es Sinn macht. Das Dokument mit den Kodierungsstandards sollte sich langsam weiterentwickeln. Sie möchten Ihre Codebasis nicht bei jeder Iteration umgestalten.
- Warten Sie eine Weile, bis sich jedes neue Mitglied an Ihre Standards und Konventionen gewöhnt hat. Learn by Doing funktioniert am besten in diesen Situationen.
- Wiki wirkt Wunder für solche Dokumente.
- Code Reviews wirken Wunder für jede Situation!
Zu einem bestimmten Zeitpunkt wurde vorgeschlagen, einen Pre-Commit-Hook zu verwenden, um die Überprüfung der Standards zu automatisieren. Wir haben uns aus verschiedenen Gründen dagegen entschieden. Es gibt einige interessante Diskussionen zu StackOverflow zu diesem Thema:
Einige sind PHP-spezifisch, aber die Antworten gelten für alle Plattformen.