Quanti sviluppatori prima dell'integrazione continua diventa efficace per noi?

34

Esiste un sovraccarico associato all'integrazione continua, ad esempio, set up, riqualificazione, attività di sensibilizzazione, interruzione per correggere "bug" che si rivelano problemi di dati, separazione forzata di stili di programmazione di preoccupazioni, ecc.

A che punto l'integrazione continua si ripaga da sola?

EDIT: questi sono stati i miei risultati

Il set-up era CruiseControl.Net con Nant, in lettura da VSS o TFS.

Ecco alcuni motivi di errore, che non hanno nulla a che fare con la configurazione:

Costo dell'investigazione : il tempo impiegato per verificare se una luce rossa è dovuta a una vera incongruenza logica nel codice, nella qualità dei dati o in un'altra fonte come un problema di infrastruttura (ad esempio, un problema di rete, una lettura del timeout dal controllo del codice sorgente, il server di terze parti è inattivo, ecc. ecc.)

Costi politici sull'infrastruttura : ho preso in considerazione l'esecuzione di un controllo "infrastruttura" per ciascun metodo nell'esecuzione del test. Non ho avuto soluzione al timeout tranne che per sostituire il server di build. La burocrazia ha impedito la sostituzione del server.

Costo dei test delle unità di fissaggio : una luce rossa a causa di un problema di qualità dei dati potrebbe essere un indicatore di un test unitario scritto male. Pertanto, i test delle unità dipendenti dai dati sono stati riscritti per ridurre la probabilità di una luce rossa a causa di dati errati. In molti casi, i dati necessari sono stati inseriti nell'ambiente di test per essere in grado di eseguire con precisione i test unitari. Ha senso dire che rendendo i dati più robusti, il test diventa più solido se dipende da questi dati. Certo, questo ha funzionato bene!

Costo della copertura, ovvero test di unità di scrittura per codice già esistente : c'era il problema della copertura del test unitario. C'erano migliaia di metodi che non avevano test unitari. Quindi, sarebbe necessario un numero considerevole di giorni uomo per crearli. Poiché sarebbe troppo difficile fornire un caso aziendale, è stato deciso che i test unitari sarebbero stati utilizzati per qualsiasi nuovo metodo pubblico in futuro. Quelli che non avevano un test unitario erano definiti "potenzialmente a infrarossi". Un punto intestinale qui è che i metodi statici erano un punto controverso su come sarebbe stato possibile determinare in modo univoco come un metodo statico specifico avesse fallito.

Costo delle versioni personalizzate : gli script Nant vanno solo oltre. Non sono così utili per, ad esempio, le build dipendenti da CMS per EPiServer, CMS o qualsiasi distribuzione di database orientata all'interfaccia utente.

Questi sono i tipi di problemi che si sono verificati sul server di generazione per le esecuzioni di test orari e le build QA durante la notte. Mi rendo conto che questi non sono necessari in quanto un master di costruzione può eseguire queste attività manualmente al momento del rilascio, in particolare, con una band one man e una piccola build. Quindi, le build a step singolo non hanno giustificato l'uso di CI nella mia esperienza. Che dire delle build più complesse e multistep? Questi possono essere difficili da costruire, specialmente senza uno script Nant. Quindi, pur avendo creato uno, questi non avevano più successo. I costi per risolvere i problemi di luce rossa hanno superato i benefici. Alla fine, gli sviluppatori hanno perso interesse e hanno messo in dubbio la validità del semaforo rosso.

Avendo dato una buona prova, credo che l'IC sia costoso e ci sia un sacco di lavoro ai margini invece di portare a termine il lavoro. È più economico impiegare sviluppatori esperti che non fanno confusione con grandi progetti piuttosto che introdurre e mantenere un sistema di allarme.

Questo è il caso anche se questi sviluppatori se ne vanno. Non importa se un bravo sviluppatore se ne va perché i processi che segue assicurano che egli scriva le specifiche dei requisiti, le specifiche di progettazione, rispetti le linee guida sulla codifica e commenta il suo codice in modo che sia leggibile. Tutto questo è recensito. Se questo non accade, il suo capo squadra non sta facendo il suo lavoro, che dovrebbe essere raccolto dal suo manager e così via.

Perché CI funzioni, non è sufficiente scrivere solo test unitari, tentare di mantenere una copertura completa e garantire un'infrastruttura funzionante per sistemi di dimensioni considerevoli.

