Sürekli Entegrasyon Üzerine

Sürekli entegrasyon (Continuous Integration – CI) özellikle Agile metodolojilerde sürekli duyulan bir terimdir. Kavramsal olarak yazılımın sürekli test (Unit/Integration/Functional) edilerek kırılmaların erken farkedilmesi, geliştirilen yazılımın devamlı bir kalite kontrolden geçmesi anlamına gelir. Yazılım geliştirme süreçlerinde oldukça önemli olan bu süreçlerin otomatize edilmesi ve proje ekibi dahilinde belirli kurallara bağlanılarak kullanılması, yazılımcıların genelde es geçtiği test ve dokümantasyon süreçlerinin de gerçekleştirilebilmesi anlamına gelir.

CI süreci aslında yazılımcıların günlük olarak kullandığı bazı uygulamaların birleştirilmesi sonucu gerçekleştirilebilir. Örneğin Java geliştiriyor ve derleme için maven ya da ant kullanıyorsanız belirli hedefleri belirli zamanlarda çalıştırarak sonuçlarını analiz etmek belki de ölçeğiniz için yeterli bir CI çözümüdür. Tabii ki herkesin CI ihtiyacı farklıdır, örneğimizdeki basit çözüm freelance çalışan kişilerin ihtiyaçlarını basitçe karşılayabilirken geliştirici sayısı arttıkça daha karmaşık çözümler kullanmak gerekecektir. Örneğin dağınık ya da büyük ekiplerde çoğunlukla kullanılan versiyonlama sistemlerinin CI sürecinin başlangıcı ya da tetiği olması gereken senaryolar geliştirilebilir. Süreç sonrasında ortaya çıkan ve snapshot tabir edilen sürümler QA/Test ekibine devredilmek üzere test sunucularına yüklenebilir. Bu tip sistemlerde CI süreci Hudson, CruiseControl, TeamCity gibi bir uygulama ile baştan sona yönetilerek yazılımın genel kalitesi (kod kalitesi, kodun okunabilirliği, bug paternleri, çift kodlamalar, yazılım performansı, testlerin yazılımın ne kadarını kapsadığı) ölçümlenir ve bunların yazılımcılar tarafından düzeltilmesi için gerekli raporlamalar yapılabilir. Aynı şekilde kullanılan versiyonlama uygulamasının kayıtları sayesinde belirlenen yazılımcı eksiklikleri giderilerek hem yazılımcı motivasyonu sağlanır, hem de uygulamanın kalitesi sağlanır.

Tipik CI süreci gündelik olarak şöyle işler:
1 – Tüm yazılımcılar gün sonunda o gün yaptığı işleri sürüm sistemine gönderir.
2 – CI yazılımı yapılan işleri birleştirir.
3 – Derleme öncesi denetimler yapılarak uygulamanın derleme için uygunluğu kontrol edilir.
4 – CI derlemeyi yapar.
5 – Derleme sonrasında ilgili testler gerçekleştirilir.
6 – Testler sonrasında geri kalan raporlar oluşturulur, metrikler belirlenir
7 – Sürüm test sistemlerine otomatik olarak deploy edilir.
8 – İlgili kişiler günlük olarak durumdan haberdar edilir.

Bu maddeler içerisinde ilki hariç herhangi bir kırılma yaşanırsa, örneğin kod içerisinde bug paternlerine rastlanabilir, entegrasyon ya da unit testleri çakılırsa CI sistemi devam etmeyecek ve raporlama yapacaktır. Bu durumda ilgili sürüm sistemi kayıtlarından hata bulunabilir ve hemen giderilmesi sağlanabilir. Bazı durumlarda önceden çalıştığı bilinen kod parçası o gün yapılan değişiklikler yüzünden hata verebilir. Bu tip durumların sonradan (örneğin uygulama canlı sisteme aktarıldığında) ortaya çıkmasının parasal ve zamansal olarak çıkarttığı maliyet CI sayesinde azalacaktır.

Sonuç olarak CI, kendisine saygısı olan yazılımcıların yazılım süreçlerine adapte etmeleri gereken bir süreçtir.


Yorum bırakın