Proqramlaşdırmada kostıllar — nədir, səbəbləri və nə vaxt haqlıdır

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

“Kostıllamaq” və ya “kostılla dəstəkləmək” — problemi müvəqqəti həll etmək, bug-i bağlamaq və ya funksionallıq əlavə etmək, lakin əsas səbəbi aradan qaldırmamaq və layihənin memarlıq standartlarına uyğun gəlməmək deməkdir. Kostıllar istənilən inkişafda qaçılmazdır: son tarixlər, sistemin natamam anlaşılması və xarici məhdudiyyətlər kompromis qərarlar qəbul etməyə məcbur edir. Refactoring Guru-nın məlumatına görə, praqmatik kostılla texniki borc arasındakı əsas fərq — qərarın şüurlu olması və onun aradan qaldırılması planının mövcudluğundadır. Düzgün müvəqqəti həllərdən istifadə intizam və sənədləşdirmə tələb edir.

Əsas məqamlar

  • Kostıllamaq — əsaslı düzəliş olmadan problemi bağlayan müvəqqəti həll yazmaq
  • Kostıl son tarixlər, sistemin natamam anlaşılması və ya xarici asılılıqlar səbəbindən yaranır
  • Şüurlu kostıl — sənədləşdirilmiş səbəbi və aradan qaldırılması planı olan müvəqqəti həll
  • Texniki borc kostıllar düzəldilmədikdə və koddə əbədi qaldıqda yığılır
  • Kostıllamadan əvvəl ən azı bir alternativ yanaşma nəzərdən keçirin

Proqramlaşdırmada “kostıl” nədir

Kostıl (crutch) — işləyən, lakin “ələyrisə” hazırlanmış proqram həllidir: konkret problemi bağlayır, lakin onun səbəbini aradan qaldırmır, layihənin memarlığına uyğun gəlmir və ətraf mühitin ən kiçik dəyişikliklərində sına bilər. Metafora dəqiqdir — real kostıl kimi, belə kod “getməyə” kömək edir, lakin “ayağı” müalicə etmir.

Proqramçılar “kostılla dəstəkləyirlər” bug-ları, versiya uyğunsuzluqlarını, platforma xüsusiyyətlərini və təcili müştəri tələblərini. Tipik kostıl — kostıl-şərt: əgər iOS 15, boşluq əlavə et; əgər Huawei — düyməni gizlət. Bu cür yoxlamalar çoxalır və kodu platforma və versiya budaqlarından ibarət “qatlı tort”-a çevirir.

Kostıllar müxtəlif miqyasda olur: bir sətirlik kostıl-şərtdən tutmuş, kitabxananın davranışını “düzəldən” bütöv modula qədər. Anlamaq vacibdir ki, kostıl həmişə pis deyil: düzgün əllərdə bu, məhsulu vaxtında buraxmağa imkan verən bir alətdir. Problem kostıl koddə əbədi qaldıqda başlayır.

Kostıllar niyə yaranır: səbəblər və kontekst

Əsas səbəb — ideal həll ilə layihənin real məhdudiyyətləri arasında ziddiyyət. Proqramçı necə düzgün etməyi bilir, lakin vaxt, pul və ya texniki məhdudiyyətlər buna imkan vermir. Nəticədə “sadəcə işləyən” kompromis həll yaranır.

Dörd əsas səbəbi nəzərdən keçirək. Bu səbəbləri anlamaq kostıllara səhv kimi deyil, idarəetmə tələb edən praqmatik alət kimi yanaşmağa kömək edir.

Son tarixlər

Ən çox yayılmış səbəb. Buraxılış sabahdır, bug yalnız konkret modeldə təkrarlanır, memarlıq düzəlişi iki həftə çəkir. Kostıl-şərt bir saat çəkir və problemi bağlayır. Buraxılışdan sonra komanda qayıdıb düzgün yazmağa söz verir. “Müvəqqətidən daha daimi heç nə yoxdur” — məhz belə kostıllar haqqında.

Versiya uyğunsuzluğu

Kitabxana A Android 12 tələb edir, lakin tətbiqiniz Android 10-u dəstəkləyir. Həll — aralıq təbəqə yazmaq, ƏS versiyasını yoxlayan və icra yolunu seçən. Bu kostıldır, çünki kitabxana yenilənəndə aralıq təbəqəni yenidən yazmaq lazım olacaq. Lakin alternativ — kitabxanadan və ya köhnə cihazların dəstəyindən imtina — daha pis ola bilər.

kotlin
// API 29 uyğunluğu üçün kostıl
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    useModernApi()
} else {
    useLegacyFallback()
}

Bug-lu xarici asılılıqlar

