Controllo del codice sorgente: ruoli e responsabilità - Best practice


10

Sto cercando "Best Practices" per quanto riguarda ruoli e responsabilità, in particolare chi è responsabile delle fusioni dai rami di sviluppo al trunk (o principale). Fondamentalmente sto cercando munizioni per aiutare la mia causa.

Lasciami descrivere ciò che sto affrontando. Sono lo sviluppatore principale (proprietario) di una particolare applicazione. Di recente la nostra azienda è passata da VSS (di cui ero amministratore del database VSS in cui era archiviata la mia applicazione) a TFS (dove ho solo autorizzazioni per i rami di sviluppo creati dal nostro team "operazioni"). Nei lavori precedenti, ero un amministratore TFS, quindi conosco il modo in cui mi muovo tra TFS e MSBuild.

Non ho alcun problema con la strategia di diramazione e fusione in uso (ramo principale, con rami di sviluppo bug / progetto creati in base alle esigenze, uniti al principale quindi promossi in un ramo di rilascio). I problemi che ho sono:

  1. Non riesco a creare i miei rami. Devo creare un'attività TFS per fare in modo che un membro del team "operazioni" crei il ramo per me.

  2. Non riesco a unirmi da Main al mio ramo di sviluppo. Devo creare un'attività TFS per fare in modo che un membro del team "operazioni" esegua l'unione e quindi spero che non "calpesti" nessuna delle modifiche del mio team poiché il "ragazzo delle operazioni" può o meno essere uno sviluppatore e sicuramente ha poca o nessuna conoscenza del codice che sta unendo.

  3. Non posso unirmi dallo sviluppo al Main. Ancora una volta devo creare un'attività TFS per fare in modo che "ops guy" esegua l'unione, sperando che lo faccia correttamente. Quindi devo creare un'altra attività TFS per ricollegarmi al mio ramo in modo da poter risolvere tutti i problemi che si sono verificati avendo un'unione non sviluppatore con Main.

  4. Non riesco a creare o modificare gli script di MSBuild. Ancora una volta devo lavorare con il team "ops" che è nuovo in MSBuild in modo da poter eseguire solo le attività di build più basilari. (Dimentica qualsiasi cosa complessa o proibisci al cielo un compito personalizzato).

  5. Non riesco a eseguire uno script MSBuild. Ancora una volta solo il team "ops" può farlo.

  6. Per finire, in genere si tratta di una risorsa "off-shore" che esegue le attività richieste, quindi anche se creo l'attività di (branch / merge / build) al mattino presto, probabilmente non verrà completata fino a quella sera.

Ora non ho alcun problema con il team "operazioni" che mantiene i rami di rilascio. Come tutto ciò che stanno facendo è (sostanzialmente) prendere l'ultima versione da Main e promuoverla nel ramo di rilascio; quindi finché "Main" è stabile e pronto, il ramo di rilascio sarà buono.

La mia opinione è che i lead tecnici (come I) dovrebbero essere responsabili del mantenimento del trunk ("Main") e di qualsiasi fusione da / verso i rami di sviluppo. Il responsabile del team dovrebbe inoltre avere la capacità di generare script di MS Build da compilare e distribuire nell'ambiente di test di integrazione.

Qualcuno può indirizzarmi a un documento di buone pratiche che mi aiuterà a dimostrare il mio caso? Tutta la mia ricerca ha rivelato solo le migliori pratiche relative alle tecniche di ramificazione e fusione, e nessuna menzione dell'OMS dovrebbe eseguire tale diramazione / fusione.


WHO should be performing said branching/merging.è una decisione organizzativa interna. Non proprio qualcosa con cui potremmo aiutarti ...
Yannis,

2
Vuoi dirci le ragioni putative fornite per una tale procedura bizantina? La mia ipotesi è "Conformità CMM livello N" o "Sarbanes Oxley".
Bruce Ediger,

SOX, ma solo in parte. Quando siamo andati a TFS per la prima volta, gli sviluppatori avevano accesso a Main e Dev. Ma poi "alcuni" sviluppatori (nessuno nel mio team) hanno deciso di fare un lavoro di sviluppo su Main piuttosto che in un ramo Dev, quindi ora tutti i team vengono puniti.
Michael Chatfield,

Risposte:


8

La mia opinione generale sulle migliori pratiche è che qualsiasi membro del team di sviluppo dovrebbe essere in grado di eseguire qualsiasi azione sull'albero presumendo che tali azioni non facciano cose come avviare una distribuzione di produzione. Nei casi in cui una specifica diramazione / tag / repository agisce come una fonte per distribuzioni automatizzate che danno un ragionevole controllo delle modifiche o barriere all'ingresso, ha senso, più da un errore di mantenimento semplicemente da una prospettiva che da un angolo di controllo-maniaco. Vorrei incoraggiare gli sviluppatori a creare filiali e migliorare gli script di build. Vorrei trovare il modo di ottenere l'accesso degli sviluppatori alla produzione, se necessario. Parte del punto di controllo del codice sorgente è che si tratta di un'efficace gomma magica per errori - il peggio che devi fare è tornare indietro di un giro o due e diramarlo.

Purtroppo questo non sembra l'approccio che hanno adottato qui. Per sconfiggere questo penso che sia necessario coprire alcuni angoli:

a) Dimostrare che queste politiche sono dannose per lo sviluppo delle cose. Registra tutto il tempo che passi in attesa di operazioni per iniziare a lavorare su qualcosa. Questo da solo dovrebbe vendere una gestione ragionevole sul perché questa è una cattiva politica.

b) Fai amicizia con Ops - forse c'è una ragione per questa politica. Forse questo ragionamento potrebbe essere affrontato in modo più efficace.

Spero che sia di aiuto.


