Vahid 8 / 12

Refaktorinq və Texniki Borc İdarəetmə

Qazanclar:

  • Refaktorinqdən əvvəl cari davranışı ələ keçirən sınaq təhlükəsizlik şəbəkəsi qurmaq imkanı
  • Süni intellektdən kiçik, bir addımlı, davranışı qoruyan transformasiyalar tələb etmək və hər bir addımı təsdiqləmək bacarığı
  • Biznes kontekstində texniki borcları müəyyən etmək və prioritetləşdirmək bacarığı

Refaktorinq kodun xarici davranışını dəyişmədən onun daxili strukturunu təkmilləşdirməkdir: onu daha oxunaqlı, sadə və davamlı etmək. Texniki borc, digər tərəfdən, tez bir həll naminə edilən və zamanla "faizlə" geri ödənilən dizayn kompromisidir - bu gün kəsdiyiniz hər künc sabah yavaşlama və ya səhv kimi geri qayıdacaq. Süni intellekt təkrarlanan və mexaniki refaktorinq tapşırıqlarını sürətləndirən güclü köməkçidir; Lakin refaktorinqin bir qızıl qaydası var və tək AI buna zəmanət verə bilməz: davranış dəyişməməlidir.

Bu bölmədə biz süni intellektlə təhlükəsiz refaktorinqi necə edəcəyimizi öyrənirik: kiçik və geri dönə bilən addımlar, testlərlə qorunma, kod qoxularının aşkarlanması və texniki borcun prioritetləşdirilməsi. Kritik məqam budur: davranışın qorunduğunu sübut edən süni intellektin sözü deyil, keçən testlərdir.

Refaktorinqin Qızıl Qaydası: Davranış Sabit qalır

Refaktorinqi təhlükəli edən şey, "Mən təkmilləşirəm" deyərkən bilmədən davranışı dəyişdirməkdir. Şərti sadələşdirərkən kənar qutunun atılması, döngənin çevrilməsi zamanı sıranın pozulması, funksiyanın bölünməsi zamanı yan təsirin əldən verilməsi - bütün bunlar "təmiz görünən", lakin pozulmuş kod yaradır.

Buna görə də sınaq refaktorinq üçün ilkin şərtdir: dəyişməzdən əvvəl mövcud davranışı ələ keçirən testlərə sahib olmalısınız. Bu testlər “təhlükəsizlik şəbəkəsidir”; Refaktorinq zamanı təsadüfən nəyisə sındırsanız, onlar sizi sındırıb xəbərdar edəcəklər. Əgər testləriniz yoxdursa, əvvəlcə mövcud davranışı düzəldən testlər yazın (5-ci bölmədə öyrəndiyimiz kimi) – bu, AI-nin işə başladığı yerdir.

Diqqət: Test şəbəkəsi olmadan süni intellektlə dəstəklənən refaktorinq səhvlərin ən məkrli mənbələrindən biridir. “Mən davranışı qorudum” demək asandır; Dəyişiklikdən əvvəl və sonra eyni testlərin keçməsi sübutdur.

Addım-addım: Təhlükəsiz Refaktorinq axını

  1. Təhlükəsizlik şəbəkəsini qurun. Refaktor edəcəyiniz kodun cari davranışını tutan testlər olsun; Əgər yoxsa, əvvəlcə onları yazın (və keçdiklərini görün).
  2. Qoxunu adlandırın. Nəyi yaxşılaşdırırsınız və niyə? “Bu funksiya 3 işi görür”, “eyni məntiq 4 yerdə təkrarlanır”, “adlar yanlışdır”.
  3. Kiçik, bir addımlı addımlar istəyin. AI-dən bütün faylı yenidən yazmamaq üçün tək bir çevrilmə (məsələn, sadəcə “bu funksiyanı yarıya bölün”) üçün xahiş edin.
  4. Testləri həyata keçirin. Hər addımdan sonra. Yaşıldırsa, davam edin, qırmızıdırsa, geri götürün.
  5. Fərqi oxuyun. Dəyişikliyin həqiqətən davranışı qoruduğunu sətir-sətir təsdiq edin; Süni intellektin “sadəcə struktur” olduğunu söylədikdə məntiq sürüşməsi ola bilər.
  6. Kiçik parçalara birləşdirin. Böyük birdəfəlik refaktorinq PR-ları həm risklidir, həm də nəzərdən keçirilə bilməz.

Üç mini qutu

