So stellen Sie die Einhaltung von Codierungsstandards sicher

Wir haben ein Codierungsstandarddokument, das Standards für SQL enthält.

Im letzten Sprint gab es einige Standards, die vom Entwickler und auch vom Reviewer übersehen wurden.

Wir hatten gerade ein Meeting, bei dem einige Leute dachten, dass das Hinzufügen eines Checklistendokuments zu jedem mit „SQL“ gekennzeichneten Ticket dem Prüfer eine Messlatte geben würde. Einige schlugen vor, benutzerdefinierte Felder/Kontrollkästchen zu Jira (Web)-Tickets hinzuzufügen.

Beide Lösungen sind meiner Meinung nach nicht optimal. Bei früheren Teams waren die Codierungsstandards wie ein Ethos, das vom Anwendungsentwicklungsmanager aufrechterhalten wurde, an das das Team glaubte und das neuen Entwicklern bei der Einarbeitung beigebracht wurde. Das einzige, was toleriert wurde, war das Schlagen der Norm.

Die SQL-Standards sind etwas neu, da wir gerade einen neuen DBA eingestellt haben. Ich versuche zu verstehen, ob dies eine Bildungsaufgabe, eine Prozessaufgabe, etwas anderes oder eine Kombination ist.

Statische Codeanalyse?
Codierungsstandards sind meistens Zeitverschwendung und ein Weg zum Mikromanagement mit sehr geringem Nutzen.
Warum sind die beiden vom Team vorgeschlagenen Lösungen Ihrer Meinung nach nicht ideal?

Antworten (7)

Um betreut zu werden, müssen Standards verstanden werden.

Du sagst das

eine Checkliste[...]/Checkboxen [sind nicht] ideal

Weil

Bei früheren Teams waren die Codierungsstandards wie ein Ethos, das vom Anwendungsentwicklungsmanager aufrechterhalten wurde, an das das Team glaubte und das neuen Entwicklern bei der Einarbeitung beigebracht wurde.

Was ich daraus schließe, ist, dass Ihr Hauptanliegen darin besteht, dass Sie möchten, dass sich das Team um die Standards kümmert , und nicht nur zustimmt und sie aufrechterhält, um zuzustimmen und sie aufrechtzuerhalten. (Korrigieren Sie mich, wenn ich falsch liege.)

Dazu muss Ihr Team die Standards verstehen und wissen, warum es sie gibt .

Betrachten Sie die folgenden drei Gespräche.

  1. "Schauen Sie in beide Richtungen, bevor Sie die Straße überqueren." "Warum?" "Ich weiß nicht, es ist nur das, was mir gesagt wurde ."
  2. "Schauen Sie in beide Richtungen, bevor Sie die Straße überqueren." "Warum?" "Weil es das Gesetz ist ."
  3. "Schauen Sie in beide Richtungen, bevor Sie die Straße überqueren." "Warum?" „Denn wenn Sie dies nicht tun, ist es wahrscheinlicher, dass Sie von einem Auto angefahren werden, was entweder zu einem blutigen Tod oder möglicherweise zu schweren Verletzungen wie einer Wirbelsäulenverletzung führt, durch die Sie nie wieder gehen können.“

Betrachten Sie nun die folgenden drei Gespräche:

  1. "Verketten Sie Strings niemals mit SQL." "Warum?" "Ich weiß es nicht, es ist nur das, was mir der DBA gesagt hat ."
  2. "Verketten Sie Strings niemals mit SQL." "Warum?" "Weil es auf der Checkliste steht ."
  3. "Verketten Sie Strings niemals mit SQL." "Warum?" „Denn wenn Sie eine Zeichenfolge mit Benutzereingaben mit Ihrem SQL verketten, anstatt sie richtig zu parametrisieren, setzen Sie sich einem SQL-Injection-Angriff aus, der Hackern viel mehr Zugriff auf unsere Datenbank geben kann, als wir ihnen geben wollen.“
    • (Gefolgt natürlich von „Bedeutet das nicht, dass es in Ordnung ist, konstante Zeichenfolgen mit SQL zu verketten?“ „Sie haben Recht. Lassen Sie uns den Standard aktualisieren.“)

