Quellcodeverwaltung: Rollen und Verantwortlichkeiten - Best Practices

10

Ich suche nach "Best Practices" für Rollen und Verantwortlichkeiten, insbesondere für die Zusammenführung von Entwicklungszweigen zu Trunk (oder Main). Grundsätzlich suche ich Munition, um meiner Sache zu helfen.

Lassen Sie mich beschreiben, was ich vor mir habe. Ich bin der Hauptentwickler (Eigentümer) einer bestimmten Anwendung. Unser Unternehmen ist kürzlich von VSS (wo ich der Administrator der VSS-Datenbank war, in der meine Anwendung gespeichert war) zu TFS gewechselt (wo ich nur Berechtigungen für Entwicklungszweige habe, die von unserem "Operations" -Team erstellt wurden). In früheren Jobs war ich TFS-Administrator, daher kenne ich mich mit TFS und MSBuild aus.

Ich habe kein Problem mit der verwendeten Verzweigungs- und Zusammenführungsstrategie (Hauptzweig, bei dem Fehler- / Projektentwicklungszweige nach Bedarf erstellt, wieder zum Hauptzweig zusammengeführt und dann zu einem Release-Zweig befördert werden). Die Probleme, die ich habe, sind:

  1. Ich kann keine eigenen Zweige erstellen. Ich muss eine TFS-Aufgabe erstellen, damit ein Mitglied des "Operations" -Teams den Zweig für mich erstellt.

  2. Ich kann nicht von Main zu meinem Entwicklungszweig zusammengeführt werden. Ich muss eine TFS-Aufgabe erstellen, damit ein "Operations" -Teammitglied die Zusammenführung durchführt, und dann hoffe, dass er auf keine Änderungen meines Teams "tritt", da der "Ops-Typ" möglicherweise ein Entwickler ist oder nicht wenig bis gar keine Kenntnis des Codes, den er zusammenführt.

  3. Ich kann nicht von der Entwicklung zum Main verschmelzen. Wieder muss ich eine TFS-Aufgabe erstellen, damit der "Ops-Typ" die Zusammenführung durchführt, in der Hoffnung, dass er es richtig macht. Dann muss ich eine weitere TFS-Aufgabe erstellen, um sie wieder in meinem Zweig zusammenzuführen, damit ich alle Probleme beheben kann, die durch die Zusammenführung eines Nicht-Entwicklers mit Main aufgetreten sind.

  4. Ich kann keine MSBuild-Skripte erstellen oder bearbeiten. Wieder muss ich mit dem "ops" -Team arbeiten, das neu in MSBuild ist, damit nur die grundlegendsten Build-Aufgaben ausgeführt werden können. (Vergessen Sie alles Komplexe oder verbieten Sie dem Himmel eine benutzerdefinierte Aufgabe).

  5. Ich kann kein MSBuild-Skript ausführen. Auch dies kann nur das "Ops" -Team.

  6. Um das Ganze abzurunden, handelt es sich normalerweise um eine "Offshore" -Ressource, die die angeforderten Aufgaben ausführt. Selbst wenn ich die Aufgabe am frühen Morgen für (Verzweigen / Zusammenführen / Erstellen) erstelle, wird sie wahrscheinlich nicht abgeschlossen bis zu diesem Abend.

Jetzt habe ich kein Problem damit, dass das "Operations" -Team die Release-Zweige verwaltet. Alles, was sie tun, ist (im Grunde), die neueste Version von Main zu nehmen und sie in den Release-Zweig zu befördern. Solange "Main" stabil und bereit ist, ist der Release-Zweig gut.

Meiner Meinung nach sollten technische Leads (wie ich) für die Wartung des Trunks ("Main") und die Zusammenführung zu / von den Entwicklungszweigen verantwortlich sein. Der Teamleiter sollte auch die Möglichkeit haben, MS Build-Skripts zum Erstellen und Bereitstellen in der Integrationstestumgebung zu generieren.

Kann mich jemand auf ein Best Practices-Dokument verweisen, das mir hilft, meinen Fall zu beweisen? Alle meine Suchen haben nur Best Practices in Bezug auf die Techniken des Verzweigens und Zusammenführens ergeben, und keine Erwähnung der WHO sollte diese Verzweigung / Zusammenführung durchführen.

Michael Chatfield
quelle
WHO should be performing said branching/merging.ist eine interne organisatorische Entscheidung. Nicht wirklich etwas, bei dem wir Ihnen helfen könnten ...
Yannis
2
Möchten Sie uns die mutmaßlichen Gründe für ein solches byzantinisches Verfahren mitteilen? Meine Vermutung ist "CMM Level N Compliance" oder "Sarbanes Oxley".
Bruce Ediger
SOX, aber nur teilweise. Als wir zum ersten Mal zu TFS gingen, hatten Entwickler Zugriff auf Main und Dev. Aber dann haben "einige" Entwickler (keiner in meinem Team) beschlossen, nur Entwicklungsarbeiten am Main und nicht in einem Dev-Zweig durchzuführen, und jetzt werden alle Teams bestraft.
Michael Chatfield

