il modello gitflow con le versioni UAT è troppo caotico, come semplificare?

6

A $DAYJOB , abbiamo la seguente pipeline di rilascio / consegna:

  1. Ottieni nuove funzionalità, lavora sulle nuove funzionalità.
  2. Una volta completate tutte le funzioni, il nostro QA esegue le regressioni, ecc.
  3. Il QA firma il primo build UAT, spedito al dipartimento UAT del cliente (questa è la vera forza del QA del cliente). Inizia la nostra versione iniziale (ad esempio v1.0)
  4. Il controllo qualità clienti (UAT) rileva problemi, ci rimanda a un elenco.
  5. Lo sviluppo risolve l'elenco di problemi. A volte potrebbero chiedere dei non difetti, come miglioramenti o piccole funzionalità. Noi li triage caso per caso. Anche il nostro QA verifica le correzioni. Si disconnettono, spediamo una nuova build (questo ottiene un bump della versione, come la v1.1)
  6. Questo ciclo di operazioni "lista" e "lavoro nell'elenco" viene eseguito ciclicamente alcune volte, fino a quando il cliente non firma il build (UAT Pass).
  7. Il build firmato diventa "produzione". Ora gli sviluppatori possono iniziare a lavorare sulle nuove funzionalità per la prossima versione.

Alcune note su questo processo:

  • Usiamo una versione bastardata di git-flow per questo processo (spiegheremo più dettagliatamente in seguito).
  • Per quanto riguarda il controllo delle versioni, non facciamo distinzioni tra le versioni UAT e le versioni di produzione. Dobbiamo supporre che qualsiasi versione di UAT possa essere firmata e diventare d'oro in qualsiasi momento. Per noi, ogni build "fuori dalla porta" viene considerata una "release di produzione".
  • Gli sviluppatori lavorano su rami fuori da develop per le nuove funzionalità. Lavoriamo anche sulle funzionalità per la versione prossima . Tuttavia, non uniamo le funzionalità finché non sono pianificate per il rilascio. Questo perché non creiamo rami di "rilascio" (ne parleremo più avanti).

Ecco come il nostro processo di sviluppo riguarda sia i bug che le funzionalità:

  1. Lo sviluppatore si disconnette da develop e inizia a lavorare.
  2. Lo sviluppatore termina il lavoro, esegue la revisione del codice
  3. Passa la revisione del codice e indichiamo al QA che il ramo è pronto per il test. Il nostro sistema di build CI crea ogni ramo nel repository remoto e QA può acquisire build ad-hoc su qualsiasi ramo. Il QA verifica le funzionalità nelle filiali (e non fuori da develop ) per alcuni motivi:
    1. Le build su develop potrebbero includere più funzionalità o correzioni di bug da parte di più sviluppatori nel corso del tempo. Quando si verificano regressioni, diventa più difficile rintracciare ciò che ha causato le regressioni. Il modello "test-ogni-ramo" ci consente di isolare le regressioni alle modifiche su quel ramo (ovvero, una caratteristica o una correzione).
    2. Tutte le funzionalità devono essere testate su un ramo perché non vengono uniti in develop finché il QA non è soddisfatto. Anche il controllo qualità controlla la pianificazione della distribuzione, in modo che sappiano quando lo sviluppo è pronto per le nuove funzionalità.
    3. Siamo a corto di risorse per il controllo qualità. Al momento abbiamo un rapporto 4 a 1 di sviluppatori per il personale di QA. Semplicemente non riescono a tenere il passo con il lavoro che facciamo.
  4. Una volta che il QA è soddisfatto della funzionalità sul ramo, lo contrassegna come "verificato".
  5. Una volta verificato, rimane invariato fino a quando qualcuno con l'autorizzazione appropriata "approva" la funzione o il ramo. A questo punto, uno sviluppatore rebase / si fonde più tardi nel ramo, corregge i conflitti, quindi lo unisce in develop .

Quando finalmente rilasciamo il software (di solito la nuova build UAT), facciamo una fusione da develop direttamente in master .

Sintomi del sistema attuale:

  • tonnellate di rami seduti in attesa di essere uniti. Più di 100 al momento, e il tempo di consegna è a volte mesi prima che vengano unite.
  • Il processo è complesso e strettamente controllato dal QA
  • Lancia i sottomoduli nel mix e hai una ricetta per il disastro e la complessità.

