Wie verwalten Sie das Refactoring mit einer großen Codebasis und vielen Entwicklern?

13

Ich möchte verhindern, dass zwei Entwickler den gleichen Code gleichzeitig überarbeiten, ohne vorher darüber zu sprechen, wahrscheinlich mit einem Tool, vielleicht einem Eclipse-Plug-In. Kannst du helfen?

Wir haben 4,5 Millionen Codezeilen und mehr als 20 Entwicklerteams auf vier Kontinenten.

Idealerweise möchte ich, dass der zweite der oben erwähnten Entwickler bemerkt, dass jemand anderes an demselben Code arbeitet und mit dem ersten redet, bevor er etwas ändert.

Kennen Sie eine Lösung?

Roger CS Wernersson
quelle
1
Sie kennen keine Eclipse-Plug-Ins. Es klingt eher nach einem Job für das Versionskontrollsystem.
SL Barth - Wiedereinsetzung von Monica
Warum willst du das verhindern? Ist es um Komplikationen (Bugs) zu vermeiden oder um Entwicklerzeit zu sparen? Die Lösung hängt stark von der Antwort auf diese IMO ab.
KaptajnKold
Warum probieren Sie nicht SVN, Apache Subversion oder Tortoise Svn?
1
Warum bearbeiten zwanzig Teams dieselbe Quelle?
Wir haben ein VCS. Wir haben gerade von ClearCase zu Git gewechselt.
Roger CS Wernersson

Antworten:

14

Viele Versionsverwaltungssysteme der zweiten Generation verwenden eine verbundene "Kasse", die den Server darüber informiert, dass Sie eine Datei ändern möchten. Beispiele hierfür sind TFS, SourceGear Vault und viele andere. Auf diese Weise können Sie Ihre Anforderung technisch erfüllen. Wie Adam Butler jedoch betonte, haben diese Tools ihre eigenen Probleme (ohne in eine lange Debatte zu geraten - eingeschränkte Unterstützung für Offline-Arbeit und allgemein kontraproduktiver Entwicklungsworkflow).

Ich würde definitiv einen hierarchischen Ansatz für die Aufteilung der Umgestaltungsarbeiten vorschlagen. Die Entwickler könnten logisch in Unterteams zusammengefasst werden, die jeweils für bestimmte Bereiche des Codes verantwortlich sind. Abhängig davon, wie Sie Teams strukturieren möchten, kann jeder eine Führungsrolle übernehmen, die für die übergeordnete Gestaltung des Teambereichs verantwortlich ist. Diese Struktur sollte den Entwicklern bekannt sein und die Kommunikation für das Refactoring vereinfachen. Ich bin mir sicher, dass dieser Ansatz für manche zu formal und zu rückständig erscheint, aber ich denke, es ist vorzuziehen, dass mehr als 20 Entwickler einen "Free for All" -Ansatz verwenden, um ein großes System umzugestalten. Einige Refactorings werden auf hoher Ebene stattfinden (zB wie wird Modul X mit Modul Y kommunizieren), In diesem Fall benötigen Sie Personen, die auf der entsprechenden Ebene telefonieren können. Nicht jeder Entwickler im Team sollte architektonische Entscheidungen treffen, daher wird fast auf jeden Fall eine Hierarchie auferlegt, auch wenn man sich dafür entscheidet, dies nicht zu beachten.

Grundsätzlich gibt es Tools, die die von Ihnen gestellten Grundanforderungen erfüllen, aber kein Tool wird die ordnungsgemäße Kommunikation ersetzen und eine kleine Anzahl von Mitarbeitern die allgemeine Architektur Ihres Projekts steuern.

Daniel B
quelle
Meistens ändert sich eine Vertikale; ändert GUI, Netzwerkprotokolle, Datenbank, funktioniert. Wir brauchen ein Tool, mit dem wir Refactorings kommunizieren können. Wir bemühen uns, den Code bei jedem Check-in zu überarbeiten, um die Lesbarkeit zu verbessern und die Wartungskosten zu senken.
Roger CS Wernersson
@ RogerWernersson - Ich verstehe, ich glaube einfach nicht, dass es einen guten Weg gibt, dies zu erreichen. Aus diesem Grund empfahl meine Antwort, Teams und Verantwortlichkeiten sowie die Unternehmenskultur so zu strukturieren, dass das Auftreten von Zehen minimiert wird. Der Versuch, eine gleichzeitige Kaufabwicklung auf git nachzurüsten, wird schmerzhaft sein und wahrscheinlich alle Nachteile eines zentralen Revisionskontrollsystems mit sich bringen. Ich bin mir aber sicher, dass jemand es geschafft hat. Sie sollten in der Lage sein, einige spezifische Implementierungen zu finden, jetzt, wo Sie erwähnt haben, dass Sie git verwenden.
Daniel B
7
  1. Stellen Sie sicher, dass Entwicklern bestimmte Module zugewiesen werden.
  2. Verfügen Sie über ein Task- / Bug-Tracking-System, das jede Umgestaltungsänderung nachverfolgt. Weisen Sie jedes Problem nur einem Entwickler zu
  3. Einige Versionskontrollsysteme können eine Datei sperren, sodass nur ein Entwickler über Aktualisierungsrechte für die Datei verfügt. Ich habe diese Funktion noch nie verwendet, aber wenn Entwickler ständig aufeinander zugehen, sollten Sie dies in Betracht ziehen.
  4. Lassen Sie Unit-Tests durchführen, damit Entwickler die App auch dann nicht beschädigen, wenn sie an derselben Datei arbeiten.
  5. All dies würde helfen, wenn Ihr Refactoring in Modulen enthalten ist. Wenn jedoch jemand ein Refactoring für ein Querschnittsthema wie Protokollierung oder Sicherheit vornimmt, hat dies per Definition Auswirkungen auf viele Dateien. Diese müssen mit Vorsicht behandelt werden, insbesondere wenn Sie die aop-Ansätze noch nicht ausgenutzt haben.
