Non puoi sapere cosa CI sia, a meno che tu non sappia cosa eravamo soliti fare. Immagina un sistema con 3 parti. C'è un'interfaccia utente che raccoglie i dati e li inserisce nel database. C'è un sistema di reporting che crea report dal database. E c'è una sorta di server che controlla il database e invia avvisi via email se determinati criteri sono soddisfatti.
Molto tempo fa questo sarebbe scritto come segue:
- Concorda lo schema per il database e i requisiti: ci vorrebbero settimane perché doveva essere perfetto, perché presto vedrai perché
- Assegna 3 sviluppatori o 3 team indipendenti di sviluppatori, ai 3 pezzi
- Ogni sviluppatore dovrebbe lavorare sul proprio pezzo e testare il proprio pezzo utilizzando la propria copia del database, per settimane o mesi.
Durante questo periodo gli sviluppatori non eseguivano il codice degli altri, né tentavano di utilizzare una versione del database creata dal codice di qualcun altro. Lo scrittore di report dovrebbe semplicemente aggiungere un po 'di dati di esempio. Lo scrittore di allerta avrebbe aggiunto record che simulavano eventi di report. E lo scrittore della GUI guarderebbe il database per vedere che cosa aveva aggiunto la GUI. Col passare del tempo, gli sviluppatori avrebbero capito che le specifiche erano sbagliate in qualche modo, come non specificare un indice o avere una lunghezza di campo troppo breve e "aggiustarlo" nella loro versione. Potrebbero dire agli altri, che potrebbero agire su di esso, ma di solito queste cose andrebbero in un elenco per dopo.
Quando tutte e tre le parti sono state completamente codificate e testate dai loro sviluppatori, e talvolta persino testate dagli utenti (mostrando loro un report, una schermata o un avviso e-mail), allora verrebbe la fase di "integrazione". Questo è stato spesso preventivato in diversi mesi ma sarebbe comunque passato. La modifica della lunghezza del campo da parte di dev 1 verrebbe rilevata qui e richiederebbe gli sviluppatori 2 e 3 per apportare enormi modifiche al codice e probabilmente anche modifiche all'interfaccia utente. Quell'indice extra avrebbe causato il suo stesso caos. E così via. Se a uno degli sviluppatori è stato detto da un utente di aggiungere un campo e lo ha fatto, ora sarebbe il momento in cui gli altri due dovevano aggiungerlo anche.
Questa fase è stata brutalmente dolorosa e praticamente impossibile da prevedere. Quindi la gente ha cominciato a dire "dobbiamo integrarci più spesso". "Dobbiamo lavorare insieme fin dall'inizio." "Quando uno di noi solleva una richiesta di modifica [è così che abbiamo parlato allora] gli altri devono saperlo." Alcuni team hanno iniziato a fare i test di integrazione prima continuando a lavorare separatamente. E alcune squadre iniziarono a usare il codice l'un l'altro e produssero tutto il tempo, fin dall'inizio. E questo è diventato Continuous Integration.
Potresti pensare che sto esagerando con la prima storia. Ho fatto un po 'di lavoro per un'azienda quando il mio contatto mi ha rimproverato per aver controllato un codice che ha sofferto dei seguenti difetti:
- una schermata su cui non stava lavorando aveva un pulsante che non ha ancora fatto nulla
- nessun utente ha firmato il progetto sullo schermo (colori e caratteri precisi, l'esistenza dello schermo, le sue capacità e i pulsanti che aveva nella specifica delle 300 pagine).
Era sua opinione che tu non mettessi le cose nel controllo del codice sorgente finché non fosse FATTO. Di solito faceva uno o due check-in un ANNO. Abbiamo avuto un po 'di differenza di filosofia: -)
Inoltre, se trovi difficile credere che i team siano disconnessi attorno a una risorsa condivisa come un database, non crederai davvero (ma è vero) che sia stato adottato lo stesso approccio al codice. Stai per scrivere una funzione che posso chiamare? È grandioso, vai avanti e fallo, nel frattempo voglio solo indicizzare quello che mi serve. Mesi dopo avrò "integrato" il mio codice in modo che chiami la tua API e scopriremo che esplode se passo null, esplodo se restituisce null (e lo fa molto) restituisce cose troppo grandi per me, non può gestire gli anni bisestili e mille altre cose. Lavorare in modo indipendente e poi avere una fase di integrazione era normale. Ora suona come una follia.