Definition

Paarprogrammierung (Pair Programming)

Was ist Paarprogrammierung (Pair Programming)?

Paarprogrammierung (Pair Programming) ist eine agile Softwareentwicklungstechnik, die auf Extreme Programming (XP) zurückgeht und bei der zwei Entwickler gemeinsam an einem Computer arbeiten. Die beiden Personen arbeiten zusammen, um User Stories zu entwerfen, zu codieren und zu testen. Im Idealfall sind die beiden Personen gleich gut ausgebildet und verbringen die gleiche Zeit an der Tastatur.

Eine gängige Implementierung der Paarprogrammierung nennt den Programmierer an der Tastatur den Driver, während der andere als Navigator bezeichnet wird. Der Navigator konzentriert sich auf die allgemeine Richtung der Programmierung. Die Zusammenarbeit zwischen den Entwicklern kann persönlich oder aus der Ferne erfolgen.

Bei der Paarprogrammierung handelt es sich um eine gemeinschaftliche Arbeit, die viel Kommunikation erfordert. Die Idee ist, dass der Driver und der Navigator miteinander kommunizieren, Ansätze diskutieren und Probleme lösen, die für einen einzelnen Entwickler schwer zu erkennen wären.

Diese Technik der agilen Softwareentwicklung ist jedoch nicht für jeden geeignet. Das Erlernen einer effektiven Zusammenarbeit in einem Team, das eng zusammenarbeitet und sich einen Arbeitscomputer teilt, erfordert Fähigkeiten, über die nicht alle Programmierer verfügen. Beide Programmierer müssen sowohl über die für die Zusammenarbeit erforderlichen Soft Skills als auch über die erforderlichen Hard Skills zum Schreiben und Testen von Code verfügen.

Wie funktioniert Paarprogrammierung?

Für die Paarprogrammierung werden zwei Entwickler, eine Workstation, eine Tastatur und eine Maus benötigt. Die Paare können zugewiesen oder selbst zugewiesen werden.

Bei der Paarprogrammierung kommt das Vier-Augen-Prinzip zum Einsatz, das sicherstellt, dass zwei Augenpaare den zu erstellenden Code überprüfen, auch wenn es eine Arbeitsteilung gibt. Während der Driver den Code schreibt, überprüft der Navigator den geschriebenen Code. Der Driver konzentriert sich auf die Besonderheiten des Codes, während der Navigator die Arbeit und die Codequalität überprüft und die Richtung vorgibt.

Der Prozess beginnt damit, dass die Entwickler eine klar definierte Aufgabe erhalten. Sie einigen sich jeweils auf ein kleines Ziel, zum Beispiel das Schreiben von Code, das Testen oder das Anfertigen von Notizen. Diskussionen über die Richtung oder Korrekturen können nach jedem Ziel geführt werden, um den Arbeitsfluss des Fahrers nicht zu unterbrechen. Die beiden Programmierer können sich über die verschiedenen Techniken und Herausforderungen austauschen, was in der Regel zu einer höheren Qualität des Codes führt, als wenn eine Person dieselbe Arbeit erledigt.

Die beiden Entwickler wechseln sich bei der Codierung oder Überprüfung ab und kontrollieren die Arbeit des jeweils anderen. Ein regelmäßiger Rollentausch hilft beiden Entwicklern, aufmerksam und engagiert zu bleiben. Unternehmen können die beiden Entwickler auch abwechselnd an verschiedenen Aufgaben arbeiten lassen. Auf diese Weise sammeln sie Erfahrungen mit den verschiedenen Teilen des zu entwickelnden Systems.

Je nachdem, wie die Paare koordiniert werden, können jüngere und ältere Entwickler zusammenarbeiten, so dass die älteren Entwickler ihr Wissen und ihre Arbeitsgewohnheiten weitergeben können. Dies hilft auch neuen Teammitgliedern, sich in ein Projekt einzuarbeiten.

Vorteile der Paarprogrammierung

Paarprogrammierung hat folgende Vorteile:

  • Weniger Kodierungsfehler. Ein Programmierer sieht sich den Code des anderen an, was dazu beitragen kann, Fehler zu reduzieren und die Qualität des Codes zu verbessern.
  • Wissen wird innerhalb des Paares verteilt. Die jüngeren Entwickler können mehr Fähigkeiten von den älteren Entwicklern erlernen. Und wer mit einem Prozess nicht vertraut ist, kann sich mit jemandem zusammentun, der mehr über diesen Prozess weiß.
  • Geringerer Aufwand für die Koordinierung. Die Entwickler gewöhnen sich daran, zusammenzuarbeiten und ihre Arbeit zu koordinieren.
  • Erhöhte Widerstandsfähigkeit. Paarprogrammierung unterstützt Entwickler, jeden Teil einer Codebasis zu verstehen, was bedeutet, dass die Umgebung nicht von einer einzelnen Person abhängig ist, wenn etwas nicht funktioniert.