Sehen Sie dort Gemeinsamkeiten und Unterschiede?

Meiner Erfahrung nach sind die effektivsten Codierungsstandards diejenigen, die direkt von den Entwicklern vorangetrieben werden.

Ein Ansatz, der meiner Meinung nach gut funktioniert, besteht darin, eine Entwickler-Community of Practice zu haben, die Codierungsstandards diskutiert und ihnen im Konsens zustimmt.

Durch die Einführung von Standards auf diese Weise haben die Entwickler einen Buy-in für ihren Erfolg. Wenn sie der Meinung sind, dass ein Codierungsstandard keinen Wert hat, können sie dies in der Community ansprechen und diskutieren lassen. Wenn der Konsens besteht, dass der Standard keinen Mehrwert bringt, kann er fallen gelassen werden.

In diesem Fall wäre die einfachste Lösung, einige Linters für den von Ihnen erstellten Code zu verwenden, sei es SQL oder etwas anderes. Siehe auch:

Diese Tools automatisieren einige der Regeln, decken aber nur die Syntax ab. Man braucht immer noch Menschen, die sich gemeinsam auf einen Qualitätsstandard einigen und sich dann daran halten, weil es ihnen wichtig ist. Dies ist jedoch nicht so einfach wie die Syntaxprüfung mit Tools.

Sie sollten dieses Thema in Ihrer nächsten Retrospektive aufgreifen, herausfinden, was passiert ist, und sich gemeinsam darauf einigen, was Sie als Nächstes tun könnten. Versuchen Sie jedoch, die Dinge einfach zu halten.

Gehen Sie erneut auf das Thema ein, wenn etwas passiert, und erinnern Sie alle daran, dass es eine Entscheidung war, die sie gemeinsam getroffen und deren Umsetzung sie vereinbart haben, weil es wichtig war. Wenn die Dinge weiter passieren, kann das ein Zeichen dafür sein, dass sie den Codierungsstandards nur in Worten zugestimmt haben und dies nicht wirklich mit ihren Taten unterstützen.

Keine noch so viele Tools, Standards oder Prozesse werden garantieren, dass die Standards befolgt werden, wenn die Menschen die Einhaltung der Codierungsstandards nicht als wertvoll und als normale Arbeitsweise betrachten.

Mein Verständnis aus der Frage ist, dass das Team des OP bereits zugestimmt hat, den Standard aufrechtzuerhalten ... die Sorge des OP ist nur, dass sie nicht begeistert sind.
@Sarov: Dann könnte das bedeuten, dass es für sie nicht wirklich wichtig ist, oder wie Sie in Ihrer Antwort erwähnen, verstehen sie möglicherweise nicht, warum sie es tun. Wenn es wichtig ist und sie verstehen, dann sollten sie in der nächsten Retrospektive sprechen, um zu sehen, was passiert ist.
Gut ja. Retro wäre ein guter Ort, um so oder so zu diskutieren.

Wie Sie geschrieben haben, handelt es sich wahrscheinlich um eine Kombination aus Bildungs- und Prozessaufgabe.
Der Codierungsstandard muss verstanden, verdaut und geübt werden, bevor er zur Gewohnheit und Teil des Berufsethos wird.

Ich finde, dass Definitions of Done sehr nützlich sind, um die Teams zu schulen und diese Gewohnheiten in die normale Arbeitsweise zu integrieren.

Sie könnten eine spezielle Checkliste im Verteidigungsministerium hinzufügen und – wenn die Zeit vergeht und sich die Teams verbessern – kann sie entfernt oder ausgefeilter gestaltet werden.
Wenn Sie auch Confluence verwenden, ist es sehr einfach, eine Confluence-Seite, die die mit einem DoD verknüpfte Checkliste enthält, mit einem Jira-Element zu verknüpfen. Sie können auch festlegen, dass die Jira-Story nur dann umgestellt werden kann, wenn die Checkliste ausgefüllt wurde.