3
+1, stavo scrivendo qualcosa di simile: documentare il tempo e lo sforzo persi: lasciare che i responsabili delle decisioni facciano una scelta informata: il rischio di qualunque cosa stiano cercando di evitare con l'attuale politica restrittiva vale il costo?
Jamie F,

Ho intenzione di tenere una riunione del genere, ma sarebbe di aiuto se potessi dimostrare che questa politica va contro le "migliori pratiche" del settore.
Michael Chatfield,

Gotcha. Non sono sicuro che ci sia qualcosa di specifico, ma i bit sul controllo del codice sorgente in The Pragmatic Programmer potrebbero contenere alcune gemme. Da quello che sembra essere stata una grave reazione eccessiva ad alcuni cattivi sviluppatori piuttosto che una decisione politica ponderata o qualche politica. Mi accontenterei di un accordo in cui Ops si fonde in Main. Spingerei anche a rendere le operazioni responsabili per garantire che l'unione non rompa nulla, il che probabilmente finirà con il farne uscire. . .
Wyatt Barnett,

Secondo Jamie, tutto il tempo trascorso a fondersi o ad aspettare che si verifichi una fusione dovrebbe essere registrato in modo da avere prove. Non esiste una "migliore pratica" adatta a tutte le aziende. Ho lavorato in grandi aziende dove questo compito è stato svolto da un team di gestione della configurazione dedicato. Nella mia attuale azienda c'è un team dedicato alla gestione delle versioni che non svolge il compito fisico di fondersi con quello principale ma è il proprietario logico e lo verifica. Ma le operazioni IMHO di solito non sono quelle che toccano il codice sorgente.
softveda,

2

Le pratiche che ho visto sono:

  1. Chiunque può creare rami di lavoro a proprio piacimento. Uno sviluppatore deve essere in grado di creare un ramo di funzionalità nel momento in cui scopre che è utile archiviare i lavori in corso. Perché vogliono / dovrebbero eseguirne il backup alla fine della giornata, vogliono condividerlo con un altro membro del team, devono essere protetti dai cambiamenti in main o altro.

  2. Chiunque può fare assolutamente qualsiasi cosa per i rami dello sviluppo. Lo sviluppatore deve essere in grado di unire dal main nel momento in cui un altro sviluppatore dice loro che qualcosa di cui hanno bisogno è stato integrato nel main.

  3. Per unire a principale (integrazione), ci sono tre opzioni:

    • Gli sviluppatori fanno questo da soli. Discutono solo i rischi con lo sviluppatore principale e testano le funzionalità in modo appropriato. Ciò implica che chiunque ha i permessi; se qualcuno infrange le regole, viene semplicemente sgridato e viene annullato il cambiamento sbagliato.
    • Un altro sviluppatore lo fa dopo aver esaminato le modifiche. Richiede ancora che tutti abbiano i permessi per farlo; le regole sono ancora applicate dallo sviluppatore principale.
    • C'è un integratore designato che rivede e si fonde in main. Ma l'integratore fa parte del team e deve comprendere il codice. In una squadra più piccola sarebbe la stessa persona dell'architetto, in una più grande sarebbero separati, ma avrebbero bisogno di cooperare strettamente.
  4. Chiunque prepari una funzione dovrebbe adattare lo script di compilazione. Ma non sono sicuro di come funzioni con TFS; nei sistemi che ho usato lo script di compilazione era sempre solo un file con versione, quindi gli sviluppatori lo hanno modificato come un altro ed è stato integrato con tutto il resto.

  5. Se esiste un integratore designato, di solito si occupano di definire (quale script eseguire) e avviare le build. Altrimenti o il capo squadra lo fa, il membro designato del gruppo lo fa o qualcuno ha le autorizzazioni e i delegati del capo squadra creano e avviano particolari build caso per caso.

  6. In nessun caso le operazioni sopra descritte richiedono un operatore esterno alla squadra. L'operatore è necessario solo per impostare le autorizzazioni, creare repliche e simili.


Sarei tutto per un "integratore designato", purché in realtà sia uno sviluppatore del team. Questa è la strada che spero comunque; è una piccola squadra (4 persone incluso me stesso). Spero di avere accesso per creare / eseguire anche gli script di MS Build, sarà sciocco per me creare script nAnt per distribuzioni di sviluppo e quindi per il team "ops" costruire essenzialmente lo stesso script per MSBuild. Ma è quello che farò se necessario.
Michael Chatfield,

2

Non importa "buone pratiche" (abbi pazienza con me) questo è un problema di gestione - fondamentalmente non sei in grado di svolgere il tuo lavoro correttamente a causa dei vincoli posti su di te.

In realtà non importa quale sia la "migliore pratica": si tratta di un problema semplice, dimostrabile, che influirà sulla produttività di te e del tuo team e che dovrai occuparti della gestione della tua linea su tale base.

Vedo che brandizzare un documento di buone pratiche potrebbe (ma solo potrebbe ) essere di aiuto nel tentativo di persuaderli, ma di gran lunga migliore è l'idea che dovrai avere membri del team di sviluppo seduti nelle loro mani in attesa di qualcuno in un diverso fuso orario mettere insieme i loro atti a meno che i processi non vengano migliorati / razionalizzati.

E non essere troppo conflittuale - tanto quanto qualsiasi cosa tu voglia sapere perché le restrizioni sono in atto, qual è la giustificazione ...


1
Sì, sforzandomi molto di non essere conflittuale ... proveniente da un ragazzo che la moglie gli ha comprato una maglietta "Sono d'accordo con te, ma poi sbaglieremmo entrambi". :)
Michael Chatfield,

È un killer assoluto quando hai ragione (-: E in questo caso è difficile sostenere che non sei ... ma hai bisogno della tua gestione della linea a lato se qualcosa cambierà
Murph
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.