Layihənin asılı olduğu kitabxana bug ehtiva edir, lakin onun yenilənməsi həftələr çəkə bilər (PR, kod-icmal, nəşr lazımdır). Gözləmək əvəzinə komanda wrapper yazır, kitabxananın davranışını anında yamalayan. Düzəldilmiş kitabxana versiyası çıxdıqdan sonra wrapper silinir. Silinməzsə — bu artıq memarlıq problemidir.

Sistemin natamam anlaşılması

Legacy-layihədə yeni proqramçı kodun niyə belə işlədiyini anlamır. Bunu anlamaq əvəzinə, mövcud kodun üzərinə yeni şərt əlavə edir. Bu ən təhlükəli kostıl növüdür, çünki müəllif bunun kostıl olduğunu dərk etmir. Yeganə dərman — kod-icmal və komandanın yeni üzvləri üçün cütlük proqramlaşdırmadır.

Kostıl nə vaxt haqlıdır: praqmatik yanaşma

Hər kostıl pis deyil. Real inkişafda mütləq kod təmizliyi əldə edilməz və çox vaxt məqsədəuyğun deyil. Praqmatik yanaşma etiraf edir ki, müvəqqəti həllər prosesin bir hissəsidir, lakin onların şüurlu olmasını, sənədləşdirilməsini və aradan qaldırılmasının planlaşdırılmasını tələb edir. Kostıl biznes tapşırığını təmiz memarlıq həllindən daha sürətli həll etdikdə haqlıdır.

Haqlı kostılın meyarları: konkret problemi bağlayır, sahibi var (kim silinməsinə cavabdehdir) və refaktorinq planı mövcuddur. Üç şərtdən heç olmasa biri yoxdursa — kostıl texniki borca çevrilir. TODO-şərhlər trackerda ticket ilə — sənədləşdirmənin minimal üsuludur.

Haqlı kostıl nümunəsi

Buraxılış budağında kritik bug, sabahkı yerləşdirməyə qədər bağlanmalıdır. Təmiz həll memarlıq refaktorinqi tələb edir və iki həftə çəkəcək. Kostıl — nil yoxlaması əlavə etmək və hotfix kimi göndərmək. Haqlılıq şərtləri: trackerda refaktorinq üçün ticket yaradılıb, məsul şəxs təyin edilib, kostıl şərh ilə qeyd olunub. İki həftədən sonra komanda tapşırığa qayıdır.

swift
// TODO: IT-1234 — remove this crutch after AuthService refactoring
guard let userId = session.user?.id else {
    return Result.failure(.notAuthenticated)
}

Müvəqqəti kostılı memarlıq problemindən necə ayırmaq olar

Şüurlu kostıl ilə memarlıq problemi (texniki borc) arasındakı sərhəd iki parametr üzrə keçir: qərarın şüurlu olması və onun aradan qaldırılması planının mövcudluğu. Kostıl həmişə məlum ömür müddəti olan müvəqqəti həlldir. Texniki borc — diqqətsiz qalmış çoxsaylı kostılların nəticəsidir.

ParametrŞüurlu kostılTexniki borc
ŞüurluluqKomanda bunun müvəqqəti həll olduğunu bilirHeç kim kodun niyə belə olduğunu xatırlamır
SənədləşməTODO, trackerda ticket varŞərh, keçid, təsvir yoxdur
Aradan qaldırma planıRefaktorinq üçün sprint təyin edilib“Nə vaxtsa yenidən yazarıq”
TəsirYerli, yeni funksionallığa mane olmurDəyişiklikləri bloklayır, inkişafı yavaşladır

Kostıl nə vaxt problemə çevrilir

Vəziyyət pisləşir, o zaman ki kostılların sayı kritik kütləni keçir. Hər yeni kostıl sistemin “kövrəkliyini” artırır: bir yerdə dəyişiklik digərini sındırır. Nəticədə inkişaf yavaşlayır, bug-lar çoxalır, yeni proqramçı müəllifin köməyi olmadan kodu başa düşə bilmir. Bu anda kostıllar müvəqqəti həll olmaqdan çıxıb memarlıq probleminə çevrilir.

Kostıl böhranının əlamətləri

Koddə ƏS versiyası, cihaz istehsalçısı və konkret kitabxananın mövcudluğu üçün beş iç-içə yoxlama varsa — bu kostıl deyil, memarlıq problemidir. Bir düzəlişin əlavə edilməsi qonşu modullarda üç reqressiyaya səbəb olursa — kostıllar lokal olmaqdan çıxıb. Kod-icmal “daha bir kostıla” görə mütəmadi olaraq rədd edilirsə — refaktorinq planlaşdırmaq vaxtıdır.

  • Eyni kostıl üç və daha çox yerdə təkrarlanırsa — vahid həll etmək vaxtıdır
  • Kostıl aradan qaldırma planı olmadan üç sprintdən çox yaşayırsa — bu artıq texniki borcdur
  • Yeni proqramçı kodun niyə belə işlədiyini başa düşmürsə — kostıl sənədləşdirilməyib
  • Kostılın silinməsi zəncirvari reaksiya səhvlərinə səbəb olursa — kostıldan asılılıq memarlıq halına gəlib