Im letzten Sprint gab es einige Standards, die vom Entwickler und auch vom Reviewer übersehen wurden.

Warum wurde es übersehen? Lag es an Zeitmangel oder mangelnder Absicht?

Wenn es an Zeitmangel liegt, sollte das Entwicklungsteam bei der Planung des nächsten Sprints Schätzungen beiseite lassen, um sicherzustellen, dass es überprüft, ob der von ihm entwickelte Code dem Codierungsstandard entspricht. Sie können hier die Paarprogrammierung ausprobieren, bei der ein anderer Entwickler sicherstellen kann, dass Codierungsstandards vorhanden sind, wenn der erste Entwickler seine Entwicklungsarbeit beendet.

Wenn dies auf mangelnde Absichten des Entwicklungsteams zurückzuführen ist, führen Sie, wie in anderen Antwortposts erwähnt, während der Retrospektive eine ehrliche und offene Diskussion über die tatsächliche Notwendigkeit der Einhaltung des Codierungsstandards.

Wenn das Entwicklungsteam sich vollständig einig ist, dass Codierungsstandards befolgt werden müssen, könnte eine weitere Option darin bestehen, die Einhaltung von Codierungsstandards als Teil der Akzeptanzkriterien der User Story aufzunehmen. Auf diese Weise weiß das Entwicklungsteam, dass die User Story nicht als „fertig“ markiert werden kann, es sei denn, sie halten sich an den Code und implementieren ihn gemäß dem vereinbarten Codierungsstandard.

Folgendes würde ich als Nächstes tun: „Bringen Sie Ihre Bedenken zu ihnen zurück.“ Machen Sie sie auf die Tatsache aufmerksam, dass Sie feststellen, dass die Standards nicht „richtig“ eingehalten werden, und „fragen Sie sie , warum“. Hören Sie genau zu, was sie sagen.

Die technischen Probleme und Bedenken, insbesondere mit SQL, wurden bereits in diesem Thread vorgebracht und sind gültig. Aber auch das Team selbst sollte sie vollständig kennen. „Wenden Sie die Besorgnis an, dass ‚Sie sich Sorgen machen‘“, dann hören Sie zu, was als Nächstes passiert, und nutzen Sie dies, um Ihren nächsten Schritt zu informieren. Wenn Sie möchten, können Sie Ihre Ergebnisse erneut mit dieser Community teilen, um weiteres Feedback zu erhalten. (Das Ziel besteht darin, ihre Antwort nicht nach ihren technischen "Vorzügen" abzuwägen, sondern weiter darüber nachzudenken, wie man damit umgeht.)

Das Projektmanagement umfasst normalerweise einen Qualitätsmanagementplan ; Programmierstandards zu haben ist einer der Schritte, aber Sie müssen einen Weg planen, um die Qualität zu überprüfen und zu akzeptieren.

Einige Teams teilen die Qualitätsabnahmefunktion in ein separates Team auf.

Scrum-Teams (wie ich sie verstehe) übernehmen die Verantwortung für die Lieferung eines akzeptablen Qualitätsprodukts als Teil ihrer Selbstorganisation.

Natürlich weisen die anderen Antworten auf eine unausgesprochene Annahme hin - Qualität muss mit etwas verbunden sein. Beim Qualitätsmanagement geht es darum, Nacharbeiten zu vermeiden – die meisten Entwickler möchten Nacharbeiten vermeiden. Die anderen Antworten erklären hervorragend, wie Qualität kontextualisiert werden kann.

Wenn das grundlegende Problem darin besteht, dass es den Entwicklern egal ist, dann ist dies kein Qualitätsproblem, sondern ein Fall von Entwicklern, denen es egal ist - und das können Sie nicht lösen, egal wie viel Sie in Qualität investieren.