Zibil-kod (spaghetti code, qarmaqarşıq, big ball of mud) — oxumaq, saxlamaq və dəyişmək çətin olan, nizamsız, pis strukturlaşdırılmış mənbə kodudur. Termin asılıqların bir-birinə qarışdığı, vahid arxitekturanın olmadığı və təmiz kod prinsiplərinin pozulduğu kod bazasını təsvir edir. TIOBE Index, 2025 məlumatına görə, yüksək texniki borc səviyyəsi olan layihələr yeni funksionallıq əlavə etmək üçün yaxşı təşkil olunmuş kod bazaları ilə müqayisədə orta hesabla 4 dəfə çox vaxt tələb edir.
Əsas məqamlar
Zibil-kod (həmçinin spaghetti code, qarmaqarşıq, big ball of mud) — strukturunu itirmiş və qarışıq asılılıqlar topasına çevrilmiş kod bazası üçün metaforadır. Belə koda hər hansı dəyişiklik bir yerdə başqa bir yeri sındırır, yeni funksionallıq əlavə etmək isə riskli bir işə çevrilir.
Mobil inkişafda zibil-kod xüsusilə tənqidi əhəmiyyət daşıyır: "qarmaqarşıq" üzərində qurulmuş tətbiq yavaşlamağa, köhnə cihazlarda çökməyə başlayır və code review-dən çətin keçir. Arxitekturasız iOS layihəsi qeyri-sabitlik səbəbindən App Review-dan keçməyə bilər.
Stripe məlumatına görə, proqramçılar iş vaxtının 42%-ə qədərini mövcud kodu oxumaq və anlamaq üçün sərf edir. Zibil-kod olan layihələrdə bu göstərici 60%-i keçir ki, bu da inkişafı son dərəcə səmərəsiz edir.
Spaghetti code (spagetti kod) — 1970-ci illərdə yaranan ən qədim termindir. O, nizamsız idarəetmə keçidləri olan, dolaşıq makaronu xatırladan kodu təsvir edir.
Big ball of mud (böyük palçıq topu) — 1997-ci ildə Brian Foot və Joseph Yoder tərəfindən aydın arxitekturasız, xaotik şəkildə "böyüyən" sistemləri təsvir etmək üçün təqdim edilmiş termindir.
Zibil-kod yeni funksiyaların bazara çıxarılmasını ləngidir. Komanda vaxtını dəyər yaratmağa deyil, mövcud kodun necə işlədiyini anlamağa və heç nəyi sındırmamağa sərf edir.
McKinsey məlumatına görə, aşağı kod keyfiyyəti olan şirkətlər məhsulun saxlanmasına 20-40% daha çox xərcləyir, yeni funksiyaların çıxarılma sürəti isə yüksək kod keyfiyyəti olan şirkətlərlə müqayisədə 2-3 dəfə aşağıdır.
Tanımaq zibil-kodu bir sıra obyektiv əlamətlər üzrə mümkündür, onların bir hissəsi avtomatik ölçülür. Əlamətlər nə qədər çox uyğun gəlirsə — problem bir o qədər ciddidir.
Sənayedə Halstead Complexity, Maintainability Index və Technical Debt Ratio kimi kod keyfiyyəti metrikaları istifadə olunur. Bu metrikaları bilmək kod bazasının vəziyyətini obyektiv qiymətləndirməyə kömək edir.
Ən geniş yayılmış əlamət — təkrarlanan kod blokları. Ümumi funksiya ayırmaq əvəzinə proqramçılar kodu minimal dəyişikliklərlə bir yerdən digərinə köçürürlər.
Normal səviyyə 5%-ə qədər təkrarlanma hesab olunur. Əgər təkrarlanma 15%-i keçirsə — bu ciddi siqnaldır. Simian və PMD Copy Paste Detector kimi alətlər copy-paste-i avtomatik aşkar etməyə kömək edir.
Metod 100 sətirdən uzundursa — bu zibil-kodun aşkar əlamətidir. Belə metod adətən çox şey edir və tək məsuliyyət prinsipini (Single Responsibility) pozur.
Siniflər 1000 sətirdən çox kodla da problemlidir. Onlar əlaqəsiz funksionallıq ehtiva edir, bu da test etməni, anlamağı və kodu dəyişdirməyi çətinləşdirir.
Siklotomik mürəkkəblik (Cyclomatic Complexity) — koddakı müstəqil yolların sayını göstərən metrikadır. 15-dən yuxarı dəyər problemli hesab olunur.
Mürəkkəbliyi 30-dan yuxarı olan metodlar — "fəlakət zonası". Onlar çoxlu budaqlanma ehtiva edir, onları test etmək və dərindən analiz olmadan anlamaq mümkün deyil.
Zibil-kod "öz-özünə" yaranmır — o, həmişə komandadakı müəyyən proseslərin və qərarların nəticəsidir. Səbəbləri anlamaq gələcəkdə onun yaranmasının qarşısını almağa imkan verir.
JetBrains Developer Ecosystem 2024 məlumatına görə, proqramçıların 67%-i vaxt çatışmazlığı səbəbindən bacardıqlarından daha pis kod yazdıqlarını etiraf edir. Bu, texniki borcun yığılmasının əsas səbəbidir.
Ən tez-tez rast gəlinən səbəb — sıxılmış müddətlərdir. Komanda "nə alınsa" kodu yazır, əsas odur ki, deadline-a çatsın. Refaktoring, testlər və code review "sonraya" saxlanılır.
Problem ondadır ki, "sonra" heç vaxt gəlmir — növbəti sprintdə yeni deadlinelar yaranır və texniki borc qar topu kimi yığılır.
Kod-rewyu olmadan hər proqramçı öz üslubunda yazır, öz nümunələrindən istifadə edir və öz "mina"larını qoyur. Zamanla kod bazası vahidliyini itirir.
Hər pull request üçün məcburi kod-rewyu tətbiq edən komandalar SmartBear 2024 araşdırmasına görə istehsalatda 60% daha az defektə malikdir.
Əgər layihə aydın arxitektura olmadan başlayırsa, zibil-kod qaçılmazdır. İlk "sürətli həllər" sonradan üzərində keyfiyyətli bir şey qurmaq çətin olan təməl qoyur.
Mobil inkişafda arxitektura seçimi (MVC, MVP, MVVM, Clean Architecture) kod yazmağa başlamazdan əvvəl qəbul edilmiş şüurlu qərar olmalıdır, təkamülün nəticəsi deyil.
Zibil-kodla mübarizə sistematik yanaşma və bütün komandanın intizamını tələb edir. Problemi həll edəcək tək bir alət və ya təcrübə yoxdur — tədbirlər kompleksi lazımdır.
Əsas prinsip — zibil-kodu yazma mərhələsində buraxmamaq, sonra düzəltmək deyil. Profilaktika həmişə mövcud "qarmaqarşığın" refaktoringindən daha ucuzdur.
Vahid kod üslubu — zibil-kodun qarşısını almaq üçün əsasdır. Kodlaşdırma standartları (Code Style) sənədləşdirilməli və linterlər tərəfindən avtomatik yoxlanılmalıdır.
iOS üçün SwiftLint, Android üçün Ktlint və Detekt istifadə olunur. Konfiqurasiya faylında qaydaların qurulması standartları pozan pull requestləri avtomatik rədd etməyə imkan verir.
Refaktoring — səhvləri düzəltmək deyil, kodun strukturunu onun davranışını dəyişmədən yaxşılaşdırmaqdır. O, inkişaf prosesinin müntəzəm hissəsi olmalıdır, ayrıca layihə deyil.
Hər sprintin 20% vaxtını ayırmaq tövsiyə olunur refaktoringə və texniki borcun ödənilməsinə. Bu, "qarmaqarşığın" yığılmasının qarşısını alır və komandanın sürətini uzunmüddətli perspektivdə qoruyur.
Hər pull request ən azı bir proqramçı tərəfindən review-dən keçməlidir. Kod-rewyu təkcə səhvləri deyil, həm də arxitektura pozuntularını, üslub problemlərini və potensial zibil-kod mənbələrini aşkar edir.
Yaxşı təcrübə — copy-paste, metodların uzunluğu, siklotomik mürəkkəblik və test əhatəsinin yoxlanılmasını əhatə edən kod-rewyu checklistidir. Checklist olmadan rəyçilər problemlərin 50%-ə qədərini qaçırır.
Müasir kod analizi alətləri zibil-kodu avtomatik aşkar etməyə, texniki borcu ölçməyə və keyfiyyəti nəzarətdə saxlamağa imkan verir. Bu alətlərin CI/CD pipeline-a inteqrasiyası davamlı monitorinq təmin edir.
Ən azı bir statik analizator və bir metrik ölçmə alətindən istifadə tövsiyə olunur. Əlavə olaraq kod keyfiyyəti haqqında məlumatların aqreqasiyası üçün platforma qoşmaq olar.
SonarSource məlumatına görə, statik analizdən istifadə edən komandalar tətbiqdən sonra ilk rübdə istehsalatdakı səhvlərin sayını 30% azaldır.
CodeClimate və Codacy — kod keyfiyyəti metrikalarını aqreqasiya edən, dinamikanı izləyən və ən çox texniki borcu olan faylları — "isti nöqtələri" göstərən platformalardır.
Android layihələri üçün Detekt 100-dən çox daxili analiz qaydası təqdim edir, o cümlədən siklotomik mürəkkəblik, metod uzunluğu və kod təkrarlanması yoxlamaları.
Tez-tez verilən suallar
Bir neçə ildir inkişaf edən böyük layihədə zibil-koddan tamamilə qurtulmaq praktiki olaraq mümkün deyil. Məqsəd "təmiz kod" deyil, inkişafa mane olmayan nəzarət edilən texniki borc səviyyəsidir.
Cari vəziyyətin ölçülməsi ilə başlayın: statik analizatoru işə salın, metrikaları əldə edin və ən problemli modulları müəyyənləşdirin. Sonra sistematik şəkildə, sprint-sprint, ən kritik hissələri refaktor edin.
Testlər olmadan refaktoring — bu refaktoring deyil, kor-koranə kodun yenidən yazılmasıdır. Testlər olmadan davranışın dəyişmədiyinə əmin olmaq mümkün deyil. Legacy kodun refaktoringinə başlamazdan əvvəl mütləq onu xarakterizə testləri ilə əhatə edin.
Hər pull request üçün gate-nəzarət tətbiq edin: linter ilə avtomatik yoxlama, kod-rewyu keçmə, müəyyən edilmiş həddən aşağı olmayan test əhatəsi. Heç bir kod bütün gate-lərdən keçmədən əsas budağa düşməməlidir.
Texniki borcun dəyərini pulla göstərin: zibil-kodun saxlanmasına nə qədər saat sərf olunur, onun səbəbindən nə qədər səhv yaranır, yeni funksiyaların çıxarılmasını necə ləngidir. SonarQube Technical Debt Ratio metrikaları inandırıcı arqumentdir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun