Sono un appaltatore che ha recentemente iniziato con un'azienda.
Il team è composto da 3 sviluppatori composti da 2 sviluppatori junior e di livello medio, con un altro dello stesso livello che inizierà presto e io (6 anni xp). Per entrambi gli sviluppatori esistenti è il loro primo lavoro fuori dall'università / college e non hanno mai avuto uno sviluppatore senior che supervisionasse il loro lavoro prima.
Non esiste una politica esplicita di controllo della versione. Gli sviluppatori eseguono tutto lo sviluppo sul trunk e quindi si distribuiscono alla produzione direttamente dalle loro macchine di sviluppo. Il team esistente non ha familiarità con la ramificazione.
Sto cambiando tutto questo e introducendo CI, server di test TDD / staging / server di produzione ecc., Insieme a una politica di controllo della versione per completare questo.
Il sistema di controllo del codice sorgente è TFS, che non avevo mai usato prima. È configurato come un repository gigante.
Ho scritto alcuni suggerimenti per loro, ma c'è qualcos'altro che dovrei aggiungere / modificare, tenendo presente l'esperienza della squadra?
Politica di controllo della versione
Lo sviluppo è fatto sul tronco
Se si stima che una modifica richieda più di una settimana, dovrebbe essere eseguita su un ramo, con regolari fusioni dal tronco al ramo per impedire ai due di non sincronizzarsi.
Rilasciare i rami creati per il codice di produzione. Quel ramo dovrebbe contenere solo codice stabile. Possiamo avere un ramo di rilascio che viene aggiornato dal trunk una volta per sprint oppure possiamo creare un ramo di rilascio separato per ogni settimana.
Se è necessario apportare una correzione di bug urgente che influisce sul codice di produzione, viene creato sul ramo di rilascio e riunito nuovamente nel trunk.
Se adottiamo la strategia del ramo di rilascio singolo, il trunk viene unito al ramo di rilascio una volta per sprint verso la fine dello sprint.
Se adottiamo il ramo separato per strategia di rilascio, il trunk MAI verrà unito al ramo di rilascio
In alcuni scenari potrebbe essere necessario correggere il bug due volte su rami diversi, se i rami si sono differenziati troppo. Se stiamo facendo brevi sprint, questo non dovrebbe accadere troppo spesso.
Ho in programma di avere tre server. Ambiente di test che esegue sempre l'ultimo codice nel repository. Un ambiente di gestione temporanea che esegue il candidato di rilascio più recente per la gestione temporanea / test del codice del candidato di rilascio e degli scopi UAT e l'ambiente di produzione.
Il motivo per cui ho intenzione di farlo è che finora il client ha realizzato solo software interno. Il progetto più recente è per un cliente multimediale di alto profilo, e la mia sensazione è che il team debba adottare un modello di sviluppo più professionale di quello che fanno al momento.
Ad esempio, al momento, un utente può telefonare al team con una segnalazione di bug. Gli sviluppatori individuano e correggono il bug, eseguono un test rapido del bulbo oculare sui propri computer e quindi lo distribuiscono direttamente in produzione. Nessun test automatizzato o altro.
Con il senno di poi penso che il ramo delle funzionalità sia un passo troppo avanti e lo rimuoverò.
Quindi essenzialmente si riduce a) nessuna ramificazione) b) un ramo di rilascio e il tronco ec) un ramo di rilascio per rilascio e il tronco.
Mi sporgevo verso quest'ultimo. Il mio pensiero iniziale sarebbe che avrei avuto sia un candidato di rilascio che un rilascio per vivere contemporaneamente su server separati (UAT / produzione), ma effettivamente il trunk è il candidato di rilascio in qualsiasi momento, quindi un ramo per il rilascio è incline al folle. Il mio unico pensiero sarebbe se non volessimo che i nostri stakeholder vedessero il codice di sviluppo, quindi potremmo aver bisogno di un ramo candidato al rilascio separato, ma YAGNI e tutto ciò .....