Case 1 — 220 sətirli funksiya təhlükəsiz şəkildə bölünür. Bir komandanın 220 sətirdən ibarət sifariş emal funksiyası var idi. Mövcud davranışı əks etdirən ilk 14 test (AI köməyi ilə) yazılmışdı, hamısı keçdi. Sonra funksiya AI ilə addım-addım 5 kiçik funksiyaya bölündü; Hər addımdan sonra testlər aparıldı. Bir addımda iki sınaq pozuldu - AI kənar vəziyyətdə geri dönüşü qaçırdı. Testlər bunu dərhal tutdu və düzəltdi. Şəbəkə olmasaydı, səhv istehsala qədər gedə bilərdi.

2-ci hal - Test şəbəkəsi olmayan fəlakət. Başqa bir tərtibatçı süni intellektlə heç bir sınaq keçirməmiş tarix hesablama modulunu “təmizlədi”. Kod daha yaxşı görünürdü, lakin sıçrayış ilini səhv hesablayırdı; Səhv iki həftə sonra müştəri şikayəti ilə ortaya çıxdı. Zərər refaktorinq zamanı qənaət olunan vaxtdan çox idi. Dərs: test etmədən refaktorinq qumar oyunudur.

İş 3 – Texniki borcun prioritetləşdirilməsi. Komandalardan biri süni intellektə 30 və ya daha çox “təkmilləşdirilə bilən” xal verdi və hər biri “dəyişiklik tezliyi × risk × səy” oxunda topladı. Nəticə cədvəlində nadir hallarda toxunulan çirkin modul əslində aşağı prioritet, tez-tez dəyişən orta mürəkkəblik modulu isə yüksək prioritet idi. Komanda enerjisini lazımi yerə yönəltdi.

Dörd Kopyalana bilən Şablon

Kod qoxusunun aşkarlanması və prioritetləşdirilməsi:

Bu kodda refaktorinq namizədinin "qoxularını" sadalayın: uzun funksiya, təkrarlama (DRYViolation), yanıltıcı ad, dərin yuva vəziyyəti, gizli yan təsir, sehrli nömrə. Hər biri üçün: yer, niyə problem, təklif olunan kiçik addım, təxmin edilən risk (aşağı/orta/yüksək). Hələ kodu DƏYİŞMƏYİN, sadəcə planlaşdırın.{{code}}

Bir addımlı, davranışı qoruyan transformasiya:

SADECE bunu edin: {{tək çevrilmə, məs. Bu funksiyanı 3 kiçik adlandırılmış funksiyaya bölün}}. Görünən davranışı, imzanı və qaytarılan dəyərləri DƏYİŞTİRİN. Dəyişdiyiniz hər şeyin niyə davranışı qoruduğunu 1 cümlə ilə yazın.{{code}}

Refaktordan əvvəl təhlükəsizlik şəbəkəsi (xarakterizasiya testi):

Bu funksiyanın CARİ davranışını əks etdirən testlər yazın (düzgün və ya yox); məqsəd refaktorinq zamanı davranışın dəyişdiyini tutmaqdır. Tipik + kənar girişləri daxil edin. Funksiyanın cari çıxışına əsaslanaraq gözləntiləri yazın.{{funksiya}}

Texniki borc rekordu (arxa plan) yaradılması:

Aşağıdakı qoxu siyahısını prioritetləşdirmə cədvəlinə daxil edin: maddə, təsir sahəsi, dəyişiklik tezliyi (mənim məlumatım: {{...}}), risk, təxmin edilən səy, tövsiyə olunan prioritet. Yüksək təsir + az səy göstərənləri yuxarıya qoyun. {{qoxu_siyahısı}}

Zəif məlumat / Güclü göstəriş

Zəif: "Bu kodu təmizləyin və daha yaxşı edin."
Güclü: "Xarici davranışını və imzasını dəyişmədən bu 90 sətirlik funksiyanı vahid məsuliyyətlə 3 kiçik funksiyaya bölün. Yan təsirləri (DB yazır) cari qaydada saxlayın. Testlərim var, davranış eyni qalmalıdır. Fərqi verin və hər bölünmənin niyə davranışı qoruduğunu bir cümlə ilə izah edin. [kod]"

Güclü versiya; O, vahid spesifik transformasiya tələb edir, açıq şəkildə davranış və imza məhdudiyyəti qoyur və əsaslandırma tələb edir. “Daha yaxşı et” kimi qeyri-müəyyən istəklər nəzarətsiz və riskli dəyişikliklərə gətirib çıxarır.

Refaktorinq növü

AI etibarlılığı

İlkin şərt

adını dəyişin

yüksək

Əhatə dairəsi düzgündür?

Funksiya bölgüsü