La linea di fondo: Ci si potrebbe chiedere se la correzione di tanti bug prima del rilascio sia persino auspicabile da una prospettiva aziendale. CI richiede molto lavoro per catturare una manciata di bug che il cliente potrebbe identificare in UAT o la società potrebbe essere pagata per il fixing come parte di un contratto di assistenza clienti quando il periodo di garanzia scade comunque.

    
posta CarneyCode 02.04.2011 - 11:56
fonte

12 risposte

43

Configurare un motore CI è come impostare un allarme antincendio in una casa.

Nella mia mente i benefici non sono correlati con molti sviluppatori, ma con una grande base di codice. Il motore CI fa attivamente tutto il lavoro noioso che non vuoi fare da solo, e fallo ogni volta.

Se rompi un modulo remoto che non hai toccato a lungo, ti viene detto immediatamente. Non solo per la compilazione, ma anche per la funzionalità se hai impostato i test unitari.

Si noti inoltre che se si consente a CI-engine di eseguire tutti il lavoro noioso, inclusa la configurazione dei programmi di installazione ecc., non è necessario farlo manualmente. È sufficiente controllare la fonte e attendere che il prodotto finito sia stato costruito nella posizione standard. (MODIFICA: il motore CI funziona anche in un ambiente ben definito, evitando configurazioni specifiche dello sviluppatore, garantendo la riproducibilità)

Anche questo fa parte della garanzia della qualità.

EDIT: Dopo aver scritto quanto sopra, ho avuto esperienza con lo strumento di costruzione Maven per Java. In sostanza, questo ci consente di mantenere la configurazione CI completa all'interno del progetto (con pom.xml), semplificando così la manutenzione dell'installazione CI e / o la migrazione a un altro motore CI.

    
risposta data 02.04.2011 - 12:36
fonte
33

Non è il numero di sviluppatori, ma quanti passaggi ci vogliono per ottenere da 1 an (incluso), dove 1 & n sono ...

1: Controllo del codice
e
n: avere pacchetti installabili \ deployabili

Se n < 2 tu forse non hai bisogno di IC in caso contrario, hai bisogno di un elemento di configurazione

Aggiorna
Dalla lettura delle tue scoperte posso solo concludere che ti sei avvicinato a CI dalla direzione sbagliata e per i motivi sbagliati.

    
risposta data 02.04.2011 - 14:02
fonte
10

Può valere lo sforzo anche per una squadra di uno. Questo è particolarmente vero quando stai sviluppando un codice multipiattaforma e devi assicurarti che le tue modifiche funzionino su entrambe le piattaforme. Ad esempio, il compilatore C ++ di Microsoft è più accettabile di GCC, quindi se sviluppi in Windows ma devi supportare anche Linux, avere un sistema CI ti dice quando la tua build si rompe su Linux è di grande aiuto.

Alcuni sistemi CI sono abbastanza facili da configurare, quindi il sovraccarico non è poi così grande. Prova Jenkins o Hudson per esempio.

    
risposta data 02.04.2011 - 16:46
fonte
4

Come dici tu, c'è un costo generale per installarlo e mantenerlo in esecuzione.

Ma la domanda su dove si trova il break even point non è una funzione di quante persone hai nel tuo team, ma piuttosto una funzione della lunghezza del tuo progetto.

Detto questo, c'è una parte del costo di installazione che è possibile utilizzare in tutti i progetti futuri, quindi a lungo termine i costi generali potrebbero avvicinarsi allo zero.

    
risposta data 02.04.2011 - 12:38
fonte
3

Ho creato Jenkins questa settimana per creare un piccolo progetto .NET su cui sto lavorando. L'ho integrato con il mio controllo del codice sorgente Git in modo tale da attivare una build su ogni commit. Ho integrato i test unitari nella build. Ho integrato l'analisi statica sotto forma di violazioni FxCop e StyleCop.

Ora ogni volta che effettuo il check-in, controlla tutto il mio codice, lo crea, incrementa il numero di versione su tutti gli assembly, lo verifica, lo analizza per le violazioni FxCop e StyleCop, archivia la build e registra i risultati in un numero di grafici quindi ho visibilità nel tempo dei risultati dei test e delle violazioni.

