Poiché la reazione di @DanCornilescu ho capito che la mia domanda non era chiara. Ecco perché ho modificato la domanda pesantemente.
Sono stato coinvolto in un progetto in cui c'era un solo sviluppatore. Tutto lo sviluppo è stato fatto sul tronco. Ma vogliono cambiare le cose:
- Vogliono lavorare con diversi sviluppatori da tutto il mondo. Ed è importante che gli sviluppatori possano iniziare "immediatamente".
- Vogliono lavorare con l'integrazione continua e la consegna continua.
- Vogliono iniziare a utilizzare DevOps.
- Usano la sovversione e vogliono continuare ad usarlo.
E alcune altre cose, ma qui non è importante.
Perché fino ad ora uno show per un solo uomo ci sono alcuni problemi:
- Ci sono un sacco di modifiche manuali per ottenere una nuova versione testata, accettata e implementata.
- Non ci sono abbastanza test di unità e integrazione.
Il mio lavoro è progettare un nuovo flusso di lavoro, ma questa è la prima volta che mi viene chiesto di fare questo tipo di lavoro. Ho una prima idea per un flusso di lavoro, ma sarebbe bello se le persone con esperienza potessero dirmi cosa potrebbe essere ottimizzato e cosa è sbagliato.
Al momento non ci sono recensioni tra pari. Voglio cambiarlo, ma nel caso in cui ciò non accada, ho definito un flusso di lavoro per due tipi di sviluppatori: fidati e mentori.
Mi è venuto in mente quanto segue per uno sviluppatore affidabile:
Iltestobiancodescriveipassaggimanuali,iltestobludescriveipassaggiautomatizzati.
- Ognisviluppatorehailsuoramoefailsuosvilupposuquestoramo.(Questoèilmiomodopreferitoenellamiaricercal'hovistoancheconsigliato,mahoanchevistospessochegliutentisvnnonamavanofarlo.Soprattuttosullungoperiodopensochequestoporterebbepiùfrutto.Ostosopravvalutandoladifferenza?)
- Almenoognimattina,primacheunosviluppatoreinizialavorare,unisceiltronconelsuoramo.
- Illavoronormaledovrebbeesserecontrollatoneglistessigiorniincuièstatoavviato.Perlavoricherichiedonopiùtempodeveesserecreatounramospeciale.Questoramodovrebbeancheavereuntrunkintegratoinessoalmenoall'iniziodelgiornolavorativo.
- Ognivoltachelosviluppatorehaaggiuntoqualcosachepuòesseretestato,dovrebbeeseguireitestunitari.Primadieseguireiltestdell'unitàvieneeseguitaun'unioneautomatica.Sequestositraduceinconflitti,questidevonoessererisolti.
- Quandolosviluppatorepensadiaverequalcosachepuòessereimpegnato,chiamaitestunitariconunflagdicommit.QuandotuttoèOK,vengonoeseguiteleazionidicommitedifollow-up.
- Vienedefinitounpre-hookcheverificailcorrettocompletamentodeitestdiunioneeunità.
- Dopocheilcommitèstatoeseguitoconsuccesso,unpost-hookcreeràunserverdiintegrazioneincuivengonoeseguitinuovamenteitestprecedentievengonoeseguitiitestdiintegrazione.Quandononèunramospeciale:incasodisuccessovienecreatounserverdiaccettazioneconquestoramoeilramovieneunito(--reintegrate)neltrunk.Losviluppatorevienesempreinformatodelrisultato.
- Aunosviluppatoreèconsentitoandareacasasoloquandolasuaversioneèstatainseritacorrettamente.Idealmentedovrebbeanchesuperareitestdiintegrazione.(Questosuonaunpo'duro,mal'hoaggiuntoperchéhovistosviluppatorichenonsiimpegnavanodasettimaneperchénoneranoancoracambiatimolto.Contuttiiproblemidiunionecreati.)
C'èunaleggeradifferenzadiflussoperunosviluppatorementore:
Quando uno sviluppatore mentore esegue correttamente il commit, il ramo non viene fuso nel trunk, ma viene inviato un messaggio per valutare questo ramo. Quando la valutazione è positiva, vengono seguite (automaticamente) le attività del test unitario con il flag di commit per uno sviluppatore attendibile. Sarebbe opportuno se tali revisioni fossero effettuate il prima possibile, per aggirare il più possibile i conflitti di fusione.
Above è la parte più importante, ma voglio anche definire le seguenti regole per ogni sviluppatore:
- Vengono impegnati solo gli spazi di lavoro completi.
- Un commit ha un unico scopo: correggere un bug, aggiungere una nuova funzione, ...
- Quando un messaggio di registro è più come una riga, il messaggio inizia con un breve messaggio, quindi una riga vuota e quindi il messaggio stesso.
- Immettere i problemi corrispondenti nel messaggio di registro.
- Le righe di un messaggio di registro non sono più lunghe di 72 caratteri.
- Quando scrivi un nuovo codice, scrivi sempre i test unitari.
Questo sarebbe un modo fattibile per funzionare, o ci sono insidie? Può essere ottimizzato?