Paar-Programmierung - Pair programming

Paarprogrammierung mit zwei Mitarbeitern, 2007

Pair Programming ist eine agile Softwareentwicklungstechnik , bei der zwei Programmierer an einem Arbeitsplatz zusammenarbeiten. Einer, der Treiber , schreibt Code, während der andere, der Beobachter oder Navigator , jede Codezeile während der Eingabe überprüft . Die beiden Programmierer wechseln häufig die Rollen.

Bei der Überprüfung berücksichtigt der Beobachter auch die "strategische" Ausrichtung der Arbeit und entwickelt Ideen für Verbesserungen und wahrscheinliche zukünftige Probleme, die angegangen werden müssen. Dies soll dem Fahrer ermöglichen, seine ganze Aufmerksamkeit auf die "taktischen" Aspekte der Ausführung der aktuellen Aufgabe zu richten, wobei der Beobachter als Sicherheitsnetz und Leitfaden verwendet wird.

Wirtschaft

Pair Programming erhöht die Personenstunden, die für die Bereitstellung von Code erforderlich sind, im Vergleich zu Programmierern, die einzeln arbeiten. Der resultierende Code weist jedoch weniger Fehler auf. Neben der Codeentwicklungszeit spielen auch andere Faktoren wie die Kosten für den Außendienst und die Qualitätssicherung eine Rolle bei der Kapitalrendite. Pair Programming könnte diese Kosten theoretisch ausgleichen, indem Fehler in den Programmen reduziert werden.

Neben der Vermeidung von Fehlern können auch andere immaterielle Vorteile bestehen. Zum Beispiel die Höflichkeit, Telefonanrufe oder andere Ablenkungen während der Zusammenarbeit abzulehnen, weniger Pausen in vereinbarten Abständen einzulegen oder gemeinsame Pausen für Rückrufe (aber schnelle Rückkehr zur Arbeit, da jemand wartet). Ein Mitglied des Teams hat möglicherweise mehr Konzentration und hilft, das andere anzutreiben oder zu wecken, wenn es den Fokus verliert, und diese Rolle kann sich regelmäßig ändern. Ein Mitglied verfügt möglicherweise über Kenntnisse eines Themas oder einer Technik, die das andere nicht hat, wodurch Verzögerungen beim Finden oder Testen einer Lösung vermieden oder eine bessere Lösung ermöglicht werden kann, wodurch die Fähigkeiten, Kenntnisse und Erfahrungen eines Programmierers im Vergleich effektiv erweitert werden allein zu arbeiten. Jeder dieser immateriellen Vorteile und viele mehr sind möglicherweise nicht genau zu messen, können jedoch zu effizienteren Arbeitszeiten beitragen.

Designqualität

Ein System mit zwei Programmierern besitzt aus drei Gründen ein größeres Potenzial zur Generierung vielfältigerer Problemlösungen:

  1. die Programmierer bringen unterschiedliche Vorerfahrungen mit;
  2. sie können für die Aufgabe relevante Informationen auf unterschiedliche Weise bewerten;
  3. sie stehen aufgrund ihrer funktionalen Rollen in unterschiedlichen Beziehungen zum Problem.

Um Ziele und Pläne zu teilen, müssen die Programmierer offen eine gemeinsame Vorgehensweise aushandeln, wenn ein Konflikt zwischen ihnen auftritt. Dabei ziehen sie eine größere Zahl von Lösungsansätzen in Betracht, als es ein einzelner Programmierer allein tun könnte. Dies verbessert die Entwurfsqualität des Programms erheblich, da es die Wahrscheinlichkeit verringert, eine schlechte Methode auszuwählen.

Befriedigung

In einer Online-Umfrage unter Pair Programmern aus dem Jahr 2000 gaben 96% der Programmierer an, dass ihnen die Arbeit beim Pair Programming mehr Spaß macht als beim Programmieren allein. Darüber hinaus gaben 95 % an, dass sie bei der Paarprogrammierung sicherer in ihrer Arbeit waren.

Lernen

Das Wissen wird ständig zwischen Pair Programmern ausgetauscht, sei es in der Industrie oder im Klassenzimmer. Viele Quellen deuten darauf hin, dass Schüler beim paarweisen Programmieren mehr Selbstvertrauen zeigen, und viele lernen, ob es von Tipps zu Programmiersprachenregeln bis hin zu allgemeinen Designfähigkeiten geht. Beim "Promiscuous Pairing" kommuniziert und arbeitet jeder Programmierer mit allen anderen Programmierern im Team, anstatt nur mit einem Partner zu paaren, was dazu führt, dass sich das Wissen über das System im gesamten Team verbreitet. Pair Programming ermöglicht es Programmierern, den Code ihres Partners zu untersuchen und Feedback zu geben, was notwendig ist, um ihre eigene Fähigkeit zu erhöhen, Überwachungsmechanismen für ihre eigenen Lernaktivitäten zu entwickeln.

Teambildung und Kommunikation

Pair Programming ermöglicht es den Teammitgliedern, schnell zu teilen, wodurch die Wahrscheinlichkeit geringer ist, dass ihre Agenden voreinander verborgen sind. Dies hilft Pair-Programmierern, einfacher zu kommunizieren. "Dies erhöht die Kommunikationsbandbreite und -frequenz innerhalb des Projekts und erhöht den gesamten Informationsfluss innerhalb des Teams."

Studien

Es gibt sowohl empirische Studien als auch Metaanalysen zum Pair Programming. Die empirischen Studien tendieren dazu, das Produktivitätsniveau und die Qualität des Codes zu untersuchen, während sich Metaanalysen auf Verzerrungen konzentrieren können, die durch den Test- und Veröffentlichungsprozess entstehen.

