Vahid 9 / 11

Reqressiya Testi, Test Baxımı və Kövrək Testlərlə Mübarizə

Qazanclar:

  • Reqressiya testinin məqsədini anlayın və süni intellektlə dəyişikliklərə uyğun olaraq testləri seçə və reqressiya halları yarada biləcək
  • Kövrək testlərin əsas səbəblərini (vaxt, sifariş asılılığı, paylaşılan vəziyyət, xarici asılılıq) diaqnostika etmək və simptomu bastırmadan qalıcı həllər tətbiq etmək bacarığı
  • Dublikat testlərini aradan qaldıraraq reqressiya dəstini sürətli, müstəqil və etibarlı saxlayarkən tam paketin buraxılışdan əvvəl işləmə intizamını qorumaq bacarığı

Proqram təminatı daim dəyişir; Hər yeni xüsusiyyət, hər düzəliş əvvəllər işləmiş bir şeyi poza bilər. Əvvəllər işləyən funksiyanın sonrakı pozulması reqressiya adlanır. Reqressiya testi bu deqradasiyaları tutmaq üçün hər dəyişikliklə mövcud funksionallığı yenidən sınaqdan keçirir. Zaman keçdikcə bu test paketləri böyüyür - minlərlə test - və iki böyük problem yaranır: paket yavaşlayır və qabarıq testlər - bəzən eyni kodda keçən və bəzən uğursuz olan etibarsız testlər - komandanın test nəticələrinə olan inamını məhv edir. Süni intellekt (AI) reqressiya dəstini yaxşı, sürətli və etibarlı saxlamaqda güclü köməkçidir. Ancaq mərkəzi xəbərdarlıq qalır: AI kövrək bir testdən "keçməyi" təklif edə bilsə də, çox vaxt real səhvi ört-basdır edən yamaq istehsal edə bilər. Sizin işiniz qeyri-sabitliyin əsas səbəbini tapmaqdır, simptomu boğmaq deyil.

Kövrək testlərin əsas səbəbləri

Kövrək test ən məkrli sınaq problemidir: onun keçib-keçməməsi etibarsızdır, komandanı "yenidən ilişib qalıb, yenidən işə salmaq" vərdişinə sövq edir - və bu vərdiş bir gün əsl səhvi "qıcıqlanmış" kimi görməməzliyə vuracaq. Əsas kök səbəbləri:

  • Vaxt/yarış vəziyyəti: Test əməliyyatın bitməsini gözləmədən nəticəni yoxlayır. Ən ümumi səbəb.
  • Sifarişdən asılılıq: Testlər bir-birindən qalan məlumatlardan asılıdır; Sifariş dəyişdikdə pozulur.
  • Paylaşılan hal: Birdən çox test eyni test məlumatından/istifadəçidən istifadə edir, ziddiyyət təşkil edir.
  • Xarici asılılıq: Real şəbəkə, üçüncü tərəf xidməti, sistem vaxtı, təsadüfi dəyər.
  • Ətraf mühit fərqi: Lokal vəziyyətə keçir, CI-də qalır (davamlı inteqrasiya mühiti).
Diqqət: "Bir neçə dəfə təkrar cəhd etməklə" kövrək testdən keçmək çox vaxt real paralellik xətasını maskalayacaq. Yenidən cəhd müalicə deyil, diaqnostik vasitədir. Əvvəlcə kök səbəbini tapın; Sənədləşdirilmiş, həqiqətən xarici qeyri-sabitlik üçün son çarə kimi təkrar cəhddən istifadə edin.

Test baxımı: paketi sağlam saxlamaq

Reqressiya dəsti bağçaya bənzəyir; Əgər qayğı göstərilməsə, alaq otları ələ keçirəcək. AI üç texniki xidmət tapşırığına kömək edir:

1. Dublikat/lazımsız sınaq təmizlənməsi. Vaxt keçdikcə çox sayda hal eyni şeyi sınaqdan keçirir. AI oxşar testləri qruplaşdırmağı və birləşdirməyi təklif edir.

2. Kövrək test diaqnozu. Siz AI-yə test kodunu və qeyri-sabitlik nümunəsini verirsiniz; mümkün kök səbəbləri və daimi həllini təklif edir.

3. Test seçimi/prioritetləşdirilməsi. Hər dəyişikliklə bütün paketi işə salmaq baha başa gəlir. Test təsirinin təhlili ilə (yalnız dəyişdirilmiş koda əsaslanan müvafiq testləri seçməklə) AI ilk olaraq hansı testlərin keçirilməli olduğunu tövsiyə edir. Bununla belə, tam pre-reliz paketi mütləqdir.

Karantin: kövrək testi düzgün idarə etmək