Antworten:

8

Ich gehe allgemein davon aus, dass jedes Mitglied des Entwicklungsteams in der Lage sein sollte, Aktionen für den Baum auszuführen, vorausgesetzt, diese Aktionen führen nicht zum Start einer Produktionsbereitstellung. In Fällen, in denen ein bestimmter Zweig / Tag / Repository als Quelle für automatisierte Bereitstellungen fungiert, ist es sinnvoll, eine angemessene Änderungskontrolle oder Eintrittsbarrieren einzuführen. Ich würde Entwickler ermutigen, Zweige zu erstellen und die Build-Skripte zu verbessern. Ich würde Wege finden, um Entwicklern bei Bedarf Zugang zur Produktion zu verschaffen. Ein Teil des Punktes der Quellcodeverwaltung ist, dass es ein effektiver magischer Radiergummi für Fehler ist - das Schlimmste, was Sie tun müssen, ist, ein oder zwei Umdrehungen zurückzusetzen und davon abzweigen.

Leider klingt dies nicht nach dem Ansatz, den sie hier gewählt haben. Um dies zu besiegen, müssen Sie meiner Meinung nach einige Aspekte abdecken:

a) Beweisen Sie, dass diese Richtlinien sich nachteilig auf die Entwicklung auswirken. Protokollieren Sie die gesamte Zeit, die Sie damit verbringen, auf Operationen zu warten, um an etwas zu arbeiten. Dies allein sollte ein vernünftiges Management darüber verkaufen, warum dies eine schlechte Politik ist.

b) Machen Sie Freunde in Ops - vielleicht gibt es einen Grund für diese Richtlinie. Vielleicht könnte diese Argumentation effektiver angegangen werden.

Hoffe das hilft.

Wyatt Barnett
quelle
3
+1, ich habe etwas Ähnliches geschrieben: Dokumentieren Sie die verlorene Zeit und Mühe: Lassen Sie Entscheidungsträger eine fundierte Entscheidung treffen: Ist das Risiko dessen, was sie mit der aktuellen restriktiven Politik zu vermeiden versuchen, die Kosten wert?
Jamie F
Ich habe vor, ein solches Treffen abzuhalten, aber es wäre hilfreich, wenn ich zeigen könnte, dass diese Richtlinie gegen die "Best Practices" der Branche verstößt.
Michael Chatfield
Erwischt. Ich bin mir nicht sicher, ob etwas Bestimmtes drin ist, aber die Teile der Quellcodeverwaltung in The Pragmatic Programmer enthalten möglicherweise einige Juwelen. Wie es sich anhört, war es eher eine grobe Überreaktion auf einige schlechte Entwickler als eine durchdachte politische Entscheidung oder eine Politik. Ich würde mich mit einem Deal zufrieden geben, bei dem Ops Eigentümer in Main fusioniert. Ich würde mich auch dafür einsetzen, dass die Ops dafür verantwortlich sind, dass durch die Zusammenführung nichts kaputt geht, was wahrscheinlich dazu führen wird, dass sie aus dem Zusammenschluss herauskommen. . .
Wyatt Barnett
Ich stimme Jamie zu, die gesamte Zeit, die Sie mit dem Zusammenführen oder Warten auf eine Zusammenführung verbringen, sollte aufgezeichnet werden, damit Sie Beweise haben. Es gibt keine "Best Practice", die für alle Unternehmen geeignet ist. Ich habe in einem großen Unternehmen gearbeitet, in dem diese Aufgabe von einem dedizierten Konfigurationsmanagement-Team erledigt wurde. In meiner jetzigen Firma gibt es ein dediziertes Release-Management-Team, das nicht die physische Aufgabe des Zusammenführens mit main übernimmt, sondern der logische Eigentümer ist und diese prüft. Aber IMHO ops ist normalerweise nicht derjenige, der den Quellcode berührt.
Softveda
2

