Motivi per la programmazione delle coppie


13

Ho lavorato in alcuni negozi in cui il management ha passato l'idea di programmare la coppia né a me né a un altro manager / sviluppatore, e non riesco a superarlo affatto. Da un punto di vista dello sviluppatore non riesco a trovare un motivo per cui passare a questo stile di codifica sarebbe vantaggioso, né come manager di un piccolo team ho visto alcun vantaggio.

Capisco che aiuta sugli errori di sintassi di base e può essere utile se è necessario eseguire l'hashing di qualcosa, ma i gestori che sono fuori dal ciclo di programmazione sembrano continuare a vederlo come un modo per impedire ai loro progettisti di andare su Facebook o Reddit rispetto a come uno strumento di progettazione.

Come qualcuno vicino al piano di sviluppo che apparentemente non riesce a capire da un libro che mi ha fatto strada o da una pagina wiki sull'argomento ... da una posizione di gestione di alto livello, quali sono i vantaggi di Pair Programming quando si ha a che fare con Scrum o Agile ambienti?


2
Penso che sia utile in situazioni molto specifiche. Ma come modello di sviluppo generale, è un po 'inutile.
Ryan Kinal,

4
Può dipendere dal software, che può colorare la vista. Se hai molti piccoli widget e lavori quotidianamente su diversi piccoli software personalizzati, probabilmente non è utile. Diventa estremamente utile quando si ha a che fare con un grande sistema aziendale in cui gli sviluppatori devono tenere conto della cascata attraverso il sistema creata dalla funzionalità che implementano. Scrivere una classe che influisce sui dati utilizzati in oltre 30 luoghi distinti può essere meglio ragionato da 2 persone che avranno vari processi mentali per questo. È come un metodo Monte Carlo per la ricerca pre-difetto.
Jimmy Hoffa,

@JimmyHoffa Quindi il principale processo di pensiero è che se troviamo i bug prima ancora che arrivino ai test di accettazione, possiamo ridurre notevolmente il tempo perso nelle revisioni dei codici / nei test?
Jeff Langemeier,

3
@JeffLangemeier In realtà è molto più di questo; Se vedi i difetti nella progettazione della sezione A1 del sottosistema A prima ancora che A1 sia scritto a causa del discorso naturale che si verifica tra due sviluppatori nel mezzo dell'implementazione del sottosistema A, non stai solo risparmiando il tempo che sarebbe trascorso a riparare la sezione A1, e le sezioni A5 e A7 che dipendono da A1 (o dalla ricerca di bug in quelle sezioni dipendenti a causa della cascata dal fissaggio di A1), stai risparmiando tempo non scrivendo quella sezione sbagliata del tutto. Riduce i tempi di test sì, ma riduce ulteriormente i tempi di sviluppo in questo modo.
Jimmy Hoffa,

@MartinWickman Questo non è un duplicato. Nel tuo link stavano davvero cercando contro, anche se il titolo chiedeva vantaggi e svantaggi. Inoltre, in questo è stata data una risposta più approfondita dei professionisti; al punto che è utile per la comunità avere questo anche se è vicino all'altro.
Jeff Langemeier,

Risposte:


25

In parte, dipende da come stai programmando la coppia. In alcuni casi, il driver della coppia sta scrivendo codice, mentre il secondo membro della coppia sta osservando e discutendo i dettagli di progettazione e implementazione del sistema. Un'altra istanza di programmazione di coppia coinvolge entrambe le persone che scrivono contemporaneamente il codice: una persona sta scrivendo la funzionalità implementata e l'altra sta sviluppando e scrivendo attivamente il codice di test a livello di unità e di integrazione, discutendo ancora della progettazione e dei dettagli di implementazione del sistema.

Indipendentemente dal tipo di programmazione di coppia, funge effettivamente da revisione continua del codice . Hai gli occhi di due persone sul codice, osservando gli errori prima che scappino in un successivo sistema / ambiente di test di accettazione o sul campo. Ci sono anche due persone che capiscono molto bene una parte particolare del sistema, che servono da ridondanza per ridurre al minimo il fattore bus . Sia la cattura precoce dei difetti che la diffusione della conoscenza del sistema in tutto il team riduce i costi di costruzione di un sistema.

