Il nostro team di sviluppo ha utilizzato la strategia di branching GitFlow ed è stato fantastico!
Recentemente abbiamo reclutato un paio di tester per migliorare la qualità del nostro software. L'idea è che ogni funzionalità dovrebbe essere testata / QA da un tester.
In passato, gli sviluppatori lavoravano sulle funzionalità in rami di funzionalità separati e li ricollegavano al develop
ramo quando fatto. Lo sviluppatore testerà il suo lavoro da solo su quel feature
ramo. Ora con i tester, iniziamo a porre questa domanda
Su quale ramo il tester dovrebbe provare nuove funzionalità?
Ovviamente, ci sono due opzioni:
- sul ramo della singola funzione
- sul
develop
ramo
Test su Branch Branch
Inizialmente, credevamo che questo fosse il modo sicuro di procedere perché:
- La funzionalità è stata testata con tutte le altre funzionalità unite al
develop
ramo dall'inizio dello sviluppo. - Eventuali conflitti possono essere rilevati prima che dopo
- Semplifica il lavoro del tester, ha a che fare con un solo ramo (
develop
) per volta. Non ha bisogno di chiedere allo sviluppatore quale ramo è per quale funzione (i rami funzione sono rami personali gestiti esclusivamente e liberamente da sviluppatori pertinenti)
I maggiori problemi con questo è:
Il
develop
ramo è inquinato da bug.Quando il tester rileva bug o conflitti, li segnala allo sviluppatore, che risolve il problema sul ramo di sviluppo (il ramo di funzionalità è stato abbandonato una volta unito) e in seguito potrebbero essere necessarie altre correzioni. Il commit o l'unione di sottosequenze multiple (se un ramo viene ricreato
develop
nuovamente fuori dal ramo per correggere i bug) rende il rollback della funzionalità daldevelop
ramo molto difficile, se possibile. Esistono più funzionalità che si uniscono e vengono riparate suldevelop
ramo in momenti diversi. Questo crea un grosso problema quando vogliamo creare una versione con solo alcune delle funzionalità deldevelop
ramo
Test sul ramo delle caratteristiche
Quindi abbiamo pensato di nuovo e abbiamo deciso di testare le funzionalità sui rami delle funzionalità. Prima di testare, uniamo le modifiche dal develop
ramo al ramo della funzione (raggiungi il develop
ramo). Questo è buono:
- Si verifica ancora la funzionalità con altre funzionalità nel mainstream
- L'ulteriore sviluppo (ad es. Correzione di bug, risoluzione dei conflitti) non inquinerà il
develop
ramo; - Puoi facilmente decidere di non rilasciare la funzione fino a quando non sarà completamente testata e approvata;
Tuttavia, ci sono alcuni svantaggi
- Il tester deve fare l'unione del codice e, in caso di conflitto (molto probabilmente), deve chiedere aiuto allo sviluppatore. I nostri tester sono specializzati in test e non sono in grado di codificare.
- una funzionalità potrebbe essere testata senza l'esistenza di un'altra nuova funzionalità. ad esempio, le funzioni A e B sono entrambe sottoposte a test contemporaneamente, le due funzioni non sono consapevoli l'una dell'altra perché nessuna delle due è stata unita alla
develop
filiale. Ciò significa che dovrai testaredevelop
nuovamente contro il ramo quando entrambe le funzionalità vengono unite al ramo di sviluppo comunque. E devi ricordarti di testarlo in futuro. - Se le funzioni A e B sono entrambe testate e approvate, ma quando viene identificato un conflitto, entrambi gli sviluppatori per entrambe le funzionalità ritengono che non sia colpa sua / lavoro perché il suo ramo di funzionalità ha superato il test. Vi è un ulteriore sovraccarico nella comunicazione e, a volte, chiunque risolva il conflitto è frustrato.
Sopra è la nostra storia. Con risorse limitate, vorrei evitare di provare tutto ovunque. Stiamo ancora cercando un modo migliore per far fronte a questo. Mi piacerebbe sapere come le altre squadre gestiscono questo tipo di situazioni.