La programación en pareja es una técnica de desarrollo de software ágil en la que dos programadores trabajan juntos en una estación de trabajo. Uno, el controlador , escribe el código mientras que el otro, el observador o el navegador , [1] revisa cada línea de código a medida que se escribe. Los dos programadores cambian de roles con frecuencia.
Al revisar, el observador también considera la dirección "estratégica" del trabajo, aportando ideas para mejoras y probables problemas futuros a abordar. Esto tiene la intención de liberar al conductor para que concentre toda su atención en los aspectos "tácticos" de completar la tarea actual, utilizando al observador como red de seguridad y guía.
Ciencias económicas
La programación por pares aumenta las horas-persona necesarias para entregar el código en comparación con los programadores que trabajan individualmente. [2] Sin embargo, el código resultante tiene menos defectos. [3] Junto con el tiempo de desarrollo del código, otros factores como los costos de soporte de campo y la garantía de calidad también influyen en el retorno de la inversión. Teóricamente, la programación en pareja podría compensar estos gastos al reducir los defectos en los programas. [3]
Además de prevenir errores a medida que se cometen, pueden existir otros beneficios intangibles. Por ejemplo, la cortesía de rechazar llamadas telefónicas u otras distracciones mientras trabajan juntos, tomar menos descansos a intervalos acordados o descansos compartidos para devolver llamadas telefónicas (pero regresar al trabajo rápidamente porque alguien está esperando). Un miembro del equipo puede estar más concentrado y ayudar a impulsar o despertar al otro si pierde el enfoque, y esa función puede cambiar periódicamente. Un miembro puede tener conocimiento de un tema o técnica que el otro no tiene, lo que podría eliminar las demoras para encontrar o probar una solución, o permitir una mejor solución, expandiendo así de manera efectiva el conjunto de habilidades, el conocimiento y la experiencia de un programador en comparación. a trabajar solo. Cada uno de estos beneficios intangibles, y muchos más, pueden ser difíciles de medir con precisión, pero pueden contribuir a un horario laboral más eficiente.
Calidad de diseño
Un sistema con dos programadores posee un mayor potencial para la generación de soluciones más diversas a problemas por tres razones:
- los programadores aportan diferentes experiencias previas a la tarea;
- pueden evaluar la información relevante para la tarea de diferentes maneras;
- mantienen diferentes relaciones con el problema en virtud de sus roles funcionales.
En un intento por compartir metas y planes, los programadores deben negociar abiertamente un curso de acción compartido cuando surge un conflicto entre ellos. Al hacerlo, consideran una mayor cantidad de formas de resolver el problema de las que podría hacer un solo programador por sí solo. Esto mejora significativamente la calidad del diseño del programa, ya que reduce las posibilidades de seleccionar un método deficiente. [4]
Satisfacción
En una encuesta en línea de programadores en pareja de 2000, el 96% de los programadores afirmaron que disfrutaban más el trabajo mientras programaban en parejas que programando solo. Además, el 95% dijo que tenían más confianza en su trabajo cuando programaban en pareja. [5]
Aprendiendo
El conocimiento se comparte constantemente entre programadores en pareja, ya sea en la industria o en el aula. Muchas fuentes sugieren que los estudiantes muestran una mayor confianza cuando programan en parejas, [5] y muchos aprenden si se trata de consejos sobre reglas de lenguaje de programación o habilidades generales de diseño. [6] En "emparejamiento promiscuo", cada programador se comunica y trabaja con todos los demás programadores del equipo en lugar de emparejarse sólo con un socio, lo que hace que el conocimiento del sistema se extienda a todo el equipo. [3] La programación en pareja permite a los programadores examinar el código de su socio y proporcionar retroalimentación, que es necesaria para aumentar su propia capacidad de desarrollar mecanismos de monitoreo para sus propias actividades de aprendizaje. [6]
Formación de equipos y comunicación
La programación por pares permite que los miembros del equipo compartan rápidamente, lo que hace que sea menos probable que tengan agendas ocultas entre sí. Esto ayuda a los programadores en pareja a aprender a comunicarse más fácilmente. "Esto aumenta el ancho de banda y la frecuencia de las comunicaciones dentro del proyecto, aumentando el flujo de información general dentro del equipo". [3]
Estudios
Hay tanto estudios empíricos como metaanálisis de la programación por pares. Los estudios empíricos tienden a examinar el nivel de productividad y la calidad del código, mientras que los metanálisis pueden centrarse en los sesgos introducidos por el proceso de prueba y publicación.
Un metaanálisis encontró que los pares generalmente consideran más alternativas de diseño que los programadores que trabajan solos, llegan a diseños más simples y fáciles de mantener y detectan los defectos de diseño antes. Sin embargo, expresó su preocupación de que sus hallazgos pudieran haber sido influenciados por "signos de sesgo de publicación entre los estudios publicados sobre programación por pares". Llegó a la conclusión de que "la programación por pares no es uniformemente beneficiosa ni eficaz". [7]
Aunque los programadores en pareja pueden completar una tarea más rápido que un programador en solitario, el número total de horas-persona aumenta. [2] Un administrador tendría que equilibrar la finalización más rápida del trabajo y la reducción del tiempo de prueba y depuración con el mayor costo de codificación. El peso relativo de estos factores puede variar según el proyecto y la tarea.
El beneficio del emparejamiento es mayor en tareas que los programadores no comprenden completamente antes de comenzar: es decir, tareas desafiantes que requieren creatividad y sofisticación, y para principiantes en comparación con expertos. [2] La programación en pareja podría ser útil para lograr una alta calidad y corrección en tareas de programación complejas, pero también aumentaría significativamente el esfuerzo de desarrollo (costo). [7]
En tareas simples, que la pareja ya comprende completamente, el emparejamiento da como resultado una caída neta de la productividad. [2] [8] Puede reducir el tiempo de desarrollo del código, pero también corre el riesgo de reducir la calidad del programa. [7] La productividad también puede disminuir cuando se usa la pareja novato-novato sin la suficiente disponibilidad de un mentor para entrenarlos. [9]
Indicadores de incumplimiento
Hay indicadores de que un par no está funcionando bien: [ opinión ]
- La desconexión puede presentarse cuando uno de los miembros se retira físicamente del teclado, accede al correo electrónico o incluso se queda dormido.
- El fenómeno "Watch the Master" puede surgir si un miembro tiene más experiencia que el otro. En esta situación, el miembro más joven puede asumir el papel de observador, pasando al miembro más antiguo de la pareja la mayor parte de la actividad de codificación. Esto puede conducir fácilmente a la desconexión.
Variaciones de emparejamiento
- Experto-experto
- El emparejamiento experto-experto puede parecer la opción obvia para la mayor productividad y puede producir grandes resultados, pero a menudo arroja poca información sobre nuevas formas de resolver problemas, ya que es poco probable que ambas partes cuestionen las prácticas establecidas. [2]
- Experto-novato
- El emparejamiento entre expertos y novatos crea muchas oportunidades para que el experto sirva de mentor al novato. Este emparejamiento también puede introducir nuevas ideas, ya que es más probable que el novato cuestione las prácticas establecidas. El experto, ahora obligado a explicar las prácticas establecidas, también es más probable que las cuestione. Sin embargo, en este emparejamiento, un novato intimidado puede "observar al maestro" pasivamente y dudar en participar de manera significativa. Además, es posible que algunos expertos no tengan la paciencia necesaria para permitir la participación constructiva de los principiantes. [10]
- Novato-novato
- La pareja novato-novato puede producir resultados significativamente mejores que dos novatos que trabajan de forma independiente, aunque esta práctica generalmente se desaconseja porque es más difícil para los novatos desarrollar buenos hábitos sin un modelo a seguir adecuado. [3]
Programación de pares remotos
La programación de pares remotos , también conocida como programación de pares virtuales o programación de pares distribuidos , es una programación de pares en la que los dos programadores están en diferentes ubicaciones, [11] trabajando a través de un editor colaborativo en tiempo real , escritorio compartido o un complemento IDE de programación de pares remotos . El emparejamiento remoto presenta dificultades que no están presentes en el emparejamiento cara a cara, como retrasos adicionales para la coordinación, dependiendo más de herramientas de seguimiento de tareas "pesadas" en lugar de herramientas "ligeras" como tarjetas de índice, y pérdida de comunicación verbal que resulta en confusión y conflictos sobre cosas como quién "tiene el teclado". [12]
El soporte de la herramienta podría ser proporcionado por:
- Software para compartir pantalla completa [13] [14]
- Multiplexores de terminal
- Herramientas de edición distribuidas especializadas
- Los programas de chat de audio o el software de VoIP pueden resultar útiles cuando el software para compartir pantalla no ofrece la capacidad de audio bidireccional. El uso de auriculares mantiene las manos libres de los programadores
- Entornos de desarrollo en la nube
- Servicios de programación colaborativa en pareja
Ver también
Referencias
- ^ Williams, Laurie (19-20 de febrero de 2001). Integrar la programación por pares en un proceso de desarrollo de software . XIV Congreso de Educación y Formación en Ingeniería de Software. Charlotte. págs. 27–36. doi : 10.1109 / CSEE.2001.913816 . ISBN 0-7695-1059-0.
Uno de los programadores, el controlador, tiene el control del teclado / mouse e implementa activamente el programa. El otro programador, el observador, observa continuamente el trabajo del conductor para identificar defectos tácticos (sintácticos, ortográficos, etc.) y también piensa estratégicamente en la dirección del trabajo.
- ^ a b c d e Lui, Kim Man (septiembre de 2006). "Productividad de programación en pareja: principiante-principiante frente a experto-experto" (PDF) . Revista internacional de estudios humanos e informáticos . 64 (9): 915–925. CiteSeerX 10.1.1.364.2159 . doi : 10.1016 / j.ijhcs.2006.04.010 . Archivado desde el original (PDF) el 20 de julio de 2011 . Consultado el 18 de noviembre de 2012 .
- ^ a b c d e Cockburn, Alistair ; Williams, Laurie (2000). "Los costos y beneficios de la programación de pares" (PDF) . Actas de la Primera Conferencia Internacional sobre Programación Extrema y Procesos Flexibles en Ingeniería de Software (XP2000) .
- ^ Flor, Nick V .; Hutchins, Edwin L. (1991). "Análisis de la cognición distribuida en equipos de software: un estudio de caso de programación en equipo durante el mantenimiento de software perfecto" . En Koenemann-Belliveau, Jürgen; Moher, Thomas G .; Robertson, Scott P. (eds.). Estudios empíricos de programadores: Cuarto Taller . Ablex. págs. 36–64. ISBN 978-0-89391-856-9.
- ^ a b Williams, Laurie ; Kessler, Robert R .; Cunningham, Ward; Jeffries, Ron (2000). "Fortalecimiento del caso de la programación en pareja" (PDF) . Software IEEE . 17 (4): 19-25. CiteSeerX 10.1.1.33.5248 . doi : 10.1109 / 52.854064 .
- ^ a b Williams, Laurie ; Upchurch, Richard L. (2001). "En apoyo de la programación de parejas de estudiantes" . Boletín ACM SIGCSE . 33 (1): 327–31. doi : 10.1145 / 366413.364614 .
- ^ a b c Hannay, Jo E .; Tore Dybå; Erik Arisholm; Dag IK Sjøberg (julio de 2009). "La eficacia de la programación de pares: un metaanálisis". Tecnología de la información y el software . 51 (7): 1110–1122. doi : 10.1016 / j.infsof.2009.02.001 .
- ^ Arisholm, Erik; Hans Gallis; Tore Dybå; Dag IK Sjøberg (febrero de 2007). "Evaluación de la programación de pares con respecto a la complejidad del sistema y la experiencia del programador" . Transacciones IEEE sobre ingeniería de software . 33 (2): 65–86. doi : 10.1109 / TSE.2007.17 . Archivado desde el original el 29 de octubre de 2010 . Consultado el 21 de julio de 2008 .
- ^ Stephens, Matt; Doug Rosenberg. "¿La programación en pareja realmente mejorará su proyecto?" . Consultado el 28 de mayo de 2011 .
- ^ Williams, L. y Kessler, R. (2003). Programación en pareja iluminada . Boston: Addison-Wesley Professional. ISBN 9780201745764.
- ^ Flor, Nick V. (2006). "Desarrollo de software distribuido globalmente y programación por pares". Comunicaciones de la ACM . 49 (10): 57–8. doi : 10.1145 / 1164394.1164421 .
- ^ Schümmer, Till; Stephan Lukosch (septiembre de 2009). "Comprensión de herramientas y prácticas para la programación de pares distribuidos" (PDF) . Revista de Ciencias de la Computación Universal . 15 (16): 3101–3125 . Consultado el 30 de abril de 2010 .
- ^ Agile Ajax: Programación de par con VNC Archivado 2008-04-02 en Wayback Machine [ fuente autoeditada ]
- ^ Programación por pares: la configuración definitiva y las otras opciones que probamos. - Blog de Jonathan Cogley [ ¿fuente autoeditada? ]
enlaces externos
- wikiHow: Guía práctica de cómo emparejar el programa ; contiene sabiduría común sobre cómo hacer que la programación por pares funcione.
- Tuple: Guía de programación de pares Guía de programación de pares que cubre estilos de emparejamiento, antipatrones y más. Incluye videos de emparejamiento de ejemplo.
- c2: Programación por pares
- c2: PairProgrammingPattern
- c2: PairRotationFrequency