Testin kövrək olduğunu görmüsünüz, ancaq kök səbəbini dərhal aradan qaldırmağa vaxtınız yoxdur. Nə etməli? İki yanlış yol var: testi tamamilə silmək (bu davranış artıq heç qorunmur) və ya təkrar cəhdlə susdurmaq (əsl səhvi ört-basdır etmək). Düzgün yol karantin etməkdir (kövrək testi əsas paketdən müvəqqəti olaraq ayırmaq və ayrıca siyahıda izləmək). Karantinə alınmış sınaq versiyanın birləşməsinə mane olmur, lakin görünən borc olaraq qalır və müntəzəm olaraq həll edilir. Kritik məqam budur: karantin zibil qutusu deyil, gözləmə otağıdır. Karantin siyahısı böyüyürsə, bu, komandanın test sağlamlığının pisləşdiyinə dair həyəcan siqnalıdır. Süni intellekt vaxtaşırı karantin siyahınızı nəzərdən keçirə və onu kök səbəb nümunələrinə görə qruplaşdıra bilər; O, "bütün 6 test eyni paylaşılan test istifadəçisinə bağlıdır" kimi ümumi səbəbləri aşkar edərək kollektiv həlləri təmin edir.

İpucu: Hər bir karantin qeydinə "sahibi" və "son nəzərdən keçirilən tarix" əlavə edin. Sahibsiz karantin daimi zibilliyə çevrilir; Kövrək sınaqlar orada əbədi yaşayır, çünki heç kimin vecinə deyil.

Reqressiya strategiyası cədvəli

Vəziyyət

Strategiya

AI-nin rolu

kiçik düzəliş

Təsirə məruz qalan ərazi + tüstü testi

Müvafiq testləri seçin

yeni xüsusiyyət

Əlaqədar modul + inteqrasiya

Yeni reqressiya iddiası təklif edin

böyük refaktor

Tam reqressiya paketi

Əhatə boşluğunun təhlili

buraxılışdan əvvəl

Tam paket + kəşfiyyat

Prioritet və müddətin qiymətləndirilməsi

Təcili canlı təmir

Fokuslanmış + kritik yol

Minimum təhlükəsiz sınaq dəsti

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

Zəif: "Bu sınaq bəzən uğursuz olur, düzəldin."
Güclü: "Bu test 10 qaçışdan 3-də uğursuz oldu, kod dəyişmədi. Qeyri-sabitliyin əsas səbəbini diaqnoz edin: vaxt/irq, sifariş asılılığı, paylaşılan vəziyyət, xarici asılılıq və ya mühit fərqi ola bilər. Testdə hansı sətirin hər bir mümkün səbəbi göstərdiyini göstərin. Daimi həll təklif edin; Simptomları basdıran həlli TƏKLİF ETMƏYİN, məsələn:" [kod] xəta izi: [log]."

Güclü tez; diaqnozu kök səbəbə yönəldir və simptomların yatırılmasını açıq şəkildə qadağan edir.

Dörd kopyalana bilən şablon

1) Kövrək test diaqnozu:

Bu test kodu dəyişdirilmədən bəzən keçir, bəzən də uğursuz olur. Əsas səbəb namizədlərini (irq, sifariş asılılığı, paylaşılan vəziyyət, xarici asılılıq, saat/təsadüfi, ətraf mühit fərqi) sadalayın və hər biri üçün testdə sübut xəttini göstərin. Qalıcı həll təklif etmək; son çarə kimi və əsaslandırma ilə təkrar cəhd kimi bastırıcı həlli qeyd edin. Test: [kod] / Qeyri-sabitlik nümunəsi: [neçə qaçışda neçə dəfə]

2) Reqressiya halının təklif edilməsi:

Aşağıdakı dəyişiklik edildi: [dəyişiklik/PR xülasəsi]. Bu dəyişikliyin pozacağı CARİ davranışları siyahıya salın və hər biri üçün reqressiya testi təklif edin. Yan təsirlərin və paylaşılan asılılıqların sahələrini xüsusilə vurğulayın.

3) Dublikat test təmizlənməsi:

Aşağıdakı test paketinə baxın. Eyni davranışı sınayan dublikat və ya üst-üstə düşən halları qruplaşdırmaq; Hər qrup üçün hansıları saxlamalı və hansıları birləşdirməyi təklif edin. Əhatə dairəsinin itirilməsi riski varsa xəbərdar edin. Testlər: [siyahı/kod]

4) Test effektinin seçimi:

Aşağıdakı fayllar/funksiyalar dəyişdi: [siyahı]. Mövcud test dəstindən ilk olaraq yerinə yetirməli olduğum testləri seçin və əsaslandırın (dəyişdirilmiş kodla birbaşa/dolayı yolla əlaqəli olanlar). Qeyd: mənə xatırladın ki, hələ də tam pre-reliz paketini işlədəcəm.

üç mini qutu

