“İşləyir — toxunma” prinsipi — bu, işləyən kodu ciddi səbəb olmadan dəyişdirməməyi tövsiyə edən yazılmamış proqramlaşdırma qaydasıdır, hətta onun strukturu optimal görünməsə belə. Prinsip empirik müşahidəyə əsaslanır: hər hansı dəyişiklik yeni xətanın yaranması riskini daşıyır və refaktorinqin faydası sərf olunan səylərə dəyməyə bilər. Vikipediyanın (2026) məlumatına görə, bu idiom mühəndislikdə, siyasətdə və proqramlaşdırmada dəyişikliklərin idarə edilməsinin konservativ strategiyası kimi geniş istifadə olunur.
Əsas məqamlar
“İşləyir — toxunma” prinsipi (ing. “If it ain't broke, don't fix it”) — bu, proqramçıları kifayət qədər əsas olmadan işləyən koda dəyişiklik etməkdən çəkindirən empirik qaydadır. Prinsipin əsasında sadə statistika dayanır: qüsurların böyük əksəriyyəti məhz mövcud kodu dəyişdirmə prosesində yaranır.
Prinsip doqma deyil — bu, qeyri-müəyyənlik şəraitində qərarlar qəbul etməyə kömək edən bir evristikadır. Kod bazası nə qədər mürəkkəb və qarışıq olarsa, “günahsız” dəyişikliyin heç kimin gözləmədiyi bir şeyi sındırma ehtimalı bir o qədər yüksəkdir.
Araşdırmaya görə, Microsoft korporasiyası (2024), istehsalatdakı bütün kritik insidentlərin təxminən 60%-i yaxşı niyyətlə edilən, lakin real yük şəraitində kifayət qədər test edilməyən son kod dəyişiklikləri ilə bağlıdır.
İdiom “If it ain't broke, don't fix it” XX əsrin ortalarındakı Amerika mühəndislik mədəniyyətinə gedib çıxır. Ən erkən sənədləşdirilmiş istifadə ABŞ Senatının Maliyyə Komitəsində işləyən və həddindən artıq tənzimləməyə qarşı çıxış edən Bert Lensə (1977) aid edilir.
Proqramlaşdırmaya prinsip aparat mühəndisliyindən gəlib, burada işləyən mikrosxemi yenisi ilə əvəz etmək gözlənilməz nəticələrə səbəb ola bilərdi. Proqram təminatı kontekstində bu prinsip proqram sistemlərinin mürəkkəbliyinin artması və legasi kodun yaranması ilə xüsusi yayıldı.
Maraqlıdır ki, proqramlaşdırmada prinsipin əks tərəfi də var — “işləyir, amma toxunmamaq daha yaxşıdır” tez-tez refaktorinqdən imtina üçün bəhanə olur, bu da uzun müddətdə texniki borcun kritik dərəcədə yığılmasına gətirib çıxarır. Thoughtworks konsaltinq şirkətinin (2023) məlumatına görə, layihələrin təxminən 40%-i dəyişikliklərə qarşı həddindən artıq mühafizəkarlıq səbəbindən ciddi problemlərlə üzləşir.
“İşləyir — toxunma” prinsipi xüsusilə səhvin qiymətinin dəyişikliklərin potensial faydasını üstələdiyi müəyyən vəziyyətlərdə aktualdır.
Legasi kodda testlərlə əhatə olunmayan, hər dəyişiklik bir rulet oyunudur. Əgər proqramçı dəyişikliyin qonşu modulları sındırmadığını yoxlaya bilmirsə, ən yaxşı strategiya işləyən koda toxunmamaqdır. İstisna — yalnız kritik səhvlər və ya təhlükəsizlik tələbləridir.
Dayanmanın yolverilməz olduğu və ya səhvin qiymətinin böyük olduğu sistemlərdə — tibbi proqram təminatı, avionika, maliyyə tranzaksiyaları — “işləyir — toxunma” prinsipi de-fakto standartdır. Hər dəyişiklik çoxmərhələli razılaşdırma və testdən keçir.
Əgər buraxılış sabahdırsa və kod işləyirsə — onun arxitekturasını yaxşılaşdırmağa çalışmayın. Yalnız buraxılışın funksionallığına birbaşa təsir edəni dəyişdirin. Refaktorinqi növbəti sprinta təxirə salın (ancaq onu unutmayın).
| Vəziyyət | Prinsipi tətbiq etməli? | Alternativ |
|---|---|---|
| Kod işləyir, amma çirkin | Bəli, testlər yoxdursa | Testlər yazın, sonra refaktorinq |
| Məlum səhvi olan kod | Xeyr | Səhvi testlə düzəldin |
| Təhlükəsizlik zəifliyi | Xeyr | Dərhal düzəldin |
| Köhnəlmiş asılılıq | Qismən | Test edərək yeniləyin |
| Aşağı performans | SLA-dan asılıdır | Profil edin, sonra optimallaşdırın |
Prinsipə “işləyir — toxunma” kor-koranə riayət etmək sonsuz refaktorinqdən az risk daşımır. Əsas təhlükələri nəzərdən keçirək.
Əgər hər proqramçı bu prinsipi rəhbər tutursa, kod bazası tez bir zamanda köhnəlmiş həllərdən, “qoltuq ağaclarından” və qeyri-optimal alqoritmlərdən ibarət “qatlı torta” çevrilir. Gec-tez texniki borc dözülməz olur — hər dəyişiklik həftələrlə analiz tələb edir.
Bəzən riskli görünən dəyişiklik əslində performansı və ya təhlükəsizliyi əhəmiyyətli dərəcədə yaxşılaşdırır. “İşləyir — toxunma” prinsipi ölçülə bilən fayda gətirən dəyişiklikləri — server xərclərini azaltmaq, səhifə yüklənməsini sürətləndirmək, təhlükəsizliyi artırmaq — bloklamamalıdır.
Komanda illərlə kodun müəyyən hissələrinə toxunmadıqda, onların necə qurulduğunu başa düşməyi itirir. Əsas proqramçı gedir — və kod dəstəkləmək imkanı olmayan legasiyə çevrilir. Prinsip layihənin uzunmüddətli dəstəyi nəzərə alınmaqla tətbiq edilməlidir.
Optimal strategiya — prinsipə kor-koranə deyil, konteksti nəzərə alaraq şüurlu şəkildə əməl etməkdir. Refaktorinq lazımdır, amma təhlükəsiz olmalıdır.
Skaut qaydası proqramlaşdırmada: “Kodu tapdığından daha təmiz burax”. Əgər proqramçı modula dəyişiklik edirsə, onun strukturunu yaxşılaşdırmalı, ancaq ağlabatan həddə. Hər şeyi sıfırdan yazmamalı, ən azı oxunmayan dəyişənlərin adlarını dəyişdirməli və şərhlər əlavə etməlidir.
Testlər — “işləyir — toxunma” prinsipini təhlükəsiz tətbiq etməyin yeganə yoludur. Kod testlərlə əhatə olunarsa, hər refaktorinq proqnozlaşdırıla bilən olur: proqramçı kodu dəyişir, testləri işə salır və heç nəyin sınmadığını görür. Testsiz — toxunma. Testlərlə — cəsarətlə refaktor et.
// Nümunə: test əhatəsi altında təhlükəsiz refaktorinq
class PriceCalculator {
fun calculatePrice(basePrice: Double, discount: Double): Double {
// Köhnə, amma işləyən kod
return basePrice - (basePrice * discount / 100.0)
}
}
// Reqressiyadan qoruyan test
class PriceCalculatorTest {
fun testCalculatePrice() {
val calc = PriceCalculator()
assertEquals(90.0, calc.calculatePrice(100.0, 10.0))
}
}
Bu nümunə düzgün yanaşmanı göstərir: əvvəlcə test, sonra refaktorinq. Test keçərsə — dəyişiklik təhlükəsizdir. “İşləyir — toxunma” prinsipi “testlər altında işləyir — cəsarətlə refaktor et”ə çevrilir.
Real ssenariləri nəzərdən keçirək ki, “işləyir — toxunma” prinsipi həm xilasedici, həm də dağıdıcı oldu.
Proqramçı aşkar etdi ki, tarixlərin işlənməsi kodunda YYYY əvəzinə DD/MM/YY formatı istifadə olunur. Kod 2000-ci ildən 2025-ci ilə qədər düzgün işləyirdi. “Düzəltmək” istəyinə baxmayaraq — kodu olduğu kimi buraxdı, yalnız şərh yazmaqla kifayətləndi. 2026-cı ildə şirkət sistemi yenilədi və yeni həll artıq əsrləri düzgün emal edirdi. Vaxtından əvvəl dəyişiklik işləyən məntiqi sındıra bilərdi.
Mühəndis qərar verdi köhnə, lakin işləyən məlumat idxalı kodunu “yaxşılaşdırmaq” üçün onu müasir kitabxana ilə əvəz etsin. O, köhnə kitabxananın sənədləşdirilməmiş xüsusi bir kənar hadisəni emal etdiyini nəzərə almadı. Buraxılışdan sonra — kütləvi məlumat itkisi. “İşləyir — toxunma” prinsipi pozuldu və səhvin qiyməti komandanın iki həftəlik bərpa işi oldu.
Tez-tez verilən suallar
Xeyr, prinsipə kor-koranə riayət etmək texniki borcun yığılmasına və layihə çevikliyinin itirilməsinə gətirib çıxarır. Optimal yanaşma — dəyişiklik riskinin potensial faydadan üstün olduğu vəziyyətlərdə şüurlu tətbiqdir. Hər bir halı fərdi qiymətləndirmək vacibdir.
Prinsipi təhlükəsizlik zəiflikləri, istifadəçi məlumatlarına təsir edən kritik səhvlər aşkar edildikdə və məlumat zəiflikləri olan asılılıqları yeniləmək zərurəti yarandıqda pozmaq lazımdır. Bu hallarda hərəkətsizlik riski dəyişiklik riskindən yüksəkdir.
Yeganə təhlükəsiz yol — əvvəlcə kodu testlərlə əhatə etmək (xarakterizə testləri), sonra refaktorinqi kiçik addımlarla daimi testlə yerinə yetirməkdir. Test qorunması olmadan “işləyir — toxunma” prinsipi ciddi tətbiq edilməlidir.
Təcrübəli proqramçılar prinsipi şüurlu şəkildə pozurlar — onlar cari tətbiqin qeyri-aşkar nəticələrini görürlər: gələcək səhvlər, performans darboğazları, miqyaslama problemləri. Onların qərarları təcrübəyə əsaslanır, dəyişiklik qorxusuna deyil.
Tarazlıq test mədəniyyəti və kod review vasitəsilə əldə edilir. Kod testlərlə əhatə olunarsa, refaktorinq təhlükəsizdir. Yoxdursa — hər dəyişiklik minimal zəruri olmalıdır. “İşləyir — toxunma” prinsipi dəyişikliklərə qadağa deyil, şüurluluq tələbidir.
Yekun
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