“Derlemeyi bozmak” terimi, kodda yapılan değişikliklerin projenin başarılı bir şekilde derlenmesini veya oluşturulmasını durdurması anlamına gelir. Çoğu geliştirici, pratiğinde en az bir kez bu durumla karşılaşmıştır. Stack Overflow Geliştirici Anketi 2023’e göre, ankete katılan %80 mühendis, bir çalışma deposunda en az bir kez derlemeyi bozduğunu doğrulamaktadır. Bu, ekip geliştirmede en yaygın sorunlardan biridir ve acil düzeltme gerektirir.
Ana noktalar
Derlemeyi bozmak, değişiklikler yaptıktan sonra projenin derlenmeyi durdurması durumudur. CI/CD bağlamında bu, derleme hattının başarısız olduğu ve hiçbir yapıtın oluşturulmadığı anlamına gelir.
Mobil ve web geliştirme dünyasında derleme, kaynak kodun çalıştırılabilir bir dosyaya veya pakete dönüştürülmesi sürecidir. Android için Gradle aracılığıyla APK veya AAB oluşturmak; iOS için Xcode aracılığıyla derlemek; web projeleri için Webpack veya Vite aracılığıyla paketlemektir. Bu aşamaların herhangi birinde derlemeyi bozabilirsiniz.
Modern sürüm kontrol sistemleri ve Jenkins, GitHub Actions, GitLab CI gibi CI/CD araçları, bozuk bir derlemeyi otomatik olarak algılar ve ekibi bilgilendirir. Çoğu projede bir kural vardır: derleme bozuksa, derleme düzeltilene kadar diğer tüm görevlerin önceliği düşürülür.
fun main() {
val message: String = "Build successful"
println(message)
// Bu satır derlemeyi bozar
val number: Int = "not a number"
}
Bu örnekte, Int türündeki bir değişkene bir dize atamak derleme hatasına neden olur. Tür uyuşmazlığı, statik türlü dillerde derlemeyi bozmanın en yaygın nedenlerinden biridir.
Bozuk derlemeye yol açan birkaç hata kategorisi vardır. 2024 yılı GitLab analizine göre, nedenlerin dağılımı aşağıdaki gibidir.
| Kategori | Örnek | Vaka oranı |
|---|---|---|
| Sözdizimi hataları | eksik parantez, yanlış içe aktarma | %35 |
| Bağımlılık sorunları | kütüphane sürümü uyumsuzluğu | %25 |
| Derleme yapılandırması | yanlış kaynak yolu | %20 |
| Birleştirme çatışmaları | yanlış çözülmüş çatışma | %15 |
| Altyapı | CI çalıştırıcı veya önbellek sorunları | %5 |
En sinsi kategori bağımlılık sorunlarıdır. Bir modüldeki kütüphaneyi güncellemek, API veya yöntem davranışı değişirse komşu modülde derlemeyi bozabilir.
Buna karşılık, sözdizimi hataları hızla tespit edilir — derleyici tam satırı ve hata türünü belirtir. Bu nedenle statik türlü diller, derleme kararlılığı açısından dinamik türlü dillere göre daha güvenilir kabul edilir.
Bozuk bir derleme, ekibin üretkenliğini doğrudan etkiler. Derleme başarısız olduğunda, geliştiriciler depodan projenin en son sürümünü alamaz ve CI hattı sonraki tüm değişiklikler için bloke olur.
Atlassian’ın 2023 tarihli bir araştırması, derlemenin dört saatten fazla bozuk kaldığı projelerin, ekibin üretken zamanının ortalama %25’ini kaybettiğini gösterdi. Geliştiriciler, görevlerini tamamlamak yerine sorunu teşhis etmeye yönelmek zorunda kalır.
Üretkenliğin yanı sıra, ekip morali de etkilenir. Derlemeyi bozan geliştirici, meslektaşlarından baskı hisseder. Sağlıklı ekiplerde kural şudur: bozuk derleme için cezalandırma, ancak acil düzeltme talep et. Suçsuz kültür, olayı birinin hatası olarak değil, sistemik bir sorun olarak analiz eden bir yaklaşımdır.
Dağıtık ekiplerde, bozuk bir derleme başka bir zaman dilimindeki meslektaşların çalışmasını bloke edebilir. Avrupa’daki bir geliştirici çıkmadan önce derlemeyi bozarsa, Asya’daki ekip düzeltmeyi beklerken tüm bir iş gününü kaybedebilir.
Bozuk derlemenin önlenmesi, commit’ten önce yerel kontrollerle başlar. Her geliştirici, değişiklikleri göndermeden önce testleri ve derlemeyi çalıştırmalıdır. Ana önleme yöntemleri birkaç seviyeye ayrılmıştır.
İkinci seviye, CI/CD hattı yapılandırmasıdır. Her Çekme İsteği, birleştirmeden önce otomatik derleme ve testleri geçmelidir. Derleme başarısız olursa, PR düzeltilene kadar bloke edilir. Bu yaklaşıma gated commit denir ve çoğu modern projede kullanılır.
Üçüncü seviye, izleme ve istatistiklerdir. Ekipler MTTR (Ortalama Onarım Süresi) metriğini takip eder. Bu gösterge ne kadar düşükse, ekip bozuk derlemeye o kadar hızlı yanıt verir. Hedef değer 30 dakikayı geçmez.
Derleme bozuk olduğunda, ilk adım hangi geliştiricinin son değişiklikleri yaptığını belirlemektir. Git, git bisect aracını sağlayarak ikili arama yoluyla derlemeyi bozan commit’i bulmanıza olanak tanır.
# Bilinen iyi ve kötü commit’lerle bisect başlat
git bisect start
git bisect bad HEAD
git bisect good abc1234
# Git ortadaki bir commit’i kontrol eder
# Derle ve test et, ardından işaretle:
git bisect good # if build passes
git bisect bad # if build fails
# ~log2(n) adımdan sonra git suçluyu gösterir
git bisect reset
Sorunlu commit’i bulduktan sonra iki olası eylem yolu vardır. İlki, düzeltme zaman gerektiriyorsa git revert kullanarak değişiklikleri geri almaktır. Bu, özellikle derleme tüm ekibi bloke ettiğinde en güvenli yaklaşımdır.
İkinci seçenek, yeni bir commit ile acil düzeltmedir. Bu yaklaşım, sorun yerel ve netse tercih edilir. Düzeltmeden sonra değişiklikleri gönderin ve derlemenin başarılı olduğunu onaylayın. Her durumda, derleme kurtarma süresi bir saati geçmemelidir.
Sıkça sorulan sorular
Derlemeyi bozmak, değişiklikler yaptıktan sonra kodun derlenmeyi veya oluşturulmayı durdurması durumudur. Proje, hata düzeltilene kadar çalışmayan bir duruma girer. Bu genellikle sözdizimi hataları, yanlış içe aktarmalar veya bağımlılık sorunlarıyla ilgilidir.
En yaygın neden sözdizimi hatalarıdır: eksik parantezler, yanlış veri türleri veya hatalı içe aktarmalar. İkinci sırada kütüphane sürümü uyumluluk sorunları ve yanlış derleme yapılandırması gelir. Daha nadiren, derleme birleştirme çatışmaları nedeniyle bozulur.
Sorumluluk, derlemeyi bozan değişiklikleri yapan geliştiriciye aittir. Ancak sağlıklı ekiplerde suçsuz kültür yaklaşımı benimsenir — suçlu aramak yerine düzeltme ve önlemeye odaklanılır. Süreçler ve araçlar, bozulma riskini en aza indirmelidir.
Optimum kurtarma süresi 30 dakikayı geçmez. Sorun karmaşıksa, ekibi serbest bırakmak için git revert ile geri alın. Sorunlu commit’i bulmak için git bisect kullanın. Düzeltmeden sonra derlemeyi yeniden çalıştırın.
Bozuk derleme, paylaşılan dala bağımlı olan tüm geliştiricilerin çalışmasını bloke eder. Ekip üretkenliği düşer ve son teslim tarihleri kaçırılır. Uzun süreli derleme kesintisi, değişiklik birikimine ve daha sonra bunları birleştirirken karmaşık çatışmalara yol açabilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun