Domanda

Posso pensare a molte buone ragioni per usarlo; tuttavia, quali sono gli svantaggi?

(Oltre all'acquisto di un altro server)

Quali sono alcuni vantaggi nell'usare una build giornaliera invece di essa?

È stato utile?

Soluzione

(Vale la pena notare che per "integrazione continua" intendo automatizzato integrazione con un automatizzato processo di costruzione e automaticamente esegue test e < strong> automaticamente rileva il fallimento di ogni pezzo.

Vale anche la pena notare che "integrazione continua" significa solo un trunk o un server di prova. Non significa "spingere ogni modifica in tempo reale".

Esistono molti modi per sbagliare l'integrazione continua.


Non riesco a pensare a nessun motivo per non eseguire test di integrazione continui. Suppongo che suppongo che "integrazione continua" include test. Solo perché si compila non significa che funzioni.

Se la compilazione e / o i test impiegano molto tempo, l'integrazione continua può diventare costosa. In tal caso, esegui i test ovviamente correlati alla modifica prima del commit (strumenti di analisi della copertura, come Devel :: CoverX :: Covered può aiutarti a scoprire quali test vanno con quale codice), esegui i test di integrazione dopo il commit usando qualcosa come SVN :: Notify e avvisa gli sviluppatori se falliscono. Archivia i risultati del test usando qualcosa come Smolder . Ciò consente agli sviluppatori di lavorare rapidamente senza doversi sedere a guardare le suite di test in esecuzione, pur rilevando errori in anticipo.

Detto questo, con un po 'di lavoro puoi spesso accelerare il tuo processo di compilazione e test. Molte volte i test lenti sono il risultato di ogni test che deve fare troppe impostazioni e smontaggi puntando verso un sistema troppo accoppiato che richiede che l'intero sistema sia configurato solo per testare un piccolo pezzo.

Il disaccoppiamento spesso aiuta, suddividendo i sottosistemi in progetti indipendenti. L'ambito più piccolo consente una comprensione più semplice e build e test più rapidi. Ogni commit può eseguire un build completo e test senza disturbare il programmatore. Quindi tutti i sottoprogetti possono essere raccolti insieme per eseguire test di integrazione.

Uno dei principali vantaggi dell'esecuzione della suite di test su ogni commit, anche se è dopo il commit, è sapere cosa ha rotto la build. Invece di "qualcosa che abbiamo fatto ieri ha rotto la build", o peggio "quattro cose che abbiamo fatto ieri hanno rotto la build in diversi modi e ora dobbiamo districarla" è la "revisione 1234 che ha rotto la build". Devi solo esaminare quella revisione per trovare il problema.

Il vantaggio di fare una build giornaliera è che almeno sai che c'è una build completa e pulita che si svolge ogni giorno. Ma dovresti farlo comunque.

Altri suggerimenti

Non credo ci siano aspetti negativi. Ma per il bene dell'argomento, ecco Articolo di Eric Minick su UrbanCode (" Si tratta di test non build. ") Critica gli strumenti basati su Il lavoro di Martin Fowler dicendo che non lasciano abbastanza tempo per i test.

" Per avere davvero successo in CI, Fowler afferma che la build dovrebbe essere autotest e che questi test includono sia test unitari che end-to-end. Allo stesso tempo, la build dovrebbe essere molto veloce - idealmente meno di dieci minuti - perché dovrebbe essere eseguita su ogni commit. Se esiste un numero significativo di test end-to-end, non è realistico eseguirli in fase di compilazione mantenendo l'intero processo in meno di dieci minuti.

Aggiungi la richiesta di un build su ogni commit e i requisiti iniziano a sembrare improbabili. Le opzioni sono il feedback più lento o la rimozione di alcuni test. & Quot;

James Shore ha pubblicato una grande serie di post sul blog sui pericoli di pensare che l'uso di uno strumento CI come CruiseControl significasse un'integrazione continua:

Un pericolo nell'impostazione di un server CI è lo spostamento degli obiettivi, pensando che l'importante sia "mantenere il passaggio della build". al contrario di "garantire la disponibilità di software di alta qualità". Quindi la gente smette di preoccuparsi di quanto tempo durano i test. Quindi impiegano troppo tempo per eseguirli tutti prima del check-in. Quindi la build continua a rompersi. Quindi la build viene sempre interrotta. Quindi le persone commentano i test per far passare la build. E la qualità del software diminuisce, ma hey, la build sta passando ...

Ci sono generalmente due casi in cui ho visto che l'integrazione continua non ha davvero senso. Tieni presente che sono un grande sostenitore di CI e provo a usarlo quando posso.

Il primo è quando il roi non ha senso. Attualmente sviluppo diverse piccole app interne. Le applicazioni sono normalmente molto banali e l'intero ciclo di vita dello sviluppo è di circa una settimana o due. Configurare correttamente tutto per CI probabilmente lo raddoppierebbe e probabilmente non rivedrei mai più quell'investimento. Puoi obiettare che lo riavrò in manutenzione, ma è probabile che queste app vengano scartate man mano che vengono aggiornate. Tieni presente che il tuo compito è probabilmente quello di spedire software, non raggiungere il 100% di copertura del codice.

L'altro scenario di cui ho sentito parlare è che la CI non ha senso se non hai intenzione di fare nulla con i risultati. Ad esempio, se il tuo software deve essere inviato al QA e lo staff del QA può davvero guardare una nuova versione solo un paio di giorni, non ha senso avere build ogni poche ore. Se altri sviluppatori non esamineranno le metriche del codice e cercheranno di migliorarle, non ha senso seguirle. Ammesso che non sia colpa della CI non essere una buona tecnica, è una mancanza della tua squadra disposta ad abbracciare la CI. Tuttavia, l'implementazione di un sistema CI in tale scenario non ha senso.

All'avvio, ci vuole un po 'di tempo per impostare tutto.

Se si aggiungono test, copertura, ispezioni di codice statico, ricerca duplicata, compilazione e distribuzione della documentazione, il processo può richiedere molto tempo (settimane). Successivamente, mantenere la build può essere un problema.

ad esempio, se aggiungi test alla soluzione, puoi fare in modo che la build li rilevi automaticamente in base ad alcuni criteri o devi aggiornare manualmente le impostazioni della build. Il rilevamento automatico è molto più difficile da ottenere. Lo stesso per la copertura. Lo stesso della generazione della documentazione ...

L'unica buona ragione per non fare l'integrazione continua arriva quando hai fatto funzionare il tuo progetto al punto in cui i test di integrazione non avevano identificato alcun difetto da molto tempo e impiegano troppo tempo per eseguire ogni volta che fai una build. In altre parole: hai fatto abbastanza integrazione continua da dimostrare a te stesso che non ne hai più bisogno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top