Eine Meta-Analyse ergab, dass Paare in der Regel mehr Designalternativen in Betracht ziehen als allein arbeitende Programmierer, zu einfacheren, wartungsfreundlicheren Designs gelangen und Designfehler früher erkennen. Sie äußerte jedoch Bedenken, dass ihre Ergebnisse möglicherweise durch „Anzeichen von Publikationsbias bei veröffentlichten Studien zum Pair Programming“ beeinflusst worden sein könnten . Es kam zu dem Schluss, dass „Paarprogrammierung nicht einheitlich vorteilhaft oder effektiv ist“.

Obwohl Paarprogrammierer eine Aufgabe schneller erledigen können als ein Soloprogrammierer, erhöht sich die Gesamtzahl der Personenstunden . Ein Manager müsste einen schnelleren Abschluss der Arbeit und eine kürzere Test- und Debugging-Zeit gegen die höheren Codierungskosten abwägen. Das relative Gewicht dieser Faktoren kann je nach Projekt und Aufgabe variieren.

Der Vorteil des Pairings ist am größten bei Aufgaben, die die Programmierer nicht vollständig verstehen, bevor sie beginnen: das heißt, anspruchsvolle Aufgaben, die Kreativität und Raffinesse erfordern, und Anfänger im Vergleich zu Experten. Pair Programming könnte hilfreich sein, um bei komplexen Programmieraufgaben eine hohe Qualität und Korrektheit zu erreichen, würde aber auch den Entwicklungsaufwand (Kosten) deutlich erhöhen.

Bei einfachen Aufgaben, die das Paar bereits vollständig versteht, führt die Paarung zu einem Nettoverlust der Produktivität. Dies kann die Codeentwicklungszeit verkürzen, aber auch die Qualität des Programms beeinträchtigen. Die Produktivität kann auch sinken, wenn eine Anfänger-Anfänger-Paarung verwendet wird, ohne dass ein Mentor ausreichend zur Verfügung steht, um sie zu coachen.

Indikatoren für Nichterfüllung

Es gibt Indikatoren dafür, dass ein Paar nicht gut abschneidet:

  • Der Rückzug kann auftreten, wenn sich eines der Mitglieder physisch von der Tastatur zurückzieht, auf E-Mails zugreift oder sogar einschläft.
  • Das Phänomen "Watch the Master" kann auftreten, wenn ein Mitglied mehr Erfahrung hat als das andere. In dieser Situation kann das jüngere Mitglied die Beobachterrolle übernehmen und den Großteil der Codierungsaktivitäten dem älteren Mitglied des Paares überlassen. Dies kann leicht zum Ausrasten führen.

Paarungsvarianten

Experte–Experte
Die Experten-Experten-Paarung scheint die offensichtliche Wahl für die höchste Produktivität zu sein und kann großartige Ergebnisse erzielen, aber sie bietet oft wenig Einblick in neue Wege zur Lösung von Problemen, da es unwahrscheinlich ist, dass beide Parteien etablierte Praktiken in Frage stellen.
Experte–Neuling
Die Paarung von Experten und Anfängern bietet dem Experten viele Möglichkeiten, den Anfänger zu betreuen. Diese Paarung kann auch neue Ideen einbringen, da der Anfänger eher etablierte Praktiken in Frage stellt. Der Experte, der nun etablierte Praktiken erklären muss, wird sie auch eher in Frage stellen. Bei dieser Paarung kann ein eingeschüchterter Anfänger jedoch passiv "den Meister beobachten" und zögern, sinnvoll mitzumachen. Außerdem haben einige Experten möglicherweise nicht die Geduld, die erforderlich ist, um eine konstruktive Beteiligung von Anfängern zuzulassen.
Anfänger – Anfänger
Die Paarung von Anfängern und Anfängern kann zu deutlich besseren Ergebnissen führen als zwei unabhängig voneinander arbeitende Anfänger, obwohl von dieser Praxis im Allgemeinen abgeraten wird, da es für Anfänger schwieriger ist, ohne ein richtiges Vorbild gute Gewohnheiten zu entwickeln.

Fernprogrammierung von Paaren

Remote Pair Programming , auch bekannt als Virtual Pair Programming oder Distributed Pair Programming , ist eine Paarprogrammierung, bei der sich die beiden Programmierer an verschiedenen Standorten befinden und über einen kollaborativen Echtzeiteditor , einen gemeinsamen Desktop oder ein Remote Pair Programming IDE- Plugin arbeiten. Remote-Pairing bringt Schwierigkeiten mit sich, die bei Face-to-Face-Pairing nicht vorhanden sind, wie zusätzliche Verzögerungen bei der Koordination, die mehr von "schwergewichtigen" Tools zur Aufgabenverfolgung anstelle von "leichten" Tools wie Karteikarten abhängen, und Verlust der verbalen Kommunikation, was zu Verwirrung und Konflikte darüber, wer "die Tastatur hat".

Werkzeugunterstützung kann geleistet werden durch:

  • Vollbild-Sharing-Software
  • Terminal-Multiplexer
  • Spezialisierte verteilte Bearbeitungswerkzeuge
  • Audio-Chat-Programme oder VoIP-Software können hilfreich sein, wenn die Bildschirmfreigabesoftware keine Zwei-Wege-Audiofunktion bietet. Die Verwendung von Headsets hält die Hände der Programmierer frei
  • Cloud-Entwicklungsumgebungen
  • Kollaborative Pair-Programming-Dienste

Siehe auch

Verweise

Externe Links