Kostılların refaktorinqi: strategiya və praktika

Kostılların refaktorinqi — müvəqqəti həllərin memarlıq cəhətdən düzgün olanlarla əvəz edilməsi prosesi. Bu vaxt tələb edir, buna görə prioritetləşdirmə strategiyası lazımdır: bütün kostılları dərhal aradan qaldırmaq lazım deyil. Yaxşı strategiya — hər kostılı iki parametr üzrə qiymətləndirmək: kodun bu sahəsində dəyişiklik tezliyi və istifadəçilərə təsir.

Prioritetləşdirmə strategiyası

Yüksək prioritet — tez-tez dəyişən modullardakı kostıllar (biznes məntiqi, ümumi təyinatlı UI), inkişafı yavaşladan və reqressiyalara səbəb olan. Orta prioritet — nadir dəyişən modullardakı, lakin istifadəçilərə potensial təsiri olan kostıllar (ödəniş emalı, avtorizasiya). Aşağı prioritet — stabil işləyən və dəyişdirilməsi planlaşdırılmayan legacy-koddakı kostıllar.

Addım-addım aradan qaldırma prosesi

Addım 1: inventarlaşdırma — kostıllarla əlaqəli bütün TODO və FIXME-ləri tapın. Addım 2: qiymətləndirmə — hansının hələ də aktual olduğunu müəyyən edin. Addım 3: planlaşdırma — yüksək prioritetdən başlayaraq kostılların refaktorinqini sprinta təyin edin. Addım 4: əvəz etmə — təmiz həll tətbiq edin, kostılı və onun TODO-şərhini silin. Addım 5: yoxlama — testlərin keçdiyinə və reqressiyaların olmadığına əmin olun.

bash
# Find all TODO-crutches in the project
grep -r "TODO\|FIXME\|HACK\|XXX" --include="*.kt" --include="*.swift" .

Yeni kostılların qarşısının alınması

Kostıllarla mübarizənin ən yaxşı yolu onları lazımsız yerə yaratmamaqdır. Kostıl yazmazdan əvvəl özünüzə üç sual verin: ağlabatan vaxtda təmiz həll etmək olarmı? Kostıl olmayan alternativ varmı? Komandanın qayıdıb bunu yenidən yazmağa vaxtı olacaq? Heç olmasa bir suala cavab “xeyr”-dirsə — kodu “dəstəkləməzdən” əvvəl bir daha düşünün.

Tez-tez verilən suallar

Proqramlaşdırmada “kostıllamaq” nə deməkdir?

Kostıllamaq — problemi bağlayan, lakin səbəbini aradan qaldırmayan müvəqqəti həll yazmaq. Kod işləyir, lakin layihənin memarlığına uyğun gəlmir və dəyişikliklər zamanı sına bilər.

Kostıl texniki borcdan nə ilə fərqlənir?

Kostıl — aradan qaldırma planı olan şüurlu müvəqqəti həll. Texniki borc — çoxsaylı unudulmuş kostılların nəticəsi. Kostıl lokal, borc sistematikdir və inkişafı bloklayır.

Koddakı kostıl nə vaxt haqlıdır?

Son tarix kritik olduqda, təmiz həll vaxt tələb edir və kostıl sənədləşdirilib TODO-şərhi və trackerda ticket ilə. Şərt: kostılın yaxın gələcəkdə silinmə planı var.

Kostılı necə düzgün sənədləşdirmək olar?

TODO və ya FIXME əlavə edin, ticket nömrəsi və düzgün həllin qısa təsviri ilə. Nümunə: // TODO: IT-567 — Factory pattern ilə yenidən yaz. Ticketsiz kostıl unudulacaq.

Kostıllanmış kodu necə refaktor etmək olar?

Bütün TODO-ların inventarlaşdırmasını aparın, prioriteti qiymətləndirin, tez-tez dəyişən modullardan başlayın. Kostılı təmiz həll ilə əvəz edin, şərhi silin və testlərlə yoxlayın.

Xülasə

  • Kostıllamaq — əsas səbəbi aradan qaldırmadan problemi bağlayan müvəqqəti həll yaratmaq
  • Kostıllar son tarixlər, versiya uyğunsuzluqları və sistemin natamam anlaşılması səbəbindən yaranır
  • Şüurlu kostıl — alət, şüursuz — texniki borc
  • Hər kostılı sənədləşdirin TODO-şərhi və trackerda ticket ilə
  • Kostıl problemə çevrilir, onu silinməyi unutduqda
  • Refaktorinqi modulun dəyişmə tezliyinə və istifadəçilərə təsirinə görə prioritetləşdirin
  • Kostıl yaratmazdan əvvəl özünüzdən soruşun: onun aradan qaldırılması planı varmı?

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