Nachteile der Paarprogrammierung

Paarprogrammierung hat folgende Nachteile:

  • Effizienz. Nach gängiger Logik würde die Paarprogrammierung die Produktivität um 50 Prozent verringern, da zwei Entwickler gleichzeitig an demselben Projekt arbeiten. Einem Blogbeitrag auf Raygun zufolge arbeiten Paare etwa 15 Prozent langsamer, was zwar eine Verbesserung darstellt, aber immer noch weniger ist als die Produktivität von zwei einzelnen Programmierern.
  • Gleichermaßen engagierte Paare. Wenn sich nicht beide Entwickler gleichermaßen für das Projekt engagieren, ist die Wahrscheinlichkeit geringer, dass Wissen geteilt wird, und es ist wahrscheinlich, dass sich ein Entwickler weniger beteiligt als der andere.
  • Sozialer und interaktiver Prozess. Es ist schwierig für diejenigen, die besser alleine arbeiten. Paare, die Schwierigkeiten mit der Zusammenarbeit haben, sind vielleicht besser geeignet, allein zu arbeiten; sie zur Zusammenarbeit zu zwingen, kann ihrer Arbeitsmoral schaden.
  • Nachhaltigkeit. Das Tempo ist möglicherweise nicht geeignet, um stundenlang am Stück zu üben. Wahrscheinlich werden die Entwickler zu verschiedenen Zeiten Pausen brauchen.

Stile und Techniken der Paarprogrammierung

Bei der Paarprogrammierung werden drei allgemeine Programmierstile verwendet: der Driver/Navigator-Ansatz, der unstrukturierte Ansatz und der Ping-Pong-Ansatz.

Driver-/Navigator-Ansatz. Der Driver/Navigator-Ansatz ist ein beliebter Stil der Paarprogrammierung, bei dem ein Programmierer die mechanische Seite wie die Codierung übernimmt, während der andere die Kontrolle über die strategischen oder architektonischen Elemente wie die Überprüfung des Codes hat. Der Driver und der Navigator tauschen häufig die Rollen. Dieser Stil eignet sich gut für einen Anfänger, der mit einem erfahrenen Programmierer zusammenarbeitet. Die Rolle des Navigators kann von einer zurückhaltenden Herangehensweise bis hin zu einer taktischen, praktischen Rolle reichen.

Unstrukturierter Ansatz. Die meisten Pair-Programming-Beziehungen fallen unter den unstrukturierten Stil, bei dem zwei Programmierer ad hoc zusammenarbeiten und die Zusammenarbeit locker gesteuert wird. Beide Programmierer sollten das gleiche Qualifikationsniveau haben. Eine häufige Variante dieses Stils ist das unstrukturierte Experten-Neulings-Paar, bei dem ein erfahrener Programmierer und ein Anfänger zusammenarbeiten.

Ein unstrukturierter Ansatz ist schwer zu disziplinieren und wird wahrscheinlich nicht für längere Projekte geeignet sein. Die unstrukturierte Paarprogrammierung ist auch schwieriger in einer Remote-Zusammenarbeit aufrechtzuerhalten. Dieser Ansatz wird in Betracht gezogen, wenn die Programmierer im Vorfeld nicht wissen, was für ein Projekt am besten geeignet ist.

Abbildung 1: Die drei verschiedenen Ansätze von Paarprogrammierung.
Abbildung 1: Die drei verschiedenen Ansätze von Paarprogrammierung.

Ping-Pong-Ansatz. Bei der Ping-Pong-Methode schreibt ein Entwickler einen Test und der andere sorgt dafür, dass der Test bestanden wird. Jede Person schreibt abwechselnd einen Test und führt ihn durch. Wenn zwei Entwickler regelmäßig die Rollen wechseln, ist es unwahrscheinlich, dass ein Programmierer den Arbeitsablauf kontrolliert. Diese Art der Paarprogrammierung wird normalerweise in Verbindung mit der testgesteuerten Entwicklung durchgeführt.

