“İşləyir — toxunma” — bu nədir, prinsipin mahiyyəti və riskləri

Müəllif: IT Sectr Dərc olunub: 2026-07-30 Oxuma vaxtı: 9 dəq

“İş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” — obyektiv zərurət olmadan işləyən kodu dəyişdirməməyi tapşıran prinsip.
  • Əsas səbəb — hər dəyişiklik mövcud problemlərdən daha pis ola biləcək yeni xətalar riski gətirir.
  • Nə vaxt tətbiq etməli — legasi layihələrində, sərt son tarixlərdə və yüksək sabitlik tələbləri olan kritik sistemlərdə.
  • Əsas risk — texniki borcun yığılması və arxitekturanı yaxşılaşdırmaq fürsətlərinin əldən verilməsi.
  • Tarazlıq — prinsip refaktorinq ehtiyacını ləğv etmir, lakin hər dəyişikliyə balanslı yanaşma tələb edir.

“İşləyir — toxunma” prinsipi nədir?

“İş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.

Prinsipin tarixi və mənşəyi

İ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.

Prinsipi nə vaxt tətbiq etməli

“İş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.

Testsiz legasi layihələri

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.

Kritik sistemlər

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.

Sərt son tarixlər

Ə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ətPrinsipi tətbiq etməli?Alternativ
Kod işləyir, amma çirkinBəli, testlər yoxdursaTestlər yazın, sonra refaktorinq
Məlum səhvi olan kodXeyrSəhvi testlə düzəldin
Təhlükəsizlik zəifliyiXeyrDərhal düzəldin
Köhnəlmiş asılılıqQismənTest edərək yeniləyin
Aşağı performansSLA-dan asılıdırProfil edin, sonra optimallaşdırın

Prinsipə riayət etməyin riskləri

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.

Texniki borcun yığılması

Ə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.

Əldən verilmiş optimallaşdırma

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.

Səriştələrin itirilməsi

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.

Qızıl orta: fanatizm olmadan refaktorinq

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ı

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ərin qorunması altında refaktorinq

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.

kotlin
// 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.

Təcrübədən real nümunələr

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.

Xilasedici hal: Y2K bənzəri problem

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.

Dağıdıcı hal: “Yaxşılaşdırma” səbəbindən məlumat itkisi

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

“İşləyir — toxunma” prinsipi həmişə yaxşıdır?

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.

Nə vaxt prinsipi mütləq pozmaq lazımdır?

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.

Legasi kodu risksiz necə refaktor etməli?

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 bu prinsipi niyə tez-tez pozur?

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.

Sabitlik və inkişaf arasında tarazlığı necə tapmaq olar?

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

  • “İşləyir — toxunma” — ciddi səbəb olmadan işləyən kodu dəyişməkdən çəkindirən empirik prinsip.
  • Mənşəyi — XX əsrin ortalarındakı mühəndislik mədəniyyətindən, proqramlaşdırmada risk idarəetmə evristikası kimi populyarlaşıb.
  • Nə vaxt tətbiq etməli — testsiz legasi layihələrində, kritik sistemlərdə və sərt son tarixlərdə.
  • Əsas risk — texniki borcun yığılması, çevikliyin itirilməsi və optimallaşdırma fürsətlərinin əldən verilməsi.
  • Qızıl orta — “testlər altında işləyir — cəsarətlə refaktor et”. Testlər dəyişikliklərin təhlükəsizliyinin yeganə zəmanətidir.
  • Skaut qaydası — kodu tapdığından daha təmiz burax. Hətta kiçik yaxşılaşdırmanın əhəmiyyəti var.
  • Tövsiyə: prinsipi refaktorinqdən imtina üçün bəhanə kimi istifadə etməyin. Hər dəyişikliyin risklərini və faydalarını qiymətləndirərək şüurlu tətbiq edin.

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.

Layihəni müzakirə et

Həm də oxuyun