Il motivo per cui non usiamo le filiali release al momento è perché abbiamo avuto un'esperienza negativa con loro. Il processo UAT può talvolta richiedere mesi. A volte richiedono funzionalità irragionevolmente e il management superiore lo consente. Abbiamo avuto i nostri rami di rilascio diventare numerosi, longevi, con enormi problemi di parità (in altre parole, accumulano tonnellate di cambiamenti nel corso della loro vita).

L'intera faccenda è piuttosto caotica e difficile da gestire. Tuttavia, il QA ci offre un sacco di feedback su questo processo perché le nostre versioni sono super stabili. Questo perché il QA tocca ogni ramo prima che venga unito, mentre prima gli sviluppatori si univano tutto il giorno a develop e QA non riusciva a tenere il passo con le modifiche, quindi un sacco di cose non è stato testato nelle versioni.

Ora che ho spiegato il nostro processo e la situazione, alcune domande:

  1. Come possiamo semplificare questo processo?
  2. Come devono essere gestiti release filiali quando hai un processo UAT nel mezzo? Idealmente vogliamo essere in grado di continuare lo sviluppo attivo su develop dopo si avvia UAT.
posta void.pointer 02.09.2015 - 15:58
fonte

2 risposte

2

Molti problemi familiari che ho visto anche in molte organizzazioni.

I miei suggerimenti sono i seguenti:

  • Branch off master per i rami di funzionalità
  • Fai in modo che il QA ritorni nel master e lo spinga
  • Rilascia il master settimanale e tagga ogni versione con la data di rilascio

Questo è il codice e il flusso di lavoro.

Le parti più difficili sono probabilmente:

  • cambiare la cultura
    Probabilmente c'è una diversità di opinioni su cosa è sbagliato e perché lo è. Avrai bisogno di acquistare e difendere dal livello più alto (rilevante) dell'organizzazione. Avrai bisogno di spiegare e vendere i vantaggi di un sistema così snellito. Spiega la semplicità e il rapido turnaround. Assicurati che il tuo (probabilmente) processo agile non sia solo un servizio a parole, ma completamente pensato da pratiche agili e, quando possibile, da scrum master.

  • modifica del flusso di lavoro esistente Dovrai mettere insieme il nuovo flusso di lavoro e quindi sviluppare un piano che ti consenta di passare ad esso.

Altri pensieri:

  • prendi in considerazione l'implementazione di un sistema di switch di funzionalità completo che ti consentirà di unire le tue (alcune) modifiche ma di attivare / disattivare le funzionalità tramite un gui amministratore.

  • nella tua pipeline di consegna invece di terminare la funzione e passare al QA, valuta la possibilità di coinvolgere il QA attraverso la progettazione, l'implementazione e il collaudo in modo che il loro ok finale sia un passaggio di assunzioni ben comprese e concordate. Non vuoi che il QA sia sorpreso da un'implementazione e non vuoi che gli sviluppatori sorprendano su come QA decide di testare.

  • Organizza una riunione settimanale con tutte le parti coinvolte e passa attraverso tutti i ticket. Questo può facilmente essere 50-100 biglietti. Tocca la base su ognuna per: implicazioni di rilascio per il business, fasi di pre-rilascio, fasi di post-release, downtime, ecc.

risposta data 03.09.2015 - 02:05
fonte
0

Alla fine abbiamo deciso di andare con un ramo di rilascio per rilascio fisico fuori dalla porta, indipendentemente da come il cliente intendesse usarlo. Se una build rilasciata non arriva mai attraverso UAT, va bene, creeremo un altro branch release e spediremo di nuovo. Tuttavia, se UAT accetta la build, non abbiamo l'opportunità di ricostruirla. In tal caso mantengono la build che hanno ottenuto e passiamo alla prossima release che potrebbe non essere affatto correlata a UAT.

A questo proposito, tutte le nostre versioni seguono lo stesso flusso e le stesse regole. Sospettavo che avremmo creato diversi rami di rilascio a settimana durante i cicli UAT, ma non è così. I nostri team addetti al controllo qualità trascorrono abbastanza tempo su un ramo di rilascio che creiamo solo uno ogni 2 o più settimane.

Finora questo sta funzionando alla grande ed è molto gestibile. Inoltre, obbliga le versioni delle feature ad attendere il completamento delle versioni UAT, il che è fantastico. Siamo in grado di gestire i rilasci a un livello più granulare.

    
risposta data 01.10.2015 - 15:13
fonte