Praktiken, die ich gesehen habe, sind:

  1. Jeder kann nach Herzenslust Arbeitszweige erstellen. Ein Entwickler muss in der Lage sein, einen Feature-Zweig in der Sekunde zu erstellen, in der er feststellt, dass es sinnvoll ist, seine aktuellen Arbeiten zu speichern. Weil sie es am Ende des Tages sichern wollen / sollten, es mit einem anderen Teammitglied teilen wollen, müssen sie vor Änderungen in der Hauptleitung oder was auch immer geschützt werden.

  2. Jeder kann absolut alles mit Entwicklungszweigen machen. Entwickler müssen in der Lage sein, von main zusammenzuführen, sobald ein anderer Entwickler ihnen mitteilt, dass etwas, das sie benötigen, in main integriert wurde.

  3. Für die Zusammenführung mit main (Integration) gibt es drei Optionen:

    • Entwickler machen das selbst. Sie besprechen lediglich die Risiken mit dem Hauptentwickler und testen die Funktionen entsprechend. Das bedeutet, dass jeder die Berechtigungen hat. Wenn jemand gegen die Regeln verstößt, wird er nur beschimpft und die falsche Änderung wird rückgängig gemacht.
    • Ein anderer Entwickler tut dies, nachdem er die Änderungen überprüft hat. Es erfordert immer noch, dass jeder die Berechtigung dazu hat. Regeln werden weiterhin vom Hauptentwickler durchgesetzt.
    • Es gibt einen designierten Integrator, der überprüft und in main zusammenführt. Der Integrator ist jedoch Teil des Teams und muss den Code verstehen. Bei kleineren Teams wäre es dieselbe Person wie beim Architekten, bei größeren wären sie getrennt, müssten aber eng zusammenarbeiten.
  4. Wer eine Funktion vorbereitet, sollte das Build-Skript anpassen. Ich bin mir aber nicht sicher, wie es mit TFS funktioniert. In den Systemen, die ich verwendet habe, war das Build-Skript immer nur eine versionierte Datei, daher haben die Entwickler es wie jedes andere bearbeitet und es wurde zusammen mit allem anderen integriert.

  5. Wenn es einen bestimmten Integrator gibt, kümmern sie sich normalerweise darum, zu definieren (welches Skript ausgeführt werden soll) und die Builds zu starten. Andernfalls erledigt dies entweder der Teamleiter, das designierte Teammitglied oder jeder hat Berechtigungen, und die Delegierten des Teamleiters richten von Fall zu Fall bestimmte Builds ein und starten sie.

  6. In keinem Fall sollten die oben genannten Operationen einen Bediener außerhalb des Teams erfordern. Der Operator wird nur zum Einrichten der Berechtigungen, Erstellen von Replikaten usw. benötigt.

Jan Hudec
quelle
Ich wäre alles für einen "designierten Integrator", solange es sich tatsächlich um einen Entwickler im Team handelt. Das ist der Weg, auf den ich sowieso hoffe; Es ist ein kleines Team (4 Personen, einschließlich mir). Hoffentlich kann ich auch Zugriff auf das Erstellen / Ausführen der MS Build-Skripte erhalten. Es ist dumm für mich, nAnt-Skripte für Entwicklungsbereitstellungen zu erstellen und dann für das "ops" -Team im Wesentlichen dasselbe Skript für MSBuild zu erstellen. Aber das werde ich tun, wenn es sein muss.
Michael Chatfield
2

Egal, "Best Practices" (bitte beachten Sie), dies ist ein Managementproblem. Grundsätzlich können Sie Ihre Arbeit aufgrund der Ihnen auferlegten Einschränkungen nicht ordnungsgemäß ausführen.

Es spielt eigentlich keine Rolle, was "Best Practice" ist - dies ist ein einfaches, nachweisbares Problem, das sich auf die Produktivität von Ihnen und Ihrem Team auswirkt, und Sie müssen es auf dieser Grundlage mit Ihrem Linienmanagement aufnehmen.

Ich kann sehen , dass ein Best - Practice - Dokument könnte schwingend (aber nur vielleicht ) bei dem Versuch , eine Hilfe sein , um sie davon zu überzeugen , aber viel besser ist die Vorstellung , dass Sie DEV Team - Mitglieder auf ihren Händen sitzen muss haben , während in einer anderen Zeitzone für jemanden warten ihre Handlung zusammenzubringen, es sei denn, die Prozesse werden verbessert / rationalisiert.

Und seien Sie nicht zu konfrontativ - so viel wie alles, was Sie wissen möchten, warum die Beschränkungen bestehen, was die Rechtfertigung ist ...

Murph
quelle
1
Ja, ich bemühe mich sehr, nicht konfrontativ zu sein ... von einem Mann, dessen Frau ihm ein T-Shirt mit dem Titel "Ich stimme dir zu, aber dann liegen wir beide falsch" gekauft hat. :)
Michael Chatfield
Es ist ein absoluter Killer, wenn Sie Recht haben (-: Und in diesem Fall ist es schwer zu argumentieren, dass Sie nicht ... aber Sie brauchen Ihr Linienmanagement auf der Seite, wenn sich etwas ändern wird
Murph