En ingeniería de software , la programación en equipo es una estrategia de gestión de proyectos para coordinar la distribución de tareas en proyectos de desarrollo de software de computadora , que implica la asignación de dos o más programadores de computadoras para trabajar en colaboración en una subtarea individual dentro de un proyecto de programación más grande. En general, la forma en que se utiliza este término en la actualidad se refiere a métodos actualmente en boga dentro de la industria del desarrollo de software en los que varios individuos trabajan simultáneamente en la misma actividad; En estos sistemas, los programadores a menudo se agrupan en parejas en la misma estación de trabajo informática., uno observando al otro trabajando en el software y alternando roles a intervalos de tiempo.
Métodos tradicionales de gestión de equipos
El desarrollo de software tradicional casi siempre ha involucrado a varios programadores que trabajan en partes separadas de un sistema informático para cualquier proyecto de alcance y escala significativos: un método de división del trabajo . Claramente, es irrazonable imaginar que un solo programador podría completar adecuadamente todo el trabajo requerido para un sistema complejo que trabaja completamente por su cuenta dentro de una escala de tiempo viable; y a medida que los proyectos de desarrollo se vuelven más complejos, la experiencia especializada se vuelve de suma importancia en aspectos como el análisis de sistemas , el aseguramiento de la calidad y los desafíos técnicos que plantean los componentes individuales. Inicialmente, esto tendía a ser un proceso informal, pero con el surgimiento del desarrollo de software comercial como una industria viable, se hizo necesario un enfoque más industrial y sistemático.
Las metodologías de sistemas orientadas al papel diseñadas originalmente para emprender proyectos gubernamentales, como el Método de Diseño y Análisis de Sistemas Estructurados (SSADM), asignaron personas individuales para realizar tareas individuales y especificaron el papel de los diseñadores como claramente separado del de los programadores en el modelo de desarrollo de software en cascada . Esta metodología también separó claramente cada una de las etapas individuales del "ciclo de vida" a través de las cuales avanzaba un proyecto de desarrollo de sistemas. El "rastro de papel" resultante para un proyecto de desarrollo de sistemas podría tardar tanto en construirse que a menudo partes de la documentación de análisis, o en ocasiones su totalidad, estaban desactualizadas en el momento del desarrollo real, lo que las hacía peores que inútiles.
Tendencias modernas: múltiples programadores para una subtarea
Se experimentaron dificultades con estos métodos más antiguos, como los costos que se salían de control a medida que los sistemas crecían y los programas no cumplían con los objetivos de tiempo de comercialización. Estos problemas dieron lugar a técnicas como la programación de pares , la programación de mafias (también conocida como programación de conjuntos ), junto con nuevas estructuras de ciclo de vida de sistemas como la espiral de Boehm . La especificación de estos nuevos enfoques comenzó a mediados de la década de 1980 y continúa en la actualidad. Muchas de estas estrategias implican múltiples programadores que trabajan conjuntamente en la misma pieza de código fuente en lugar de ser individualmente responsable de las tareas individuales. Por ejemplo, en la "programación por pares", la responsabilidad del producto resultante se comparte por igual entre dos programadores que trabajan juntos en la subtarea asignada. Los beneficios de este enfoque incluyen la capacidad de que las deficiencias en el conocimiento y la capacidad en áreas específicas sean compensadas por el otro programador; Además, se cree que la responsabilidad compartida aumenta los incentivos para cumplir con los plazos del proyecto y los objetivos de calidad.
Esta técnica se utiliza con frecuencia en metodologías de programación más nuevas que se centran en técnicas de programación orientadas a objetos , como el proceso unificado racional y la programación extrema (acrónimo "XP"), a menudo en combinación con métodos de documentación de diseño como el lenguaje de modelado unificado (UML). ). En los lenguajes de programación orientados a objetos, la funcionalidad del software forma unidades modulares discretas (denominadas clases para los elementos funcionales y paquetes para constelaciones de clases interconectadas que llevan a cabo una función particular); los dos más conocidos son C ++ y Java . Esto se presta bien a la división de proyectos de programación en subequipos, aunque todavía se encuentran problemas en la integración del producto resultante después de completar cada subtarea.