Sriram
quelle
Ich bin grundsätzlich für die Verwendung von Sperren, aber was tun, wenn Ihr Tool (z. B. Eclipse) viele Dateien durch ein Refactoring automatisch ändert? Sollten alle geänderten Dateien automatisch gesperrt werden? Die Anzahl der gesperrten Dateien kann sehr schnell zunehmen. Sollten die Schlösser inkrementell erworben werden? Wie gehe ich mit Deadlocks um?
Giorgio
Wenn Sie eine Methodensignatur ändern, die sich auf viele Dateien auswirkt, müssen Sie eine Sperre für alle Dateien erwerben. Falls jemand anderes eine Sperre hat, können Sie die Sperre erzwingen (svn erlaubt dies), wenn Ihr Refactoring eine höhere Priorität hat.
Sriram,
Kann dies automatisiert werden (indem Prioritäten gespeichert und Sperrkonflikte automatisch gelöst werden)? Oder entscheidet jeder Entwickler, ob sein Refactoring eine höhere Priorität hat?
Giorgio
Ich denke, wenn die Prioritäten in der Task Management App mit einer anständigen API gespeichert sind, könnten Sie es automatisieren. Ich habe es noch nie versucht, aber ich verstehe nicht, warum das nicht möglich sein sollte.
Sriram
Ich möchte nicht bei jedem Refactoring einen Fehler melden. Der Ansatz besteht darin, den von Ihnen geänderten Code zu bereinigen. Das Einreichen eines Fehlerberichts für jede Datei klingt nach zu viel Arbeit.
Roger CS Wernersson
6

Es gibt / gab Versionskontrollsysteme, mit denen Entwickler Code auschecken, bevor sie ihn bearbeiten können, aber diese haben ihre eigenen Probleme. Besser ist es, Entwickler dazu zu bringen, sich häufig zu verpflichten und zu aktualisieren. Ein Entwickler könnte dann eine Klasse als abgeschrieben markieren und festschreiben, wenn der andere Entwickler vor dem Starten seines Refactors aktualisiert, wird die Absicht erkannt.

Adam Butler
quelle
3
+1: Festschreiben und Aktualisieren bedeutet häufig auch, dass Änderungen klein und einfach zu handhaben sind, sodass Konflikte einfacher zu handhaben sind.
Bringer128
Oft würde Commit helfen. Das kann ich leider nicht ändern. Ich bin auf der Suche nach einem Tool, mit dem wir kommunizieren können.
Roger CS Wernersson
3

Technologie kann soziale Probleme nicht lösen. Sie müssen Ihre Entwickler dazu bringen, miteinander zu sprechen und ihre Arbeit zu koordinieren. Bei 20 Teams sind einige Strukturen und Regeln unerlässlich. Sie werden sie mit technologischen Lösungen unterstützen wollen, aber die Menschen stehen an erster Stelle.

quant_dev
quelle
3
Er sprach von 20 Mannschaften, keine Mannschaft von 20.
Ingo
1
+1 für Technologie kann soziale Probleme nicht lösen. Bearbeiten Sie jedoch die Antwort, um zu sagen: "Bei 20 Teams sind einige Strukturen und Regeln unerlässlich."
MarkJ
Manche Menschen schlafen, andere arbeiten. Wir haben Teams auf vier Kontinenten.
Roger CS Wernersson
0

Wenn Sie notice that someone else is working on the same piece of code and talk to the first one before modifying anythingwie gesagt abreisen , benötigen Sie ein Versionskontrollsystem (CVS / SVN / GIT). Ich bin mir zwar nicht sicher, aber wenn Sie das auch mit einbeziehen möchten, benötigen Sie einige fortgeschrittene Dinge (eine Art Auslösemechanismus / vielleicht eine benutzerdefinierte Sache).

c0da
quelle
Wir haben Git. Davor hatten wir ClearCase. VCS ist nicht die Lösung. Wir brauchen einen Auslösemechanismus.
Roger CS Wernersson
0

Entwickler, die Dateien in der Quellcodeverwaltung sperren, sollten Ihr Problem leicht lösen können, aber dann haben Sie möglicherweise größere Probleme.

4,5 Millionen LOCs sind ein riesiger Sandkasten, in dem Sie in einer gut strukturierten und designten Lösung nur selten auf eine Situation stoßen sollten, in der mehrere Entwicklerteams aufeinander treten. Die Tatsache, dass dies mehr als zufällig geschieht, weist auf einige schwerwiegende potenzielle Konstruktionsfehler hin, die untersucht werden sollten.

maple_shaft
quelle
Die meisten Änderungen sind vertikal; GUI, Netzwerkprotokolle, Datenbank. Jedes Team ist agil und darauf ausgerichtet, bei jedem Sprint Kundennutzen zu erzielen. Wir können nicht ein Team in der Datenbank haben, eines in der GUI usw. Es wäre einfacher, wenn der Code sauberer wäre. Aber der Weg zum sauberen Code ist "viele kleine Refactorings".
Roger CS Wernersson
0

Ein paar Dinge:

  1. Trennen Sie die zu bearbeitenden Module
  2. Über Änderungen sprechen, bevor sie vorgenommen werden [mit allen Entwicklern]
  3. Komponententests [zur Überprüfung und Vermeidung von Fehlern im Zusammenhang mit Dingen]
  4. Wie die anderen erwähnten ein VCS
mönchisch
quelle
1. hart, wenn jedes Team vertikal arbeitet 2. hart, weil einige Teams schlafen, während andere arbeiten
Roger CS Wernersson