Case 1 - Real səhv Yenidən cəhdlə ört-basdır edilir. Bir komanda təsadüfi qalan ödəniş testinə 3 sınaq əlavə etdi; İndi imtahan həmişə “keçdi”. "Kövrək test diaqnostikası"nın tətbiqi qeyri-sabitliyin real yarış şəraitindən qaynaqlandığını müəyyən etdi: yüksək yükdə ödənişin təsdiqi bəzən ikiqat işlənirdi. Aylar ərzində Retry canlı olaraq faktiki pul itkisi ilə nəticələnə biləcək bir səhvi ört-basdır etdi. Kök səbəb düzəldildi, yenidən cəhd edin.

2-ci hal — Paket kiçildi, sürət artdı. 1400 testdən ibarət reqressiya dəsti 55 dəqiqə çəkdi. "Dublikat test təmizlənməsi" ilə 380 test dublikat və ya əhatə olundu; birləşdirildi. Paket 900 testə endirildi, vaxt 34 dəqiqəyə endirildi, əhatə dairəsi ölçülə azalmadı. Daha sürətli rəy komandanı daha tez-tez sınaqdan keçirməyə təşviq etdi.

3-cü hal - Sifarişdən asılılıq. Test həmişə yerli olaraq keçərdi, lakin CI-də təsadüfi olaraq uğursuz olardı. Süni intellekt diaqnostikası göstərdi ki, test başqa bir test tərəfindən yaradılmış istifadəçidən asılıdır, CI-də testlər paralel/fərqli qaydada aparıldığı üçün pozulub. Hər bir test öz məlumatlarını yaratmaq üçün edildi; Qərarsızlıq bitdi.

Ümumi səhvlər

  • Yenidən cəhd etməklə kövrək testi susdurmaq. Əsas səbəbi axtarmadan yenidən cəhd etmək; əsl səhvi ört-basdır etmək.
  • “Yenidən ilişib” mədəniyyəti. Qırmızı nəticələrə müntəzəm olaraq məhəl qoymamaq; Bir gün əsl səhvi atlayaraq.
  • Paketi ümumiyyətlə budamayın. Dublikat testlərin yığılmasına və paketi yavaşlatmasına imkan verir.
  • Testlər arasında asılılıq. Testlər ümumi vəziyyətə/ardıcıllığa əsaslanır; qeyri-müəyyənlik mənbəyi.
  • Yalnız dəyişdirilmiş hissəni sınaqdan keçirmək və tam paketi atlamaq. Buraxılışdan əvvəl qısa yol; Gizli yan təsirlər qaçır.
  • Xarici asılılığa güvənmək. Həqiqi şəbəkə/saat/təsadüfi dəyər əsasında testlər; təbii olaraq qeyri-sabitdir.

Xülasə

Reqressiya testi əvvəllər işləyən funksiyaları pozan dəyişiklikləri tutur; Lakin paketlər böyüdükcə yavaşlıq və kövrək sınaqlar etibarı azaldır. Kövrək testlərin kök səbəbləri adətən vaxt, sifariş asılılığı, paylaşılan vəziyyət və xarici asılılıqlardır. AI diaqnostika, təmizləmə və test seçimində güclü köməkçidir; Ancaq qərarsızlığı təkrar cəhdlə yatırtmaq real səhvləri ört-basdır edir. Kök səbəbi tapın, müstəqil və deterministik testlər edin, paketi müntəzəm olaraq budayın, buraxılmazdan əvvəl tam paketi işə salın.

Tətbiq tapşırığı

Öz layihənizdən kövrək olduğunu bildiyiniz (və ya qeyri-sabit görünən) bir test seçin. Kök səbəb namizədlərini çıxarın və “kövrək test diaqnozu” şablonu ilə testdə sübut xətlərini yoxlayın. Kök səbəbi müəyyən edin və təkrar cəhd etmədən qalıcı həll yolu tətbiq edin. Sonra paketinizdən 10 test seçin və "dublikat test təmizlənməsi" ilə birləşdirilə bilənləri tapın. Nə qədər test qeyri-sabitliyini onların əsas səbəbi ilə həll etdiyinizi və nə qədər lazımsız halı paketdən sildiyinizi bildirin.

yoxlama siyahısı

  • [ ] Mən kövrək testin əsas səbəbinə diaqnoz qoymuşam; Semptomu boğmadım.
  • [ ] Mən təkrar cəhdi müalicə deyil, əsaslandırılmış son çarə hesab etdim.
  • [ ] Testləri müstəqil və deterministik (xarici asılılıqlardan təcrid olunmuş) etdim.
  • [ ] Mən reqressiya dəstindən dublikat/lazımsız testləri kəsdim.
  • [ ] Dəyişikliyə əsaslanaraq test etməyi seçdim, lakin tam paketi ilkin buraxılışdan keçirdim.
  • [ ] Hər qırmızıya ciddi yanaşdım, “yenə ilişib, keç” mədəniyyətinə qarşı.