L'operazione da zero richiede circa un'ora (forse un giorno con Google se non l'hai già fatto prima). Non costa nulla perché tutti gli strumenti sono disponibili gratuitamente.

Se, come e quando il progetto si costruisce, ho un'infrastruttura di alta qualità che crescerà con esso senza alcun costo. Se o quando nuovi sviluppatori si uniranno al progetto, posso ottenere una visibilità totale sul loro lavoro e sul loro impatto sul progetto senza alcun costo.

Quindi l'unico scenario che posso vedere è che CI non vale la pena di essere o per un progetto che richiederà un giorno o due e quindi non verrà mai rivisitato, o uno in una lingua in cui non ci sono strumenti esistenti / gratuiti disponibili e il costo di acquistarli è sproporzionato al lavoro.

    
risposta data 04.02.2012 - 13:06
fonte
1

Se riesci a verificare tutti gli aspetti del progetto dopo ogni modifica, non hai bisogno di elementi di configurazione.

In tutti gli altri casi, è una vittoria netta.

    
risposta data 02.04.2011 - 16:37
fonte
1

L'overhead è minimo. Direi che per un progetto uomo sarebbe utile. Una volta raggiunti i due è inestimabile.

Sono d'accordo sul fatto che per un progetto di un uomo se si dispone di un "one step build / verify", allora si potrebbe andare bene con l'integrazione continua, ma in quei casi si è fatto gran parte del duro lavoro per configurare CI in modo beh, mettilo in un sistema formale (CC, Hudson, TeamCity, ecc.)

    
risposta data 02.04.2011 - 18:54
fonte
1

La questione di quando l'IC paga per sé è difficile da rispondere su un nuovo progetto.

Su un progetto esistente, è molto più facile da vedere. Se trovi un bug critico nel pezzo di sviluppo della catena di approvvigionamento, sai che il problema esiste il prima possibile. Il costo per il fixing è ora il più basso. Se il problema si verifica in qualsiasi ambiente sopra lo sviluppo, il costo è più elevato.

Ora, la gestione potrebbe decidere di rilasciare un bug, ma questo è un rischio commerciale. Almeno ora può essere mitigato attraverso quella valutazione del rischio, piuttosto che le telefonate a tarda notte / panico, che, se fossero fatturate a tariffe orarie, finiscono per essere molto costoso.

Un'altra cosa da considerare in termini di costi. Come è il tuo dipartimento di QA? È un test manuale? Se vai a CI, potresti essere in grado di ridurre i costi generali del QA automatizzando tali script rispetto alla tua casella di sviluppo. Potresti essere in grado di ridurre il numero di persone QA che supportano il tuo progetto coinvolgendoli nella fase CI.

    
risposta data 02.04.2011 - 23:44
fonte
1

L'IC è sempre sempre la pena: il senso di sicurezza che ti dà ti consente di lavorare a un ritmo più veloce di quello che sarebbe possibile altrimenti. Il problema che hai sembra ruotare attorno ai test unitari. Sono d'accordo che i test unitari sono molto costosi, ma penso anche che (per molte cose) sono l'opzione meno peggio che abbiamo. Personalmente, e per il tipo di sistemi su cui tendo a lavorare, giuro su test a livello di sistema che operano su una combinazione di casi patologici reali (e forse sintetici); È più economico dei test unitari e arriva in quegli angoli difficili da raggiungere del tuo universo concettuale: "Unknown Unknowns" di Donald Rumsfeld.

    
risposta data 06.01.2012 - 15:45
fonte
0

Usalo sempre, indipendentemente dalle dimensioni della squadra. Se sei solo tu ad esempio, chissà, potresti star codificando dal tuo computer portatile a Starbucks e poi continuare dal tuo sistema più pesante a casa?

L'overhead non è poi così male.

    
risposta data 02.04.2011 - 23:04
fonte
0

Uno. Sì, uno è sufficiente per iniziare a utilizzare l'integrazione continua.

    
risposta data 21.02.2012 - 20:47
fonte
0

Non è questione di quanti sviluppatori, ma di

a. Quanto tempo risparmi utilizzando l'automazione e quanto spesso.

  • Tempo risparmiato sulla costruzione dopo integrazioni, esecuzione di test automatici e creazione di configurazioni * frequenza di check-in = percentuale di tempo risparmiato.

b. Quante versioni / filiali / prodotti hai.

  • Se uno sviluppatore lavora su due rami diversi, il tempo risparmiato viene raddoppiato, poiché ogni ramo richiederebbe costruzione, test e confezionamento.
risposta data 22.05.2012 - 12:55
fonte

Leggi altre domande sui tag