Ne yaptığımızı bilmiyorsan CI'nin ne olduğunu bilemezsin. 3 parçalı bir sistem hayal edin. Veri toplayan ve veritabanına koyan bir kullanıcı arayüzü var. Veritabanından raporlar yapan bir raporlama sistemi var. Ayrıca, veritabanını izleyen ve belirli kriterler karşılanırsa e-posta uyarıları gönderen bir tür sunucu var.
Uzun zaman önce bu şu şekilde yazılırdı:
- Veri tabanı ve gereksinimler için şema üzerinde anlaşmaya varın - bu haftalar alacaktır, çünkü yakında göreceğiniz gibi mükemmel olması gerekiyordu.
- 3 parçaya 3 dev veya 3 bağımsız dev ekip ata
- Her dev kendi parçası üzerinde çalışacak ve kendi haftalarını veya aylarını kullanarak kendi veritabanı kopyasını kullanarak çalışmasını test edecek.
Bu süre zarfında devs birbirlerinin kodunu çalıştırmaz, başka birinin kodu tarafından yaratılmış olan veritabanının bir versiyonunu kullanmaz. Rapor yazarı yalnızca bir grup örnek veriyi ekleyecektir. Uyarı yazarı, rapor olaylarını simüle eden kayıtları ekleyecektir. GUI yazıcısı, GUI'nin ne eklediğini görmek için veritabanına bakar. Zamanla, devs, bir endeks belirtmemek ya da çok kısa bir alan uzunluğuna sahip olmak ve sürümlerinde bunu "düzeltmek" gibi bir şekilde yanlış olduğunu fark ederdi. Bunun üzerine hareket edebilecek diğerlerine söyleyebilirler, ama genellikle bunlar daha sonra bir listede olur.
Üç bölümün tamamı tamamen kodlandığında ve aygıtları tarafından test edildiğinde ve bazen kullanıcılar tarafından test edildiğinde (onlara bir rapor, ekran veya e-posta uyarısı göstererek) sonra "entegrasyon" aşamasına gelirdi. Bu, çoğu zaman birkaç ayda bütçelenmiştir, ancak yine de devam ederdi. Dev 1 tarafından bu alan uzunluğu değişikliği burada keşfedilecek ve dev kod 2 ve 3'ün devasa kod değişiklikleri ve muhtemelen kullanıcı arabirimi değişiklikleri de yapması gerekiyor. Bu ekstra endeks kendi tahribatına yol açacaktır. Ve bunun gibi. Cihazlardan birine kullanıcı tarafından bir alan eklemesi söylenirse ve yapıldıysa, şimdi diğer ikisinin de eklemesi gereken zaman olurdu.
Bu aşama vahşice acı vericiydi ve tahmin etmek neredeyse imkansızdı. Böylece insanlar "daha sık entegrasyon yapmalıyız" demeye başladı. “Baştan itibaren birlikte çalışmak zorundayız.” “Birimiz bir değişim isteğinde bulunduğunda [o zaman konuştuğumuz şey] diğerleri bunun hakkında bilmek zorunda.” Bazı ekipler, ayrı çalışmaya devam ederken entegrasyon testlerini daha erken yapmaya başladı. Bazı takımlar birbirlerinin kodlarını kullanmaya ve en başından itibaren her zaman çıktı almaya başladı. Ve bu Sürekli Entegrasyon oldu.
Bu ilk hikayeyi abarttığımı düşünebilirsiniz. Bir zamanlar bir şirkette çalışmıştım, temasım beni aşağıdaki kusurlardan muzdarip olan bazı kodları kontrol etmek için mahvetti:
- üzerinde çalışmadığı bir ekran henüz bir şey yapmadı bir düğme vardı
- hiçbir kullanıcı ekran tasarımında (kesin renkler ve yazı tipleri; ekranın varlığı, kabiliyetleri ve 300 sayfalık özelliğin hangi düğmeleri olduğunu) imzalamamıştı.
Done olana kadar işleri kaynak kontrolüne sokmamanız onun düşüncesiydi. Genelde bir ya da iki checkin yaptı. Biraz felsefe farkımız vardı :-)
Ayrıca, ekiplerin bir veritabanı gibi paylaşılan bir kaynakla bağlantısının kesileceğine inanmanın zor olduğunu düşünüyorsanız, aynı yaklaşımın kodlamaya alındığına gerçekten inanmayacaksınız (ancak bu doğru). Arayabileceğim bir fonksiyon yazacak mısın? Bu harika, devam et ve bunu yap, bu arada ihtiyacım olanı kodlayacağım. Aylar sonra, kodumu "entegre edeceğim", böylece API'nizi çağırır ve null'u geçersem patlar benim için artık yıl ve binlerce başka şeyle başa çıkamıyor. Bağımsız çalışmak ve daha sonra bir entegrasyon aşamasına sahip olmak normaldi. Şimdi delilik gibi geliyor.