orta-yüksək

Testnet mütləqdir

Paylaşma təkrarı

orta

Davranış fərqi gizlənə bilər

Alqoritm/struktur dəyişikliyi

aşağı

Geniş sınaq + insan təsdiqi

Memarlığın yenidən qurulması

aşağı

İnsan tərəfindən idarə olunan, AI tərəfindən dəstəklənir

Texniki borcun idarə edilməsi, onu sıfırlamaması

Texniki borc heç də pis deyil; Bəzən şüurlu borc almaq (çatdırılmanı qarşılamaq üçün) düzgün qərardır. Məqsəd borcu aradan qaldırmaq deyil, onu görünən və idarə edilə bilən etməkdir. Süni intellekt borcları aşkar etməkdə və prioritetləşdirməkdə sürətlidir, lakin “hansı borcun ödənilməli və hansının tərk edilməli olduğuna” qərar vermək biznes kontekstini tələb edir: bu modul nə qədər tez-tez dəyişir, neçə nəfərə təsir edir, risk nədir? Bu qərar kod bazasını və məhsulu bilən komanda tərəfindən qəbul edilir; AI sadəcə variantları aydınlaşdırır.

İpucu: Refaktorinq PR-ni davranış dəyişikliyini ehtiva edən PR-lərdən ayrı saxlayın. “Bu PR sadəcə bir refaktorinqdir, davranış eynidir” deyə bilmək araşdırmanı asanlaşdırır və problem yaranarsa səbəbi tez bir zamanda daraltmağa imkan verir.

Ümumi səhvlər

  • Test şəbəkəsi olmadan refaktorinq. Davranışın qorunub saxlandığını sübut edəcək heç bir şeyiniz yoxdur.
  • Bu, "bütün faylı sil" deməkdir. Böyük, nəzarətsiz dəyişikliklər səhvi gizlədir və yoxlanıla bilməz.
  • Fərqi oxumadan qəbul etmək. Süni intellekt "sadəcə quruluş" dedikdə bəzi məntiqi itirmiş ola bilər.
  • Refaktorinqi davranış dəyişikliyi ilə qarışdırmaq. Hər ikisini eyni PR-də etmək kök səbəb izləməyi qeyri-mümkün edir.
  • Hər qoxunu düzəltməyə çalışır. Nadir hallarda dəyişən çirkin kod çox vaxt aşağı prioritetdir; Enerjini tez-tez dəyişən yerə ayırın.

Xülasə

Refaktorinqin yeganə qaydası davranışın sabit qalmasıdır və bunun sübutu testlərdir. AI kod qoxularını, bir addımlı transformasiyaları aşkar etməkdə və texniki borcları prioritetləşdirməkdə güclüdür; lakin siz təhlükəsizlik şəbəkəsini qurmalı, testləri keçirməli və hər addımdan sonra fərqi oxumalısınız. Kiçik, geri dönə bilən addımlar atın; refaktorinqi davranış dəyişikliyindən fərqləndirmək; və biznes kontekstini bilən komanda hansı borcun ödənilməsinə qərar versin.

Tətbiq tapşırığı

Kod bazanızdan sizə uzun və ya mürəkkəb görünən funksiyanı seçin. "Təhlükəsizlik şəbəkəsi" şablonu ilə cari davranışını ələ keçirən ilk testləri çap edin və hamısının keçib-keçmədiyini yoxlayın. Sonra funksiyanı "bir addımlı, davranışı qoruyan transformasiya" nümunəsi ilə vahid şəkildə (məsələn, yarıya bölmək) refaktor edin və testləri yenidən həyata keçirin. Əgər test pozulursa, bunun səbəbini öyrənin; Heç pozulmazsa, davranışın həqiqətən qorunduğunu təsdiqləmək üçün fərqi sətir-sətir oxuyun.

yoxlama siyahısı

  • [ ] Mən bilirəm ki, refaktorinq davranışı dəyişməməlidir və bunu sübut etmək üçün testlər var.
  • [ ] Mən refaktordan əvvəl cari davranışı tutan təhlükəsizlik şəbəkəsi qururam.
  • [ ] Mən süni intellektdən kiçik, bir addımlı transformasiyalar istəyirəm, böyük birdəfəlik deyil.
  • [ ] Hər addımdan sonra testləri icra edirəm və fərqi oxuyuram.
  • [ ] Mən PR-ı davranış dəyişikliyindən ayrı refaktorinq edirəm.
  • [ ] Mən kor-koranə sıfırlamağa çalışmayaraq, biznes konteksti ilə texniki borclara üstünlük verirəm.