Die Entwicklungsteams sollten auch einen Paarprogrammierungsstil wählen, der den Fähigkeiten der beteiligten Programmierer entspricht. Mögliche Kompetenzpaare sind:

  • Experten/Experten-Paare. Zwei Experten können in der Regel mit jeder Art der Paarprogrammierung arbeiten. Fortgeschrittene Programmierer bevorzugen möglicherweise den Ping-Pong-Stil, da er ihnen eine gleichmäßige Beteiligung ermöglicht.
  • Anfänger/Neuling-Paare. Zwei Neulinge zusammen können Schwierigkeiten mit dem Driver/Navigator-Ansatz haben, da keiner von ihnen erfahren genug ist, um die Führung zu übernehmen. Darüber hinaus kann der unstrukturierte Ansatz für Programmieranfänger schwierig sein.
  • Paare aus Experten und Anfängern. Die häufigste Kombination ist die Zusammenarbeit eines erfahrenen Programmierers mit einer weniger erfahrenen Person. Der Experte kann sich auf sein umfangreiches Wissen stützen, um die Arbeit zu leiten, während der Anfänger mehr vom Experten lernen kann.

Bewährte Verfahren für die Paarprogrammierung

Einige bewährte Praktiken, die bei der Paarprogrammierung befolgt werden sollten, sind:

  • Konsistente Kommunikation. Wenn keine Kommunikation stattfindet, dann tauschen die Entwickler wahrscheinlich keine Gedanken aus.
  • Wechseln Sie konsequent die Rollen. Dies fördert den Austausch von mehr Fähigkeiten zwischen den Entwicklern und hält sie bei der Stange.
  • Bilden Sie sorgfältig Paare. Vergewissern Sie sich, dass die beiden Entwickler gut zusammenarbeiten können, ohne dass es zu Problemen kommt. Andernfalls entsteht eine schlechte Arbeitsumgebung.
  • Verwenden Sie eine vertraute Entwicklungsumgebung. Beide Entwickler sollten mit der Umgebung, in der sie arbeiten, vertraut sein. Andernfalls wird das Gleichgewicht der Paarprogrammierung gestört.
  • Übermitteln Sie häufig Code. Schnelle Codeübertragungen lassen sich gut mit dem Wechsel zwischen dem Driver und dem Navigator vereinbaren.
  • Bitten Sie bei Bedarf um Klärung. Besonders wenn ein Anfänger mit einem Experten zusammenarbeitet, sollte er jede Gelegenheit nutzen, um zu lernen.
  • Machen Sie bei Bedarf Pausen. Arbeiten Sie in einem Tempo, das für beide Entwickler passt.

Entstehung des Remote Pair Programming

Beim Remote Pair Programming arbeiten die Entwickler mit verschiedenen Tools zusammen, zum Beispiel mit einem kollaborativen Echtzeit-Editor, gemeinsamen Desktops oder einem IDE-Plugin (Integrated Development Environment, integrierte Entwicklungsumgebung). Remote Pairing kann zu komplexen Problemen führen, zum Beispiel zu zusätzlichen Verzögerungen bei der Koordinierung, zu einem potenziellen Verlust der Kommunikation und zu einer erhöhten Abhängigkeit von Tools zur Aufgabenverfolgung.

Tools für die kollaborative Codierung umfassen zwei Technologien: einen Kommunikationskanal und eine IDE. Bei dem kollaborativen Kommunikations-Tool kann es sich um ein Echtzeit-Audio- oder Videotool handeln, wie zum Beispiel einen Microsoft Teams- oder Zoom-Videoanruf. Die kollaborative IDE ermöglicht es dem Programmierpaar, gemeinsam auf den Code zuzugreifen und Referenzen zu erstellen, zum Beispiel mit Microsoft Visual Studio und CodeSandbox mit seiner Live-Funktion.

Entwicklerpaare sollten wöchentlich Treffen für denselben Tag und dieselbe Uhrzeit planen, um die Ziele jeder Paarprogrammierungssitzung vor Beginn festzulegen. Wenn ein Team gerade erst zur Remote-Pair-Programmierung übergeht, sollte zusätzliche Zeit eingeplant werden, um eventuelle Probleme zu beseitigen und verschiedene Stile auszuprobieren.

Diese Definition wurde zuletzt im Februar 2024 aktualisiert

Erfahren Sie mehr über Softwareentwicklung

ComputerWeekly.de
Close