La diffusione della conoscenza non si limita solo alla conoscenza tecnica del team. A seconda di chi sia la coppia, può consentire alle informazioni di fluire tra un membro più senior dell'azienda a un nuovo membro su altre cose che trascendono il progetto: stile di codifica, cultura aziendale, aspettative e così via. Può anche consentire a qualcuno che ha più familiarità con una tecnologia o uno strumento di condividere le proprie conoscenze in quella tecnologia o strumento in un ambiente reale applicato.

Come hai già detto, aiuta anche a mantenere gli sviluppatori concentrati e attivi . Oltre al flusso, molte persone hanno meno probabilità di interrompere più persone che lavorano su qualcosa rispetto a un singolo individuo che lavora su qualcosa. Se passi dalla scrivania di qualcuno e stanno lavorando da soli, ma devi parlare con loro, potresti bussare e parlare con loro. Ciò è meno probabile se vedi due o più persone che lavorano in modo collaborativo o hanno una discussione: non le interromperai. Le interruzioni costano tempo e passare più tempo significa costi più elevati. È nel massimo interesse dell'azienda massimizzare la produttività dei dipendenti.

Tuttavia, ci sono alcune sfide che devono essere superate per rendere possibile la programmazione delle coppie. Considera cose come gli scontri di personalità o la scelta delle coppie per distribuire correttamente la conoscenza. C'è anche la considerazione di quando ruotare esattamente le coppie. La programmazione di coppia eseguita a casaccio probabilmente non sarà efficace come quella pianificata. A seconda della composizione della tua squadra, potrebbe non essere efficace accoppiare le persone.


+1 per l'ottima risposta. Non mi piace ancora molto l'idea, ma tu presenti bene i suoi benefici.

Mi piace il taglio del tuo braccio, signore, questa spiegazione in realtà lo rende fattibile.
Jeff Langemeier,

9
Preferisco un modello ibrido in cui gli accoppiamenti sono più ad hoc in base alle esigenze attuali. Inoltre, ci sono momenti in cui lavorare da soli è più efficiente e volte è meglio lavorare con un partner. Essere forzato in coppie permanenti mi sembra arbitrario e poco flessibile.
jfrankcarr,

Ottima risposta Sono anche programmatore di una squadra agile e facciamo molti accoppiamenti. All'inizio eravamo anche scettici, pensavamo che lavorare da soli fosse il modo migliore per andare. Quindi, a un certo punto dell'evoluzione del team, abbiamo imposto la programmazione delle coppie. NESSUN codice di produzione è stato impegnato se non programmato in coppia. Questa è stata un'applicazione artificiale del concetto di accoppiamento, ma ha aiutato molto la squadra. Alla fine, dopo che tutti ci siamo abituati alla tecnica e vicendevolmente, abbiamo cambiato il nostro stile e stiamo collaborando ad hoc e soprattutto quando l'implementazione è più complessa o soggetta a errori.
Patkos Csaba,

@jfrankcarr, nessuno ha nemmeno suggerito coppie permanenti; Non sono sicuro di dove ti sia venuta questa idea. (Si noti che questa risposta menzionava specificamente "quando ruotare le coppie".) Il nostro team ha scoperto che è davvero una cattiva idea mantenere le stesse due persone accoppiate tra loro per più di un giorno o due; inizi a entrare in una carreggiata. Alcune squadre ruotano ogni ora e mezza (collegamento PDF).
Joe White,

3
  1. Meno errori nel codice finale (efficienza)
    Non sostituisce completamente le recensioni del codice ma è molto efficace per ottenere le cose subito. C'è una ricerca là fuori che punta in quella direzione.

  2. Completamento più rapido (efficacia)
    Esistono diverse ricerche che lo evidenziano. Quando si tratta di funzioni complesse, 2 teste sono semplicemente più efficaci. L'esperienza nell'associazione è un must per questo.

