Programação da equipe - Team programming
Na engenharia de software , a programação em equipe é uma estratégia de gerenciamento de projeto para coordenar a distribuição de tarefas em projetos de desenvolvimento de software de computador , que envolve a atribuição de dois ou mais programadores de computador para trabalhar colaborativamente em uma subtarefa individual dentro de um projeto de programação maior. Em geral, a maneira como esse termo é usado hoje se refere aos métodos atualmente em voga na indústria de desenvolvimento de software, onde vários indivíduos trabalham simultaneamente na mesma atividade; nesses sistemas, os programadores costumam ser agrupados em pares na mesma estação de trabalho do computador , um observando o outro trabalhando no software e alternando funções em intervalos de tempo.
Métodos tradicionais de gestão de equipe
O desenvolvimento de software tradicional quase sempre envolveu vários programadores trabalhando em partes separadas de um sistema de computador para qualquer projeto de escopo e escala significativos - um método de divisão de trabalho . Claramente, não é razoável imaginar que um único programador pudesse completar adequadamente todo o trabalho necessário para um sistema complexo funcionando inteiramente por conta própria dentro de uma escala de tempo viável; e à medida que os projetos de desenvolvimento se tornam mais complexos, o conhecimento especializado torna-se de suma importância em aspectos como análise de sistemas , garantia de qualidade e desafios técnicos impostos por componentes individuais. Inicialmente, isso tendia a ser um processo informal, mas com o surgimento do desenvolvimento de software comercial como uma indústria viável, uma abordagem mais industrial e sistemática tornou-se necessária.
Metodologias de sistemas orientadas a papel originalmente projetadas para empreender projetos governamentais, como o Método de Análise e Projeto de Sistemas Estruturados (SSADM), designavam pessoas individuais para realizar tarefas individuais e especificavam o papel dos designers como sendo claramente separado daquele dos programadores em o modelo de desenvolvimento de software em cascata . Essa metodologia também separou claramente cada um dos estágios individuais do "ciclo de vida" através dos quais um projeto de desenvolvimento de sistema progrediu. A "trilha de papel" resultante para um projeto de desenvolvimento de sistemas poderia levar tanto tempo para ser construída que muitas vezes partes da documentação de análise - ou às vezes sua totalidade - estavam desatualizadas no momento do desenvolvimento real, tornando-as piores do que inúteis.
Tendências modernas: vários programadores para uma subtarefa
Surgiram dificuldades com esses métodos mais antigos, como custos espiralando fora de controle à medida que os sistemas cresciam e cronogramas que não atendiam às metas de tempo de chegada ao mercado. Esses problemas deram origem a técnicas como programação em pares , programação mob (também conhecida como programação em conjunto ), junto com novas estruturas de ciclo de vida de sistemas, como a espiral de Boehm . A especificação dessas novas abordagens começou em meados da década de 1980 e continua até hoje. Muitas dessas estratégias envolvem vários programadores trabalhando de forma colaborativa na mesma parte do código-fonte, em vez de serem individualmente responsáveis por tarefas individuais. Por exemplo, em "programação em pares", a responsabilidade pelo produto resultante é igualmente compartilhada entre dois programadores que trabalham juntos em suas subtarefas atribuídas. Os benefícios dessa abordagem incluem a capacidade de as deficiências de conhecimento e habilidade em áreas específicas serem compensadas pelo outro programador; além disso, a responsabilidade compartilhada é pensada para aumentar os incentivos para cumprimento de prazos de projetos e metas de qualidade.
Esta técnica é frequentemente usada em metodologias de programação mais recentes que se concentram em técnicas de programação orientada a objetos, como o Rational Unified Process e Extreme Programming (acrônimo "XP"), muitas vezes em combinação com métodos de documentação de design, como a Unified Modeling Language (UML ) Em linguagens de programação orientadas a objetos, a funcionalidade do software forma unidades modulares e discretas (chamadas de classes para os elementos funcionais e pacotes para constelações de classes interligadas que realizam uma função específica); os dois mais conhecidos são C ++ e Java . Isso se presta bem à divisão de projetos de programação em subequipes, embora ainda sejam encontrados problemas na integração do produto resultante após a conclusão de cada subtarefa.