Un po 'di background qui - siamo un piccolo team (di 5) di sviluppatori RAD responsabili dello sviluppo di software interno in una grande azienda non software. Il "software interno" varia da un'applicazione desktop .NET che utilizza il server MSSQL come backend agli script Python in esecuzione in background su documenti e modelli MS Word, uno zoo di tecnologie.
L'intero team è composto da tuttofare in grado di ottenere i requisiti dagli utenti, codificarlo, testarlo e distribuirlo in produzione. Una volta che il software in produzione è stato curato da un altro team, ma di solito è facile per noi intervenire se qualcosa va storto.
Tutto suona bene finora, ma c'è un problema: essendo un team RAD dobbiamo rilasciare spesso, e non c'è giorno che passa senza che rilasciamo nuove versioni di una o due applicazioni (o potrebbe essere uno script, un documento Word aggiornato , App console C ++, ecc.) Nella produzione. Effettuiamo un test di sviluppo e coinvolgiamo anche gli utenti finali consentendo loro di eseguire il software in ambiente UAT ...
... ma gli insetti si stanno insinuando nella produzione comunque. Gli utenti comprendono che questi bug e l'instabilità occasionale sono il prezzo che stanno pagando per ottenere ciò che vogliono davvero in fretta, ma allo stesso tempo ci ha fatto pensare - forse potremmo migliorare il nostro sviluppo o pratiche di rilascio per migliorare la stabilità del software e ridurre il numero di bug che introduciamo quando si aggiunge una nuova funzionalità.
La cosa buona - non abbiamo davvero molti dei processi in primo luogo, quindi dovrebbe essere facile iniziare a migliorare, la cosa cattiva - essendo un piccolo team RAD non abbiamo davvero molto tempo e risorse da implementare qualcosa di grande, ma abbiamo pensato alle seguenti iniziative e saremmo lieti di ricevere feedback, suggerimenti, consigli e suggerimenti.
Attualmente alcune applicazioni vengono rilasciate nella produzione subito dopo il test dello sviluppatore, aggirando il test di accettazione dell'utente. Tale pratica dovrebbe essere interrotta e anche una piccola modifica deve essere testata da un utente finale. Ogni applicazione avrà un beta tester dedicato selezionato dagli utenti finali. Solo dopo che un beta-tester ha approvato la nuova versione, viene promosso dall'ambiente di test a quello di produzione.
Non effettuiamo revisioni del codice, ma inizieremo a fare revisioni del codice prima che uno di noi effettui il check-in del changeset. Stavo anche pensando a una "revisione dell'implementazione" - fondamentalmente uno degli sviluppatori deve sedersi accanto all'altro, guardandolo mentre esegue l'implementazione del software (copia dei file binari, aggiornamento delle configurazioni, aggiunta di una nuova tabella al database, ecc.) Di solito solo richiede 5-10 minuti, quindi non ci vorrà molto tempo per la "revisione dell'implementazione".
Come ridurre il tempo di rollback quando una nuova versione ha dimostrato di essere buggy abbastanza per essere ritirata dalla produzione e per essere sostituita da una buona versione precedente. Memorizziamo una cronologia di tutte le versioni (come file binari) per semplificare il riavvio di una versione, e sebbene sia rapido "sovrascrivere i file binari appena rilasciati con i file binari delle versioni precedenti", è ancora un processo manuale soggetto a errori ed esigente a volte "che cosa succede se il rollback fallirà e renderà il sistema inutilizzabile anziché difettoso".
È qui che abbiamo esaurito le nostre idee e vorremmo ricevere il tuo feedback su queste e se tu potessi condividere alcuni semplici consigli sul miglioramento dei processi di rilascio / sviluppo, sarebbe fantastico.