(nota: questo è il tuo punto di forza per il manager: finanziariamente una decisione sensata perché ottieni più efficiente attraverso un numero inferiore di bug e più efficace con un completamento più rapido)

  1. Insegnamento per ragazzi
    È possibile aggiungere un junior direttamente a un programmatore più esperto. Se hai un gruppo di principianti assoluti, è facile rimanere in giro e lasciare che, come coppie, capiscano le basi. Resta in piedi e dai consigli. Il concetto è apparentemente molto vecchio e deriva dall'artigianato.

3

Risposta rapida: la maggior parte dei vantaggi e dei costi sono pubblicati su Wikipedia , tuttavia, esaminiamola da un punto di vista leggermente diverso.

Vorrei menzionare casi specifici di benefici della programmazione di coppie che si applicano all'ambiente di sviluppo agile / mischia, presi dal post del blog :

Il successo o il fallimento del software dipende dalla sua qualità e Pair Programming migliora direttamente la qualità in numerosi modi. Quando due sviluppatori lavorano insieme la qualità del modello di progettazione migliora man mano che la coppia sviluppa codice breve, semplice e facile da gestire con meno bug. I bug sono una delle principali preoccupazioni di qualità nello sviluppo del software; con due serie di occhi che scrivono il codice, vengono catturati più errori, riducendo così il costo di sviluppo. Gli errori rilevati in ritardo nel processo di sviluppo sono spesso costosi da correggere. La ricerca precoce dei difetti del software impedisce e aiuta a scoraggiare problemi difficili lungo la strada. La complessità sorge spesso nella programmazione e due menti che lavorano per risolvere un problema insieme possono vedere più opzioni e trarre conclusioni più rapidamente di una.

In sintesi:

  • Promuove la comunicazione di squadra
  • Promuove un efficiente trasferimento delle conoscenze sulle applicazioni
  • Promuove la responsabilità sull'approccio progettuale
  • Risultati in codice migliore, facile da mantenere
  • Aiuta a eliminare il codice errato nella sua fase iniziale
  • Aumenta la produttività del team poiché i membri del team avranno un'attenzione totale durante la codifica
  • Migliora le capacità di comunicazione e collaborazione dei membri del team
  • Costruisce il cameratismo sul posto di lavoro
  • Rende il lavoro più divertente

When two developers work together design pattern quality improves-> quella frase non ha affatto senso. Almeno non più senso di When two bakers work together wheat quality improveso When two race drivers work together asphalt quality improves.
galleria

Questa è una citazione dal blog che potresti esaminare. Tuttavia, il mio intento era quello di sottolineare una maggiore attenzione alla progettazione tecnica e alla qualità del codice, con un qualche tipo di responsabilità in atto, poiché ogni sviluppatore si sforza di essere orgoglioso del codice creato.
Yusubov,

2

Ci sono alcuni vantaggi per la programmazione di coppia:

  • I due programmatori sono in grado di collaborare alla progettazione insieme, potenzialmente producendo una migliore architettura / codice: due paia di occhi possono individuare errori
  • La conoscenza delle istituzioni viene preservata meglio - se un programmatore lascia o non è disponibile, l'altro dovrebbe essere in grado di continuare il lavoro senza troppe perdite di produttività
  • È un modo per formare rapidamente nuovi sviluppatori: abbinarli a un membro esperto del team di sviluppo e saranno in grado di sperimentare la base di codice dal punto di vista di un veterano del team
  • Migliore disciplina: i programmatori accoppiati sono probabilmente produttivi per un periodo di tempo più lungo, poiché l'uno o l'altro può subentrare a raffiche di attività. Compiti potenzialmente noiosi, come i test di unità, potrebbero essere saltati meno frequentemente rispetto agli sviluppatori solisti.

Wikipedia ha anche un bel riassunto dei costi e dei benefici nel voce wiki .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.